How I Built a Personal Ops Dashboard with Next.js, Supabase, and AI
A look inside the private Next.js dashboard I built to manage 13 live sites — site status monitoring, personal AI, offline-capable notes, multi-tenant architecture, and more.
Why I Built It#
When you're running multiple web projects simultaneously — each with its own domain, database, analytics, and user base — managing everything becomes its own part-time job. I was constantly switching between Vercel, Supabase, Google Analytics, email, and three different todo apps. Nothing was connected.
So I built a private ops dashboard at wonsukchoi.co — a single Next.js app that centralizes everything I need to manage my projects. This post covers what's in it, the technical decisions behind it, and what I learned.
What's Inside#
The dashboard is organized into five tab groups. Here's what each one does.
System: Site Status Monitor#
The most immediately useful feature monitors all 13 of my live sites on a 30-second polling interval, checking two things per site:
HTTP reachability — a HEAD request to each domain with a 5-second timeout. Any response is "up"; a timeout or network error is "down."
Supabase DB health — a HEAD request to each project's PostgREST endpoint (https://<ref>.supabase.co/rest/v1/). Since multiple sites share the same Supabase instance, I deduplicate by project ref — 13 sites resolve to just 5 unique DB checks. Any HTTP response, even a 401, confirms the DB is reachable.
The widget also tracks domain expiry dates with color-coded urgency: green beyond 60 days, yellow at 30–60, orange at 14–30, red under 14. Dates are editable inline and persisted to localStorage.
Tools: Personal AI#
A private chat interface connected to OpenRouter — Claude Sonnet 4.5, Claude Opus 4.5, GPT-4o, GPT-4o Mini, and Gemini 2.0 Flash. Model switching is live mid-conversation. Responses stream token-by-token using the Vercel AI SDK.
Having model selection in-context is genuinely useful: draft quickly with a fast model, switch to Opus for anything that needs deeper reasoning.
Content: Journal and Notes#
Journal is an AI-assisted daily writing space. Notes is a persistent reference system — nested category hierarchy, optional per-note password protection, bulk move/delete, image uploads to Supabase Storage, and an offline sync queue so writes aren't lost when the network drops.
फ्रीलांस
क्या इसमें मदद चाहिए?
मैं migration, नए प्रोडक्ट और performance fixes में मदद करता हूँ।
संपर्क करें →