I built FourFold because I was tired of my life living in six different apps. A to-do list here, a calendar there, a habit tracker on my phone, my school's assignment portal in a tab I always forgot to check, a Pomodoro timer I'd bookmark and lose again. None of them talked to each other, and none of them actually helped me decide what to do — just where to write it down. So I started building the tool I actually wanted, on September 4th 2026, and it's grown into one of the biggest piece of software I've built end-to-end.
At its core, FourFold is a personal productivity app built around an Eisenhower matrix — the classic urgent/important quadrant framework — but wired directly into the rest of my life instead of living as an isolated list. Tasks in the matrix can link to real calendar time, so "important, not urgent" work doesn't just sit in a queue forever; it gets scheduled. A habit tracker sits alongside it with streaks, a full year's heatmap, and a stats view that computes current streak, longest streak ever, and rolling 30-/90-day completion rates off one shared calculation module, so the numbers on every screen actually agree with each other. The calendar does two-way sync with Google Calendar's API (multiple accounts at once, each with its own color-coded calendar picker), with a read-only ICS feed fallback for when OAuth isn't worth the setup — I parse and merge those feeds server-side so the client just sees normalized events either way. A Pomodoro timer runs with ambient sound and can drive Spotify playback directly through the Spotify Web API, so starting a focus session and starting music are the same click. And because I'm a student, there's a full school module: homework tracked against my actual bell schedule (period lookups, half-day and assembly-schedule presets, the works), merged with a live Schoology ICS feed so assignment due dates show up automatically instead of me copying them over by hand.
The part I'm most proud of is the assistant — an Anthropic-powered agent that reads my calendar, my tasks, and my habits, and actually builds me a schedule by finding real free blocks in my day, instead of just listing what's overdue. It's the difference between a tool that stores your obligations and one that helps you act on them.
A few of my friends use it too — about half of my advisory. That pushed some real engineering decisions I wouldn't have made building this for just myself. FourFold isn't a public multi-tenant SaaS product — it's one deployment gated by an explicit allowlist of Google account emails, so getting a friend on it means literally adding their email to the server's allowed-users list and redeploying. But once someone's in, their data is fully isolated: every piece of state is namespaced by email in Redis (fourfold:<email>:<namespace>), so my habits, my friends' habits, my matrix, and theirs never collide, even though it's all running on the same Vercel deployment and the same Redis instance. It's a deliberately small-scale trust model — closer to "invite your friends to your home server" than "sign up for an account" — which fit the project's size and let me skip building real multi-tenant infrastructure I didn't need yet.
Under the hood, it's React 19 and TypeScript on Vite, using Bun as the package manager and oxlint instead of Prettier for style enforcement. The backend is a handful of Vercel serverless functions — no persistent server, no separate API deployment, just api/*.ts files that Vercel routes to directly (with a few vercel.json rewrites to give OAuth callback URLs clean paths). Storage is Upstash Redis, accessed through one shared useRemoteState hook on the client that every feature's context calls into, so adding a new syncable data type is a one-line addition to a shared namespace union rather than writing a new fetch/cache/persist cycle from scratch. It's also a fully installable PWA now — Workbox-generated service worker via vite-plugin-pwa, offline app shell, real manifest icons — which took a bit more thought than I expected: the service worker's autoUpdate mode only checks for a new deploy on specific triggers like navigation, so I had to add proactive registration.update() calls on tab-focus and a timer to stop people getting stuck on stale cached builds after I ship a change.
What says the most about how this project actually gets built is the workflow, not just the stack. I develop FourFold almost entirely through Claude Code, using it as a full development partner rather than an autocomplete tool — but I run it the way I'd want a human collaborator to work: every feature ships as its own small, reviewable pull request instead of one giant dump of changes, every commit is DCO-signed, and I read and test what gets merged before it goes to main. When I open-sourced the project under MIT, I went through the process properly — a CONTRIBUTING.md, a security policy, issue templates, a real branch-naming convention for outside contributors, GitHub Discussions instead of cluttering the issue tracker with questions. It's a small personal app, but I wanted the process around it to look like something a real team could step into.
That discipline paid off almost immediately. A few weeks after the open-source release, I got a bug report that FourFold wasn't updating in one browser profile after a deploy while it worked fine in another — a classic service-worker staleness bug that's genuinely hard to reproduce on demand. Because the codebase was already organized into clean, isolated changes with a real history, I could trace it to one root cause, ship a nine-line fix, and cut a proper patch release for it — v1.2.1, following semantic versioning, tracked in a changelog instead of quietly patching main and hoping nobody noticed the inconsistency.
FourFold started as a way to stop losing track of my own life. It's still growing — the matrix, habits, calendar, Pomodoro, school tracking, and the scheduling assistant are all in daily use by me and my friends right now, and every new feature goes through the same small-PR, tested, documented process as everything before it.
Github Repo My Github Profile Fourfold Wiki Changelog MIT LICENSE
