Projects

Personal projects I can discuss openly. Production work appears separately as evidence-based case studies.

Featured

LifePulse + Job Radar

Creator and sole developer

A local-first personal operating system with an evidence-driven job-search assistant. It combines tasks, calendar context, reminders, projects, relationships, and an application pipeline with first-party ATS ingestion and structured job-fit scoring.

Architecture walkthrough

How the system stays useful and trustworthy

A modular monolith keeps the product operable by one developer while separating interactive requests, durable state, background work, and model-assisted judgment.

  1. 01

    Capture & clients

    React web surfaces and a Kotlin Multiplatform companion collect explicit user intent.

  2. 02

    Domain API

    Typed modules own tasks, scheduling, relationships, projects, and career workflows.

  3. 03

    Durable state

    PostgreSQL stores status, timing, claims, model runs, and append-only audit history.

  4. 04

    Workers

    Idempotent jobs handle recurrence, source ingestion, catch-up, scoring, and notifications.

  5. 05

    Constrained AI

    Hosted or local models propose classifications and summaries against verified facts.

  • AI output is inspectable and never the system of record.
  • External writes require an explicit action or approval boundary.
  • Retries, sleep, reboot, and duplicate workers are normal operating conditions.

Outcome: Actively used as my personal system. Durable schedules, claims, audit history, model invocations, and notifications remain in PostgreSQL, while AI produces constrained proposals rather than becoming the source of truth or submitting applications autonomously.

TypeScriptReactExpressPostgreSQLKotlin MultiplatformLLMsOllama

Slingshot

Solo developer

A small browser game built directly on the Canvas API, with mouse and touch controls, projectile motion, animated targets, collision detection, scoring, and responsive rendering.

Outcome: Built as a focused exploration of a real-time render loop, input handling, simple game physics, and interaction design without a game engine.

TypeScriptCanvas APIVite