Productivity OS
A personal productivity operating system embedded in this portfolio. A custom GTD engine with a passkey-secured admin app and a real-time public transparency dashboard. You're looking at it.
The Problem
Off-the-shelf task managers are black boxes: your effort disappears into a private app and nobody sees the work behind a finished product. I wanted a system that ran my actual GTD workflow — capture, clarify, organize, review — while doubling as a living, verifiable resume: a public window that proves what I'm building in real time, without ever leaking private tasks.
My Role
Sole architect and engineer. Designed the relational schema, the visibility model, the admin application, and the public read layer end-to-end, and embedded the whole system inside my existing portfolio so it deploys as one Next.js app.
Core Features
Full GTD Engine
Workspace → project → section → task hierarchy with a configurable status workflow (Inbox, Next Action, Waiting For, Blocked, Review, Completed, Someday), priorities, due dates, tags, subtasks, checklists, and a weekly review flow.
Passkey-Secured Admin App
A hidden gateway (reachable only via a secret nav sequence) guards a private admin app with credential + WebAuthn passkey login. Command palette, quick capture, focus mode, and a keyboard-first UI where every action is ≤ 3 keystrokes away.
Public Transparency Dashboard
A live /productivity page shows current projects, priorities, roadmap, activity feed, shipping velocity, and a 26-week activity heatmap — a resume that updates itself as work gets done.
Query-Layer Visibility Gating
Every public read passes through a single hardened query layer where a PUBLIC task inside a PRIVATE project never serializes. Private descriptions, email sources, and internal notes never leave the server.
Analytics & Focus Tracking
Executive dashboard with velocity trends, completion streaks, burndown, heatmaps, and focus-session (Pomodoro / deep-work) statistics computed server-side from the activity log.
Integrations
Two-way Google Calendar time-block sync and an email-to-task inbound pipeline (webhook with shared-secret auth and a subject-line parser for due dates, priority, and tags), feature-gated for safe rollout.
Screenshots
Tech Stack
Architecture Overview
Next.js 15 App Router with Server Actions handles both UI and mutations with no separate backend. Prisma models the workspace/project/section/task graph on Neon Serverless Postgres. Every mutation is a server action guarded by an admin check and validated with Zod before it touches the database. Authentication combines a credential login with WebAuthn passkeys. The public surface is served exclusively through a dedicated read module whose invariant is that visibility is enforced at the query level — public tasks require a public parent, soft-deleted rows are always excluded, and only whitelisted scalar fields are selected. Public pages use ISR (revalidate) so anonymous traffic never hits the admin path, and activity is logged on every state change to power the feeds, streaks, and heatmap.
Impact
Turned a static portfolio into a living, self-updating proof of work: visitors see exactly what I'm building, prioritizing, and shipping — in real time — while my private workload stays fully gated. Runs as a single deployment with zero external SaaS for task management.
What I Learned
Building a public/private system taught me to make visibility a query-layer invariant rather than a UI concern — one hardened read module is far safer than sprinkling `if (isPublic)` checks across components. Server Actions + Prisma + Zod made a surprisingly small, type-safe surface for a full CRUD app, and modeling the activity log as the source of truth for analytics meant streaks, velocity, and the heatmap all fell out of one table.



