<?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: 王龙</title>
    <description>The latest articles on DEV Community by 王龙 (@_df88eb1337eb23b75c94ba).</description>
    <link>https://dev.to/_df88eb1337eb23b75c94ba</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%2F3546238%2F8cdf4a41-fd81-4706-984e-7ee0d2571f5c.jpg</url>
      <title>DEV Community: 王龙</title>
      <link>https://dev.to/_df88eb1337eb23b75c94ba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_df88eb1337eb23b75c94ba"/>
    <language>en</language>
    <item>
      <title>I shipped a transparent-video exporter because “remove background” usually just means a black fill</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Mon, 24 Aug 2026 19:17:53 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-transparent-video-exporter-because-remove-background-usually-just-means-a-black-fill-40dg</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-transparent-video-exporter-because-remove-background-usually-just-means-a-black-fill-40dg</guid>
      <description>&lt;p&gt;I kept hitting the same search after “AI remove video background”: why is the result a black rectangle? Does MP4 even carry transparency? Why is the WebM fine in Chrome and black in Safari? How do I drop this into OBS without chroma-keying a green screen that was never there?&lt;/p&gt;

&lt;p&gt;The answer is usually not “the model failed.” Everyday H.264 MP4 does not carry an alpha channel. A lot of players composite transparent pixels onto black. Safari ignores WebM alpha. So I shipped &lt;a href="https://exportalpha.com/" rel="noopener noreferrer"&gt;ExportAlpha&lt;/a&gt; — a small exporter that writes a &lt;strong&gt;real&lt;/strong&gt; alpha channel: transparent WebM (VP9, &lt;code&gt;yuva420p&lt;/code&gt;) for Chrome, Firefox, and OBS, or ProRes 4444 MOV for Premiere, Resolve, and Final Cut.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4j11xt7sinti8kpocjva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4j11xt7sinti8kpocjva.png" alt="ExportAlpha homepage: export transparent video with alpha channel" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ExportAlpha homepage. Official product screenshot. Source: &lt;a href="https://exportalpha.com/" rel="noopener noreferrer"&gt;exportalpha.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fifteen free seconds on first Google sign-in. No card required to try a short clip. Upload is MP4 / MOV / WebM / M4V, up to 60 seconds, 1080p, 200MB. It is a file workflow, not a live-stream plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I refused to invent
&lt;/h2&gt;

&lt;p&gt;The site has a public &lt;a href="https://exportalpha.com/sources" rel="noopener noreferrer"&gt;Sources &amp;amp; Method&lt;/a&gt; page. Retrieval dates are 19 August 2026. A few gaps stay labeled instead of being filled in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HEVC-with-alpha for Safari&lt;/strong&gt; is the correct destination format on paper (WWDC 2019 Session 506). We have not verified Safari transparency on our own exports. The sources page marks that feature experimental.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CapCut / iMovie / DaVinci Resolve&lt;/strong&gt; importing WebM-with-alpha: public docs contradict each other. The format guide says test your version; if WebM fails, use ProRes 4444.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HEVC inside OBS&lt;/strong&gt; on Windows/Linux depends on system codecs. The OBS guide recommends VP9 WebM as the cross-platform overlay.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also do not claim this is real-time webcam matting. The OBS page says it in plain language: no virtual camera, no live filter, no stream plugin. You upload a clip, download a file, then add a Media Source.&lt;/p&gt;

&lt;p&gt;The model stack is listed on that same sources page: fal.ai calling &lt;strong&gt;Bria VRMBG 3.0&lt;/strong&gt;. RVM is cited only as a paper on temporal consistency, not as the production model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The searches that became pages
&lt;/h2&gt;

&lt;p&gt;Each URL is a question people already type. The page answers it, then links the dated source.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/why-transparent-video-has-black-background" rel="noopener noreferrer"&gt;Why does my transparent video have a black background?&lt;/a&gt; — alpha was never written, or the player composites onto black. Check &lt;code&gt;ffprobe&lt;/code&gt; for &lt;code&gt;yuva420p&lt;/code&gt; / &lt;code&gt;yuva444p10le&lt;/code&gt; / &lt;code&gt;rgba&lt;/code&gt;, or drop the file over a colored plate in an NLE.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/does-mp4-support-transparent-background" rel="noopener noreferrer"&gt;Does MP4 support a transparent background?&lt;/a&gt; — everyday H.264 does not. Do not export H.264 if you need transparency.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/what-transparent-video-format" rel="noopener noreferrer"&gt;Which transparent video format should I export?&lt;/a&gt; — WebM for Chrome/Firefox/OBS; HEVC-with-alpha for Safari (we have not verified our own HEVC); ProRes 4444 for editors; already-composited H.264 only as a finished deliverable.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/transparent-webm-safari" rel="noopener noreferrer"&gt;Why is my transparent WebM black in Safari?&lt;/a&gt; — Safari ignores WebM alpha. Chrome and Firefox composite it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/how-to-make-a-webm-transparent-video" rel="noopener noreferrer"&gt;How do I make a WebM video with a transparent background?&lt;/a&gt; — VP9 with &lt;code&gt;yuva420p&lt;/code&gt;, or FFmpeg if you already have alpha.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/how-to-use-transparent-video-in-obs" rel="noopener noreferrer"&gt;Can I use a transparent video overlay in OBS?&lt;/a&gt; — Media Source + local WebM, or Browser Source for a hosted page. Do not add a Chroma Key filter if the file already has alpha.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/why-video-background-removal-flickers" rel="noopener noreferrer"&gt;Why does AI video background removal flicker?&lt;/a&gt; — frame-by-frame masks drift; a temporal video model keeps edges stable.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://exportalpha.com/guides/what-is-a-video-alpha-channel" rel="noopener noreferrer"&gt;What is a video alpha channel?&lt;/a&gt; — the fourth channel. Without it, “transparent” regions become black.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftxbf9g6gmdxhinwbkrm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftxbf9g6gmdxhinwbkrm9.png" alt="Homepage examples: original vs transparent (hair, hands, talking head, product)" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Homepage examples: hair, hand overlay, home-office talking head, product. Official product screenshot. Source: &lt;a href="https://exportalpha.com/#examples" rel="noopener noreferrer"&gt;exportalpha.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4c1kqfhxc2dv6hv2rrg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4c1kqfhxc2dv6hv2rrg3.png" alt="Guide: why a “transparent” export shows a black background" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Guide: black background is usually format or playback, not a failed job. Official product screenshot. Source: &lt;a href="https://exportalpha.com/guides/why-transparent-video-has-black-background" rel="noopener noreferrer"&gt;exportalpha.com/guides/why-transparent-video-has-black-background&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwxczhrt3trxbwonikd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwxczhrt3trxbwonikd6.png" alt="Guide: which transparent format to export" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Decision table: WebM vs HEVC vs ProRes vs composited MP4. Official product screenshot. Source: &lt;a href="https://exportalpha.com/guides/what-transparent-video-format" rel="noopener noreferrer"&gt;exportalpha.com/guides/what-transparent-video-format&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl44xyl2uwg1008j0fmpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl44xyl2uwg1008j0fmpt.png" alt="OBS overlay guide: Media Source, no chroma key" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;OBS: Media Source + VP9 WebM. Not a live camera plugin. Official product screenshot. Source: &lt;a href="https://exportalpha.com/guides/how-to-use-transparent-video-in-obs" rel="noopener noreferrer"&gt;exportalpha.com/guides/how-to-use-transparent-video-in-obs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing as it sits on the page today
&lt;/h2&gt;

&lt;p&gt;Credits: &lt;strong&gt;1 credit = 1 started second&lt;/strong&gt;. New accounts get &lt;strong&gt;15 seconds&lt;/strong&gt;. Plan credits reset monthly; pack credits never expire. Failed jobs refund credits. Successful exports do not. Checked on the live homepage, 25 August 2026.&lt;/p&gt;

&lt;p&gt;Monthly: Creator &lt;strong&gt;$19&lt;/strong&gt; (1,200 seconds), Pro &lt;strong&gt;$39&lt;/strong&gt; (3,000 seconds), Studio &lt;strong&gt;$79&lt;/strong&gt; (7,200 seconds). Annual is shown as &lt;strong&gt;$15.83 / $32.50 / $65.83&lt;/strong&gt; per month ($190 / $390 / $790 billed once). One-time packs: Quick &lt;strong&gt;$5.99&lt;/strong&gt; / 240s, Starter &lt;strong&gt;$9.99&lt;/strong&gt; / 480s, Plus &lt;strong&gt;$29.99&lt;/strong&gt; / 1,800s.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpplbzsm84vwxvhs2q8ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpplbzsm84vwxvhs2q8ww.png" alt="ExportAlpha pricing on the homepage" width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Homepage pricing. Official product screenshot. Source: &lt;a href="https://exportalpha.com/#pricing" rel="noopener noreferrer"&gt;exportalpha.com/#pricing&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it will not do
&lt;/h2&gt;

&lt;p&gt;Copied from the site’s own “We can’t” list: restore quality lost to heavy compression, act as a real-time live-stream plugin, bypass content safety, or process clips longer than 60 seconds. Adult content, minors, and non-consensual use are blocked. Results are kept &lt;strong&gt;7 days&lt;/strong&gt;, then deleted.&lt;/p&gt;

&lt;p&gt;If you are exporting a stream alert, a lower-third, or a talking-head overlay and you keep getting a black plate: the file probably never had alpha, or the player is lying to you. Export WebM or ProRes 4444, then test over a colored background.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live tool:&lt;/strong&gt; &lt;a href="https://exportalpha.com/" rel="noopener noreferrer"&gt;https://exportalpha.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>video</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I shipped a sourced question hub for Mortal Shell II instead of another cloned wiki</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Sat, 22 Aug 2026 19:50:25 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-sourced-question-hub-for-mortal-shell-ii-instead-of-another-cloned-wiki-k97</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-sourced-question-hub-for-mortal-shell-ii-instead-of-another-cloned-wiki-k97</guid>
      <description>&lt;p&gt;Mortal Shell II released worldwide on 20 August 2026. The searches I kept seeing were not "give me a weapons dump." They were when did it release, what are the PC specs, which edition has Advanced Access, how many Shells are there, and which weapon names are actually official.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbpd5a34uilt807j7vsnx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbpd5a34uilt807j7vsnx.jpg" alt="Official Steam screenshot of Mortal Shell II combat" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Steam screenshot. © 2026, Playstack and Cold Symmetry, all rights reserved. Source: Steam store, app 2584270.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Official answers exist, but they are split across the Steam store, Playstack notes, mortalshell.com, and Steam achievement unlock titles. A cloned wiki that invents the missing numbers would rank for a week and then rot.&lt;/p&gt;

&lt;p&gt;So I shipped &lt;a href="https://mortalshellii.info/" rel="noopener noreferrer"&gt;mortalshellii.info&lt;/a&gt; as an independent question hub: one search question per page, official source URL next to every changing fact, gaps left visible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjfkojn2reno3mvpnmitn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjfkojn2reno3mvpnmitn.png" alt="mortalshellii.info homepage" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;mortalshellii.info homepage. Independent question hub. Not affiliated with Cold Symmetry or Playstack.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I refused to invent
&lt;/h2&gt;

&lt;p&gt;Steam App &lt;a href="https://store.steampowered.com/app/2584270/Mortal_Shell_II/" rel="noopener noreferrer"&gt;2584270&lt;/a&gt; lists &lt;strong&gt;minimum&lt;/strong&gt; PC requirements only (as of the hub's 22 August 2026 check): Windows 10/11, Intel i7-10700K or AMD Ryzen 5 3600, 16 GB RAM, RTX 2060 SUPER or RX 6600, 70 GB SSD required. No recommended tier is published. The specs page does not invent one.&lt;/p&gt;

&lt;p&gt;Steam achievements officially name &lt;strong&gt;7 melee weapons&lt;/strong&gt; and &lt;strong&gt;6 sidearms&lt;/strong&gt; via individual "Unlock [weapon name]" achievements, plus "Lord of War" and "Guns. Lots of Guns." Community guides commonly list 8+8, including three names (The Iconoclast, Naylshotte, Troubadour's Lute) that are &lt;strong&gt;not&lt;/strong&gt; in Steam achievement unlock titles. The weapons page keeps those labeled Community / Pending instead of merging them into an invented official list.&lt;/p&gt;

&lt;p&gt;Total weapon/sidearm counts stay &lt;strong&gt;pending&lt;/strong&gt;. "Unlock all Weapons" and "Unlock all Sidearms" confirm the sets exist; they do not publish the totals.&lt;/p&gt;

&lt;p&gt;Acquisition routes and region labels from community guides stay Pending. The page does not turn GameRant routes into first-party map pins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9r7fpjwppbktadrlq45.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9r7fpjwppbktadrlq45.jpg" alt="Official Steam screenshot of Mortal Shell II world / exploration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Steam screenshot. © 2026, Playstack and Cold Symmetry, all rights reserved. Source: Steam store, app 2584270.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The pages that match the search
&lt;/h2&gt;

&lt;p&gt;Each URL is a question a launch-week player actually types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://mortalshellii.info/release-date" rel="noopener noreferrer"&gt;When did Mortal Shell II release?&lt;/a&gt; — Worldwide &lt;strong&gt;20 August 2026&lt;/strong&gt; on Steam, PlayStation 5, and Xbox Series X|S (10:00 AM PDT / 17:00 UTC per the hub's timezone table). Devout Edition Advanced Access started approximately &lt;strong&gt;17 August 2026&lt;/strong&gt; (up to 3 days early). Sourced to Playstack and Steam.&lt;/li&gt;
&lt;li&gt;What are the system requirements? — Steam minimum only; no recommended tier invented.&lt;/li&gt;
&lt;li&gt;What editions are available? — Standard &lt;strong&gt;$49.99 / €49.99 / £39.99&lt;/strong&gt;; Devout &lt;strong&gt;$59.99 / €59.99 / £47.99&lt;/strong&gt; (Advanced Access + 8 Obsidian Shell skins). Physical PS5 Revered Edition noted as sold-out in most territories, matching official site copy.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mortalshellii.info/weapons" rel="noopener noreferrer"&gt;Weapons &amp;amp; sidearms&lt;/a&gt; — Steam achievement names first; community names labeled; totals pending.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mortalshellii.info/guides" rel="noopener noreferrer"&gt;Guides hub&lt;/a&gt; — combat, Shells, bosses, progression, 53 Steam achievements, difficulty options — strategy tips labeled unofficial; factual claims tied to Steam / Playstack / mortalshell.com.&lt;/li&gt;
&lt;li&gt;Quick facts on the homepage also call out eight Shells, stamina-unrestricted combat, a compact interconnected open world, and 60+ dungeons — language that tracks Steam / official marketing rather than fan wiki inventiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steam English user reviews, as listed on the store page when this draft was prepared, read &lt;strong&gt;Very Positive&lt;/strong&gt; (83% of 3,195). That number lives on Steam. I do not treat it as a Metascore substitute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm3k190cwhb4h07d5xo5o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm3k190cwhb4h07d5xo5o.jpg" alt="Official Steam screenshot of Mortal Shell II" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Steam screenshot. © 2026, Playstack and Cold Symmetry, all rights reserved. Source: Steam store, app 2584270.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a website and not a Notion dump
&lt;/h2&gt;

&lt;p&gt;Searchers land on a question. The page has to answer that question, cite the dated official note, and say what is still unknown. That is why the homepage is a question hub, not a franchise cover.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q05tpifhkem30w879ij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q05tpifhkem30w879ij.png" alt="Weapons page on mortalshellii.info" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Weapons page: Steam achievement names vs Community/Pending labels. Gaps left visible.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I did not invent recommended PC specs, a closed weapon count, or step-by-step dungeon unlock maps that Cold Symmetry and Playstack have not published as official lists.&lt;/p&gt;

&lt;p&gt;The site is not affiliated with Cold Symmetry or Playstack. Corrections get a source and a same-day edit.&lt;/p&gt;

&lt;p&gt;If you are building a launch-week game hub: start from the search question, keep official text dated, and leave the gaps visible. The empty cell is more honest than a confident guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live hub:&lt;/strong&gt; &lt;a href="https://mortalshellii.info/" rel="noopener noreferrer"&gt;https://mortalshellii.info/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>indiegame</category>
      <category>documentation</category>
    </item>
    <item>
      <title>I pinned Palworld 1.0 breeding data in the browser so the pair table is not a live API</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Wed, 19 Aug 2026 18:46:47 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-pinned-palworld-10-breeding-data-in-the-browser-so-the-pair-table-is-not-a-live-api-2anm</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-pinned-palworld-10-breeding-data-in-the-browser-so-the-pair-table-is-not-a-live-api-2anm</guid>
      <description>&lt;p&gt;The useful Palworld breeding sites already own the obvious search queries. I did not build Palbreed to outrank them.&lt;/p&gt;

&lt;p&gt;I built it because I wanted a &lt;strong&gt;local-first&lt;/strong&gt; 1.0 calculator: a pinned pair table, three tools that read the same snapshot, and no live breeding API in the critical path.&lt;/p&gt;

&lt;p&gt;The site is &lt;a href="https://palbreeding.org/calculator" rel="noopener noreferrer"&gt;Palbreed&lt;/a&gt;. Unofficial. Not affiliated with Pocketpair. Palworld and related assets belong to their rights holders.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "local-first" means here
&lt;/h2&gt;

&lt;p&gt;Palbreed is a Next.js app. After the page loads, the solver reads a bundled snapshot from &lt;code&gt;/data/palworld-1.0.json&lt;/code&gt; (&lt;code&gt;cache: "force-cache"&lt;/code&gt;). The client refuses to boot the graph unless all three checks pass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;meta.palcalcRelease === "v1.17.6"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pals.length === 299&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;breeding.length === 44851&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The snapshot is labeled PalCalc &lt;strong&gt;database v26&lt;/strong&gt; on Palworld &lt;strong&gt;1.0&lt;/strong&gt;. The loading copy on the site is blunt: the local graph and portraits are prepared in the browser, and &lt;strong&gt;no network data source is required&lt;/strong&gt; for that graph.&lt;/p&gt;

&lt;p&gt;That is the product claim I am making. The pair table is not fetched from a wiki, a scrape, or a third-party breeding endpoint at query time. If a later patch moves a recipe, the badges have to move with the file. Until then, the calculator, reverse search, and path solver all read the same pin.&lt;/p&gt;

&lt;p&gt;Roster, settings, and saved plans stay in &lt;code&gt;localStorage&lt;/code&gt;. There is no account and no application database for that state.&lt;/p&gt;

&lt;p&gt;If you want a specific child, parent pair, or route, open the tool. I am not going to paste a combo table into this post. Hand-filled lists go stale the moment the snapshot changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool 1: two parents, one child
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Page:&lt;/strong&gt; &lt;a href="https://palbreeding.org/calculator" rel="noopener noreferrer"&gt;https://palbreeding.org/calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The homepage 308s to &lt;code&gt;/calculator&lt;/code&gt;. The screen is a direct pair tool:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Choose two parents. Reveal their child.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It uses the verified 1.0 snapshot, including fixed combinations and gender-specific results. "Why this result?" on the child card says the answer is read from the bundled PalCalc 1.0 breeding table, which already applies fixed recipes, gender rules, exclusions, power ranking, and tie-breaking.&lt;/p&gt;

&lt;p&gt;I am not listing example pairs here. If you care about a specific outcome, go check the calculator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2jm2p2kf0a4au9adh7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2jm2p2kf0a4au9adh7u.png" alt="Palbreed calculator" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool 2: start from the child
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Page:&lt;/strong&gt; &lt;a href="https://palbreeding.org/reverse" rel="noopener noreferrer"&gt;https://palbreeding.org/reverse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reverse Search flips the question. Pick a target Pal, then read every direct parent pair in the bundled snapshot.&lt;/p&gt;

&lt;p&gt;The page copy is: it shows direct Palworld 1.0 parent pairs from that snapshot. Filters on the live screen include owned pairs first, gender-specific recipes only, and both parents owned.&lt;/p&gt;

&lt;p&gt;Again: no handwritten list in this post. The ranking belongs on &lt;code&gt;/reverse&lt;/code&gt;, next to the same version badges.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw8htgem25e8qe3s4e47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw8htgem25e8qe3s4e47.png" alt="Palbreed reverse search" width="800" height="1384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool 3: a route from what you already have
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Page:&lt;/strong&gt; &lt;a href="https://palbreeding.org/paths" rel="noopener noreferrer"&gt;https://palbreeding.org/paths&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Path Solver is the multigeneration view. It expands only from Pals marked owned in &lt;strong&gt;My Pals&lt;/strong&gt;, and falls back to the smallest direct capture set when needed.&lt;/p&gt;

&lt;p&gt;The route graph comes from the bundled 1.0 pair table. Egg counts on that screen are &lt;strong&gt;planning estimates&lt;/strong&gt;, not simulated probabilities. The disclaimer page says the same thing: generation counts come from the graph; egg and time labels are estimates; later patches, mods, or extraction errors can disagree with the snapshot.&lt;/p&gt;

&lt;p&gt;Save a route as a plan if you want. Plans stay on the device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1c8dnmjrn5wlazgijo43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1c8dnmjrn5wlazgijo43.png" alt="Palbreed path solver" width="800" height="866"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I refused to ship in this post
&lt;/h2&gt;

&lt;p&gt;A combo dump. A "best Anubis line" list. A promise that Palbreed will rank for &lt;code&gt;Palworld breeding calculator&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those SERP slots are already held by large databases. This post is a build note and a link to a pinned tool, not a content-site play.&lt;/p&gt;

&lt;p&gt;The Data Status screen on the site also records a boundary I kept: 299 PalCalc breeding entities drive the solver. One extra Paldeck-only boss entry is bundled for roster completeness and never enters breeding results.&lt;/p&gt;

&lt;p&gt;If a number in this post disagrees with the live badges, trust the badges and the calculator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Calculator: &lt;a href="https://palbreeding.org/calculator" rel="noopener noreferrer"&gt;https://palbreeding.org/calculator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reverse Search: &lt;a href="https://palbreeding.org/reverse" rel="noopener noreferrer"&gt;https://palbreeding.org/reverse&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Path Solver: &lt;a href="https://palbreeding.org/paths" rel="noopener noreferrer"&gt;https://palbreeding.org/paths&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unofficial fan tool. Check the result in-game before you spend Cake.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I shipped a sourced question hub for The Sinking City 2 instead of another cloned wiki</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Wed, 19 Aug 2026 10:14:31 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-sourced-question-hub-for-the-sinking-city-2-instead-of-another-cloned-wiki-5fg3</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-shipped-a-sourced-question-hub-for-the-sinking-city-2-instead-of-another-cloned-wiki-5fg3</guid>
      <description>&lt;p&gt;The Sinking City 2 launched on 18 August 2026. The searches I kept seeing were not "give me a weapons dump." They were when does it release, what are the PC specs, which edition has Holloway Manor, is there a demo, and do I need the first game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frjwbnelb21t2nb898yau.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frjwbnelb21t2nb898yau.jpg" alt="Flooded 1920s street from The Sinking City 2" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. © 2019–2026 Frogwares Ireland Ltd. Source: Steam store, app 2825860.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Official answers exist, but they are split across the &lt;a href="https://store.steampowered.com/app/2825860/The_Sinking_City_2/" rel="noopener noreferrer"&gt;Steam store&lt;/a&gt;, dated community announcements, and Frogwares press notes. A cloned wiki that invents the missing numbers would rank for a week and then rot.&lt;/p&gt;

&lt;p&gt;So I shipped &lt;a href="https://thesinkingcity2.net/" rel="noopener noreferrer"&gt;thesinkingcity2.net&lt;/a&gt; as an independent question hub: one search question per page, official source URL next to every changing fact, gaps left visible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm01kjlvi1jre5e6eibz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm01kjlvi1jre5e6eibz2.png" alt="thesinkingcity2.net homepage" width="800" height="556"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;thesinkingcity2.net homepage. Independent question hub. Not affiliated with Frogwares.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I refused to invent
&lt;/h2&gt;

&lt;p&gt;Steam App &lt;strong&gt;2825860&lt;/strong&gt; lists &lt;strong&gt;single-player&lt;/strong&gt; only. I do not quote "no crossplay" as an official line. Frogwares has not published a crossplay feature, so the page says that.&lt;/p&gt;

&lt;p&gt;Frogwares has &lt;strong&gt;not&lt;/strong&gt; said whether you need The Sinking City 1. The FAQ does not invent a "must play" or "skip it" answer.&lt;/p&gt;

&lt;p&gt;Steam Recommended names a &lt;strong&gt;Medium&lt;/strong&gt; preset. The 10 July 2026 press copy says &lt;strong&gt;Balanced&lt;/strong&gt;. The specs page shows both and dates them. I do not pick a winner.&lt;/p&gt;

&lt;p&gt;Playtime is not a first-party number. Official channels do not publish campaign length. If a reviews page cites named outlets, it is labeled as reception, not as Frogwares copy.&lt;/p&gt;

&lt;p&gt;Mac, Linux, and Switch are &lt;strong&gt;not listed&lt;/strong&gt; on the current Steam and press pages. That is not the same as "confirmed never."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fawb9y05xoow7cxly4oeu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fawb9y05xoow7cxly4oeu.jpg" alt="Arkham interior from The Sinking City 2" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. © 2019–2026 Frogwares Ireland Ltd. Source: Steam store, app 2825860.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The pages that match the search
&lt;/h2&gt;

&lt;p&gt;Each URL is a question a launch-week player actually types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/release-date/" rel="noopener noreferrer"&gt;When does it release?&lt;/a&gt; — 18 August 2026 on PC, PlayStation 5, and Xbox Series X|S. Delay history only as Frogwares announced it. Physical copies: no official announcement.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/system-requirements/" rel="noopener noreferrer"&gt;What are the system requirements?&lt;/a&gt; — Steam min/rec, including 16 GB RAM, GTX 1070 / RX 5700, 70 GB SSD.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/editions/" rel="noopener noreferrer"&gt;Which editions?&lt;/a&gt; — Standard $49.99, Deluxe $54.99, Premium $59.99 on Steam, plus the named DLC and the Chthonic Arsenal pre-order items as edition deltas, not a weapons table.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/demo/" rel="noopener noreferrer"&gt;Is there a demo?&lt;/a&gt; — a Next Fest demo shipped in June. After launch I point at the live Steam page instead of declaring it forever available.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/news/" rel="noopener noreferrer"&gt;Official news&lt;/a&gt; — Frogwares Steam announcements only, dated.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thesinkingcity2.net/faq/" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt; and &lt;a href="https://thesinkingcity2.net/sources/" rel="noopener noreferrer"&gt;sources&lt;/a&gt; — the editorial rules are public.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steam current user reviews, as of 19 August 2026, read &lt;strong&gt;Very Positive (92% of 339)&lt;/strong&gt;. That number lives on Steam. I do not treat it as a Metascore substitute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sirgf1fbx9r9106kvfe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sirgf1fbx9r9106kvfe.jpg" alt="Night street from The Sinking City 2" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. © 2019–2026 Frogwares Ireland Ltd. Source: Steam store, app 2825860.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a website and not a Notion dump
&lt;/h2&gt;

&lt;p&gt;Searchers land on a question. The page has to answer that question, cite the dated official note, and say what is still unknown. That is why the homepage is a question hub, not a franchise cover.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpxvzisenpq272erx5m35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpxvzisenpq272erx5m35.png" alt="Release-date page on thesinkingcity2.net" width="800" height="556"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Release-date page: August 18, 2026, sourced to Steam. Mac/Linux/Switch left as “not listed.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I did not add a weapons wiki, a maps directory, or a settings optimizer. Those pages would need numbers Frogwares has not published.&lt;/p&gt;

&lt;p&gt;The site is not affiliated with Frogwares. Contact is &lt;a href="mailto:support@thesinkingcity2.net"&gt;support@thesinkingcity2.net&lt;/a&gt;. Corrections get a source and a same-day edit.&lt;/p&gt;

&lt;p&gt;If you are building a launch-week game hub: start from the search question, keep official text dated, and leave the gaps visible. The empty cell is more honest than a confident guess.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>I built a source-attributed hub for Hell Let Loose: Vietnam instead of another cloned wiki</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:24:34 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-source-attributed-hub-for-hell-let-loose-vietnam-instead-of-another-cloned-wiki-30ja</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-source-attributed-hub-for-hell-let-loose-vietnam-instead-of-another-cloned-wiki-30ja</guid>
      <description>&lt;p&gt;Hell Let Loose: Vietnam launched on 13 August 2026. In the first week, the searches I kept seeing were not "give me a weapon dump." They were how do I join a server, why did my AMD GPU crash, why does proximity chat sound robotic, and is Hotfix 1 actually out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg3thf5e0d0h20un5gu1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg3thf5e0d0h20un5gu1.jpg" alt="US squad moving through jungle cover in Hell Let Loose: Vietnam" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. Team17 / Expression Games.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Official answers exist, but they are split across Steam announcements, a living Team17 comms thread, and a performance blog. A cloned wiki that invents the missing numbers would rank for a week and then rot.&lt;/p&gt;

&lt;p&gt;So I shipped &lt;a href="https://hellletloosevietnam.org/" rel="noopener noreferrer"&gt;Hell Let Loose Vietnam&lt;/a&gt; as an independent hub: official news in, dated claims, gameplay pages separated from troubleshooting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I refused to invent
&lt;/h2&gt;

&lt;p&gt;Steam App 3079210 lists &lt;strong&gt;17 roles&lt;/strong&gt;. The marketing page says &lt;strong&gt;19 specialised roles&lt;/strong&gt;. The site keeps the explicit 17-role directory and flags the mismatch instead of filling two mystery slots.&lt;/p&gt;

&lt;p&gt;First-party material names &lt;strong&gt;six launch maps&lt;/strong&gt;. Only &lt;strong&gt;four modes&lt;/strong&gt; currently have detailed published rules (Warfare, Offensive, Conquest, Domination). Undocumented mode names stay off the page.&lt;/p&gt;

&lt;p&gt;Steam current-player counts are &lt;strong&gt;Steam only&lt;/strong&gt;. They are never treated as a cross-platform population.&lt;/p&gt;

&lt;p&gt;Vietnam PC requirements come from that same Steam app, not the franchise site page that still looks like the original Hell Let Loose.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9m8ro0mcuw6t4k0wbka.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9m8ro0mcuw6t4k0wbka.jpg" alt="First-person sprint down a jungle path" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. The site does not invent undocumented weapon stats to match a pretty picture.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch issues get their own library
&lt;/h2&gt;

&lt;p&gt;Gameplay stays on maps, roles, vehicles and guides. Launch defects live under &lt;a href="https://hellletloosevietnam.org/fixes/" rel="noopener noreferrer"&gt;Fixes &amp;amp; Troubleshooting&lt;/a&gt;, each with a status label: acknowledged, monitoring, still investigating, or confirmed in Hotfix 1.&lt;/p&gt;

&lt;p&gt;Hotfix 1 went live on 16 August. The pages I keep pointing people to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hellletloosevietnam.org/fixes/cannot-join-server-vip-message/" rel="noopener noreferrer"&gt;Cannot join a server / incorrect VIP message&lt;/a&gt; — browser listings went stale at launch; Hotfix 1 refreshes more often and hides full servers by default&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hellletloosevietnam.org/fixes/amd-gpu-crashes/" rel="noopener noreferrer"&gt;AMD GPU crashes&lt;/a&gt; — official DX11 / DX12 launch-option sets, plus "do not combine them"&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hellletloosevietnam.org/fixes/distorted-robotic-voice-chat/" rel="noopener noreferrer"&gt;Robotic proximity voice&lt;/a&gt; — still investigating; I do not pretend a community toggle is a fix&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hellletloosevietnam.org/fixes/ps5-audio-cutting-out/" rel="noopener noreferrer"&gt;PS5 audio cutting out&lt;/a&gt; — named dropout is marked fixed in Hotfix 1; later cut-outs are a new report&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hellletloosevietnam.org/updates/hotfix-1-patch-notes/" rel="noopener noreferrer"&gt;Hotfix 1 notes, player-facing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a workaround is official and temporary, the page says so. If a number is not in a first-party source, it is not on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a website and not a Notion dump
&lt;/h2&gt;

&lt;p&gt;Searchers land on a question. The page has to answer that question, cite the dated official note, and tell them what is still unknown. That is why &lt;a href="https://hellletloosevietnam.org/guides/role-selection/" rel="noopener noreferrer"&gt;role selection&lt;/a&gt;, &lt;a href="https://hellletloosevietnam.org/guides/us-vs-nva/" rel="noopener noreferrer"&gt;US vs NVA&lt;/a&gt;, and &lt;a href="https://hellletloosevietnam.org/guides/map-selection/" rel="noopener noreferrer"&gt;map selection&lt;/a&gt; are decision guides, not lore essays.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foflnu43mjpqsvspct8qt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foflnu43mjpqsvspct8qt.jpg" alt="Sniper overwatch from a bamboo structure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Official Steam screenshot. Role pages stay on documented responsibilities, not cinematic loadouts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The full editorial rules are public: &lt;a href="https://hellletloosevietnam.org/editorial-policy/" rel="noopener noreferrer"&gt;editorial policy&lt;/a&gt; and &lt;a href="https://hellletloosevietnam.org/sources-and-corrections/" rel="noopener noreferrer"&gt;sources &amp;amp; corrections&lt;/a&gt;. Contact is &lt;a href="mailto:support@hellletloosevietnam.org"&gt;support@hellletloosevietnam.org&lt;/a&gt;. The site is not affiliated with Team17 or Expression Games.&lt;/p&gt;

&lt;p&gt;If you are building a launch-week game hub: start from the search question, keep official text dated, and leave the gaps visible. The empty cell is more honest than a confident guess.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>I Built an AI Tool to Reconstruct Matcha-Filtered Images—Here’s What I Learned</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Thu, 13 Aug 2026 10:50:37 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-built-an-ai-tool-to-reconstruct-matcha-filtered-images-heres-what-i-learned-5ad7</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-built-an-ai-tool-to-reconstruct-matcha-filtered-images-heres-what-i-learned-5ad7</guid>
      <description>&lt;p&gt;A heavily stylized “matcha” filter can do more than shift colors toward green. It can flatten skin tones, posterize shadows, exaggerate edges, replace texture, and destroy small details.&lt;/p&gt;

&lt;p&gt;That creates an interesting product question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can generative AI turn the remaining visual structure into a natural-looking image again?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I recently built &lt;a href="https://matchafilterremover.online" rel="noopener noreferrer"&gt;Matcha Filter Remover&lt;/a&gt;, a small AI tool that explores exactly that problem. This post is a practical breakdown of what worked, what did not, and the engineering decisions that mattered most.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: reconstruction is not recovery
&lt;/h2&gt;

&lt;p&gt;This was the most important product decision.&lt;/p&gt;

&lt;p&gt;When a destructive filter overwrites pixels, those original pixels are gone. No model can reliably recover the exact source photo from information that no longer exists.&lt;/p&gt;

&lt;p&gt;The tool therefore does &lt;strong&gt;AI reconstruction&lt;/strong&gt;, not original-photo recovery.&lt;/p&gt;

&lt;p&gt;That distinction appears throughout the product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The output is described as a new AI-generated interpretation.&lt;/li&gt;
&lt;li&gt;Exact identity, text, logos, hands, jewelry, and background details are not guaranteed.&lt;/li&gt;
&lt;li&gt;The before/after interface keeps the filtered input visible.&lt;/li&gt;
&lt;li&gt;The product never claims forensic restoration or access to hidden content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not only safer wording. It also sets an honest user expectation for a probabilistic system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model comparison surprised me
&lt;/h2&gt;

&lt;p&gt;I tested multiple image-editing models with different kinds of matcha-filtered inputs.&lt;/p&gt;

&lt;p&gt;The first test image was a portrait with a strong yellow-green embossed effect. The second was a tiny, low-resolution café scene with severe edge enhancement and very little reliable color information.&lt;/p&gt;

&lt;p&gt;Two models stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seedream 5 Pro&lt;/strong&gt; produced cleaner color reconstruction and stronger overall photographic coherence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nano Banana Pro&lt;/strong&gt; was useful as a fallback, especially when preserving composition, but sometimes left more of the original green cast in the image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this specific task, Seedream became the primary model and Nano Banana the fallback.&lt;/p&gt;

&lt;p&gt;The key lesson was that “best image model” is too broad a question. A model can be excellent at creative editing but weak at removing a particular destructive visual style. The evaluation set has to resemble the actual user input.&lt;/p&gt;

&lt;p&gt;I also stopped relying on an aggressive pre-classification step. In practice, matcha-filter detection produced too many uncertain or incorrect decisions. A false negative is especially frustrating because the user already knows why they uploaded the image.&lt;/p&gt;

&lt;p&gt;The current workflow instead uses a fixed, conservative reconstruction prompt and lets the image editor handle the full scene.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt design: constrain the invention
&lt;/h2&gt;

&lt;p&gt;A useful prompt for this workflow needs two opposing properties:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove the strong artificial filter.&lt;/li&gt;
&lt;li&gt;Avoid redesigning the entire image.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The prompt emphasizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;natural photographic color and lighting;&lt;/li&gt;
&lt;li&gt;preservation of pose, framing, subject placement, and scene structure;&lt;/li&gt;
&lt;li&gt;removal of olive/yellow-green tint, embossed edges, posterization, and false texture;&lt;/li&gt;
&lt;li&gt;realistic skin, fabric, objects, and background;&lt;/li&gt;
&lt;li&gt;no beautification, identity substitution, or unrelated additions;&lt;/li&gt;
&lt;li&gt;no claim that the result is the original photo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not eliminate hallucination, but it gives the model a much narrower job than “make this look good.”&lt;/p&gt;

&lt;h2&gt;
  
  
  The production architecture
&lt;/h2&gt;

&lt;p&gt;The app is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16 and React 19&lt;/strong&gt; for the application;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers&lt;/strong&gt; for the runtime;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare D1&lt;/strong&gt; for users, credits, jobs, and payment records;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare R2&lt;/strong&gt; for temporary uploads and generated results;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Queues&lt;/strong&gt; for asynchronous reconstruction jobs;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fal.ai&lt;/strong&gt; for image-generation models;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google OAuth&lt;/strong&gt; for account access;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe Checkout&lt;/strong&gt; for one-time credit purchases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simplified request flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser upload
  -&amp;gt; authenticated API route
  -&amp;gt; temporary R2 object
  -&amp;gt; D1 job + credit reservation
  -&amp;gt; Cloudflare Queue
  -&amp;gt; primary image model
  -&amp;gt; output safety check
  -&amp;gt; temporary R2 result
  -&amp;gt; authenticated result page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uploads and results are scheduled for deletion within 24 hours. The credit balance itself does not expire.&lt;/p&gt;

&lt;h2&gt;
  
  
  Payments were more than adding a button
&lt;/h2&gt;

&lt;p&gt;Stripe Checkout made card collection straightforward, but reliable fulfillment still required server-side work.&lt;/p&gt;

&lt;p&gt;The live payment flow validates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the Checkout Session belongs to the signed-in user;&lt;/li&gt;
&lt;li&gt;the session is in live mode;&lt;/li&gt;
&lt;li&gt;payment status is paid;&lt;/li&gt;
&lt;li&gt;currency and amount match the selected pack;&lt;/li&gt;
&lt;li&gt;the returned Stripe Price ID matches the server configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credits are granted through an idempotent ledger entry. If Stripe retries the webhook—or the success page and webhook both request fulfillment—the same Checkout Session cannot grant credits twice.&lt;/p&gt;

&lt;p&gt;The site sells one-time packs rather than subscriptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 credits for $4.99&lt;/li&gt;
&lt;li&gt;20 credits for $9.99&lt;/li&gt;
&lt;li&gt;45 credits for $19.99&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Purchased credits remain available until used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety boundaries belong in the architecture
&lt;/h2&gt;

&lt;p&gt;An image reconstruction tool can be misunderstood if its limits are vague.&lt;/p&gt;

&lt;p&gt;The product explicitly prohibits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicit content;&lt;/li&gt;
&lt;li&gt;content involving minors;&lt;/li&gt;
&lt;li&gt;non-consensual imagery;&lt;/li&gt;
&lt;li&gt;clothing removal or “see-through” behavior;&lt;/li&gt;
&lt;li&gt;private-content reveal claims;&lt;/li&gt;
&lt;li&gt;attempts to bypass safety controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generated results pass an output safety check before being retained and displayed. A blocked or failed job returns the reserved reconstruction credit through an idempotent refund entry.&lt;/p&gt;

&lt;p&gt;The UI also requires the user to confirm that they are 18+ and own the image or have permission to use it.&lt;/p&gt;

&lt;p&gt;These decisions are not a policy-page afterthought. They affect job state, storage, credit accounting, result delivery, and copy across the entire product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do differently
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Build the evaluation set first
&lt;/h3&gt;

&lt;p&gt;I initially spent too much time tuning around individual examples. A small benchmark containing portraits, objects, indoor scenes, tiny images, text-heavy images, and multiple filter strengths would have made model selection faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Treat copy as part of system design
&lt;/h3&gt;

&lt;p&gt;Phrases such as “remove,” “restore,” and “recover” can imply very different capabilities. The final product repeatedly uses “AI reconstruction” because the system generates plausible pixels rather than retrieves missing ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Test mobile checkout early
&lt;/h3&gt;

&lt;p&gt;One responsive CSS rule accidentally hid all purchase buttons on mobile. Desktop tests passed; mobile end-to-end tests caught it before launch.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Make every credit mutation idempotent
&lt;/h3&gt;

&lt;p&gt;Generation failures, safety blocks, webhook retries, and payment redirects can all repeat. A ledger with unique idempotency keys is much safer than directly incrementing and decrementing a balance in scattered code paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Keep temporary media and permanent entitlements separate
&lt;/h3&gt;

&lt;p&gt;Images expire after 24 hours for privacy. Purchased credits do not expire. Mixing those concepts would create confusing product behavior and complicated data retention rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;The project is now live at &lt;a href="https://matchafilterremover.online" rel="noopener noreferrer"&gt;matchafilterremover.online&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is still an experiment in a narrow visual problem, and the output will not be perfect. But that constraint is exactly what made the build interesting: model quality, honest product language, privacy, safety, async processing, and payment integrity all had to work together.&lt;/p&gt;

&lt;p&gt;If you are building a small AI image product, my biggest recommendation is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Evaluate on the real failure cases, and design the product around what the model cannot know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I would love to hear how other developers evaluate image-editing models or design reliable credit-based AI workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>I Built a Privacy-First QR Code Generator for Print-Ready Batch Workflows</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:29:07 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-privacy-first-qr-code-generator-for-print-ready-batch-workflows-4pp</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-privacy-first-qr-code-generator-for-print-ready-batch-workflows-4pp</guid>
      <description>&lt;p&gt;I recently built QRForge, a QR code generator focused less on tracking dashboards and more on print-ready workflows.&lt;/p&gt;

&lt;p&gt;Most QR tools I found fell into two buckets: simple one-off generators, or dynamic QR platforms that route scans through their own tracking URLs. I wanted something more boring but useful: direct static QR codes, CSV batch generation, clear previews, and export files that are ready for labels, badges, packaging, or menus.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;QRForge currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static URL QR generation without signup&lt;/li&gt;
&lt;li&gt;CSV upload for batch QR projects&lt;/li&gt;
&lt;li&gt;First-row previews before export&lt;/li&gt;
&lt;li&gt;Named PNG and SVG outputs&lt;/li&gt;
&lt;li&gt;Manifest and error report files&lt;/li&gt;
&lt;li&gt;PDF project summary&lt;/li&gt;
&lt;li&gt;ZIP delivery for print workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main idea is that a user should know what they are about to print before they generate hundreds of QR codes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why static QR codes?
&lt;/h2&gt;

&lt;p&gt;Dynamic QR codes are useful, but they also introduce a dependency: the QR provider has to keep redirecting scans forever.&lt;/p&gt;

&lt;p&gt;For printed materials, that tradeoff matters. A static QR code points directly to the destination URL. Once printed, it does not depend on my app staying online.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;The project is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Cloudflare Workers&lt;/li&gt;
&lt;li&gt;Stripe Checkout for one-time batch exports&lt;/li&gt;
&lt;li&gt;Server-side ZIP generation for print packs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I am still figuring out
&lt;/h2&gt;

&lt;p&gt;The biggest question is positioning.&lt;/p&gt;

&lt;p&gt;I am testing whether “Verified Print Pack” clearly communicates the value: preview the CSV, catch obvious problems, then export a print-ready bundle.&lt;/p&gt;

&lt;p&gt;I’d love feedback from builders, designers, or anyone who has had to generate QR codes for real-world print materials.&lt;/p&gt;

&lt;p&gt;Project: &lt;a href="https://qrcodegenerator.page" rel="noopener noreferrer"&gt;https://qrcodegenerator.page&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>saas</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>I revived a small Mayan Tzolk'in calendar calculator and found real user demand</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Wed, 17 Jun 2026 13:54:27 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-revived-a-small-mayan-tzolkin-calendar-calculator-and-found-real-user-demand-i48</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-revived-a-small-mayan-tzolkin-calendar-calculator-and-found-real-user-demand-i48</guid>
      <description>&lt;p&gt;I recently revived a small niche web tool I had left untouched for months:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mayanastrologycalculator.com/utm_source=dev.to"&gt;Mayan Astrology Calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It converts a Gregorian birth date into a Mayan Tzolk'in calendar reading.&lt;/p&gt;

&lt;p&gt;The Tzolk'in is a 260-day sacred calendar cycle made from 20 day signs and 13 tones. The tool calculates a user's Nawal day sign, Galactic Tone, and a short reflective interpretation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I came back to it
&lt;/h2&gt;

&lt;p&gt;The project had been quiet for a while, but Google Search Console showed that people were still finding it through search.&lt;/p&gt;

&lt;p&gt;Queries like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mayan astrology calculator&lt;/li&gt;
&lt;li&gt;mayan zodiac sign calculator&lt;/li&gt;
&lt;li&gt;mayan birth chart&lt;/li&gt;
&lt;li&gt;mayan calendar calculator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;were still getting impressions and clicks.&lt;/p&gt;

&lt;p&gt;That was enough of a signal to make me revisit the project instead of abandoning it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I added
&lt;/h2&gt;

&lt;p&gt;The original version was mostly a single calculator. I expanded it into a more complete static tool site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Mayan astrology birth date calculator&lt;/li&gt;
&lt;li&gt;A result page with Nawal and Galactic Tone interpretation&lt;/li&gt;
&lt;li&gt;Today's Mayan date&lt;/li&gt;
&lt;li&gt;A compatibility calculator&lt;/li&gt;
&lt;li&gt;A guide to the 20 Nawal day signs&lt;/li&gt;
&lt;li&gt;A guide to the 13 Galactic Tones&lt;/li&gt;
&lt;li&gt;SEO pages for related search intents&lt;/li&gt;
&lt;li&gt;A simple waitlist for deeper personalized PDF reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The site is built with Next.js and exported as a static site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The interesting part: waitlist validation
&lt;/h2&gt;

&lt;p&gt;I wanted to test whether this could become more than an ad-supported content site.&lt;/p&gt;

&lt;p&gt;Instead of building payments, accounts, and PDF generation immediately, I added a lightweight waitlist CTA on the result page:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Want a deeper personalized Mayan birth chart report?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When users click it, they are invited to email us if they want early access.&lt;/p&gt;

&lt;p&gt;This is intentionally higher friction than a normal email input. If someone actually opens their email client and sends their birth date and result, that is a stronger signal than a passive signup.&lt;/p&gt;

&lt;p&gt;Within a short time, a couple of users actually emailed us with their birth dates and Mayan signatures.&lt;/p&gt;

&lt;p&gt;That changed the question from:&lt;/p&gt;

&lt;p&gt;"Is this just a fun niche calculator?"&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;"Is there enough intent here to justify a paid personalized report?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I did not build payments first
&lt;/h2&gt;

&lt;p&gt;It would be tempting to add Stripe immediately.&lt;/p&gt;

&lt;p&gt;But for a niche tool, I think that would be premature.&lt;/p&gt;

&lt;p&gt;Before building a full payment flow, I want to validate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do users want deeper reports?&lt;/li&gt;
&lt;li&gt;Would they pay for them?&lt;/li&gt;
&lt;li&gt;What kind of report feels valuable?&lt;/li&gt;
&lt;li&gt;Does a PDF report feel trustworthy enough?&lt;/li&gt;
&lt;li&gt;What methodology explanation is needed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the next step is manual delivery: generate a few early-access PDF reports, send them to interested users, and ask for feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credibility matters
&lt;/h2&gt;

&lt;p&gt;For a tool like this, trust is important.&lt;/p&gt;

&lt;p&gt;The calculator part is deterministic: it converts a Gregorian date into a Tzolk'in signature.&lt;/p&gt;

&lt;p&gt;The interpretation part is reflective. It is not scientific, medical, legal, or psychological advice.&lt;/p&gt;

&lt;p&gt;For the PDF reports, I am adding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A methodology section&lt;/li&gt;
&lt;li&gt;A cultural note&lt;/li&gt;
&lt;li&gt;A clear distinction between calculation and interpretation&lt;/li&gt;
&lt;li&gt;A disclaimer&lt;/li&gt;
&lt;li&gt;A sample report structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think this matters, especially when working with cultural or spiritual systems. The goal is to be useful and respectful, not to pretend to be an official authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;The current stack is intentionally simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Static export&lt;/li&gt;
&lt;li&gt;Cloudflare Pages&lt;/li&gt;
&lt;li&gt;Google Search Console&lt;/li&gt;
&lt;li&gt;Google Analytics&lt;/li&gt;
&lt;li&gt;Plain HTML/PDF templates for early report samples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No database yet. No payment integration yet. No account system.&lt;/p&gt;

&lt;p&gt;The project is still in the validation stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;A few takeaways from this small experiment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Old niche projects may still have search demand.&lt;/li&gt;
&lt;li&gt;Google Search Console can reveal what users actually want.&lt;/li&gt;
&lt;li&gt;A calculator can be more valuable than a blog post because the result is personal.&lt;/li&gt;
&lt;li&gt;High-friction waitlists can be useful when you want stronger intent signals.&lt;/li&gt;
&lt;li&gt;Paid product development should probably start manually before becoming automated.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;I'd love feedback on the tool and the approach:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mayanastrologycalculator.com/utm_source=dev.to"&gt;Mayan Astrology Calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the calculator flow clear?&lt;/li&gt;
&lt;li&gt;Does the result page feel useful?&lt;/li&gt;
&lt;li&gt;Would a paid PDF report make sense here?&lt;/li&gt;
&lt;li&gt;How would you improve trust and credibility for a niche spiritual/calendar tool?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>indiehackers</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Built a Color-Memory Game with Next.js + Cloudflare: Making "Guess the Hue from Memory" Fun and Fair</title>
      <dc:creator>王龙</dc:creator>
      <pubDate>Tue, 09 Jun 2026 16:49:00 +0000</pubDate>
      <link>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-color-memory-game-with-nextjs-cloudflare-making-guess-the-hue-from-memory-fun-and-392k</link>
      <guid>https://dev.to/_df88eb1337eb23b75c94ba/i-built-a-color-memory-game-with-nextjs-cloudflare-making-guess-the-hue-from-memory-fun-and-392k</guid>
      <description>&lt;p&gt;Hey everyone — I'm Potter, the solo developer behind &lt;a href="https://toon-tone.net/?utm_sorce=https://dev.to/"&gt;Toon Tone&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;💡 The Pitch in One Sentence&lt;br&gt;
You are given the name of an iconic cartoon character and a specific part of them, but only a solid white block is displayed — you must drag the H/S/B (Hue, Saturation, Brightness) sliders to recreate the exact color from your memory. Five rounds, scored from 0–10 based on how close your color is to the target.&lt;/p&gt;

&lt;p&gt;🎨 Why This Exists&lt;br&gt;
We all think we perfectly "remember" pop culture colors — SpongeBob's signature yellow, Pikachu's rosy cheeks, or Mario's red cap.&lt;/p&gt;

&lt;p&gt;But the moment you lose the visual context of the character's lines and shapes, and find yourself staring at a blank color picker, you realize a shocking truth: your visual memory and the actual RGB values are separated by a massive, humbling gulf. That exact psychological gap — the "I know I know this, but I'm completely guessing right now" feeling — is where the fun of &lt;a href="https://toon-tone.net/?utm_sorce=https://dev.to/"&gt;Toon Tone&lt;/a&gt; lives.&lt;/p&gt;

&lt;p&gt;🛠️ Two Core UX and Architectural Decisions&lt;br&gt;
As a solo project, making a simple "guess the color" mechanic feel both intuitive and mathematically fair required some deep thought into the details:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;HSB Sliders Instead of RGB
In daily web development, we are used to dealing with RGB or Hex codes. However, in game design, RGB sliders are an absolute UX nightmare.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When the human brain wants to make a color "a bit more red" or "a lighter blue," we don’t naturally calculate how much to push the Red axis or subtract from the Green axis. We perceive color in a sequence: first we identify what the color is, then how vivid it is, and finally how bright it is.&lt;/p&gt;

&lt;p&gt;Because of this, I strictly went with the HSB (Hue, Saturation, Brightness) model for the sliders:&lt;/p&gt;

&lt;p&gt;Hue helps players anchor "which color" it actually is.&lt;/p&gt;

&lt;p&gt;Saturation controls the vividness and intensity.&lt;/p&gt;

&lt;p&gt;Brightness dictates the light and shadow.&lt;/p&gt;

&lt;p&gt;Player feedback has proved this right: people instinctively set the hue first, then fine-tune the saturation and brightness, perfectly mirroring how the brain extracts visual memories.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scoring System: Brutally Rigid sRGB Euclidean Distance
In color science, using a perceptually uniform algorithm like CIEDE2000 is technically more accurate to how the human eye registers different spectrums. However, during early prototype testing, complex perceptual math just ended up confusing players. People would get frustrated, saying, "I feel like these two colors look almost identical, why did the game dock so many points?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, I made a very deliberate, hardcore engineering choice: calculating scores based strictly on standard sRGB space Euclidean distance.&lt;/p&gt;

&lt;p&gt;While it might not be a perfect representation of human biology, it brings three massive wins to the table:&lt;/p&gt;

&lt;p&gt;Brutal Fairness: There are no gray areas or hand-waving. Every unit of RGB deviation costs you points, pure and simple.&lt;/p&gt;

&lt;p&gt;High Predictability: Players learn the exact "temperament" of the scoring model within two rounds.&lt;/p&gt;

&lt;p&gt;Instant Performance: The calculation executes in roughly 0.0001ms, meaning zero rendering lag.&lt;/p&gt;

&lt;p&gt;📈 Surprises &amp;amp; Insights from the Game&lt;br&gt;
Content Cadence: I am currently keeping a rhythm of adding 1–2 new character colors every single Friday to steadily grow the pool.&lt;/p&gt;

&lt;p&gt;The Charm of "Blind Color Guessing": Because the game renders only a solid color block without any surrounding illustrations or outlines, it acts as a pure, stripped-down test of isolated visual memory.&lt;/p&gt;

&lt;p&gt;Polarized Difficulty: The hardest color to nail so far is SpongeBob's yellow (almost everyone oversaturates it and gets penalized heavily). On the flip side, the easiest to score high on is Pikachu (those two red cheeks are so deeply burned into collective human DNA that people's memory holds strong).&lt;/p&gt;

&lt;p&gt;The Decay of Memory: The biggest predictor of a high score isn't whether someone has art training — it's whether they have watched or interacted with that specific show recently. "Nostalgia memory" decays at a wildly different rate than "recent recognition memory." This has actually shifted my weekly curation strategy; I now actively look out for what old anime are getting remakes or what's trending on streaming platforms to catch players at the peak of their cultural memory.&lt;/p&gt;

&lt;p&gt;💻 The Ultra-Lean Stack (Next.js + Cloudflare Workers)&lt;br&gt;
As an indie hacker, my top priority for this project was keeping maintenance costs at zero, rendering fast, and eliminating bloat. To achieve that, I built the entire architecture around the Cloudflare ecosystem:&lt;/p&gt;

&lt;p&gt;Framework: Powered entirely by Next.js, which ensures a fantastic developer experience and clean code organization.&lt;/p&gt;

&lt;p&gt;Compute &amp;amp; Deployment: Utilizing Cloudflare's official @cloudflare/next-on-pages, the entire Next.js project is deployed directly on Cloudflare Workers, taking advantage of ultra-low latency edge nodes globally.&lt;/p&gt;

&lt;p&gt;Storage: Combined with Cloudflare KV / D1 to read and store core game configuration and data at maximum performance and near-zero cost.&lt;/p&gt;

&lt;p&gt;Thanks to Cloudflare's edge network, the site loads incredibly fast across the globe. On a standard 4G mobile connection, the initial page load clocks in at around 200ms, delivering a frictionless, instant-play experience.&lt;/p&gt;

&lt;p&gt;🎮 Test Your Own Color Memory!&lt;br&gt;
The site is fully live in English with a clean, distraction-free UI. There are no signups, no paywalls, and no installations required — a full 5-round game takes less than 3 minutes.&lt;/p&gt;

&lt;p&gt;Give it a spin here: &lt;a href="https://toon-tone.net/?utm_sorce=https://dev.to/"&gt;https://toon-tone.net/?utm_sorce=https://dev.to/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you finish a run, drop a screenshot of your scorecard in the comments, or let me know: which character's color made you completely question your own memory?&lt;/p&gt;

</description>
      <category>indiedev</category>
      <category>nextjs</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
