← Back

Personal Projects

Shipped Products

A photo/video memory management app. Upload, organize into albums, and share memories with anyone via shareable links.

Key Features

  • Photo/video upload with automatic compression (3 renditions)
  • Workspaces for organizing memories (personal/shared)
  • Albums with dates, locations, descriptions
  • Timeline view of your life
  • Instant link sharing with role-based access
  • Video streaming via Cloudflare Stream

Tech Stack

  • Frontend: React, TypeScript, Vite, TailwindCSS, Radix UI
  • Backend: Supabase (PostgreSQL + RLS + Edge Functions)
  • Storage: Backblaze B2, Cloudflare Stream
Visit Website

A life journaling app that helps you name your years, capture monthly highlights, and build a story of your life—not just a timeline.

Key Features

  • Monthly highlight logging with emoji tags
  • Name each year with theme words
  • Vision boards with goals across life categories
  • Timeline view (dots grouped by decade)
  • Flipbook mode (browse years like a book, export to PDF)
  • Year comparison (side-by-side)
  • Shared timelines (with partner/family)

Tech Stack

  • Frontend: Next.js (App Router), TypeScript, TailwindCSS
  • Backend: Supabase (PostgreSQL + RLS)
  • Sync: Local-first with cloud sync

A modular, encrypted personal data organizer. Think Notion meets password manager—tabs for different life categories with sensitive fields encrypted client-side.

Key Features

  • Modular tabs/subtabs (pick what you need during setup)
  • Client-side encryption for sensitive fields
  • Dashboard overview of all your data
  • Spreadsheet-like interface for structured data
  • Categories: personal, financial, health, etc.

Tech Stack

  • Frontend: Next.js (App Router), TypeScript, TailwindCSS
  • Backend: Supabase (PostgreSQL + RLS)
  • Security: Client-side AES encryption with user-derived keys

Visual gym progress tracker. Upload a 360° rotation video and automatically extract front/side/back views. Watch your body transform over time.

Key Features

  • Upload 360° video → auto-extract 4 views (front, sides, back)
  • Time-lapse playback of progress photos
  • Side-by-side comparison across dates
  • Quick daily logging (under 1 minute)
  • Timeline view of all progress entries

Tech Stack

  • Frontend: Next.js (App Router), TypeScript, TailwindCSS
  • Backend: Supabase (PostgreSQL + RLS)
  • Processing: FFmpeg (client-side frame extraction)

Internal Tools

A Windows desktop app for voice transcription. Speak, and it transcribes using Whisper, then optionally processes through AI agents.

Key Features

  • Speech-to-text via Whisper (local GPU or OpenAI API)
  • AI agent processing (OpenAI) with custom prompts
  • Hotkey-driven profiles (different prompts for different tasks)
  • Wake word activation ("Hey Jarvis" style)
  • Screenshot integration (send screen context to AI)
  • Webhook dispatch (integrate with other tools)
  • TTS responses (AI speaks back)

Tech Stack

  • App: Python, Tkinter
  • Speech: FasterWhisper, OpenAI Whisper API
  • AI: OpenAI GPT
  • Audio: Porcupine (wake word), soundcard

A local Python tool that renames photos using EXIF data. Extracts date and geocodes location to POI or City/State.

Key Features

  • Smart renaming: YYYY.MM.DD_{AI Description}_{Location}.jpg
  • Vision LLM (Llama 3.2-Vision) generates descriptive names from image content
  • Duplicate detection via perceptual hashing (pHash)
  • Web UI with drag-and-drop, preview table, one-click apply
  • Undo support (manifest tracking)
  • Safe operations (dry-run default, recycle bin deletion)
  • Google Maps integration for location names
  • SQLite cache (reduces API calls by ~90%)

Tech Stack

  • Backend: Python, FastAPI
  • Frontend: HTML, JS
  • Vision: Llama 3.2-Vision (image description)
  • APIs: Google Maps (Geocoding, Places, Timezone)
  • Processing: imagehash (duplicate detection), SQLite cache

A FastAPI service that compresses images to a target bits-per-pixel (BPP). Uses ML to predict optimal compression quality, reducing iterations needed to hit target file size. Powers photo compression in YourMemory.

Key Features

  • BPP-based compression targeting (not just quality slider)
  • 3 renditions per upload: thumbnail (320px), compressed (1920px AVIF), download (1920px JPEG)
  • Supports JPEG, PNG, HEIC, AVIF, WebP, DNG/RAW
  • LightGBM model predicts optimal quality_start (<1ms inference)
  • 36% fewer iterations, 35-40% faster processing vs naive approach
  • Model trained on 800+ real compression results (R² = 0.876 for AVIF)
  • Fallback to heuristics if model unavailable
  • Web UI for testing + REST API for integration

Tech Stack

  • Backend: Python, FastAPI
  • ML: LightGBM (gradient boosting)
  • Processing: Pillow, pillow-heif
  • Infra: Railway