Every meaningful change — features, fixes, and improvements — in reverse chronological order.
v2.4
May 2026
IMPROVEMENT
Team context on idea creation: Pro and Pro+ users with a team can now choose Personal or Team context when submitting a new idea — ideas tagged as Team appear in the team feed
Security hardening: SECURITY DEFINER functions no longer callable by unauthenticated users; trigger functions hardened against search_path injection
RLS performance: all row-level security policies updated to use the initplan optimization — auth evaluation now runs once per query instead of once per row
Env isolation: development builds now throw immediately if Stripe live keys are used accidentally; all Stripe price IDs validated at startup
v2.3
May 2026
FIX
Seat add-ons fully live: STRIPE_EXTRA_SEAT_PRICE_ID wired in production — extra seats at €7/seat/month now purchasable from Settings → Billing
Webhook fix: customer.subscription.updated no longer nullifies stripe_subscription_id — targeted updatePlan() replaces full upsert for plan/status updates
v2.2
May 2026
FEATURE
Team dashboard: Personal and Team tabs on the dashboard — switch between your own validations and your team's feed
Team pulse: stats bar showing total team validations, GO rate, pending count, and most active member
Verdict reactions: agree (↑) or disagree (↓) on any idea in the team feed — counts update live without a page reload
Team feed filters: filter by verdict (GO / KILL / PIVOT / Pending) and by individual member
Seat add-ons for Pro+: buy extra team seats at €7/seat/month directly from Settings → Billing
v2.1
May 2026
FEATURE
Team collaboration: invite colleagues by email, accept invites via link, see team members in Settings → Team
Team name editable by the owner directly in Settings → Team
Accept-invite redirect fixed — clicking an email invite link after login now lands on the correct page
PDF and JSON export no longer marked as coming soon — available to Pro and Pro+ users
v2.0
May 2026
FIX
Billing safety: unknown Stripe price IDs now throw instead of silently downgrading paying users to free
Cron security: missing CRON_SECRET now returns 503 (server misconfiguration) — bearer-undefined bypass no longer possible
Checkout route migrated to shared resolveUserId — auth pattern consistent across all API routes
Plan type has a single source of truth in @pledgeoff/core — duplicate definition removed from getUserPlan
Stripe webhook and waitlist route now log through Pino — all billing events visible in Axiom
Outbox cron returns 500 on processing failures — Vercel retries instead of marking failed runs as success
Welcome email is now fire-and-forget — Resend failures no longer cause Supabase to retry and send duplicate emails
Settings page now reads the subscription once — plan, renewsAt, and stripeCustomerId come from the same DB snapshot
v1.9
May 2026
FIX
Build restored — stale proxy.ts file removed after conflicting with middleware.ts in Next.js
Rules system overhauled: 10 contradictions and missing rules identified and documented
Auth layers documented: middleware (edge) vs requireUser (Server Components) vs resolveUserId (API routes)
5 new anti-patterns added to engineering rules: priceId fallback, secret guard bypass, email retry, Plan type duplication, console.* in routes
v1.8
May 2026
FIX
Architecture hardened: 19 silent-failure and code-quality issues resolved in one session
getUserPlan() no longer silently defaults to free on DB error — returns 500 so billing issues are visible
All 13 API routes now use a shared resolveUserId() — no more per-route duplicates that could drift
Next.js middleware added for /dashboard, /ideas, /settings — private pages are protected at the edge
Stripe test-key guard at cold start — production builds now throw immediately if sk_test_ key is set
Cron cleanup route returns 500 on failure so Vercel retries instead of silently marking it as success
Report page: DB errors now throw (500) instead of masking as 404
v1.7
May 2026
FIX
Pro plan now shows correctly in Settings — Account, Billing, and Team tabs all reflect the active subscription
Team seats now display 1/3 for Pro (was showing 1/1 due to a billing read failure)
Billing architecture hardened: single service client, centralized plan resolver, all errors logged instead of silently defaulting to free
v1.6
May 2026
UI
Badge tooltips on desktop — hover over BUILD / OSS / BUY, Niche / Mid-size / Large, AI knowledge, and MRR to see a plain-English explanation
Mobile legend on all four tools — the same explanations appear as a static line below the section title, no hover needed
v1.5
May 2026
UI
Settings page redesigned with sidebar navigation — Account, Billing, Notifications, API, Danger zone as separate panels
Landing Page tool now shows a live page preview (dark background, headline, features, CTA) without leaving the app
Landing Page tool adds a Copy HTML button — generates a standalone dark-mode page ready to publish on Carrd, Webflow, or any browser
Copy fields collapsed into an expandable 'Copy breakdown' section, keeping the interface clean by default
All six Intelligence tools now show a consistent loading animation and fade the content during re-runs
Market Simulation gains a Re-run button — no more page refresh needed to regenerate
Competitor and Build analysis now show gaps as full cards, consistent with the rest of the UI
Re-run errors are now shown inline near the action button instead of silently failing
v1.4
May 2026
UI
Otto co-founder flow on idea page — verdict-aware recommendations guide you to the most relevant tools
GO verdict unlocks all tools; PIVOT and KILL show focused suggestions with explanations per blocked tool
Override button lets you run all tools regardless of Otto's recommendation
Intelligence tools list now starts with '01 Validate' as completed — clear sense of progress
v1.3
May 2026
INTELLIGENCE
Competitor analysis now supplements signal-based results with AI general knowledge — finds well-known players (e.g. CodeRabbit, Bito) even when absent from fetched signals
Competitors from general knowledge are clearly labelled with an 'AI knowledge' badge — full transparency on data source
GitHub signal quality improved: reactions filter tuned to remove bot/noise issues while keeping more real discussions
Engineering Stack no longer silently drops GitHub signals when other sources dominate — every source is guaranteed at least one rescued signal
Engineering Stack warning rewritten — explains what the analysis is based on instead of showing a bare count
v1.2
May 2026
UI
Idea description limit raised from 300 to 1000 characters — more room to describe the problem, pricing, and target audience
Description character counter shows colour-coded progress bar (green → amber → red)
v1.1
May 2026
UI
Two-column layout on idea page — verdict sticky left, signals scrollable right
Compact signal cards: title truncated, sentiment dot, View ↗ button