PhantomLabsAI / PhantomPulse — Proposed PR Plan (no push)
This plan is structured as small, reviewable PRs.
PR 1 — Fix Apply Now/Login routing + auth default
Branch: fix/client-auth-default-register
Commits:
fix(auth): default /client/auth to register and honor mode=login|register- In
ClientAuth.tsx, replace the currentisLogininitialization with explicit mode parsing. - Keep toggle button behavior.
- In
fix(marketing): Apply Now -> register, Login -> login- In
Navigation.tsx, set:- Login:
/client/auth?mode=login - Apply Now:
/client/auth?mode=register
- Login:
- In
Acceptance: Apply Now always shows registration form; direct /client/auth?mode=login shows login.
PR 2 — Make marketing section nav work off-homepage
Branch: fix/navigation-cross-page-section-links
Commits:
fix(nav): section buttons navigate to /#section when not on /- If not on
/, use woutersetLocation('/#pricing')(or similar) instead ofscrollIntoView.
- If not on
feat(home): scroll to hash section on initial load- On Home mount, read
window.location.hashand scroll.
- On Home mount, read
Acceptance: Clicking Pricing/FAQ/How It Works from /products or /client/auth lands user at the right Home section.
PR 3 — Add legal/compliance pages
Branch: feat/legal-pages
Commits:
feat(legal): add routes and pages for /privacy /terms /risk- Add simple static pages in
client/src/pages/. - Wire into
client/src/App.tsxroutes.
- Add simple static pages in
chore(footer): link legal pages and support contact
Acceptance: Footer links exist; pages render; routing works.
PR 4 — Remove JWT secret fallback (prod safety)
Branch: chore/security-require-session-secret
Commits:
chore(security): require SESSION_SECRET when NODE_ENV=production- Fail fast if missing; remove
fallback-secret-key.
- Fail fast if missing; remove
docs(env): document required env vars for production
Acceptance: Production boot fails without SESSION_SECRET; local dev still works with .env.
PR 5 — Dashboard loading/error standardization
Branch: ux/dashboard-loading-error-states
Commits:
ux(dashboard): add loading + error states to Overviewux(dashboard): add shared <PageState> components (loading/error/empty)
Acceptance: No dashboard page silently renders blank/placeholder data when API fails.
PR 6 — Cleanup: remove or rehome legacy ClientDashboard
Branch: chore/remove-legacy-client-dashboard
Commits:
chore(client): remove unused ClientDashboard page or add route if intended
Acceptance: No dead code; maintainers know the intended dashboard entry.