<?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: Paul Uhlig</title>
    <description>The latest articles on DEV Community by Paul Uhlig (@uhlighpstack).</description>
    <link>https://dev.to/uhlighpstack</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%2F4084637%2Ff32c5623-30c2-4044-b263-d05bb35ca6f7.png</url>
      <title>DEV Community: Paul Uhlig</title>
      <link>https://dev.to/uhlighpstack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uhlighpstack"/>
    <language>en</language>
    <item>
      <title>I built an app whose only success metric is how fast you close it</title>
      <dc:creator>Paul Uhlig</dc:creator>
      <pubDate>Wed, 19 Aug 2026 08:52:28 +0000</pubDate>
      <link>https://dev.to/uhlighpstack/i-built-an-app-whose-only-success-metric-is-how-fast-you-close-it-42m3</link>
      <guid>https://dev.to/uhlighpstack/i-built-an-app-whose-only-success-metric-is-how-fast-you-close-it-42m3</guid>
      <description>&lt;p&gt;Most products I've worked on measure success by time-in-app. Fiamo is my attempt at the opposite: a tiny PWA that gives everyone on Earth the same one real-life quest each day — &lt;em&gt;give a stranger an honest compliment&lt;/em&gt;, &lt;em&gt;eat one meal without your phone&lt;/em&gt; — and once you mark it done, it tells you to close it and go live your life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The anti-engagement constraints I committed to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No accounts. An anonymous UUID in localStorage is the whole identity system.&lt;/li&gt;
&lt;li&gt;No feed. There is nothing to scroll, by design.&lt;/li&gt;
&lt;li&gt;One quest per day, deterministic by UTC date, same for the whole planet.&lt;/li&gt;
&lt;li&gt;A live world counter ("N people did today's quest with you") polled from Supabase.&lt;/li&gt;
&lt;li&gt;Photos on share cards are composited client-side and never leave the device.&lt;/li&gt;
&lt;li&gt;No ads, no trackers, no third-party cookies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; React PWA on Cloudflare Pages, Supabase (Postgres + RLS) for streaks/counters, service worker with network-first caching. Total hosting cost: €0/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd love feedback on from dev.to:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Streak recovery without accounts: from day 3 you can generate a short recovery code (or optionally add an email). Is that enough, or does no-login break down here?&lt;/li&gt;
&lt;li&gt;The service worker bit me hard: my first cache-first SW froze old bundles for returning users. Switched to network-first with cache busting — curious how others handle SW update strategies for fast-moving PWAs.&lt;/li&gt;
&lt;li&gt;Is 'the app wants you to leave' a real product thesis or just a constraint I fell in love with?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;One more thing I'm oddly proud of:&lt;/strong&gt; every completed quest becomes a permanent petal of &lt;a href="https://fiamo.pages.dev/organism/" rel="noopener noreferrer"&gt;a single shared organism&lt;/a&gt; — one creature, the same for every eye on Earth. You can't click it bigger; it only grows when someone actually does their quest in the real world. It's my favorite kind of counter: one you can't inflate.&lt;/p&gt;

&lt;p&gt;Try it (free, no signup): &lt;a href="https://fiamo.pages.dev" rel="noopener noreferrer"&gt;https://fiamo.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Honest teardowns welcome — it's tiny and early, and feedback beats upvotes.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Update, 20 Aug.&lt;/strong&gt; It went live on Product Hunt this morning: &lt;a href="https://www.producthunt.com/products/fiamo" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/fiamo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Six hours in: 89 people have opened it, 12 quests marked done. Yesterday those numbers were 58 and 8. Small, but they're the real ones.&lt;/p&gt;

&lt;p&gt;One thing the launch already changed: the Chronicle on the Organism page used to round every entry to the full hour, so seven events between 10:03 and 10:59 all showed as "10:00". That was a privacy decision from when there were three users a day, and at this size it just looked broken. Switched it to the minute. It still gives away no id, no name, no content, no quest, no location.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>pwa</category>
      <category>sideprojects</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
