Case study
A church website, with the office built in.
A public church website for sermons, events, giving and visits — backed by a role-based dashboard for member records, requisitions and website content.
At a glance
- Client
- ECWA Goodnews 1, Masaka
- Scope
- Website + operations dashboard
- Users
- Congregation + 6 staff roles
- Stack
- Next.js · PostgreSQL · Prisma
01
12
Public routes
02
06
Staff roles
03
07
Step member registration
04
$0
Monthly software stack
01The brief
The work behind a Sunday.
Masaka, Nasarawa State, Nigeria
A growing congregation generates a surprising amount of administration: member records, departmental requisitions, event flyers, sermon links, giving details and prayer requests.
When those live in notebooks, spreadsheets and WhatsApp threads, the church office spends its week chasing information instead of serving people. On the public side, first-time visitors needed to know what to expect, how to give, where to find the church and how to reach the pastoral team — without making a phone call first.
We scoped one system with two front doors: a public site the congregation and visitors could use, and a role-based dashboard the church office could trust.
02The build
Two front doors. One source of truth.
The public site and the dashboard share the same database and settings. Update the service time, bank details or pastor's message once and both sides stay current.
A church home online
Everything a visitor or member needs before and after Sunday — without calling the office.
- Home & service times — A warm welcome, the next-service countdown and the weekly gathering schedule.
- Sermons & events — A YouTube-backed sermon archive plus event listings with flyers, dates and venues.
- Ministries & gallery — Fellowships, departments and a managed photo gallery for life at the church.
- Giving & visits — Bank details with copy-to-clipboard, a plan-your-visit flow and a prayer-request form.
- Always current — Service times, hero content, pastor message and social links are edited in the dashboard.
- Mobile-first & installable — Responsive layouts, dark mode and a PWA with an offline fallback for low bandwidth.
An office that runs on it
A secure, role-aware dashboard for the people, money and content behind the church.
- Role-based access — Admin, Finance, Elder, Worker, Pastor and Editor — each sees only what their role allows.
- Member records — Seven-step registration with spouse and children linking, duplicate checks and passport uploads.
- Requisition pipeline — Submitted → Approved → Paid → Completed, with receipts, rejection reasons and finance permissions.
- Website CMS — Sermons, events, ministries, gallery, service times, bank details and pastor message.
- Users & notifications — Account setup by email, in-app notifications, web push and profile/password controls.
- Audit history — Sensitive actions are recorded, and every server action re-checks the current role.
Security is part of the build.
Sessions, permissions, uploads and sensitive actions are protected on the server — not hidden behind a client-side check.
03A closer look
The site, not a mockup.
Screens captured from the delivered build — the public pages on desktop and mobile.



Responsive by default
The same content, built for a phone in the pew.
Most of the congregation arrives on a phone, often on a slow connection. The layout, navigation and forms are designed for that first — then scaled up to desktop.
- Thumb-friendly navigation and forms
- Fast, image-optimised pages
- Installable PWA with offline fallback
- Dark mode for low-light reading
04Under the hood
A small stack with room to grow.
Chosen to keep the monthly cost low without cutting corners on reliability, security or the experience.
Built to run on Vercel and a managed Postgres database.
Frontend
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
Data
- PostgreSQL
- Prisma 7
- Neon / Supabase
Services
- Cloudinary
- Resend
- Web Push
Auth & forms
- JWT
- bcrypt
- Zod
- React Hook Form
UI & tables
- TanStack Table
- Recharts
- Radix UI
- shadcn/ui
Delivery
- Vitest
- GitHub Actions
- Vercel
Security built in
Not bolted on after launch.
- JWT sessions in httpOnly, SameSite cookies
- Edge middleware gates the dashboard
- Server-side role checks on every action
- Rate limits on login, reset and uploads
- HSTS, CSP and frame-ancestors headers
- Upload allowlist: JPG, PNG, WEBP and PDF
- Zod validation on forms and server actions
- Vitest suites plus CI checks on every push
05What changed
Less chasing. More serving.
The measure is not page views. It is how the office and the congregation get things done after launch.
06Services used
The pieces behind the build.
Need a site with a back office behind it?
Tell us what your team is still doing by hand.
We will scope the public side and the internal system together.
More case studies available on request
