Skip to content

Side product · Church CRM

Flock

Every child known. Every absence followed up.

A phone-first CRM that runs a church’s Sunday school: attendance, home visits, follow-ups and moving kids up a class each year. It covers about 650 people across 29 classes.

Built solo: product, design and engineering.

Flock home screen in Arabic: attendance rate, kids who need follow-up, and home visits waiting for approval
Flock follow-up list in Arabic: kids who missed recent meetings, with call and WhatsApp buttons
Flock analytics in Arabic: servant attendance, lesson preparation and visits, plus attendance by class
Children, servants and leaders
~650
Classes, every week
29
Roles, each with its own access
6
Automated test files
260

The journey.

  1. 01

    Idea

    Everything lived in a Google Sheet. Nobody could take attendance at a busy door, visits weren’t recorded, and kids who stopped coming went unnoticed.

  2. 02

    Spec

    Mapped six roles, from child to priest, and wrote 16 short specs. Each one says the problem, the decision, and what’s left out.

  3. 03

    Build

    An Arabic-first Angular app with offline QR attendance, home visits with approvals, reports for servants, and passkey sign-in.

  4. 04

    Migrate

    Moved thousands of real attendance and visit records off Google Sheets without stopping the weekly service.

  5. 05

    Iterate

    98+ pull requests driven by servants' feedback, like one-tap WhatsApp messages for absent kids, offline visit logging and a health dashboard.

Product decisions.

Security shouldn’t lock out real users
Tying each account to one phone blocked more real members than strangers, and admins spent their time on recovery. I removed it and kept passkey sign-in.
Sign-up that works with messy names
Names on file rarely matched how people typed them, so a strict check sent members to an admin. I relaxed it and the bottleneck went away.
The person who can check is the one who approves
Family admins approve home visits because they actually know the families. Leaders further away could only rubber-stamp them.
No automatic actions that can’t be undone
Moving every child up a class can’t be reversed. A scheduled job ran before leaders had decided, so now someone reviews and confirms it.
Monitoring without personal data
Free hosting gives no logs, so I built a small health dashboard to catch failures. It never stores request bodies or personal IDs.

How I think about it.

Design for the moment it’s used
A servant at a church door with forty kids arriving can’t type names into a list, so Flock’s QR attendance works offline. Masroof had to log an item in under 10 seconds, in a store with weak signal.
Remove what gets in the way
In Flock I removed phone binding and a strict name check. Both sent real members to an admin instead of into the app. My Rashi skips sign-up entirely: a private link takes a couple straight to editing.
Let the right person approve
In Flock, only family admins approve home visits. They’re the ones who know the families.

Built with

  • Angular
  • PrimeNG
  • PWA
  • Node.js
  • Express
  • Prisma
  • MongoDB
  • Passkeys (WebAuthn)
  • Cypress

How I build: I write the spec and the plan, AI coding agents write code against them, and nothing ships unless the tests pass.

More work.

Let’s build something.

Open to remote product engineering and senior front-end roles. Email is the fastest way to reach me.