⚡ Command Center — Online & Mobile Build Spec

Full spec for hosting the Elev8 Command Center online, making it mobile-friendly, and migrating Quick Capture from the File System Access API to the Stylify backend.

Date: 2026-02-28
Author: Charlotte (COO)
Status: Shelf-ready — Phase 1 can start immediately
Assignee: Stitch (CTO) + Charlotte

Overview

The Elev8 Command Center is currently a local HTML file that Jason opens manually in Charlotte's Chrome. Two problems have emerged:

1. No mobile access. Jason can't quickly capture a task or check project status from his phone. The current File System Access API approach for Quick Capture is desktop-only by design.

2. Quick Capture is fragile. The File System Access API permission expires every time Chrome restarts, causing captured tasks to silently fail. This has lost at least one item already this session.

The solution: host the Command Center as a Vercel static site at command.stylify-ai.com, rebuild Quick Capture to POST to the Stylify backend API, and add proper mobile-responsive CSS. In Phase 2, sync action item checkbox state to Supabase so checking something off on your phone reflects on your desktop.

🚀

Phase 1 — Start Now No Migration · Can Start Today

Vercel deployment, mobile CSS, Quick Capture → backend API. No database changes. No production freeze conflict. Charlotte handles HTML/CSS; Stitch adds one new backend route.

🔄

Phase 2 — After Meta Approval

Migrate action item checkbox state from localStorage to Supabase for cross-device sync. Requires one new table and two API routes. Hold until production freeze lifts.

Phase 1 — Vercel Deployment + Mobile CSS + Quick Capture API

1a. Vercel Deployment Charlotte

The Command Center HTML file will be deployed as a standalone Vercel project, separate from the main Stylify frontend.

Steps

Domain note: Use command.stylify-ai.com now. After the getstylify.com migration completes, update to command.getstylify.com. No rush — the redirect will handle it.

Authentication

The Command Center displays internal operational data but no customer data or credentials. Simple protection is sufficient for Phase 1: Vercel Password Protection (available on Vercel's free tier via vercel.json). Jason sets a simple password once; the browser remembers it.

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [{ "key": "X-Frame-Options", "value": "DENY" }]
    }
  ]
}

Alternatively, Stitch can gate it behind Stylify JWT — but that's more friction than needed for an internal tool. Password protection is fine.

1b. Mobile-Responsive CSS Charlotte

The current file has a minimal @media (max-width: 600px) block that only adjusts padding. A proper mobile layout requires the following changes:

Tab Bar

Problem: 6 tabs in a horizontal bar overflow on small screens. Current fix is overflow-x: auto (sideways scroll). Fine for now, but not ideal.

Fix: On mobile, reduce tab labels to icons only (⚡ 🔗 📊 📄 📈 📨). Keep the icon+label on desktop. Use @media (max-width: 600px) to hide the text spans inside each tab button.

Action Items Cards

Problem: Expandable detail cards assume wide layout. Steps lists can overflow on narrow screens.

Fix: Ensure word-break: break-word on step items. Max-width on cards is already set correctly. Reduce font size on mobile from 15px → 14px for detail text.

Quick Access Portal Grid

Problem: Cards use a CSS grid with repeat(auto-fill, minmax(220px, 1fr)) — works fine on mobile already since it wraps. No change needed.

Quick Capture Tab

Problem: The Connect Inbox button and File System Access flow are desktop-only and meaningless on mobile.

Fix: After Phase 1 backend route is live, the Connect Inbox UI is fully replaced. New mobile-friendly form: Agent picker (dropdown), Priority picker (dropdown), Task title (text input, large tap target), Notes (textarea), Submit button. No file system involved at all.

Header

Problem: On mobile, the header-inner flex row wraps awkwardly — h1 and badges stack but with too much padding.

Fix: On max-width: 600px, reduce header padding to 16px 20px, reduce h1 font-size to 20px, hide the Charlotte note banner (it's operational info Charlotte reads, not critical for Jason on mobile).

1c. Quick Capture Backend Route Stitch

This is the only backend change in Phase 1. One new route that accepts a Quick Capture POST and writes the .md file to the inbox folder server-side.

POST /api/admin/capture
Creates an inbox .md file from a Quick Capture submission. Admin-auth required.

Request Body

{
  "agent": "Charlotte" | "Stitch" | "Pixel",
  "priority": "urgent" | "high" | "medium" | "low",
  "title": "string (required)",
  "notes": "string (optional)"
}

Server-Side Behavior

⚠️ Important note on file path: The Stylify backend runs on Railway, not the local machine. Railway doesn't have access to OneDrive. Two options:

Option A (Recommended): Store captured items in Supabase instead of writing .md files directly. Add a quick_captures table (id, agent, priority, title, notes, status, created_at). Charlotte reads from this table at session open via a GET /api/admin/captures?status=pending route instead of reading the file system. This is cleaner and more reliable than trying to write files from Railway.

Option B: Keep writing .md files, but use the Supabase Storage API as an intermediary (write to a Supabase Storage bucket, then sync to inbox). More complex, not recommended.

Stitch's call — either works. Option A is the cleaner architecture and sets up Phase 2 naturally. Charlotte's session-open process would need a small update to also check GET /api/admin/captures alongside the file-system inbox scan.

Frontend Changes to Command Center

Replace the File System Access API logic in sendCapture() with a fetch() call to /api/admin/capture:

Phase 1 Effort Estimate

2–3h
Backend route (Stitch)
Stitch
2–3h
Mobile CSS + frontend Quick Capture rewrite (Charlotte)
Charlotte
1h
Vercel deploy + domain (Stitch or Charlotte)
Both
~6h
Total Phase 1
Can start now

Phase 2 — Cross-Device State Sync (Post-Meta Approval)

Phase 1 leaves one gap: action item checkboxes (the "I've done this" toggles) are stored in localStorage, which is browser-local. If Jason checks off "Subscribe to Kit" on his phone, his desktop still shows it unchecked. Phase 2 fixes this by moving checkbox state to Supabase.

Freeze note: This phase requires a new Supabase table (migration). Hold until Meta App Review V6 is approved and the production freeze lifts.

Database Schema

-- Migration: command_center_state
CREATE TABLE command_center_state (
  id           uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id      uuid REFERENCES auth.users(id) ON DELETE CASCADE,
  item_id      text NOT NULL,          -- matches ACTION_ITEMS[].id
  checked      boolean DEFAULT false,
  updated_at   timestamptz DEFAULT now(),
  UNIQUE(user_id, item_id)
);

ALTER TABLE command_center_state ENABLE ROW LEVEL SECURITY;
-- Policy: users can only read/write their own state
CREATE POLICY "Own state only" ON command_center_state
  FOR ALL USING (user_id = auth.uid());

New Backend Routes

GET /api/admin/command-center/state
Returns all checked item IDs for the authenticated admin. Response: { checked: ["kit-subscription", "test-scorecard"] }
PATCH /api/admin/command-center/state/:itemId
Upserts checked state for a single item. Body: { checked: true | false }. Uses Supabase upsert on (user_id, item_id).

Frontend Changes

Phase 2 Effort Estimate

2h
Migration + backend routes (Stitch)
Stitch
1–2h
Frontend state sync (Charlotte or Stitch)
Both
~3–4h
Total Phase 2
Post-Meta only

Charlotte's Ongoing Responsibilities (Post-Launch)

The Command Center needs to stay current. Charlotte's session-close process already updates ACTION_ITEMS and the Charlotte Note. With the online version, the update workflow is the same — edit the HTML file and push to Vercel. The only new step is:

Build Sequence (Recommended)

#StepOwnerTimingDepends On
1 Stitch: Add POST /api/admin/capture backend route (Option A: write to Supabase quick_captures table) Stitch Now Nothing
2 Stitch: Add GET /api/admin/captures route for Charlotte to read pending captures at session open Stitch Now (same session as step 1) Step 1
3 Charlotte: Update Command Center HTML — mobile CSS, replace Quick Capture UI with API fetch, remove File System Access API code Charlotte Now (can run parallel with steps 1–2) Nothing (can prep; wire to API after step 1 deploys)
4 Stitch: Create Vercel project + configure command.stylify-ai.com subdomain in Namecheap Stitch Now Steps 1–3
5 Jason: Test on iPhone — Quick Capture, Action Items, Projects tab Jason After step 4 Steps 1–4
6 Stitch: Migration for command_center_state table + state sync routes Stitch Post-Meta approval Production freeze lifted
7 Charlotte: Wire frontend to state sync API (replace localStorage with API calls) Charlotte Post-Meta approval Step 6

Decisions Already Made

DecisionRationale
Phase 1 can start now despite production freeze No database migrations in Phase 1 (unless Stitch chooses Option A for captures, which is a new additive table — low risk). No changes to Instagram/Meta functionality. Purely additive.
Vercel static site, not Stylify admin panel Faster to ship. Charlotte can update it independently of Stitch. Phase 2 migration to admin panel is optional and lower priority than getting mobile access working.
Quick Capture → backend API (not file system) File System Access API permission expires on Chrome restart — fundamentally unreliable. Backend API works from any device, no permission needed.
Phase 2 state sync requires production freeze to lift New Supabase table = migration. Held per standing freeze policy.
Jason has no desire to switch from Anthropic Confirmed 2026-02-28. AI provider resilience analysis done. No portability work needed.

Total Effort Summary

~6h
Phase 1 total
Can start today
~4h
Phase 2 total
Post-Meta freeze
~10h
Full project
2 Stitch sessions
Bottom line: Phase 1 is a clean 1-session Stitch build (backend route + Vercel deploy) with Charlotte handling the HTML/CSS in parallel. No coordination overhead, no freeze conflict. Phase 2 is a 1-session add-on after Meta approves. Total: two sessions, and Jason has a mobile-accessible, reliable Command Center with no File System API fragility.

Created by Charlotte (COO) · 2026-02-28 · Charlotte Session BN