<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leon</title>
    <description>The latest articles on DEV Community by Leon (@laconicleon).</description>
    <link>https://dev.to/laconicleon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4059719%2F41d9b1c3-d318-4507-a4d7-64357dba5687.png</url>
      <title>DEV Community: Leon</title>
      <link>https://dev.to/laconicleon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/laconicleon"/>
    <language>en</language>
    <item>
      <title>What an AI Rap Video Generator Taught Me About Crawlable React Pages (2026)</title>
      <dc:creator>Leon</dc:creator>
      <pubDate>Mon, 02 Nov 2026 03:08:02 +0000</pubDate>
      <link>https://dev.to/laconicleon/what-an-ai-rap-video-generator-taught-me-about-crawlable-react-pages-2026-8b7</link>
      <guid>https://dev.to/laconicleon/what-an-ai-rap-video-generator-taught-me-about-crawlable-react-pages-2026-8b7</guid>
      <description>&lt;p&gt;Disclosure: I build &lt;a href="https://myairap.video/" rel="noopener noreferrer"&gt;MyAIRap.video&lt;/a&gt;, a photo-to-Rap tool. This is a development case study from that project, written with AI assistance and checked against our local release records. It is not a claim that server rendering alone produces rankings.&lt;/p&gt;

&lt;p&gt;The first useful SEO question for a React product is surprisingly practical: what does a reader get before JavaScript runs?&lt;/p&gt;

&lt;p&gt;Our redesigned interface looked complete in a browser. It had examples, pricing and a clear path to the creator. A raw HTML check told a different story: the initial response was a small shell. The words people could see after rendering were missing from the first response.&lt;/p&gt;

&lt;p&gt;For an AI rap video generator, that is a product problem as much as a search problem. A visitor needs to understand the input, the resulting video and the purchase model before signing in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Render the public explanation, keep the private app private
&lt;/h2&gt;

&lt;p&gt;We reused the same React marketing components for pre-rendered public HTML. The homepage, pricing, tutorial and articles now have meaningful headings, paragraphs and links in the first response. Their client-side counterparts use the same route metadata rather than inventing a second title after navigation.&lt;/p&gt;

&lt;p&gt;The account and checkout are different. We did not turn private balances or orders into indexable pages. Public explanation and authenticated actions share a design, but they do not share an indexing policy.&lt;/p&gt;

&lt;p&gt;This distinction is easy to lose when every URL looks like “just another React route.”&lt;/p&gt;

&lt;h2&gt;
  
  
  A small acceptance check catches the important failures
&lt;/h2&gt;

&lt;p&gt;For a public route, we check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The raw response contains exactly one meaningful H1.&lt;/li&gt;
&lt;li&gt;Title, description, canonical and language correspond to that route.&lt;/li&gt;
&lt;li&gt;Prices visible in HTML come from the retained product catalogue.&lt;/li&gt;
&lt;li&gt;Tutorial, examples and article links are real anchors.&lt;/li&gt;
&lt;li&gt;The browser does not replace the correct server title with a generic default.&lt;/li&gt;
&lt;li&gt;The narrow layout has no document-wide horizontal overflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A response-size threshold helped detect the old empty shell, but size alone is not the goal. A large response with duplicated filler would still be a bad page. We check for actual useful content and correct links.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product claims are part of the rendering contract
&lt;/h2&gt;

&lt;p&gt;Our creator has Mini and Standard, two durations and two resolutions. Existing showcase videos were made with Standard. A marketing page that implies the least expensive option always matches the showcase would create the wrong expectation, however well it rendered.&lt;/p&gt;

&lt;p&gt;The same applies to a template button. Today it records interest in an unreleased format; it should not look like a working purchase for exact recreation.&lt;/p&gt;

&lt;p&gt;That is why we keep pricing, availability and model caveats in the same acceptance review as headings and metadata. The page is an explanation of the application, not a separate brochure allowed to drift away from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we can and cannot conclude
&lt;/h2&gt;

&lt;p&gt;Raw HTML and browser checks can show that content is available. They cannot show that Google has indexed the latest version, that a keyword will rank, or that an AI assistant will cite it. Those need separate observation windows and real search or referral evidence.&lt;/p&gt;

&lt;p&gt;If you are building a similar tool, inspect the response before writing another SEO article. Then check a client-side navigation into pricing and back. The second step catches metadata regressions that a single homepage request misses.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://myairap.video/tutorial" rel="noopener noreferrer"&gt;MyAIRap tutorial&lt;/a&gt; shows the actual photo, lyric and video workflow behind this case. The main lesson is portable: make the public explanation readable, and keep the private transaction private.&lt;/p&gt;

</description>
      <category>react</category>
      <category>seo</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Browser-Local Moving Checklist Without User Accounts</title>
      <dc:creator>Leon</dc:creator>
      <pubDate>Thu, 10 Sep 2026 03:27:47 +0000</pubDate>
      <link>https://dev.to/laconicleon/building-a-browser-local-moving-checklist-without-user-accounts-3fgk</link>
      <guid>https://dev.to/laconicleon/building-a-browser-local-moving-checklist-without-user-accounts-3fgk</guid>
      <description>&lt;p&gt;Many planning tools begin with sign-up, cloud storage, and collaboration features. For a moving checklist, I wanted to test a narrower idea: can a useful planning tool work without requiring an account?&lt;/p&gt;

&lt;p&gt;MovePlaybook is a browser-based moving checklist. A user starts with a move date, reviews a generated task plan, adjusts tasks when circumstances change, and can print or save the plan as a PDF.&lt;/p&gt;

&lt;p&gt;The technical constraint was privacy: the product should remain useful even when the plan is stored locally in the browser. That shaped several decisions.&lt;/p&gt;

&lt;p&gt;First, task identity needs to be stable. A user may complete, reschedule, hide, restore, or annotate a task, so those changes must attach to a durable task ID rather than a display position.&lt;/p&gt;

&lt;p&gt;Second, temporary hiding must not mean deletion. A hidden task is excluded from the active checklist and PDF, but it remains recoverable through a dedicated Hidden view.&lt;/p&gt;

&lt;p&gt;Third, schedule changes need explanations. When a user adjusts a date, the interface should distinguish between a recommended date, a tight timing window, a conflict, or something the user must confirm locally.&lt;/p&gt;

&lt;p&gt;The product is available at &lt;a href="https://moveplaybook.app/" rel="noopener noreferrer"&gt;https://moveplaybook.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built it as a practical experiment in local-first planning. I would be interested in how other developers approach versioned browser storage, printable application state, and explainable scheduling rules.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to convert a folder of PNGs to one PDF without uploading the files</title>
      <dc:creator>Leon</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:48:21 +0000</pubDate>
      <link>https://dev.to/laconicleon/how-to-convert-a-folder-of-pngs-to-one-pdf-without-uploading-the-files-19pe</link>
      <guid>https://dev.to/laconicleon/how-to-convert-a-folder-of-pngs-to-one-pdf-without-uploading-the-files-19pe</guid>
      <description>&lt;h2&gt;
  
  
  A simple browser-local PNG-to-PDF workflow
&lt;/h2&gt;

&lt;p&gt;For this kind of job, the useful workflow is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the PNG, JPG, or JPEG files.&lt;/li&gt;
&lt;li&gt;Put the pages in the order they should appear.&lt;/li&gt;
&lt;li&gt;Choose a page size and margins if the document needs them.&lt;/li&gt;
&lt;li&gt;Export one PDF.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important detail is where the conversion happens. A browser-local PNG-to-PDF tool processes the images in the browser instead of uploading them to a conversion server. That makes it easier to keep control of source files while still producing one shareable PDF.&lt;/p&gt;

&lt;h2&gt;
  
  
  When this is useful
&lt;/h2&gt;

&lt;p&gt;This workflow is handy for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;combining screenshots into a bug report or handoff document;&lt;/li&gt;
&lt;li&gt;turning scanned pages into one file for email or printing;&lt;/li&gt;
&lt;li&gt;arranging portfolio images or design exports in a deliberate order; and&lt;/li&gt;
&lt;li&gt;collecting receipts or reference images without making a separate document first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before exporting, check the page order and decide whether each page should match the image, A4, or US Letter. A preview is useful here: it catches a stray portrait page, an oversized margin, or a screenshot in the wrong position before the PDF is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool I use for this
&lt;/h2&gt;

&lt;p&gt;I maintain &lt;a href="https://pngbinder.com/" rel="noopener noreferrer"&gt;PNG Binder&lt;/a&gt;, a free PNG-to-PDF converter for this specific workflow. It accepts up to 50 PNG, JPG, or JPEG images, lets you arrange them, and creates one PDF locally in the browser. It does not require an account, and the images are not sent to a conversion server.&lt;/p&gt;

&lt;p&gt;It creates an image-based PDF, so it does not perform OCR or rebuild text and tables. If that is the kind of result you need, try it and let me know whether page ordering, page settings, or browser compatibility could be improved.&lt;/p&gt;




&lt;p&gt;Disclosure: I am the maker and operator of PNG Binder.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>privacy</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>A small privacy decision that changed my web calculator</title>
      <dc:creator>Leon</dc:creator>
      <pubDate>Thu, 03 Sep 2026 10:00:20 +0000</pubDate>
      <link>https://dev.to/laconicleon/a-small-privacy-decision-that-changed-my-web-calculator-5c99</link>
      <guid>https://dev.to/laconicleon/a-small-privacy-decision-that-changed-my-web-calculator-5c99</guid>
      <description>&lt;p&gt;I built Calculator Toolkit for a narrow moment: someone has a restaurant bill, wants to check the tip and tax math, then needs to split the total with a few people.&lt;/p&gt;

&lt;p&gt;At first I treated the no-account requirement as a small feature. It turned out to be the decision that shaped most of the interface.&lt;/p&gt;

&lt;p&gt;A saved-history feature would be convenient. It would also mean sign-in, account recovery, data retention, and an extra decision for someone who only wants to settle a dinner bill. I decided that the calculator should run locally in the browser instead. There is no account and no bill-data upload.&lt;/p&gt;

&lt;p&gt;That creates constraints. A person cannot return tomorrow and recover an earlier calculation. There is no dashboard where an unclear result can be explained later. The current screen has to do the work. It needs to make the bill amount, tax, tip basis, total, and each person's share understandable before the group pays.&lt;/p&gt;

&lt;p&gt;I found that this was less about adding a privacy notice and more about removing places where the product could hide complexity. If the calculation is temporary, the result needs to be legible now. If somebody changes the tip basis, the change needs to be obvious. If one diner pays a different share, the total still has to add up.&lt;/p&gt;

&lt;p&gt;I do not think local-only is a universal rule. It is a poor fit for products where history, collaboration, or handoffs are the reason people use the product. For a one-off restaurant calculation, it felt like the more honest default.&lt;/p&gt;

&lt;p&gt;I am Leon, the maker of &lt;a href="https://calculator-toolkit.com/" rel="noopener noreferrer"&gt;Calculator Toolkit&lt;/a&gt;. I would like feedback from other developers: when you remove accounts or saved state from a small tool, which parts of the interface become harder to get right?&lt;/p&gt;

&lt;p&gt;Disclosure: This article was drafted with AI and reviewed by Leon.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>ux</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
