Builds · a running log

Things I've built and shipped myself

I build to learn. Each of these started with a problem I or people around me had, and each went from idea to working product with Claude Code and Cursor. For every build I note the problem, the product calls I made and what's true about it today.

2025 · v1.4

Period Phase Calendar

A Chrome extension that shows menstrual-cycle phases directly on Google Calendar.

Live · Chrome extension
JavaScriptChrome Manifest V3Google CalendarAnalytics
Google Calendar week view with a colour-coded cycle-phase chip on each day, such as Building stamina and Peak confidence
Each day gets a phase and a suggestion, right inside Google Calendar
Used in 75+ countries, with about 35% conversion · rated 5.0★ on the Chrome Web Store.

Problem

Energy and focus change across a cycle, but calendars treat every day the same. Cycle-tracking apps live in a separate place from where people actually plan their weeks.

Product calls

  • Meet users where they plan. Instead of building another tracking app, it adds phases to Google Calendar so planning around your cycle needs no new habit.
  • Two inputs to start: last period date and period length. Setup takes seconds.
  • Privacy first: a published privacy policy, with permissions limited to Google Calendar.
  • Instrumented with analytics, then improved over four versions.
2025 – 2026

GRE Vocab

"Memorize 1,100 GRE words without hating it." A vocabulary product with a free tier and a paid plan.

Live · paid, with free tier
JavaScriptTailwindFirebase Auth + FirestorePaddle paymentsNetlify
GRE Vocab landing page: Hate memorizing? Focus on weak words.
The live landing page
GRE vocabulary made easy, Group 17 video thumbnail
One free walkthrough video per group on YouTube

Problem

Flashcards test words out of context, and learners keep re-reviewing words they already know while the hard ones slip through.

Product calls

  • Practise the words you get wrong. Missed words go into a "Weak" pile, and a second miss moves them to "Weakest". Three correct answers in a row clears a word.
  • Words in context: multiple-choice questions show each word the way it appears on the test, with a clearer example when you miss.
  • Packaging: free for the first 60 words with no card required, and $6/month for all 38 groups (1,100 words). There are only two plans: "that's the whole pricing page."
  • Distribution: a free 7-minute walkthrough for every group on its own YouTube channel, plus SEO articles such as most-tested words, confusing word pairs and Latin roots.
  • Covers the full business: landing page, sign-in, subscriptions, refund policy, terms and analytics.
Oct 2026

Buddy

A local-first AI voice companion for macOS. It speaks up before your calendar events, then listens and coaches you through starting.

In testing
Swift / SwiftUIEventKitwhisper.cpp (speech-to-text)Kokoro (text-to-speech)Ollama (local LLM)
Buddy's black-cat mascot in six states: idle, listening, to-do, celebrating, working, happy
Mascot states for each mode

Problem

Reminders notify you but don't help you start. People who struggle with executive function need something closer to a supportive friend: a voice that says what to do right now and listens to how you're feeling.

Product calls

  • Proactive, not reactive: it checks the calendar every 10 minutes and speaks once before each timed event, within a preparation window and quiet hours you choose.
  • Private and free by design: speech-to-text, the voice and the optional LLM all run on-device. There are no API keys, subscriptions or cloud accounts. It reads the calendar but never writes to it.
  • Works without AI: a rule-based coach handles the basics, and a local model (Ollama) can be switched on for real conversation.
  • A defined personality: a written system prompt sets the tone: "structure without pressure, direction without control, and encouragement without guilt."
  • Honest scope: it is a supportive assistant, not a therapist, and the README says to keep regular calendar alerts for time-critical events.
Oct – Dec 2025

Version

A versioning app for AI prompts: save every iteration, add notes, and compare any two versions side by side.

Live
React 19TypeScriptViteFirebaseText diffNetlify

Problem

When you're iterating on prompts, the best version gets lost. Playground history, docs and Slack threads don't tell you what changed between v3 and v7, or why.

Product calls

  • Diff first: choose any two versions and see exactly what changed.
  • Notes on every version, so the reasoning behind a change stays with it.
  • Accounts and sync with Firebase, so the history follows you across devices.
  • Prompt iteration was central to my AI product work, which is where the idea came from.
Aug – Oct 2026

Global Hub Map

An offline-first web app for finding your way around Kellogg's Global Hub, with directions written the way a friend would give them.

LiveDirections being walk-tested
TypeScriptVite PWADijkstra routingDevice compass & motionTests
Global Hub Map home screen: Where are you trying to get to? with a search box and categories such as Classrooms and Food and coffee
Live app: search or browse by category

Problem

The Global Hub is notoriously hard to navigate, and the floor is the whole problem. New students get lost between classes.

Product calls

  • No blue dot, on purpose. Browsers can't scan Wi-Fi or read the barometer, so real indoor positioning isn't possible. Instead the app asks one question: "Where are you now?" One tap gives the floor and a known starting point, which is more than any sensor could.
  • Use only what's reliable: the compass rotates the arrow, and the accelerometer estimates paces as a "you should be about there" hint. Both are opt-in, and the app never requests location.
  • The writing is the product: the building is a graph of 142 hand-written edges, each with a one-line version and a detailed version. A test keeps every displayed line at 16 words or fewer.
  • Honest about quality: every edge is marked unverified until someone walks it, and an arrival screen asks "Were the directions right?" so bad steps show up across reports.
Sep 2026

SkipCost

"A tiny guilt calculator for your calendar." It shows what skipping today's class actually costs you.

Built
TypeScriptReactCloudflare (vinext)

Problem

Skipping a class feels free in the moment. Tuition is an abstract number paid once a quarter.

Product calls

  • Make the cost concrete: quarterly tuition is divided by credits, then by class meetings, and the answer is shown for today's classes.
  • Make it yours: adjust credits and meeting counts, round meetings, and choose a display currency for international students.
  • A playful tone ("Pick your poison") keeps a nudge about money from feeling like a lecture.
Oct 2025 · v1.2

Dontscroll

A Chrome extension that breaks images and videos on Instagram so there's nothing to doomscroll.

Live · Chrome extension
JavaScriptChrome Manifest V3
Instagram with images removed and the Dontscroll toggle switched on
The feed with Dontscroll on

Product calls

  • Remove the reward, not the app: the feed's images and videos stop loading, so there's nothing to get pulled into.
  • One toggle, with no schedules or settings, because friction belongs on scrolling, not on the tool.
  • Shipped with its own privacy policy and store assets.
Feb 2026

The AI Epoch

An interactive history of AI from 2018 to 2026: 54 moments across 8 years and 10 categories, each with a practical note on what it can actually do.

Live
HTML / CSS / JS
The AI Epoch title screen: 54 events logged across 8 years and 10 categories
54 events across 8 years and 10 categories

Product calls

  • Capabilities, not hype: each milestone comes with a concrete, honest note, such as "writes a working Flask API from a description… but can't debug its own code when it breaks."
  • A single, fast, dependency-free page that's easy to share.
Sep 2026

GitHub Heatmap Widget

Your GitHub contribution graph on the macOS desktop, with pixel-art seasonal themes.

Open source
JSXÜbersichtGitHub CLI

Product calls

  • No token stored anywhere: it reuses the GitHub CLI you're already signed in to.
  • Five themes with small animations that respect macOS "Reduce motion". It can be dragged anywhere, and its position is remembered.
  • A rotating daily note about building, because the point is to keep building.
Mar 2025

Medicine Tracker

An iOS app for keeping track of medicines, with a daily view, a calendar and medicine scanning.

Prototype
Swift / SwiftUIiOS

What it does

  • A Today view of what to take now, and a calendar for history.
  • Scan a medicine to add it instead of typing.
  • Structured with SwiftUI's model, view-model and view layers.
May 2026

Mapmates

A private map of where your friends are, to the city level only.

Prototype
HTML / CSS / JS
World map with friend avatars pinned at the city level
Prototype with sample friends pinned by city

Product calls

  • Privacy as the default: locations are stored at city level only, and each map is private to your account.
  • Answers a simple question: "who do I know in this city?"

See the product work behind my roles

Case studies from Looppanel and Razorpay, each in a product strategy version and a design version.

View case studies →