# PRODUCT-001 honest Free/Pro surfaces Updated: 2026-08-15 Status: `IMPLEMENTED — NOT VERIFIED`. Repository and local Chromium scope passes. Configured Stripe checkout, expiry/downgrade browser behavior, native assistive technology and production remain external. ## Confirmed problem The public homepage contradicted the server policy. It advertised three tiers, fixed prices and billing intervals, a Free AI allowance, a bring-your-own-key tier and unlimited AI. The authoritative `AccountPlans` model exposes only Free and Pro, gives Free no AI admission, and applies finite Pro ceilings. Commercial terms are owned by configured Stripe Checkout, not application copy. ## Implemented contract - `planCatalog.ts` is the single frontend source for public plan names and capability copy. It contains exactly `free` and `pro`; the server remains authoritative for enforcement and numeric entitlements. - Free describes core non-AI tracking, correspondence/documents, manual Career Profile/CV editing, deterministic matching and data export/retention. - Pro describes the existing AI-assisted application/CV/Career capabilities and Pro themes. It does not claim an invented price, interval, trial or unlimited usage. - The homepage uses two semantic plan sections, sends the Free action to registration and the Pro action through sign-in to Settings. Branding is consistently Jobjakt. - Settings shows Checkout/portal actions only when the authenticated billing status permits them. A Free user sees an honest deployment-unavailable explanation when Stripe is not configured. - Active AI surfaces reuse a dismissible `ProFeatureNotice`. Copy is benefit-specific, preserves access to manual/existing content and never implies that work was generated. - Product/business-model and implementation-roadmap claims now match POL-001. Historical competitor pricing remains research, not current product copy. No backend behavior, database, dependency, billing configuration or production state changed. ## Verification - Public catalogue, landing, reusable notice, usage card and active AI surfaces: 7 suites, 30/30 tests. - Current server entitlement/billing-policy slice: 30/30 tests, including Free, Pro, Admin, stale-role downgrade and subscription-status behavior. - Full frontend: 57/57 suites, 232/232 tests. - Optimized production frontend build/TypeScript: pass. - Full Playwright: 8/8. The public plan page shows exactly Free/Pro, contains none of the retired claims, persists explicit Light/Dark, has no horizontal overflow at 375/768/1440, and both plan actions work from the keyboard. - `git diff --check`: pass; line-ending notices only. ## Remaining gates - Production Stripe price/interval/trial text must continue to come from hosted Checkout. No commercial term is claimed until the configured product is inspected in the authorized production account. - Exercise a configured Free checkout, successful webhook/role transition, portal, cancellation/expiry/downgrade and existing-data access in an authorized synthetic production account. - Native screen-reader and switch-control spot checks remain external. - Complete cross-feature AI usage accounting remains an AI rollout gate; the public site deliberately makes no universal numeric or unlimited claim. ## Rollback Revert the PRODUCT-001 frontend/documentation commit. No migration or data rollback is required; server-side Free/Pro enforcement is unchanged and must not be reverted with presentation copy.