Things got out of hand fast.

Two weeks ago I set up an AI agent on a Mac Mini. Just a simple assistant. Read my emails, maybe manage my calendar. Normal stuff.

Now it runs 10 automated jobs, posts daily to a 28K follower Instagram page, snipes tennis court bookings at 8:45 AM, monitors flight prices for my Europe trip, summarizes meeting transcripts, and manages a task board of everything we're working on together.

I had no idea what was running, when, or if it was working. So I told Ace to build himself a dashboard.

Mission Control Dashboard

What's in it

Seven screens. All data driven by JSON files that Ace updates as he works.

Team Structure shows Ace and his five sub-agents. Yeah, he has a team now. Forge builds code. Quill writes content. Scout does research. Sentry monitors systems. Pixel handles design. Each one runs on Sonnet 4 to keep costs down while Ace himself runs on Opus 4 for the hard stuff.

Memory is every piece of context Ace has stored. Daily notes, meeting summaries, project files, long-term memory. All searchable. I can filter by type and expand any document to read the full contents. This is how an AI agent remembers things across sessions.

Tools lists every integration we've connected. WhatsApp, Slack, Gmail, Google Calendar, Instagram Graph API, 1Password, browser automation, Brave Search, Vercel, and more. Each one shows its category and status.

Calendar is the one that surprised me. Full month view with every cron job plotted on the days it fires. Below that, a list of all scheduled jobs with their exact times and what they do. I can finally see at a glance that yeah, the tennis court sniper fires at 8:43 AM on Monday, Tuesday, and Wednesday. The ZDT post goes out at 8 AM daily. The cron status report hits my WhatsApp at 8:30.

Task Board

Task Board is a kanban. To Do, In Progress, Done. Every task shows who it's assigned to (me or Ace), priority level, and which project it belongs to. Ace updates this as we work. If I tell him to do something, it goes on the board.

Our Sites tracks every web property we've shipped. The blog, the mission control dashboard itself, an AppSumo prototype, the ZDT store, and the webchat interface. All with live URLs and status badges.

Systems Check shows the health of every piece of infrastructure. Gateway, Mac Mini, Tailscale VPN, SSH connections, WhatsApp, 1Password, Instagram API, Google OAuth, browser, Vercel, and the cron scheduler. Hit "Run All Checks" and everything lights up green, yellow, or red.

How it was built

One conversation. I described what I wanted, Ace built the whole thing, and deployed it to Vercel. Took maybe 30 minutes.

It's a single HTML file with vanilla CSS and JavaScript. No React, no build step, no framework. Data lives in JSON files in a /data directory. When Ace updates a task or adds a memory, he writes to the JSON and redeploys. Simple.

The design is dark mode with a sidebar nav. Clean. Minimal. Loads fast because there's nothing to load.

Why this matters

The problem with AI agents isn't capability. It's visibility. When your agent is running jobs at 3 AM, posting content while you sleep, and managing 16 different integrations, you need to be able to look at one screen and know what's happening.

Before this dashboard I was asking Ace "hey what cron jobs do we have" and "did the ZDT post go out today" multiple times a week. Now I just open a URL.

If you're running an agent that does more than answer questions, build yourself a dashboard. You'll sleep better.

What's next

The systems check page is currently simulated on the frontend. Next step is wiring it to actually ping each service and report real status. I also want to add a cost tracking screen showing daily API spend broken down by model and job.

The dashboard runs behind Tailscale on my private network. No public URL, by design. My agent's memory files contain too much sensitive data to put on the open internet.