Skip to content

Projects

Things I have designed, built, and shipped.

Firestore Rules Linter

Static analysis for security rules — flags permissive matches, missing catch-alls, and writes that trust request data.

firebasesecurityclinode

Markdown Editor Component

A dependency-light editor with live preview, syntax-highlighted code fences, and paste-to-upload images.

reactmarkdownui

Personal Blog & CMS

Statically exported Next.js site with a Firestore-backed dashboard for writing, publishing, and page composition.

next.jsfirebasetypescripttailwind

Sitemap & JSON-LD Toolkit

Generates sitemaps and structured data from your content model, and validates the output.

seotypescriptnext.js

Firestore Backup Cron

Scheduled export of every collection to Cloud Storage, with retention and a restore command.

firebasegcpbackupnode

Conventional Commit Linter

Git hook that enforces commit conventions and rejects the ones that say nothing.

gitclitooling

Image CDN Proxy

Cloudflare Worker that resizes and re-encodes images on the fly, with a signed-URL allowlist.

cloudflareworkersimagesperformance

Theme Toggle Without the Flash

Dark mode that respects the system setting and never flashes the wrong theme on load.

reactcssui

Reading Time Estimator

Word count that understands markdown — skips code fences, counts images, handles CJK text.

typescriptmarkdownnpm

Static Deploy Diff

Compares a local build against what is actually live and tells you whether your last deploy landed.

clihostingdevtools