Legend
Operations
Time & Billing
Session Tracking
Dev Activity
Finance
Proposed
🗄
PostgreSQL 16 Instance
deploy@147.182.219.223 · Docker container: mission-control-db
Database
mission_control
User: mc_app · Managed via Alembic migrations
Schema · Current
public
20 tables · All Mission Control data
Operations
clients
projects
developers
client_retainers
client_epic_overrides
Time & Billing
time_entries
invoices
invoice_line_items
repo_mappings
Session Tracking
claude_sessions
session_activity
session_prompts
session_responses
session_tickets
Dev Activity
commits
pull_requests
jira_issues
jira_transitions
Finance (Plaid)
transactions
accounts
plaid_items
categories
categorization_rules
⚠
No explicit schema segmentation today
All 20 tables share
public. As new data domains are added (scraped content, etc.), introducing named schemas keeps the namespace clean.
Schema · Proposed
content
Scraped & ingested external content
✦ New
Job Configuration
scraper_jobs
name (PK) · source_type · cron_expression
site_config (JSONB) · collector_config (JSONB)
enabled · created_at · updated_at
site_config (JSONB) · collector_config (JSONB)
enabled · created_at · updated_at
Ingested Content
content_items
id (PK, serial) · job_name (FK)
item_id · source_url · title
content (TEXT) · content_type
published_at (TIMESTAMPTZ)
scraped_at (TIMESTAMPTZ)
status · metadata (JSONB)
content_length · error_message
item_id · source_url · title
content (TEXT) · content_type
published_at (TIMESTAMPTZ)
scraped_at (TIMESTAMPTZ)
status · metadata (JSONB)
content_length · error_message
Run History
scraper_runs
id (PK, serial) · job_name (FK)
triggered_by · started_at · completed_at
items_found · items_new · items_skipped
status · error_message · duration_ms
triggered_by · started_at · completed_at
items_found · items_new · items_skipped
status · error_message · duration_ms
💡
Migration path from SQLite
The existing
scraper.db on Hetzner maps directly: scraper_jobs → content.scraper_jobs, job_runs → content.content_items + content.scraper_runs.
At a Glance
Current state vs. proposed addition
PostgreSQL Instance
1
Containerized on datastudios-apps droplet (DO · nyc1 · $16/mo)
Databases
1
mission_control — all DataStudios operational dataCurrent Schemas
1
public — 20 tables, 5 logical domains, no namespace separationProposed Schemas
+1
content — 3 tables for scraped content, run history, and job config