Mezzanine Admin

Admin

Source connections, refresh readiness, and the system tables that support the customer mapping and calculation rules.

Current Source

Local bootstrap snapshot

Dashboard is reading the local gitignored bootstrap JSON files on this machine.

ready

First Run Checklist

Supabase database

Connected

Postgres is connected.

Optional Admin lock

Optional later

Open setup mode is active. Add MEZZANINE_ADMIN_SETUP_KEY later to require an unlock key.

Credential encryption key

Ready

API tokens can be encrypted before storage.

Teamwork credentials

Validated

Configured from Admin plus Vercel env vars. Last validated Aug 28, 2026, 6:10 AM.

Xero credentials

Retest

Setup is saved, but the latest test or pull failed. Run Test connection after checking the saved values.

First live data pull

Pulled

At least one live source pull completed.

Calculation output

Run calculations

Official calculation rows are not produced yet.

Source Connections

Supabase/Postgres

DATABASE_URL is configured.

ready

Bootstrap snapshot

No bootstrap rows are staged in Postgres.

missing

Teamwork

Teamwork setup is configured from Admin plus Vercel env vars. Run selected pull to load live rows.

configured

Xero

Xero setup is saved, but the latest test or pull failed. Retest from Admin after checking credentials.

error

Official calculations

The dashboard is still adapted from bootstrap output, not official Mezzanine calculation runs.

not started

Manage source setup

Open credentials, OAuth, connection tests, and selected source pulls.

Source Setup

Background Jobs

Webhook refresh

Daily around 10:00 PM Central during daylight time

0 3 * * *

Processes queued Teamwork and Xero webhook events, then recalculates if a source pull completed.

/api/jobs/webhook-refresh

Daily source refresh

Daily around 6:10 AM Central during daylight time

10 11 * * *

Pulls Teamwork time, Xero on cadence, PTO Google Sheet rows, PTO Teamwork sync, then calculation output.

/api/jobs/daily-source-refresh

Maintenance repair

Yearly safety check

0 0 1 1 *

Reapplies safe database tables and indexes used by source refresh and dashboard reads.

/api/jobs/apply-maintenance

Webhook Queue

No webhook events have been received yet.

Data Stores

TableRowsStatusDetail
bootstrap_records0emptyNo rows stored yet.
customers0emptyNo rows stored yet.
people0emptyNo rows stored yet.
person_cost_rates0emptyNo rows stored yet.
source_raw_records0emptyNo rows stored yet.
teamwork_time_entries0emptyNo rows stored yet.
xero_invoice_lines0emptyNo rows stored yet.
profitability_monthly_customer0emptyNo rows stored yet.
calculation_runs0emptyNo rows stored yet.

Environment Keys

Teamwork and Xero credentials can come from Vercel env vars or Admin Connection Setup.

Connection setup mode

Keep MEZZANINE_CREDENTIAL_KEY set so saved tokens are encrypted in Postgres.

Add MEZZANINE_ADMIN_SETUP_KEY later when you are ready to require an unlock key for this page.

Supabase Postgres URL
DATABASE_URL

Postgres reads and imports

Set
Optional Admin unlock key
MEZZANINE_ADMIN_SETUP_KEY

Optional lock for Admin connection setup

Optional
Credential encryption key
MEZZANINE_CREDENTIAL_KEY

Encrypted API token storage

Set
Teamwork domain
MEZZANINE_TEAMWORK_DOMAIN

Alias: TEAMWORK_DOMAIN

Teamwork domain from Vercel env vars

Set
Time-entry lookback
MEZZANINE_TEAMWORK_LOOKBACK_MONTHS

Alias: TEAMWORK_LOOKBACK_MONTHS

Time-entry lookback from Vercel env vars

Set
Teamwork API token
MEZZANINE_TEAMWORK_API_TOKEN

Alias: TEAMWORK_API_TOKEN

Teamwork API token from Vercel env vars

Set
Xero Client ID
MEZZANINE_XERO_CLIENT_ID

Alias: XERO_CLIENT_ID

Xero Client ID from Vercel env vars

Optional
Xero Tenant ID
MEZZANINE_XERO_TENANT_ID

Alias: XERO_TENANT_ID

Xero Tenant ID from Vercel env vars

Optional
Xero Client secret
MEZZANINE_XERO_CLIENT_SECRET

Alias: XERO_CLIENT_SECRET

Xero Client secret from Vercel env vars

Optional
Xero Refresh token
MEZZANINE_XERO_REFRESH_TOKEN

Alias: XERO_REFRESH_TOKEN

Xero Refresh token from Vercel env vars

Optional

Bootstrap Files

FileLocalLocal RowsPostgres Rows
customers.jsonPresent69Unavailable
people.jsonPresent28Unavailable
time-entries.jsonPresent25,325Unavailable
invoice-lines.jsonPresent0Unavailable
current-dashboard-output.jsonPresent381Unavailable
current-dashboard-debug.jsonPresent37Unavailable

Import Runs

Latest Bootstrap Import

Jun 26, 2026, 12:06 AM

bootstrap-2026-06-25T17:06:34.681Z

pto

google_sheets_import · Aug 28, 2026, 6:10 AM · 0s

completed

No detailed count summary was recorded for this run.

teamwork

pull · Aug 28, 2026, 6:10 AM · 12s

completed
Time entries

Connection

Source API responded

Time entries

2,540 pulled, 2,540 saved, 2,540 people linked, 2,540 customers linked, window 20260801 to 20260827

teamwork

pull · Aug 28, 2026, 5:01 AM · 3s

completed
Time entries

Connection

Source API responded

Time entries

318 pulled, 318 saved, 318 people linked, 318 customers linked, window 20260825 to 20260827

teamwork

pull · Aug 28, 2026, 4:00 AM · 3s

completed
Time entries

Connection

Source API responded

Time entries

316 pulled, 316 saved, 316 people linked, 316 customers linked, window 20260825 to 20260827

teamwork

pull · Aug 28, 2026, 3:01 AM · 3s

completed
Time entries

Connection

Source API responded

Time entries

307 pulled, 307 saved, 307 people linked, 307 customers linked, window 20260825 to 20260827