Skip to content
jk
All writing

· 7 min read

Building Daloy: a free worship app for the church I play in

Why I built a worship team app for Filipino churches, what it does, and the decisions behind shipping it on the web, Android and Windows — for free.

DaloyLaravelReact RouterFlutterPWA

I'm a software engineer during the week and a musician at church on Sunday. For a long time those two lives didn't overlap much — until I noticed how much of our worship team's week was spent fighting our own tools.

Chord charts lived in group chats. Setlists were rebuilt from scratch every week. Someone always had the old key. And on Sunday morning, keeping everyone on the same section of the same song came down to hand signals and hope.

Daloy is what I built to fix that. Daloy is Filipino for "flow" — which is exactly what a worship set should do.

Start with your own team

Daloy didn't begin as a product. It began as a fix for our own ministry: one shared library of songs, one place for the line-up, one screen everyone could follow.

Once it worked for us, the pattern was obvious. Other churches — especially small Filipino congregations with volunteer musicians — had the same friction. So I rebuilt it properly and opened it up.

What it does

The core is deliberately simple:

  • Song library — chords, lyrics and keys in one place. Transpose instantly, and read charts in letters or Nashville numbers, where chords become scale degrees that stay the same in every key.
  • Line-ups — build setlists for Sunday service, youth night or special events, reorder songs, and share the plan in seconds.
  • Live sessions — the leader starts a session and every teammate's screen follows along: section cues, song transitions and chord views, broadcast to everyone on stage.
  • Practice mode — rehearse at home with a built-in click, the bar you're on, and the chord coming next, so Sunday already feels familiar.
  • Export and present — chord sheets and setlists as PDF or PowerPoint, and lyrics on any screen for the congregation, with no extra hardware.

The newest piece is the chord helper. Long-press any chord on a chart and Daloy shows you how to play it — guitar, ukulele or piano — and lets you hear it in time with the click. It follows your capo and transposition, offers several shapes per chord, and has a left-handed neck. It's for the new guitarist on the team, or the keys player covering for someone on a Sunday.

Decisions that shaped it

Offline is not optional

Church Wi-Fi is famously unreliable, and the worst possible moment for an app to fail is the middle of a song. Charts are stored on the device, so a dropped connection doesn't stop the set. On the web, Daloy is a PWA: a service worker caches the app and IndexedDB (through Dexie) holds songs and line-ups, so you can install it to your home screen or Dock and it opens like a native app. The Flutter apps keep their own SQLite database with Drift.

I took it one step further for presenting lyrics. Some venues have no internet at all, so the presenting device advertises itself on the local network over mDNS/Bonjour and serves a WebSocket. A teammate's phone finds it, pairs with a 4-digit code, and drives the slides — no uplink required.

One account, every device

Worship teams are a mix of devices. The leader might be on a laptop, the band on phones, the vocalists on a tablet. So there's one account and your songs follow you everywhere:

  • the web app (React Router), installable as a PWA,
  • Android on Google Play,
  • Windows on the Microsoft Store,
  • and iPhone and iPad are coming soon — until then, Safari's Add to Home Screen works.

The store apps are built in Flutter. That gave me real store presence and native packaging without maintaining separate Android and Windows codebases.

Live sessions over WebSockets

Behind everything is a Laravel 13 API. When a leader starts a live session, Laravel Reverb broadcasts each change — the song, the section, the key, cues, notes, even handing the leader role to someone else — and every device in the session moves with it.

A chord helper you can hear

The chord helper doesn't ship audio samples. It synthesizes a plucked string and a decaying piano tone in code. The noise that gives the string its pluck comes from a seeded generator, so every note renders identically — and because I ported the same algorithm from TypeScript to Dart, the web and Flutter apps sound exactly the same.

Free, on purpose

This is the decision I get asked about most. Daloy has no subscriptions, no upsells and no trial that expires.

Ministry software shouldn't come with a monthly invoice.

Running it still has real costs — hosting, infrastructure and the time to maintain it — and I cover those myself. But worship music management is part of serving the Church, not a product to squeeze churches for. Small congregations are exactly the teams who need good tools the most and can afford them the least.

What building it taught me

Working on Daloy alone means I own every layer: product, design, the web client, the mobile builds, store releases and the servers. A few things stuck with me:

  1. Build for the worst moment. Designing for "Sunday, 9:58am, Wi-Fi down, new guitarist" made almost every decision easier.
  2. Real-time sync is a UX problem first. The hard part isn't sending events — it's making sure the leader always feels in control and nobody gets lost mid-song.
  3. Shipping to stores is its own discipline. Listings, review cycles and release notes take real time, and they're worth it: many church volunteers will only ever look for an app in their store.

I bring the same habits to my day job — the same care for the people on the other side of the screen, and the same bias for shipping something real.

If your team could use it, Daloy is free at daloy.pro.