Things I Shipped

Web applications, APIs, developer tools, and open-source libraries. Each project is a technical case study — architecture decisions, hard bugs, performance trade-offs, and what I'd do differently.

TypeScript React Node.js Python PostgreSQL Redis Docker AWS

The Full Catalogue

  • Palettify UI — an AI-powered design token generator showing colour palette extraction and CSS output 8:14 YT 🚀 Live
    React · Web App · Design Tools

    Palettify

    Solo · 6 weeks · Open Source

    An AI-powered design token generator that extracts cohesive colour palettes from any image, URL, or prompt and exports them as CSS custom properties, Tailwind config, or Figma tokens. Built a custom perceptual colour clustering algorithm (CIELAB Delta-E) to avoid the muddy median colours that k-means produces on photos. The backend is a Node.js REST API with a Redis cache layer for repeat URL lookups; the frontend is React with Zustand state and a canvas pipeline for image decoding. Achieved sub-200ms palette generation for cached requests. Handles 4,000+ daily active users on a $12/month VPS.

    • React 18
    • TypeScript
    • Node.js
    • Redis
    • Canvas API
    • Zustand
    • CIELAB
  • Conduit dashboard — a webhook relay and inspection tool showing incoming payloads and replay controls 11:38 YT
    Node.js · Developer Tool · API

    Conduit

    Solo · 4 weeks · Open Source

    A self-hostable webhook inspection and replay tool — essentially a developer-oriented alternative to ngrok/Hookdeck for local webhook debugging. Exposes a public HTTPS tunnel to localhost, captures payloads with full headers and body, stores them in SQLite with a 30-day TTL, and allows one-click replay with optional header/body mutation. Built the tunnel using a WebSocket reverse proxy — each client opens a persistent WS connection and the server fans incoming HTTP requests down it. The hardest part was making the replay system idempotent when the original endpoint had changed between capture and replay.

    • Node.js
    • TypeScript
    • WebSockets
    • SQLite
    • Vue 3
    • Docker
  • Typemark editor — a distraction-free Markdown editor with live preview and typography controls 7:05 YT ⭐ 1.2k Stars
    Electron · Desktop App · Writing Tool

    Typemark

    Solo · 8 weeks · MIT License

    A distraction-free Markdown editor for macOS and Windows built on Electron and CodeMirror 6. Focus mode dims everything but the current paragraph; the typography panel lets you swap font stacks, leading, and measure without leaving the editor. The live preview renders via remark with a custom plugin chain for footnotes, smart quotes, and callout blocks. File I/O is handled through Electron's native dialog API with an autosave debounce. The hardest part: making CodeMirror feel like a native text editor on macOS (scrolling, cursor blink rate, system font rendering). 1.2k GitHub stars without promotion — it hit Hacker News front page the week it launched.

    • Electron
    • TypeScript
    • CodeMirror 6
    • React
    • remark
    • CSS Houdini
  • Siftlog terminal UI — a structured log explorer with real-time filtering and JSON parsing 6:29 YT
    Python · CLI Tool · DevOps

    Siftlog

    Solo · 3 weeks · PyPI Package

    A terminal-based structured log explorer built with Python and Textual. Reads JSON, NDJSON, and plaintext log files (or stdin) and presents them in a panelled TUI with real-time filtering, field inspection, and value frequency histograms. Supports log levels, timestamp range queries, and JMESPath expressions for nested field extraction. The core parsing pipeline is a streaming generator — no full file load into memory — so it handles multi-GB log files without blinking. Published to PyPI; hit 8k downloads in the first month entirely through word of mouth in the Textual Discord.

    • Python 3.12
    • Textual
    • JMESPath
    • NDJSON
    • Streaming I/O
    • PyPI
  • Relay dashboard — a lightweight pub/sub message broker showing topic monitoring and subscriber metrics 14:02 YT
    Go · Message Broker · Infrastructure

    Relay

    Solo · 10 weeks · Open Source

    A lightweight pub/sub message broker written in Go — a learning project that became production-worthy. Implements MQTT-lite over WebSocket with a topic tree stored in a radix trie for O(k) subscribe/publish matching. Persistence uses an append-only log with periodic snapshot compaction — a simplified Raft-inspired approach without multi-node consensus. A React dashboard shows live topic throughput, subscriber counts, and message latency percentiles. Sustains 50,000 messages/second on a single core at less than 10ms p99 latency. Built primarily to understand why Kafka's architecture is the way it is.

    • Go
    • WebSockets
    • Radix Trie
    • Append-Only Log
    • React
    • Prometheus
  • Quillform builder — a conversational form builder with conditional logic and analytics 9:47 YT 💼 SaaS
    Next.js · SaaS · Full-Stack

    Quillform

    Solo · 12 weeks · Indie SaaS

    A conversational form builder — questions display one at a time like a dialogue, with animated transitions between steps. Built a visual conditional logic editor (drag-and-drop DAG) that compiles to a JSON ruleset evaluated client-side. Backend is a Next.js API route layer over PostgreSQL with row-level security for multi-tenancy; Stripe integration for subscription billing. The performance challenge: the form runtime bundle had to be under 12kb gzipped for embedding on third-party sites. Achieved 9.8kb by writing a custom micro-renderer instead of using React.

    • Next.js 14
    • TypeScript
    • PostgreSQL
    • Stripe
    • Supabase
    • Tailwind CSS
    • Vercel
  • Archivist UI — a personal knowledge base with semantic search and automatic tag generation 18:55 YT
    Python · AI / ML · Knowledge Base

    Archivist

    Solo · 7 weeks · Self-Hosted

    A self-hosted personal knowledge base with semantic search. Articles, links, and notes are ingested and chunked; a local sentence-transformers model generates embeddings stored in pgvector. The search interface uses cosine similarity retrieval with a re-ranking pass. Tag generation is automatic: a small classifier trained on my own notes assigns categories without manual labelling. The React frontend is a SPA served from a FastAPI backend. The hardest problem: making semantic search feel fast — solved by pre-warming the embedding model on startup and caching frequent query vectors in Redis.

    • Python
    • FastAPI
    • pgvector
    • sentence-transformers
    • React
    • PostgreSQL
    • Redis
  • Parcl CLI — a zero-config monorepo task runner showing parallel task execution and dependency graph 12:40 YT 📦 40k/mo
    Node.js · CLI · Build Tooling

    Parcl

    Solo · 5 weeks · npm Package

    A zero-config monorepo task runner — reads package.json scripts across workspaces, resolves inter-package dependencies automatically via a DAG, and runs tasks in parallel up to the topological limit. Outputs a live ASCII dependency tree during execution so you can see which tasks are blocked on which. Written in Node.js with no runtime dependencies in the core; the graph implementation is a hand-rolled topological sort with cycle detection. 40k monthly npm downloads. Compared favourably in several blog posts to Turborepo for simple monorepo setups.

    • Node.js
    • TypeScript
    • DAG / Toposort
    • Worker Threads
    • npm Workspaces

No projects found

Try a different keyword, or clear the search to browse all projects.