<?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: Dear John</title>
    <description>The latest articles on DEV Community by Dear John (@dearjohnmusic).</description>
    <link>https://dev.to/dearjohnmusic</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3774134%2F8ffc611e-2ca2-4e6b-a4c7-f0b7241bd56e.jpg</url>
      <title>DEV Community: Dear John</title>
      <link>https://dev.to/dearjohnmusic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dearjohnmusic"/>
    <language>en</language>
    <item>
      <title>I made my side project work offline. Here's why it changed everything.</title>
      <dc:creator>Dear John</dc:creator>
      <pubDate>Thu, 12 Mar 2026 16:27:44 +0000</pubDate>
      <link>https://dev.to/dearjohnmusic/i-made-my-side-project-work-offline-heres-why-it-changed-everything-2d3</link>
      <guid>https://dev.to/dearjohnmusic/i-made-my-side-project-work-offline-heres-why-it-changed-everything-2d3</guid>
      <description>&lt;p&gt;I'm a singer-songwriter who codes. Two months ago I launched Fretlist — a web app for musicians to organize their songs, chords, and setlists. Last week I shipped the biggest update yet: it works offline now.&lt;/p&gt;

&lt;p&gt;This is the story of why I built it, how I approached it, and what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The message that started it
&lt;/h2&gt;

&lt;p&gt;A few weeks after launch, a user named Geoff emailed me. He'd been importing his songs, was clearly engaged, but said something that stuck:&lt;/p&gt;

&lt;p&gt;"The main reason that I haven't given it a good run is that I've no WiFi or signal in our rehearsal room."&lt;/p&gt;

&lt;p&gt;There it was. Fretlist is built for the stage and the rehearsal room — the two places where WiFi is least reliable. Without offline support, I was building a tool that breaks exactly where it matters most.&lt;/p&gt;

&lt;p&gt;That email went to the top of my priority list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I went with a PWA
&lt;/h2&gt;

&lt;p&gt;Fretlist is a Next.js app. I had a few options for offline: build native apps, use a framework like React Native, or go the PWA route.&lt;/p&gt;

&lt;p&gt;I chose PWA for one reason: I never wanted Fretlist to be locked to one platform. Not an iPhone app, not "just" Android. One codebase, every device, every OS. A musician should be able to edit a song on their MacBook and pull it up on their phone at the gig — regardless of what phone they use.&lt;/p&gt;

&lt;p&gt;I followed the official Next.js PWA guide. No third-party PWA packages. Custom service worker, IndexedDB for local data, and the standard Web App Manifest. The fewer dependencies, the fewer things that break.&lt;/p&gt;

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

&lt;p&gt;The offline setup has three layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1: Service worker.&lt;/strong&gt; Caches the app shell — HTML, CSS, JS, fonts. When you open Fretlist without a connection, the app loads instantly. No blank screen, no browser error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: IndexedDB.&lt;/strong&gt; This is where the user's actual data lives locally. Every song, every setlist, every piece of metadata. On every app load, Fretlist syncs from Supabase to IndexedDB. When the connection drops, the app reads from the local database instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 3: Live sync.&lt;/strong&gt; When you're online, changes sync in real-time across all your devices via Supabase Realtime. Edit a song on your laptop — it updates on your phone instantly. Then when you go offline, the latest version is already there.&lt;/p&gt;

&lt;p&gt;I went with full sync on load — every song downloads to IndexedDB when you open the app. For my users, this is fine. A musician with 50 songs is storing maybe a few hundred kilobytes of text. It's not like syncing a photo library.&lt;/p&gt;

&lt;p&gt;The offline mode is read-only for now. You can browse songs, view chords, use play mode, transpose — everything you need on stage. Editing requires a connection. This was a deliberate choice: offline editing means conflict resolution, and that's a rabbit hole I didn't need to go down at this stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The iOS splash screen rabbit hole
&lt;/h2&gt;

&lt;p&gt;Once you're building a PWA, you want it to feel native. On Android, the system generates a splash screen from your manifest automatically. On iOS? You need to provide a separate static image for every possible screen size. We're talking 25+ images.&lt;/p&gt;

&lt;p&gt;I used a generator tool to create all the sizes, added the meta tags, and it works. But it's a reminder that Apple still treats PWAs as second-class citizens. Every browser on iOS uses WebKit under the hood, so PWA capabilities are entirely at Apple's discretion.&lt;/p&gt;

&lt;p&gt;Still — when you tap the Fretlist icon on your home screen and it opens with a branded splash screen, no browser chrome, instant load? That's a moment. It feels like a real app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I removed to ship this
&lt;/h2&gt;

&lt;p&gt;Here's something I don't see enough devs talk about: what you delete to move forward.&lt;/p&gt;

&lt;p&gt;Fretlist had client-side encryption on all song data stored in Supabase. Chord charts encrypted with PBKDF2, the whole thing. It sounded great on paper. In practice, it was causing problems everywhere — slow fetches, complex data handling, and when it came time to build offline mode, it was a wall.&lt;/p&gt;

&lt;p&gt;I asked myself: who am I protecting here? My users store chord charts and lyrics. Not credit cards, not medical records. The encryption was solving a theoretical problem while creating real ones.&lt;/p&gt;

&lt;p&gt;So I removed it. Added 2FA to my Supabase dashboard instead. Simpler, more practical, and it unblocked offline mode overnight.&lt;/p&gt;

&lt;p&gt;Sometimes the best engineering decision is deleting code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real test
&lt;/h2&gt;

&lt;p&gt;The day I shipped offline mode, I messaged Geoff — the user who told me about his rehearsal room. His response will determine if this feature actually works where it matters.&lt;/p&gt;

&lt;p&gt;But I've been testing it myself: load the app, toggle airplane mode, browse through my songs, open a setlist, transpose a chord chart. It all works. And switching songs is basically instant now because everything reads from the local database.&lt;/p&gt;

&lt;p&gt;The speed improvement alone was worth the effort, even for users with good WiFi.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've learned since launch
&lt;/h2&gt;

&lt;p&gt;This is my second month building in public. A few honest observations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Users don't activate on your timeline.&lt;/strong&gt; Fretlist is a vitamin, not a painkiller. Musicians have systems that "work" — until they don't. Most people sign up and don't add a single song. Not because the product is bad, but because they don't have a gig this week. Activation is tied to real-world moments, not feature launches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talk to your users before building features.&lt;/strong&gt; Every major decision I've made came from a conversation, not analytics. Geoff told me about offline. Sage told me about sharing with bandmates. A post-punk band told me about setlist randomization. The admin dashboard tells me who's active. The conversations tell me why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asking questions beats sharing tips.&lt;/strong&gt; On Threads, my best-performing content is always a question: "How do you organize your songs?" or "Any singer-songwriters around?" Tips and feature announcements die. Questions start conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crafting a product is like writing songs.&lt;/strong&gt; I pour myself into both. The fear of putting it out there is the same. And the truth is the same too: not every song connects with everyone, but the right song finds its people.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;60+ users in Early Access&lt;/li&gt;
&lt;li&gt;50 founding "Early Bird" members&lt;/li&gt;
&lt;li&gt;8-9 users showing real activation progress&lt;/li&gt;
&lt;li&gt;0 paying customers (not charging yet)&lt;/li&gt;
&lt;li&gt;1 founder, 2 kids, nights and weekends&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm designing a Band Plan — shared workspaces where each member sees the same songs with their own player settings. Your guitarist sees capo II in Em. Your uke player sees the same song in Dm. Same setlist, personal views. It's the feature I built in WordPress years ago for my duo, now designed properly.&lt;/p&gt;

&lt;p&gt;But first: I need more activated users. The product is ready. The distribution and activation are the bottleneck. So I'm talking to musicians, posting on Threads, and letting the product do its thing.&lt;/p&gt;

&lt;p&gt;If you're a musician: &lt;a href="https://fretlist.com" rel="noopener noreferrer"&gt;fretlist.com&lt;/a&gt;&lt;br&gt;
If you're building a side project: I'm happy to chat. The messy middle is real, and it helps to talk about it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow the journey: &lt;a href="https://threads.net/@dearjohnmusic" rel="noopener noreferrer"&gt;@dearjohnmusic on Threads&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I launched my side project two weeks ago. Here's what actually happened.</title>
      <dc:creator>Dear John</dc:creator>
      <pubDate>Mon, 02 Mar 2026 08:43:48 +0000</pubDate>
      <link>https://dev.to/dearjohnmusic/i-launched-my-side-project-two-weeks-ago-heres-what-actually-happened-h4g</link>
      <guid>https://dev.to/dearjohnmusic/i-launched-my-side-project-two-weeks-ago-heres-what-actually-happened-h4g</guid>
      <description>&lt;p&gt;I'm a developer with 10+ years at a dev company, a singer-songwriter with 15 years of gigging, and a dad of two. At the end of 2025, I started building Fretlist — a web app to organize songs, chords and setlists for musicians. Two weeks ago I launched it. Here's the honest breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;60 signups&lt;/strong&gt; in 14 days&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;18 users&lt;/strong&gt; have added at least one song&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;42 users&lt;/strong&gt; signed up and did nothing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 paying customers&lt;/strong&gt; (not charging yet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0 ad spend&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;All growth from one Threads post, one WhatsApp message, and personal outreach&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One Threads post changed everything.&lt;/strong&gt; My first post — "I built a thing for musicians" — got 2.7k views and 35 signups overnight. I had no audience on Threads before this. The post was personal, not polished. I told my story as a musician, not as a founder selling a product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local outreach outperformed social media.&lt;/strong&gt; I messaged a local WhatsApp group with 61 musicians. 8 signed up within hours, and they were more engaged than any Threads signup. People who know your face trust your product faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "hello from the founder" email works.&lt;/strong&gt; I send every new user a short email 24 hours after signup: who I am, what kind of music do you play, how do you organize your songs. People actually reply. One user told me about his two bands and how he wants to share songs with bandmates. That's product direction I couldn't get from any dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  What didn't work
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Threads is unpredictable.&lt;/strong&gt; First post: 2.7k views. Second post: 6 views. Third: 250. Same account, same kind of content. The algorithm picks winners randomly. Don't build your strategy on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signups ≠ activation.&lt;/strong&gt; 50 people signed up. 42 have zero songs. That's 70% who looked around and left. This was the biggest wake-up call. Getting people in the door and getting them to use the product are two completely different problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features don't activate users.&lt;/strong&gt; I shipped an import feature (PDF, Word, TXT, copy-paste) thinking it would unlock activation. It helped — but most inactive users stayed inactive. The feature wasn't the blocker. Motivation was.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm learning
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Activation is the real game.&lt;/strong&gt; I defined an "Activated Core User" metric: 15+ songs, 3+ setlists, used play mode. I have zero ACUs so far. That's fine — it gives me a clear target and tells me exactly where the funnel breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talk to your users before building more features.&lt;/strong&gt; I emailed all 41 inactive users asking "what held you back?" The replies are more valuable than any feature I could build. Some forgot. Some didn't know where to start. Some are waiting for a gig to try it. Each answer tells me what to fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask questions, don't post tips.&lt;/strong&gt; My most useful content wasn't tips or advice about gigging. It was asking musicians direct questions — how do you organize your songs? How do you handle key notation? Do you build setlists or wing it? Those conversations shaped the product more than any analytics tool. And they built an audience of musicians who feel heard, not marketed to.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech (for the devs)
&lt;/h2&gt;

&lt;p&gt;Fretlist is built with Next.js on Vercel, Supabase for auth and data, and Resend for emails. I built an admin dashboard to track every user's activity — songs added, setlists created, play mode usage, last login. It also has a built-in mailing system with user segmentation so I can email specific groups directly from the dashboard.&lt;/p&gt;

&lt;p&gt;The whole thing was built in about two months of nights and weekends. Claude Code did a lot of the heavy lifting — I used to be a frontend developer, but with AI tooling I'm shipping full-stack features faster than I ever could alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm not building new features right now. I'm talking to users, learning why people don't activate, and posting value content to grow my audience organically. The product is good enough. Distribution and activation are the bottleneck.&lt;/p&gt;

&lt;p&gt;My target: 100 Activated Core Users. That's 100 musicians who have 15+ songs, 3+ setlists, and actually use Fretlist on stage. I'm at zero right now. That number will tell me if this thing has legs — not signups, not page views, not Threads likes.&lt;/p&gt;

&lt;p&gt;If you're building a side project and think "if I just add one more feature, people will come" — they won't. I learned that the hard way. Ship it, talk to people, and let the data tell you what to build next.&lt;/p&gt;




&lt;p&gt;If you're a musician and this sounds useful: &lt;a href="https://fretlist.com" rel="noopener noreferrer"&gt;fretlist.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're a dev building a side project: I'm happy to share more. Ask me anything.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>marketing</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>I'm a gigging musician who got tired of Google Docs, so I built my own chord sheet app</title>
      <dc:creator>Dear John</dc:creator>
      <pubDate>Sun, 15 Feb 2026 14:54:42 +0000</pubDate>
      <link>https://dev.to/dearjohnmusic/im-a-gigging-musician-who-got-tired-of-google-docs-so-i-built-my-own-chord-sheet-app-1ga1</link>
      <guid>https://dev.to/dearjohnmusic/im-a-gigging-musician-who-got-tired-of-google-docs-so-i-built-my-own-chord-sheet-app-1ga1</guid>
      <description>&lt;p&gt;I've been playing guitar and singing at weddings, festivals, and small venues for over 15 years. I've also been a developer for most of that time. You'd think I would've solved my chord sheet problem earlier.&lt;/p&gt;

&lt;p&gt;But no — for years I kept my songs in Google Docs. Some in Apple Notes, some in iA Writer. Even Evernote for a while. A few printed and stuffed in a binder. Every gig meant 30 minutes of chaos: finding the right files, checking capo positions, rebuilding setlists.&lt;/p&gt;

&lt;p&gt;This year I finally decided to build something.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Fretlist&lt;/strong&gt; is a web app for musicians to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store songs with lyrics and chords&lt;/li&gt;
&lt;li&gt;See chords displayed above the lyrics (like a proper chord sheet)&lt;/li&gt;
&lt;li&gt;Transpose on the fly&lt;/li&gt;
&lt;li&gt;Build setlists for gigs&lt;/li&gt;
&lt;li&gt;Access everything on stage from phone/tablet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's intentionally simple. Apps like BandHelper and OnSong exist, but they're packed with features I don't need (MIDI, backing tracks, expense tracking). I just wanted my chord sheets organized.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; (App Router)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; (Postgres + Auth)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind + shadcn/ui&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt; for hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is encrypted client-side (AES-256) so I can't read your songs even if I wanted to. And you can export all your data anytime — no lock-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking for early users
&lt;/h3&gt;

&lt;p&gt;I'm opening up Fretlist to &lt;strong&gt;20 musicians&lt;/strong&gt; who want to try it for free. If you use it and give me feedback, you keep Pro access forever.&lt;/p&gt;

&lt;p&gt;If you're a developer who also plays music (or vice versa), I'd love to hear from you: &lt;a href="https://fretlist.com" rel="noopener noreferrer"&gt;https://fretlist.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>music</category>
      <category>saas</category>
      <category>ai</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
