Skip to content

Promote develop → production: landing, signup funnel, policies, billing, coverage#70

Merged
ZappoMan merged 12 commits into
mainfrom
develop
May 11, 2026
Merged

Promote develop → production: landing, signup funnel, policies, billing, coverage#70
ZappoMan merged 12 commits into
mainfrom
develop

Conversation

@ZappoMan

@ZappoMan ZappoMan commented May 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Promotion merge: merges develop into main (production). develop is 12 commits ahead of main (74a51bc65559b5), touching the web app, shared packages, billing UI, policies/legal content, and tests.

What ships

Signup & growth

Marketing / landing

Legal & policies

Billing

  • Pricing table shared component updates and BillingPlans page adjustments.
  • billing_plans_public_read migration for plan catalog reads.

Reliability & tests

Commit list (main..develop)

  1. 65559b5 — feat(web): post-signup upgrade funnel — plan intent, billing redirect, OAuth/email storage (feat(web): post-signup upgrade funnel — plan intent, billing redirect, OAuth/email storage #69)
  2. 91002b6 — test: coverage for landing sections, LEGAL_CONFIG, and POLICIES (closes improve code coverage #63) (test: coverage for landing sections, LEGAL_CONFIG, and POLICIES (closes #63) #65)
  3. 7ab03b3 — chore(landing): move demo explanation to pricing subhead, shorten disclaimer (Improve pricing demo copy: move explanation to subtitle #67)
  4. d995eed — fix: AI code quality findings — landing copy, test mocks, jest regex (closes Fix AI code quality findings #62) (fix: AI code quality findings — landing copy, test mocks, jest regex (closes #62) #64)
  5. ffd8318 — chore: increase test coverage to 95%+ (issue chore: increase test coverage from ~92% to 95%+ #58) (chore: increase test coverage to 95%+ (issue #58) #60)
  6. 9516075 — feat(landing): monthly/annual cadence toggle on pricing section (feat(landing): monthly/annual cadence toggle on pricing section #57)
  7. bd0a3d4 — feat(landing): expand feature content and strengthen CTAs (feat(landing): expand feature content and strengthen CTAs #56)
  8. 356ba39 — feat: add B2C landing page for unauthenticated users (closes Task: B2C SaaS Landing Page for BeakerStack #50) (feat: add B2C landing page for unauthenticated users (closes #50) #52)
  9. b6335ff — fix: address Brad's review feedback on legal footer (feat: add legal policy footer and policy pages (closes #49) #51)
  10. f546334 — fix: remove self-referencing JSDoc links in test-emails.ts (please fix this AI code quality complaint #47) (fix: remove self-referencing JSDoc links in test-emails.ts #48)
  11. cd7faa1 — fix: correct JSDoc @link targets for integration and E2E test email generators (fix: correct JSDoc @link targets for integration and E2E test email generators #46)
  12. 203a0b0 — fix: correct invalid JSDoc @link syntax in test email helpers (fix: correct invalid JSDoc @link syntax in test email helpers #45)

Scale

~68 files changed; ~4.9k insertions / ~0.76k deletions (diffstat vs merge-base).

Merge strategy reminder

⚠️ This PR targets main. Use Create a merge commit (not squash merge) so future developmain promotions stay conflict-free.

Pre-merge checklist

  • Staging verification completed for signup funnel, landing, /billing, and policy URLs.
  • Production Supabase migrations applied or included in deployment order (billing_plans_public_read).
  • Stripe / billing env vars and allowed origins unchanged or updated per deployment docs.

Copilot AI and others added 12 commits May 10, 2026 07:02
* Initial plan
* fix: correct invalid JSDoc @link import() syntax in test email helpers
Agent-Logs-Url: https://github.com/Artificer-Innovations/BeakerStack/sessions/262c4eee-aebf-4ff2-99a8-88a7195c6711
* chore: make test email JSDoc link style consistent
Agent-Logs-Url: https://github.com/Artificer-Innovations/BeakerStack/sessions/262c4eee-aebf-4ff2-99a8-88a7195c6711

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
…enerators (#46)

* Initial plan

* fix: correct JSDoc links for integration and E2E test email generators

Agent-Logs-Url: https://github.com/Artificer-Innovations/BeakerStack/sessions/4becd9e0-abc3-4dd2-a690-98350ac7e1ad

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
- tailwind.config.js: use ESM import for typography plugin (fixes prose styles)
- legal.ts: use BRANDING.pascalName ('BeakerStack') for brand in policy text
- AppFooter: copyright now shows LEGAL_CONFIG.legalEntityName ('Artificer Innovations, LLC')
- Regenerated policies.ts with corrected brand name
* chore(coverage): exclude pure config/data files from coverage

Excludes landing.ts, landing.example.alt.ts (web), generated/policies.ts,
and config/legal.ts (shared) from coverage measurement. These are
pure data/constant objects with no logic to test — they are always
mocked in tests and have no branches to exercise.

Part of #58

* chore(coverage): exclude generated and config-only files from shared coverage

Part of #58

* test(landing): add Nav component tests

Part of #58

* test(landing): add SocialProof component tests

Part of #58

* test(landing): add FeatureRows component tests

Part of #58

* test(landing): add FeatureGrid component tests

Part of #58

* test(landing): add FAQ component tests

Part of #58

* test(shared): add Modal focus trap and scroll lock coverage

Adds tests for: Tab focus trapping (forward/backward), empty-focusable
Tab handling, scroll lock set on open and restored on close.

Part of #58

* remove duplicate landing section tests (covered by Diego PR #61)

* remove duplicate landing section tests (covered by Diego PR #61)

* remove duplicate landing section tests (covered by Diego PR #61)

FeatureGrid, FeatureRows, and SocialProof tests are already covered by Diego's PR. Remove to avoid merge conflicts and duplication.

* fix Modal focus-trap tests: use userEvent.tab() instead of fireEvent

fireEvent.keyDown fires a synthetic event but does not move actual focus.
userEvent.tab() simulates real browser tab traversal and correctly
tests focus-trap behavior. Per Sarah's review feedback on PR #60.
…loses #62) (#64)

* fix: AI code quality findings — landing copy, test mocks, jest regex (closes #62)

- Condense 4 feature row body strings in landing.ts per AI recommendations
- Fix subscribe mock to return { unsubscribe: vi.fn().mockResolvedValue() } so
  cleanup code that chains .catch() on unsubscribe() does not throw
- Replace fragile setTimeout flush in renderWithAuth with waitFor outside act()
- Fix transformIgnorePatterns regex in jest.web.cjs: node_modules/(?!^$)
  → /node_modules/ (the original pattern transpiled all node_modules)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: use "without duplicating work" for grammatical correctness

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: diego <diego@artificer.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#63) (#65)

* add coverage tests for landing sections, LEGAL_CONFIG, and POLICIES (closes #63)

Adds 10 test files:
- 8 vitest tests for landing section components (FAQ, FeatureGrid,
  FeatureRows, FinalCTA, Hero, Nav, PricingSection, SocialProof)
- packages/shared-tests: legal.ts structural validation test
- packages/shared-tests: policies.ts HTML content validation test

Landing section tests use MemoryRouter for Link-dependent components
and vi.mock for BillingProvider/usePlanCatalog in PricingSection.
Nav tests cover mobile menu toggle, scroll shadow, and link rendering.
SocialProof tests cover all three render paths (null, metrics,
testimonials). Config tests validate structure and HTML content
rather than relying on coverage exclusions.

* fix PricingSection and Nav test TypeScript errors

- PricingSection.test.tsx: fix 5 vi.mock() paths (test is in sections/__tests__/,
  not sections/ — each path needs one additional ../); add LandingConfig['pricing']
  explicit type to renderSection param; use 'as unknown as ReturnType<...>' to
  satisfy full usePlanCatalog return type (error + refresh fields)
- Nav.test.tsx: add required brand.tagline field to test config

* fix FeatureGrid.test.tsx: use Lucide Zap icon instead of inline arrow function

Inline () => JSX.Element doesn't satisfy LucideIcon's props signature.
Importing a real Lucide icon avoids the cast and is cleaner.
Fixes TS2322 reported by Mei.

* Fix no-non-null-assertion lint errors in Nav.test.tsx; add logos fallback test

- Nav: replace ! assertions with within(mobileNav).getByRole() and screen.getByRole("banner")
- SocialProof: add test for unsupported kind rendering nothing

* fix legal unit tests

---------

Co-authored-by: Brad Hefta-Gaub <brad@artificerinnovations.com>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Merge Strategy Reminder

This PR targets the main branch. When merging, please use:

"Create a merge commit" (NOT squash merge)

Using "Squash and merge" on PRs targeting main can cause merge conflicts when merging developmain later.

See ARCHITECTURE.md for details.


Updated at: May 11, 2026 at 11:32 AM PDT

@ZappoMan ZappoMan changed the title promote staging to production Promote develop → production: landing, signup funnel, policies, billing, coverage May 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

CI Coverage & Test Summary

Metric Coverage Covered / Total
Statements 97.53% 11512 / 11804
Branches 82.92% 2098 / 2530
Functions 90.75% 353 / 389
Lines 86.45% 10204 / 11804

Suites: 39 passed, 0 failed (39 total) · Tests: 419 passed, 0 failed (437 total)

✅ All reported test suites passed.

Coverage artifacts: coverage-summary, coverage-packages.


Updated at: May 11, 2026 at 11:38 AM PDT

@ZappoMan ZappoMan merged commit b2de832 into main May 11, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants