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
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