Release notes
Every shipped change to the SimpliLeads dashboard. No silent updates.
Added next-auth Google provider. Allowlist (lib/auth.ts): thefirmla@gmail.com, simplileads@gmail.com, and any *@digitalboutique.ai address. The signIn callback rejects non-approved emails before the adapter touches the DB. First-time digitalboutique.ai sign-ins default to role dbai; thefirmla / simplileads default to admin. /sign-in/error renders a friendly message for blocked accounts. Magic-link email remains as a fallback.
Vercel project digitalboutique/simplileads-final deployed to https://simplileads-final.vercel.app. DATABASE_URL, AUTH_SECRET, AUTH_URL, and CRON_SECRET set in production env; remaining integration credentials (BatchDialer, GHL, Calendly, Stripe, Anthropic, transcription) still pending — dependent panels render AwaitingConnection until each lands.
Admin Disputes + Reconcile pages. Cross-source reconciliation snapshot exposes dashboard-side counts beside upstream totals so a 24h drift is obvious. Tenancy test (pnpm test:tenancy) creates ephemeral clients and asserts cross-tenant lead access is impossible, the dispute-filing tenancy guard catches cross-tenant leadIds, and the leaderboard_rankings table exposes no client names. pnpm build green; pnpm typecheck clean.
Tenant-scoped portal pages. ROI panel reads GHL won-value vs client spend. Live qualified-lead feed shows the 10 most recent leads with score and delivery latency. Anonymized leaderboard surfaces rank and percentile only — never competitor names. Dispute flow validates the lead belongs to the authed client before insert. Build-status widget reads from build_phases / deliverables / milestones.
Pluggable transcription provider (Deepgram default, AssemblyAI alt). Claude scoring pipeline uses prompt caching on the SimpliLeads rubric (qualification/compliance/script-adherence/tone, 0-100). Cron picks unscored calls every 2 min and chains qualified leads into the GHL delivery flow. Coverage climbs toward 100% once ANTHROPIC_API_KEY + TRANSCRIPTION_API_KEY are set.
BatchDialer cron poller, GHL outbound delivery with sub-60s latency logging, GHL inbound webhook for pipeline updates, Calendly invitee webhook, and Stripe subscription/invoice webhook. Every integration falls back to AwaitingConnection while its credentials are missing; sync_jobs records every run. vercel.json declares the cron schedule.
Drizzle migrations applied to Neon; integrations + sync_jobs + changelog_entries tables live. recordChangelogEntry helper writes the DB row and appends CHANGELOG.md in one call. /changelog renders entries from the live database.
Initial scaffold of the SimpliLeads Live Operations Dashboard: Next.js + Drizzle + Neon, magic-link auth (admin/dbai/client roles), and the SimpliLeads Cobalt + DBAI dark chrome design system.