<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pwa on Pauls Blog</title><link>https://prule.github.io/pauls-blog/tags/pwa/</link><description>Recent content in Pwa on Pauls Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 10 Jun 2026 14:11:22 +1000</lastBuildDate><atom:link href="https://prule.github.io/pauls-blog/tags/pwa/index.xml" rel="self" type="application/rss+xml"/><item><title>Rebuilding a Simpler, Local-First Video Aggregator</title><link>https://prule.github.io/pauls-blog/post/coding/2026/rebuilding-simpler-local-first-video-aggregator/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +1000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/rebuilding-simpler-local-first-video-aggregator/</guid><description>&lt;p&gt;I rebuilt my YouTube content aggregator and filter (&lt;a href="https://video.vamonossoftware.com" target="_blank" rel="noopener"&gt;video.vamonossoftware.com&lt;/a&gt;
) as a streamlined, local-first Progressive Web App (PWA). By stripping out over-engineered features like local LLM tagging and shifting to a client-side IndexedDB model, the new version establishes a fast, responsive, and maintainable foundation.&lt;/p&gt;
&lt;h2 id="the-architecture"&gt;The Architecture&lt;/h2&gt;
&lt;p&gt;The application operates entirely client-side, eliminating remote database dependencies and hosting costs.&lt;/p&gt;

&lt;div class="mermaid"&gt;
graph TD
 A[Remote Source URL / GitHub] --&gt;|Import &amp; Sync| B[Sources Config]
 C[YouTube API Key] -.-&gt;|Direct API Query| D[YouTube Feed Data]
 E[Cloudflare Worker RSS Proxy] -.-&gt;|Fallback Fetch| D
 B --&gt; D
 D --&gt; F[Filter Rules: Include / Exclude]
 F --&gt; G[Topics Feed: Motorsport, Tennis, etc.]
 G --&gt; H[(Browser IndexedDB)]
&lt;/div&gt;

&lt;h3 id="1-local-first-storage"&gt;1. Local-First Storage&lt;/h3&gt;
&lt;p&gt;All feed data, subscription lists, topics, and filtering rules are stored directly in the browser using &lt;strong&gt;IndexedDB&lt;/strong&gt;. This keeps interactions instantaneous and respects user privacy.&lt;/p&gt;</description></item><item><title>Building CatchUp: A React + Supabase PWA Crafted with Claude Code and Claude Design</title><link>https://prule.github.io/pauls-blog/post/coding/2026/catchup-1/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +1000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/catchup-1/</guid><description>&lt;p&gt;AI-assisted engineering has transitioned from chat-based prompts to multi-agent coordinate workflows. By pairing specialized tools—&lt;strong&gt;Claude Code&lt;/strong&gt; for terminal-driven implementation and &lt;strong&gt;Claude Design&lt;/strong&gt; for interactive visual prototyping—with &lt;strong&gt;OpenSpec&lt;/strong&gt; to maintain a structured development loop, developers can build fully-featured production apps in days.&lt;/p&gt;
&lt;p&gt;This article walks through how I built &lt;strong&gt;CatchUp&lt;/strong&gt;—a React + Supabase Progressive Web App (PWA) designed to let friends coordinate events, vote on dates/locations, and lock in bookings without group chat chaos.&lt;/p&gt;</description></item></channel></rss>