Skip to content
Back to Sensei

Changelog

What's new in Sensei. We ship updates weekly.

·v1.3.1Latest

One price, everywhere — the founding-rate copy is gone

  • Killed every "founding rate / $29 before it lifts to $49 / locked forever" contradiction across the product. The story is now one flat plan, stated identically everywhere: first reading free, first month free, then $29/mo — everything unlocked, cancel anytime.
  • Public surfaces aligned: pricing, About, FAQ, /try, /signup, and the /launch letter all carry the same flat-rate line, and the SEO/OG metadata for each was rewritten to match.
  • In-app surfaces aligned: the upgrade modal, usage indicator, plan-reminder banner, and the /try paywall counter now say "Subscribe" against one price instead of "Lock the rate."
  • Lifecycle emails aligned: the Day-21 blind-read nurture and the prediction-confirmed CTA drop the disappearing-discount framing for the flat $29 offer.
  • Terms 7.4 rewritten to describe the single $29/mo plan; the launch page keeps the first-50 初 hanko as a cosmetic collectible, with no pricing strings attached.
  • Stripe cleanup: the retired $49 price was deleted in Stripe, so we removed every reference to its now-dead price ID. Both product keys in lib/products.ts resolve to the one live $29 price, and /admin/stripe-check no longer probes the deleted price (no more permanent red row).
  • Fixed a Mission Control MRR bug: it previously valued any non-founding paid subscriber at $49, overstating revenue. MRR is now paid count × $29 to match the flat plan.
  • Stripe SDK brought current: pinned every client to the 2026-02-25 API version and moved subscription-period reads onto the line item (where Stripe relocated current_period_start/end), so checkout and subscription webhooks stamp the right billing dates again.
  • Fixed a silent webhook bug: the webhook_events idempotency table was missing the columns the handler wrote, so the dedupe insert failed and could skip processing. The table now matches the code, making duplicate-delivery protection actually work.
  • Upgraded @supabase/ssr and supabase-js to a compatible pair, restoring database type-safety across the app (the server client had been returning untyped queries) and clearing ~2,800 latent type errors.
·v1.3.0

The email cut — silence the inbox, let the Monday Reading carry it

  • Cut 8 retention/digest cron jobs in one pass: nudges, reengagement, day-2-return, day-3-callbacks, day-30-retrospective, weekly-reflection, win-back, and the legacy monday-digest. The brand wager: one letter founders look forward to beats seven they archive.
  • The Monday Reading is now the only weekly ritual. Founders get exactly one letter a week, on the morning they choose, in their local timezone. The /api/cron/monday-read pipeline (pre-brew Sunday 9pm → brief draft Sunday 10pm → hourly delivery) is the canonical path; the legacy monday-digest cron is gone.
  • Win-back is folded into Monday Reading as a variant, not a separate email. Founders quiet for 30+ days get the same letter with a different opener ("Three weeks since you've checked in. Here's what shifted."). Same ritual, same inbox slot, throttled to once per 30 days via the repurposed win_back_sent_at column.
  • Daily briefing is now opt-in only, default OFF. Power-user channel for mid-launch stretches. Existing users were reset to off; re-enable it from /account#notifications if you want the morning pulse.
  • New cadence model on /account replaces the 6-toggle soup with 3 presets (Quiet, Monday + signals, Power user) and 3 channel toggles (Monday Reading, Signal alerts, Daily briefing). Anything off-preset shows as Custom and the channel toggles still work.
  • New `alert_emails_enabled` master switch on profiles silences ALL alert emails with a single toggle without touching the per-type flags. Gated at the sendAlertEmail throat — single point of enforcement so it can't drift across the 6 invocation sites.
  • vercel.json went from 33 cron jobs to 25. Dead routes deleted, cron-registry pruned to match — Mission Control no longer shows ghosts.
·v1.2.4

Webhook idempotency, staleness chips, and the rest of the cleanup

  • Stripe webhook now claims a row in `webhook_events` before processing — Stripe's at-least-once delivery means we routinely receive the same event twice (slow ack, dashboard "Resend", retry storms during incidents). Pre-fix duplicates relied on every downstream operation being idempotent; now they short-circuit at the door.
  • Integration cards now show a staleness chip when the every-6h sync hasn't run on schedule. Under 1h is silent (no chip), 1–12h is a subtle amber tint, 12–48h is an amber pill, 48h+ is a red pill matching alert-system high severity. Pre-fix a silent 36h cron failure looked identical to a healthy connection, and founders quoted day-old MRR in board updates.
  • Stage-transition alerts now write `type: "milestone"` with `metadata.subtype: "stage-transition"` instead of a custom type the schema CHECK forbids. Pre-fix every stage-crossing alert 23514'd silently. The alerts feed UI still renders them under a dedicated Stage tab with their own badge.
  • Email templates fully consolidated on the per-environment base URL — all 47 hardcoded production links across the weekly digest, Monday read, reengagement series, reflection, and chat-followup emails now resolve through `EMAIL_BASE`.
  • Schmade footer stamp gets proper aria-label, focus ring, and aria-hidden decorative elements so screen readers announce it once, cleanly, and keyboard users get a visible focus state.
  • Changelog now writes itself in-line — every significant ship gets an entry on the same turn. The standing order is documented at the top of `lib/changelog-data.ts` so the contract survives chat sessions.
·v1.2.3

Hardening pass: schema, auth, and silent failures

  • Stripe webhook now writes alerts and metric snapshots that actually pass schema. Pre-fix every paid invoice was 23514'ing — payment celebrations, churn warnings, and refund signals never made it to the alerts feed. MRR webhook updates were also silently dropping on the floor.
  • Email link "Dismiss this alert" no longer auto-dismisses itself. Outlook Safe Links, Gmail link warming, and Apple Mail privacy proxies were prefetching the GET endpoint and dismissing alerts before founders ever opened the inbox.
  • Voice readings have real quota enforcement. Free tier gets 1 per month, paid tiers get 4 per rolling 7 days, admin bypasses both. Pre-fix the only thing keeping ElevenLabs minutes from running away was a 10-min idempotency window that ?force=1 defeated.
  • Live alert toast now picks the right color. Severity mapping was reading enum values that don't exist in the schema, so a 50-point health drop and a routine pricing change both rendered as the same amber.
  • Integration sync state machine consolidated. Pre-fix Shopify/Mixpanel/Amplitude/metrics-sync were all force-marking errored on first failure, fighting the every-6h cron's 3-strikes policy and shipping false-positive integration_error alerts for transient blips.
  • Auth surfaces (login, signup, forgot, reset) and /changelog now carry the centered Schmade stamp. House rule was being skipped on every pre-auth page.
  • Compete page now surfaces a soft notice when a deep-linked competitor isn't on the board — pre-fix the email link silently no-op'd and felt broken.
·v1.2.0

GitHub integration: status, surfaces, and signal

  • Connect GitHub from /dashboard/data and Sensei reads your real shipping cadence — commits, releases, PR velocity, contributor count.
  • GitHub byline on every reading: "Last shipped 3 days ago · 12 commits this week." The pipeline cites it the same way it cites Stripe MRR.
  • Repo-aware health banner on the dashboard hero — quiet weeks become a visible signal instead of a missing one.
  • Relationship strip surfaces tied repos under a product so multi-repo founders see a single picture.
  • Auto-detect via OAuth + webhook so the picture stays current without a re-scan.
·v1.1.6

Email-to-dashboard deep linking

  • Every alert email CTA now lands on the exact module that changed — Strategy alerts open /dashboard/strategy, competitive alerts open the right competitor card on /dashboard/compete, signal alerts open /dashboard/opportunities.
  • Competitive alert links scroll the named competitor card into view and ring it for 2.4s, then fade. Founders stop hunting for the thing the email was about.
  • Email base URL now resolves per-environment (NEXT_PUBLIC_APP_URL → VERCEL_URL → asksensei.dev) so preview and staging emails stop pointing at production.
  • Daily-briefing CTA wired through the same env-aware base.
·v1.1.5

Mission Control hardening

  • Admin bypass (lateisha@schmade.com) now flows through every gate: billing, plan tier, usage quotas, voice-reading caps, feature flags. Pre-fix some routes had cap enforcement on top of an admin check that wasn't being read.
  • Single source of truth for admin status — `isAdmin()` used at all 59 call sites, no per-route bypass logic.
  • Voice readings now respect the admin bypass plus a real free/paid quota for everyone else.
  • Subscription server helper rewritten to short-circuit on admin email before any Stripe lookup.
·v1.1.3

Alert engine: real severity, real linking, real auth

  • Alerts feed now writes the actual schema (high/medium/low severity, competitive/signal/health/milestone type) — pre-fix several paths were writing CHECK-violating values that silently 23514'd.
  • /api/alerts/generate now requires either the cron secret or a session whose user.id matches the analysis owner. Pre-fix anyone with a known analysis UUID could spam-trigger alert generation.
  • /api/alerts/[id]/dismiss split into a GET that renders a confirm page and a POST that does the dismiss — kills the email-prefetcher auto-dismiss bug.
  • Realtime alert toast picks colors from real schema fields instead of guessing from keywords.
·v1.1.0

The moat, wired end-to-end

  • Pipeline now consumes real Stripe / Plausible / Vercel / manual numbers when a founder has them connected — MRR, customers, churn, bounce, traffic. Verdicts cite the actual numbers instead of estimating ranges.
  • Live-data strip on every reading (Home + all four modules): 'Stripe · synced Apr 22 · Cited in this reading.' Unconnected founders see a quiet Connect nudge shaped to each module.
  • Inline ✓ citations on the deep-dive block of each module: Stripe on Money Math + Your Motion + The Field, Plausible/Vercel on The Conversion Killer.
  • Share cards carry the moat. Verdict + observation OG images render a 'Live · Stripe · Plausible' tag under the quote so the screenshot proves the reading was grounded. Link unfurls on Slack/Twitter/iMessage carry it too.
  • Industry × stage branching (v1.1): every product is classified into one of six cohorts — B2B SaaS × {pre-revenue, early, scaling} and Consumer × {pre-launch, early, scaling}. The pipeline re-derives on every run and Stripe-corrects stage when MRR is connected.
  • Cohort-aware framings prepended to the module prompts — a pre-revenue consumer founder pushes toward D1 retention; a scaling B2B founder pushes toward expansion motion. Skips force-fit when the pipeline data contradicts the cohort.
  • Stage qualifier under every score: 'Clears the 78-floor for your stage' / 'Under the 70-floor — close, not shipping' / 'Under the concern line — needs work.' A 72 reads differently at pre-revenue than at $300k MRR.
  • Pattern library filter: cited patterns now honor the founder's cohort (a consumer_pre founder stops citing Superhuman's pricing-flinch pattern).
  • 'Reading you as early B2B SaaS' chip on each strip with a one-click jump into the settings override — correct the cohort from the reading itself, not just onboarding.
·v0.9.9

Path-Based Architecture

  • Dynamic sidebar nav: shows path-specific sections only when a path is selected (Fundraise, Growth, Launch, PMF)
  • New Growth Engine page (/dashboard/growth): funnel visualization, growth levers, quick wins with expandable details
  • New Product-Market Fit page (/dashboard/pmf): ICP segments, PMF signals tracker, positioning angles, customer interview questions
  • Path sections visually distinguished with accent divider in sidebar
  • Core 4 modules (Market Fit, Strategy, Presence, Edge) always visible; path modules appear after selection
·v0.9.8

Presence Elevation

  • Edge score now fully wired — computed from real competitor data and displayed in dashboard
  • Sample analysis (thetank.io) now on homepage — see real Sensei output before signing up
  • /try page now prominently linked: hero secondary CTA, sample section button, sticky mobile bar
  • New Trust & Depth section showing our promises + intelligence depth metrics
  • Stats bar updated: '4 core lenses' with all module names (Market Fit, Strategy, Presence, Edge)
·v0.9.7

Edge Page & Grid Polish

  • Fixed 4-module grid layout — Edge no longer wraps to second row
  • Edge score badge now displayed in compete page hero with position assessment
  • Shortened module descriptions for cleaner card display
  • Methodology section redesigned with gut-punch copy and dark theme
·v0.9.6

Edge Module & Dashboard Cleanup

  • Renamed 'Competition' to 'Edge' — clearer that it's about how YOUR product stacks up
  • Standardized module names across dashboard: Market Fit, Strategy, Presence, Edge
  • Edge module now pulls competition insights from verdict analysis
  • Removed Revenue Opportunity calculator (showed $0 without real data)
  • Removed social proof strip from dashboard (not relevant to user's product focus)
·v0.9.5

Presence Score Boost

  • Added Edge as 4th scoring module (kanji: 競) — analyzes competitive positioning
  • New 'How Sensei Scores' methodology section explaining all four modules
  • Sample analysis for thetank.io on /try page — see a real analysis before signing up
  • Anti-persona section clarifying who Sensei is NOT for
  • Dashboard now shows 4 modules: Market Fit, Strategy, Presence, Edge
·v0.9.4

Trust & Transparency Update

  • Added 'Our Promises' section with explicit commitments on data, privacy, and ethics
  • New changelog page to show active development
  • Dashboard preview now shows Sensei analyzing itself as a meta example
  • Improved presence scoring demonstration with cross-site signal detection
  • Reorganized footer layout for cleaner navigation
·v0.9.3

Pricing Clarity

  • Merged pricing preview into final CTA section
  • New pricing display: one flat $29/mo plan, everything unlocked
  • Added beta badge to dashboard preview
  • Fixed FAQ section background for better visual separation
·v0.9.2

Dashboard Preview Enhancement

  • Interactive dashboard preview showing live Sensei analysis
  • Score visualization with progress bar and trend indicator
  • Journey modules with kanji-based scoring display
  • Your One Thing action card with contextual recommendations
·v0.9.1

Homepage Redesign

  • New hero with animated kanji background element
  • Trust signals section with SOC 2 and privacy commitments
  • Live stats showing analyses run, competitors tracked, and insights delivered
  • Who It's For section targeting bootstrapped founders and consultants
·v0.9.0

Public Beta Launch

  • Initial public beta release
  • Core scoring engine with Market Fit, Strategy, and Presence modules
  • Competitor tracking and change detection
  • AI-powered recommendations with Your One Thing
  • Simple flat pricing — $29/mo, first reading and first month free

Want to see what's coming next?

Read about our vision