Personal Projects

Things I build for myself.
And others.

A collection of web apps, Android apps, and browser extensions I’ve designed, built, and shipped end to end.

Selected work

Personal projects

Seven products I designed, built, and shipped on my own time.

The Kitáb-i-Aqdas study companion homepage
Web Live · theaqdas.org

Kitáb-i-Aqdas Study Companion

A cross-referenced study website for the Kitáb-i-Aqdas that links the Synopsis & Codification to the underlying verses, questions-and-answers, and explanatory notes — turning a dense text into something you can actually navigate.

What’s interesting A hand-built concordance connecting hundreds of passages, written in vanilla PHP with no framework — and still held to a professional bar with PHPStan static analysis and a PHPUnit test suite. It’s been quietly serving readers at theaqdas.org for years.

  • PHP
  • PHPStan
  • PHPUnit
  • Vanilla JS
Generated devotional reading program
Web CI/CD · DigitalOcean

Holy Day & Feast Program Generator

Generates randomized devotional reading programs for Bahá’í Holy Days and Nineteen Day Feasts. Pick an event, set the number of readings and a maximum length, and it assembles a print-ready program — readings distributed round-robin across authors, with reading-time estimates and a full admin CMS behind it.

What’s interesting PHP 8.5 + MySQL on vanilla PDO, with a real deployment pipeline: merging to main runs the PHPUnit suite and, only if it passes, auto-deploys to a DigitalOcean LAMP droplet via GitHub Actions. No manual steps.

  • PHP 8.5
  • MySQL
  • GitHub Actions
  • DigitalOcean
Job tracker showing applications pulled from Notion
Web Chrome

Job Tracker

A personal job-search cockpit: browse and edit interview Q&A answers, and track every application pulled from a Notion workspace, enriched with the matching Gmail threads (confirmations, rejections, interview invites). A companion Chrome extension shows the stage of any job posting you’re viewing as a colored dot on the toolbar.

What’s interesting Node/Express glued to two real integrations — the Notion API and the Gmail API. The extension writes new jobs straight into a structured Notion database, so saving a posting while browsing and reviewing it later are the same source of truth.

  • Node.js
  • Express
  • Notion API
  • Gmail API
  • Chrome Extension
Bahá'í Prayers app — categories Bahá'í Prayers app — reading a prayer
Android On Google Play

Bahá’í Prayers

An Android app for exploring and reading prayers organized by category, each with author and word count, HTML-rendered text, and beautiful imagery. Users can even upload and crop their own images for any prayer.

What’s interesting Privacy-first by design — it uses the modern, permission-less Android Photo Picker, so it never asks for storage access. Built in Kotlin with a CI/CD pipeline on Jenkins and Bitrise, and published on Google Play.

  • Kotlin
  • Android
  • Jenkins
  • Bitrise
Ruhi Quote Memorizer — quote viewer Ruhi Quote Memorizer — quote list
Android On Google Play

Ruhi Quote Memorizer

An Android app for memorizing sacred writings from the Ruhi books. Drill down from books to quotes into a distraction-free memorization viewer, with search and full light/dark support.

What’s interesting Kotlin/Android held to a strict engineering workflow: every change goes through a branch and pull request, and merges are gated on both unit and instrumented tests passing in CI. Shipped on Google Play.

  • Kotlin
  • Android
  • CI Tests
Football Match Tracker Chrome extension popup
Chrome Open source

Football Match Tracker

A Chrome extension inspired by the FotMob mobile widget: upcoming fixtures for your favorite clubs and national teams, grouped by date, with crests, kick-off times, live scores, and a toolbar badge counting today’s matches. Configurable kickoff notifications keep you posted in the background.

What’s interesting It stitches two data sources — football-data.org for fixtures and FotMob for live scores — and caches results for an hour to stay within free-tier rate limits. Match filtering and date logic are covered by a Jest test suite.

  • JavaScript
  • Chrome Extension
  • REST APIs
  • Jest
Movie Night Tracker Kanban board
Web Local-first

Movie Night Tracker

A local-only Kanban board for organizing home movie nights. Drag each guest’s card across six columns — To Invite through Attended — search TMDB for the movie (poster, release date, synopsis included), and archive the whole night to History with one click, ready for the next one.

What’s interesting Zero npm dependencies. It runs on Node 22 using the brand-new built-in node:sqlite module and global fetch — a single node server.js and everything persists to one local SQLite file.

  • Node 22
  • node:sqlite
  • TMDB API
  • Vanilla JS