GEOFF KELLY.
← ALL WORK
WRK//0022024 to now

Zenith Kids Platform.

The full technology stack for a 501(c)(3) youth nonprofit I founded: public site, web app, Rust API, email service, and a native iOS app.

ROLE

Founder and sole engineer

STATUS

Site live, platform in beta

FOR

Volunteers, families, tutors, and staff

YEAR

2024 to now

The problem.

Zenith Kids is a nonprofit I founded that supports vulnerable youth in Charlotte and Middle Tennessee. Nonprofit software is usually a pile of spreadsheets, six SaaS subscriptions, and a prayer. I wanted the organization to run on one coherent platform, so I built it.

Serving minors raises the bar on everything. Age gating, guardian consent, data privacy, and auditability are not features you bolt on later. They shape the whole architecture.

What I built.

  • A Rust backend with roughly 226 route handlers across 39 versioned modules: volunteering, events with QR check-in, tutoring, donations, messaging, and staff administration. 181 SQL migrations, every one reversible, and CI proves the round trip on every push.
  • Role-based access control defined as a Rust enum of about 50 permissions, mirrored to the database and synced on boot. If code and database disagree in production, the server refuses to start. I would rather have a failed deploy than a silent permission hole.
  • A native SwiftUI iOS app, about 39,600 lines of Swift with zero third-party dependencies. Sign in with Google is hand-implemented OAuth with PKCE rather than an SDK import. Concurrent token refreshes coalesce into a single flight. Keys live in the Keychain, device-bound.
  • A volunteer time clock that closes the loop: scan a QR ticket at the door to check in, scan again to check out, and hours are awarded automatically with an idempotency guard so nobody double-dips.
  • The public site at zenithkids.org, live today, with privacy-first analytics that send nothing until a visitor consents, and advertising signals permanently disabled because the audience includes families and kids.
  • A separate stateless email microservice reachable only over internal networking, authenticated with HMAC-signed requests carrying timestamps and replay-guarded nonces.

Engineering notes.

  • Passwords hashed with Argon2id at OWASP-recommended parameters; a detected refresh-token replay revokes every session for that user
  • Sensitive PII encrypted at rest with AES-256-GCM under domain-separated keys, so one compromised key category leaks nothing else
  • COPPA-aware account model: under-13 accounts are guardian-managed with no login credentials at all, and age checks are always computed server-side
  • Audit log records every state-changing operation with actor, target, and before/after snapshots
  • CI runs formatting, clippy with warnings as errors, tests against live Postgres and Redis containers, cargo audit, and gitleaks secret scanning on every push
  • Staff access to sensitive records is break-glass by design: it requires a narrow permission plus a written reason, and always writes an audit row
Zenith Kids public website homepage
PUBLIC SITE // LIVE AT ZENITHKIDS.ORG
Zenith Kids donation page with tier selection
DONATION FLOW
Zenith Kids native iOS app welcome screen
NATIVE IOS APP // SWIFTUI, ZERO DEPENDENCIES
Zenith Kids site on a phone-sized screen
MOBILE // 390PX
NEXT // WRK//003

Martha's Mission