Projects

coptic.io

2025 Live · MIT

Coptic Orthodox calendar and daily readings platform, built as community infrastructure and deliberately not monetized.

  • Astro
  • Cloudflare Pages
  • Hono
  • Cloudflare Workers
  • TypeScript

The Coptic calendar is a 13-month liturgical calendar that determines the daily readings from the Katameros. Every Coptic app that needs those readings ends up reimplementing the same date math, usually locked inside one application. coptic.io exists so that work happens once, in the open.

Architecture

Astro on Cloudflare Pages, a Hono API on Cloudflare Workers, and coptic-js — a zero-dependency core library that powers both the public API and the frontend.

Zero dependencies was a deliberate call

Fewer packages means a smaller attack surface, and it runs anywhere — Worker, browser, Node, someone else’s project — without dragging a tree behind it. If a dependency isn’t earning its place, it doesn’t go in.

The shared core wasn’t the plan

I built the API first, then put a frontend on top of it and found I was reimplementing the same calendar logic in two places. Extracting it was the fix, and it turned out to be the better architecture. The frontend and the API aren’t two implementations that have to be kept in sync — they’re two consumers of one.

What’s next

A multi-version CMS, so the platform can carry multiple translations. The goal is an open platform other people can build on, not a reader app competing with the Diocese’s.

Nofri

2025 Closed source · Not for profit

A music streaming platform for the Coptic community.

  • Bun
  • Hono
  • Prisma
  • PostgreSQL
  • Hetzner
  • Backblaze B2
  • Bunny CDN
  • React Native

Coptic hymns aren’t on Spotify. What exists is scattered across uploads, parish websites, and personal archives, with inconsistent metadata and no way to browse a repertoire. Nofri gives that body of music the infrastructure any other catalogue takes for granted.

Architecture

Self-hosted on Hetzner: Hono on Bun with Postgres and Prisma, and Backblaze B2 for object storage fronted by Bunny CDN. A native iOS app in React Native, and a creators portal in Vite and React. Auth is hybrid JWT with server-side refresh tokens.

There’s integration tooling that lets creators bring a catalogue they already own into the platform.

The hard part isn’t the streaming, it’s the economics

A media library grows without bound, and every hyperscaler prices egress like it’s a scarce resource. So the whole architecture is shaped around keeping cost per listener near zero: Hetzner instead of a managed cloud, B2 instead of S3, Bunny in front of it so origin reads stay rare.

Running it at community scale on a hobby budget is the actual engineering constraint. Most of the interesting decisions in this project are downstream of that one.