Data Admin
What is loaded, where each table comes from, and what it takes to point the same screens at live Amazon data. 20 collections, 35,148 rows, generated deterministically from a fixed seed at Aug 27, 10:10 PM UTC.
Tables loaded
20
One per app collection
Total rows
35K
35,148 exactly
Generated at
Aug 27, 10:10 PM
UTC, fixed seed
Data source
Supabase
Live tables, 60s cache
Last automation run
Aug 27, 9:00 PM
Buy box loss on a top-200 ASIN
Automation success
88%
74 of 84 runs clean
Rules enabled
13 of 14
Disabled rules never evaluate
Alerts open
161
New, acknowledged or snoozed
Dataset inventoryRow counts computed at render, not stored
| Collection | Rows | What it feeds |
|---|---|---|
| brands | 14 | Brand and segment rollups, vendor group and seller SKU prefixes |
| products | 1,448 | ASIN master: cost, price, MAP, cube, hazmat, lifecycle |
| fulfillmentCenters | 15 | Node list and cube capacity behind Fulfillment Centers |
| inventory | 4,351 | ASIN x FC positions, aging buckets and days of supply |
| capacity | 25 | Monthly storage limits, forecast and IPI on Capacity & Aging |
| restock | 2,371 | Reorder points and coverage on Replenishment |
| purchaseOrders | 460 | Vendor POs, ack SLA and fill rate |
| shipments | 400 | ASN accuracy, OTIF and carrier detail |
| chargebacks | 300 | Operational chargebacks and dispute deadlines |
| shortageClaims | 170 | Shortage claim pipeline and filing windows |
| priceClaims | 110 | Cost variance claims against PO price |
| returns | 9,600 | Customer returns, disposition and reimbursement eligibility |
| reimbursements | 900 | FBA reimbursement detection and window expiry |
| salesTraffic | 11,584 | Monthly ASIN revenue, glance views and buy box on Sales & Traffic |
| fees | 1,448 | Per-ASIN fee stack and net PPM on Fees & Profit |
| buyBox | 1,448 | Buy box share, offer counts and MAP violations on Pricing |
| catalogIssues | 220 | Suppression and attribute defects on Catalog Health |
| rules | 14 | Alert rule definitions, thresholds and recipients |
| alerts | 186 | Generated alerts feeding the Alerts Inbox |
| runs | 84 | Automation run history behind the audit trail below |
| Total | 35,148 | Across 20 collections |
Supabase mappingSnake_case in Postgres, camelCase in the app, one accessor between them
| Supabase table | App collection | Amazon source of record |
|---|---|---|
| brands | brands | Vendor group codes in Vendor Central, merchant profile via getMarketplaceParticipations |
| products | products | searchCatalogItems / getCatalogItem plus GET_MERCHANT_LISTINGS_ALL_DATA |
| fulfillment_centers | fulfillmentCenters | FC codes from GET_AFN_INVENTORY_DATA_BY_COUNTRY and getInboundShipments |
| inventory_positions | inventory | GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA plus getInventorySummaries (FBA Inventory v1) |
| capacity_limits | capacity | GET_FBA_INVENTORY_PLANNING_DATA for IPI, capacity limits from the Capacity Monitor export |
| restock_recommendations | restock | GET_RESTOCK_INVENTORY_RECOMMENDATIONS_REPORT |
| purchase_orders | purchaseOrders | Vendor Orders API getPurchaseOrders / getPurchaseOrder |
| shipments | shipments | Vendor Shipments submitShipmentConfirmations plus Fulfillment Inbound getShipments |
| chargebacks | chargebacks | Vendor Central Operational Performance chargeback export (no SP-API surface) |
| shortage_claims | shortageClaims | Vendor Central Payments invoice research export, reconciled against submitInvoices |
| price_claims | priceClaims | Vendor Central Payments price-claim export against cost on getPurchaseOrders |
| customer_returns | returns | GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA plus SAFE-T claim export |
| reimbursements | reimbursements | GET_FBA_REIMBURSEMENTS_DATA plus GET_LEDGER_DETAIL_VIEW_DATA for the discrepancy |
| sales_traffic | salesTraffic | GET_SALES_AND_TRAFFIC_REPORT, GET_VENDOR_SALES_REPORT, Data Kiosk salesAndTrafficByAsin |
| fee_snapshots | fees | getMyFeesEstimateForASIN plus GET_V2_SETTLEMENT_REPORT_DATA_FLAT_FILE actuals |
| buy_box | buyBox | ANY_OFFER_CHANGED notification, getItemOffers for on-demand checks |
| catalog_issues | catalogIssues | getListingsItem issues array plus LISTINGS_ITEM_ISSUES_CHANGE |
| alert_rules | rules | App-owned: thresholds configured here, no Amazon source |
| alerts | alerts | App-owned: derived on write and on cron from the tables above |
| automation_runs | runs | App-owned: ingestion and rule-evaluation worker telemetry |
Switching to live dataSix steps, no page changes
- 1Create the Supabase project in the region closest to the ingestion worker and record the project URL and service role key.
- 2Run the SQL in supabase/migrations to create the 20 tables above with their primary keys and indexes.
- 3Set NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY as Vercel environment variables on the production and preview scopes.
- 4Set DATA_SOURCE=supabase, which is the only switch the app reads to prefer live tables over the bundled dataset.
- 5Point the ingestion worker at the SP-API credentials (LWA client id, client secret and one refresh token per selling partner) and let it run one full backfill before the first cron cycle.
- 6Redeploy, then confirm the Data source tile above reads Supabase and that row counts in the inventory table match what the worker wrote.
The switch is one-way per environment, not per page. With DATA_SOURCE unset, or set to supabase without credentials, every page falls back to the demo dataset, so a walkthrough deck keeps working on a laptop with no network and a failed live query degrades to demo figures instead of an error screen. Any table the worker has not populated keeps its demo slice, which means a partial backfill still renders.
Audit trail20 most recent of 84 recorded runs
| Run | Rule | Started | Duration | Evaluated | Alerts | Emails | Status | Note |
|---|---|---|---|---|---|---|---|---|
| RUN-800102 | Buy box loss on a top-200 ASIN | Aug 27, 9:00 PM | 7,422 ms | 24,498 | 1 | 1 | SUCCESS | 1 alerts raised, digest batched by brand owner |
| RUN-800101 | Forecast exceeds capacity in next 60 days | Aug 27, 7:22 PM | 4,715 ms | 7,720 | 22 | 4 | SUCCESS | 22 alerts raised, digest batched by brand owner |
| RUN-800100 | Forecast exceeds capacity in next 60 days | Aug 27, 1:40 AM | 2,305 ms | 21,900 | 5 | 3 | SUCCESS | 5 alerts raised, digest batched by brand owner |
| RUN-800104 | Low stock: days of supply under floor | Aug 26, 4:14 PM | 13,867 ms | 23,512 | 27 | 3 | SUCCESS | 27 alerts raised, digest batched by brand owner |
| RUN-800103 | Shortage claim window closing | Aug 26, 10:08 AM | 3,374 ms | 7,011 | 29 | 4 | SUCCESS | 29 alerts raised, digest batched by brand owner |
| RUN-800105 | OTIF below Amazon's 95% requirement | Aug 26, 3:01 AM | 4,986 ms | 16,053 | 7 | 4 | SUCCESS | 7 alerts raised, digest batched by brand owner |
| RUN-800108 | Stockout imminent: under 10 days, no inbound | Aug 25, 7:41 PM | 11,309 ms | 5,760 | 8 | 4 | SUCCESS | 8 alerts raised, digest batched by brand owner |
| RUN-800106 | Listing suppressed or main image missing | Aug 25, 3:08 PM | 7,649 ms | 11,155 | 19 | 1 | SUCCESS | 19 alerts raised, digest batched by brand owner |
| RUN-800107 | Buy box loss on a top-200 ASIN | Aug 25, 5:31 AM | 6,339 ms | 3,363 | - | - | FAILED | SP-API 429 QuotaExceeded on getInventorySummaries: retried 3x, backed off |
| RUN-800109 | Low stock: days of supply under floor | Aug 24, 11:10 PM | 8,238 ms | 5,654 | 15 | 3 | SUCCESS | 15 alerts raised, digest batched by brand owner |
| RUN-800110 | Vendor PO acknowledgement SLA at risk | Aug 24, 1:42 AM | 3,051 ms | 13,093 | 4 | 1 | SUCCESS | 4 alerts raised, digest batched by brand owner |
| RUN-800111 | Listing suppressed or main image missing | Aug 24, 12:07 AM | 13,784 ms | 20,758 | 24 | 1 | SUCCESS | 24 alerts raised, digest batched by brand owner |
| RUN-800112 | Overstock: days of supply above ceiling | Aug 23, 7:56 PM | 4,087 ms | 6,757 | 1 | 1 | SUCCESS | 1 alerts raised, digest batched by brand owner |
| RUN-800113 | Stockout imminent: under 10 days, no inbound | Aug 23, 2:45 PM | 9,025 ms | 1,728 | 16 | 4 | SUCCESS | 16 alerts raised, digest batched by brand owner |
| RUN-800114 | OTIF below Amazon's 95% requirement | Aug 23, 7:26 AM | 3,772 ms | 20,662 | 29 | 4 | SUCCESS | 29 alerts raised, digest batched by brand owner |
| RUN-800117 | Aged inventory surcharge exposure | Aug 22, 9:54 PM | 13,607 ms | 21,960 | 13 | 1 | SUCCESS | 13 alerts raised, digest batched by brand owner |
| RUN-800115 | Chargeback dispute deadline inside 7 days | Aug 22, 7:48 AM | 3,441 ms | 2,131 | 26 | 4 | SUCCESS | 26 alerts raised, digest batched by brand owner |
| RUN-800116 | Buy box loss on a top-200 ASIN | Aug 22, 4:03 AM | 9,301 ms | 25,208 | 13 | 3 | SUCCESS | 13 alerts raised, digest batched by brand owner |
| RUN-800120 | Chargeback dispute deadline inside 7 days | Aug 21, 8:16 AM | 16,099 ms | 4,190 | 3 | 3 | SUCCESS | 3 alerts raised, digest batched by brand owner |
| RUN-800119 | Forecast exceeds capacity in next 60 days | Aug 21, 4:34 AM | 12,392 ms | 23,514 | 11 | 3 | SUCCESS | 11 alerts raised, digest batched by brand owner |
EnvironmentRead at request time, never bundled to the client
- NEXT_PUBLIC_SUPABASE_URL
- Project REST endpoint. Read by the data layer and by the ingestion worker.
- SUPABASE_SERVICE_ROLE_KEY
- Server-side key used for reads that bypass row-level security and for worker upserts. Never exposed to the browser.
- NEXT_PUBLIC_SUPABASE_ANON_KEY
- Fallback key when no service role is present. Read-only against RLS policies.
- DATA_SOURCE
- demo or supabase. Anything other than supabase, or missing credentials, serves the bundled dataset.
- RESEND_API_KEY
- Transactional email transport for alert digests.
- ALERT_FROM_EMAIL
- From address on every alert email, must be a verified sending domain.
- ALERT_TEST_RECIPIENT
- Override recipient. When set, every digest routes here instead of the rule recipients.
- CRON_SECRET
- Shared secret on the scheduler route, so only the platform cron can trigger a rule evaluation.
None of these are required to run the demo: with every variable unset the app serves the bundled dataset and no email is sent. Live alerting needs the four Supabase and Resend values (NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, RESEND_API_KEY, ALERT_FROM_EMAIL) plus CRON_SECRET before the scheduler route will accept a request.
Scope of this environment. It holds no Revelyst data and no Amazon credentials: there is no refresh token, no LWA secret and no Supabase project behind it. Every figure on every page comes from the bundled generator, which is seeded with a fixed value, so the same numbers render on every machine and on every reload. A screenshot pasted into a deck today still matches the app next month.