For operators
A platform that runs
while you sleep.
Persistent S1 alert bar, FEFO inventory, refunds + RMA, reorder dashboards, customer CRM, finance suite, and a daily backup posture on independent infrastructure.
Admin dashboard
One landing page. Persistent S1 alert bar across every admin screen.
The admin shell renders a left sidebar, an active-session indicator, and a persistent S1 alert bar on every page. The landing dashboard groups a "Work" row (items to ship, items to order, active issues), an "Activity" row (orders today, revenue today, AOV, 7-day fulfillment rate), a top-of-mind issue list, and an oldest-unshipped mini table. A 60-second JSON poll feeds the same compute function that server-renders the page, so polled and rendered views cannot drift.
The alert bar runs six parallel COUNT queries per render and surfaces what the operator must look at first.
Flagged orders
Orders pulled out of the standard queue for operator review.
Email send failures
Transactional emails the platform attempted but the SMTP path rejected.
Webhook outbox failures
Outbound webhook deliveries that have exhausted retry budget.
Out-of-stock SKUs
SKUs with zero released-lot inventory remaining.
Refunds > 48h
Refund requests aging beyond the 48-hour internal SLA.
Adjustments > 24h
Pending inventory adjustments past the 24-hour threshold.
Orders, refunds, RMA, packing
Back-of-house order surface with lot reassignment, per-line refunds, and printable packing slips.
Status tabs, filters, bulk actions, and CSV with strict-whitelisted filenames. Refunds know which rail to call. RMAs carry a five-status workflow with per-line receive forms. The packing slip prints the canonical RUO disclaimer in the footer.
Orders index + CSV
Status tabs, full search and filter, inline mark-paid / cancel / resend-email, per-row checkboxes for bulk actions, and a 10,000-row CSV export with addresses, totals, line items, payment references, and tracking metadata.
Order detail + lot reassignment
Header, totals, addresses, line items, compliance acks (verbatim, collapsible), fulfillment, payment, status history, refunds, and raw webhook payload. Lot reassignment moves units between released lots in a single transaction.
Per-line, per-rail refund
Refund form with optional shipping and tax refund amounts, lot-aware restock checkboxes, and rail-aware behavior. Card calls the Bankful refund API; Venmo, crypto, and manual record only. Refund IDs follow USPP-RFN-YYYYMMDD-XXXXXX.
RMA workflow (5 statuses)
Statuses: requested, approved, rejected, received, closed. Per-line receive form captures qty received and condition (sellable / damaged / quarantine); sellable units restock to a chosen released lot.
Packing slip with lot footer
White-background printable HTML page that joins line items with the lots they shipped from. The canonical RUO disclaimer prints in the footer.
Cold-chain quote rejection
A single admin action cancels the order, restocks the inventory, and records an audit entry — covering the case where the freight quote comes back unacceptable after order intake.
FEFO inventory + lots
Five-status lot lifecycle. Vendor-lot lock at receive. Recall coverage that stays truthful.
Inventory is tracked at the SKU level and at the lot level. Lots carry a five-status lifecycle — pending_inspection, released, quarantine, recalled, expired. Only released lots are FEFO-allocated, and the vendor lot number is locked at receive time so the (internal lot, vendor lot) pairing is immutable.
A single internal lot can receive multiple physical deliveries through a lot_deliveries timeline with idempotency keys against double-submits. The reconcile drift detector compares on-hand against the sum of inventory_lots.qty_remaining and offers per-row corrections written to the stock ledger. Recall is one POST with a required reason that auto-redirects to a CSV listing every researcher who shipped from that lot.
Inventory index
Every SKU with on-hand quantity (color-coded), low threshold, active lot count, newest lot number, earliest expiry, and an inline adjust form. Adjustments at or above a configurable absolute threshold route to a pending-approval queue.
Cycle count + reconcile
Cycle count accepts SKU,COUNTED_QTY with session notes and produces a per-SKU variance report. Reconcile compares qty_on_hand against inventory_lots.qty_remaining for per-row correction.
Approval queue (different-actor)
Approve and Reject are disabled when the requesting and reviewing admin are the same person — a different-actor enforcement at the UI layer.
Recall workflow
POST /:id/recall with a required reason. Auto-redirects to a CSV listing every researcher who shipped from that lot — for outreach and audit.
Reorder, purchase orders, margin
Velocity-driven reorder recommendations. One-click PO. Per-order × per-lot margin export.
A reorder dashboard pulls from a single reorderRecommendations() compute path. Purchase orders carry their own status, ID format, and receive-shipment flow. Margin reporting joins line items to lots to orders, with NULL where a lot has no recorded cost.
Reorder dashboard
Columns include 30-day and 90-day velocity, days-left, and recommended quantity, with a one-click "Create PO" button. The same compute path the dashboard renders is the path the recommendations use.
Purchase orders
Status: pending, ordered, received, cancelled. PO ID format USPP-PO-YYYYMMDD-XXXXXX. Five fixed line slots per PO; receive-shipment forms create inventory_lots rows and propagate cost-per-unit for margin reporting.
Margin CSV
Per-order × per-lot export joining order_line_lots, inventory_lots, and orders — gross margin per line, NULL when a lot has no recorded cost. Default 30-day window with ?from/?to override.
Customer CRM
Per-researcher context comparable to a light support desk.
Notes, tags, tasks, communications, lifetime-value rollup, churn-risk flag. Every soft-delete writes to the customer audit log. Engagement events from the email provider ingest via signed webhook into the same customer record. A privacy-scrub path soft-deletes notes, hard-deletes tags and tasks, and nulls communications subjects and bodies on request.
A referrals dashboard buckets responses (friend, reddit, forum, discord, google, podcast, other) with other-text answers and a CSV export. Tier changes write to customer_tier_audit with reason and timestamp.
Notes
Free-form notes with pin, follow-up date, and soft delete. Every delete is audited.
Tags
Canonical flags (vip, watch, chargeback_risk, do_not_contact, international, churn_risk) plus custom tags; idempotent add via partial unique index.
Tasks
Per-researcher follow-up tasks with due date, snooze, assignment, completion timestamps, and a cross-researcher task queue at /admin/tasks.
Lifetime value + churn risk
Nightly recompute of lifetime_value_cents, order_count, and a churn_risk flag (no login in 60 days or no order in 90 days).
Finance, tax, journal exports
An immutable financial postings ledger. Period-filtered reporting. QuickBooks IIF export.
The finance surface is built on an append-only postings ledger with reversal chains for refunds and corrections. Reporting is period-filtered: sales by rail, sales tax, revenue by SKU, revenue by researcher, and 1099-K view. The journal viewer shows the ledger directly and supports controlled manual adjustments.
QuickBooks export is an IIF file with configurable account mapping (Sales:Storefront, Sales Tax Payable:TX, Shipping Income, Sales Discounts, Refunds & Returns, per-rail clearing accounts). Texas 6.75% tax computes when the shipping address state is TX; the refund path mirrors the original collection as tax_refunded.
Immutable postings
Append-only ledger with reversal chains. Manual adjustments enter through a controlled form; nothing is mutated in place.
QuickBooks IIF export
Configurable account mapping for per-period journal import. Per-rail clearing accounts let the operator reconcile each processor independently.
Texas 6.75% tax
Computed in lib/tax.js when the shipping state is TX; mirrored on refund as tax_refunded.
Period-filtered reporting
Sales by rail, sales tax, revenue by SKU, revenue by researcher, 1099-K view — each filterable by date window.
Automation cadence
A documented cron and background-job table.
Vercel-native cron for daily jobs; a Zeus n8n bridge for sub-daily polling that exceeds the Hobby-tier cron cap; a nightly regression-detector remote agent; and a daily Postgres backup with watchdog on independent infrastructure.
/api/cron/expiry-alertEXPIRY_ALERT_DAYS of expiring; pulls aging stock forward in fulfillment./api/cron/reconcile-inventoryqty_on_hand vs inventory_lots; emails operators on discrepancies./api/cron/finance-backstop/api/cron/back-in-stock-followupsUSPP-Cron-SolSweep → /api/cron/sweep-solana-pendingUSPP-Cron-WebhookDispatch → /api/cron/dispatch-webhooksUSPP-Venmo-Confirm (workflow 55hzqjIqHbbQJlbP)/api/payments/venmo/confirm.trig_01UFsdKZvthzQt7ErP58hoaYpg_dump/mnt/user/main_files/USPP Backup/ on Zeus. Belt-and-suspenders against the Vercel/Neon PITR window. 30-day retention.tools/competitor-scraper/). Pricing and assortment intelligence.Connected systems
Ten integrations. One platform.
Application hosting, transactional email, payment rails, analytics, automation, and a self-hosted backup posture on independent infrastructure.
Want a tour of the back of house?
It's the part most platforms hide. Email the team for a walk-through, or shop the storefront if you're researcher-side.