feat(frontend): landing page CTA goes straight to login/register (#386) - #387
Merged
Conversation
PARTHA stays self-hosted only for the foreseeable future, with no hosted service planned -- there's no reason for a fresh guest on a self-hosted instance to be funneled through a waitlist in the UI before they can even try registering. The landing page's unauthenticated "Analyze a Repository" hotspots (nav, hero, and footer positions -- all three share the same analysisCta handler) now link directly to /register, the same way the "Log In" nav hotspot already links directly to /login. Removes the WaitlistModal import and waitlistOpen state from LandingPage.tsx entirely. Registration itself is unchanged: it still enforces the admin-managed email allowlist (#374/#375) or the local development bypass (#384) exactly as before. This only changes what the landing page's CTA points at, not what completing registration requires. Deliberately not touched, per the issue's own scope: the backend /waitlist route, WaitlistEntry model, and the frontend's features/waitlist module (WaitlistModal, useWaitlistForm) -- now unreferenced by the landing page but still present and still covered by their own tests. Whether that infrastructure should be removed entirely is a separate, larger, cross-cutting question (flagged in PR #383, not decided yet). Updated router.test.tsx's assertion to match the new link-based CTA instead of the old waitlist-button one. Verified: tsc/eslint clean, full vitest suite green (439/439, including LandingPage.test.tsx, router.test.tsx, RegisterPage.test.tsx, and WaitlistModal.test.tsx, which still passes since the component itself is untouched), production build clean. Real in-browser click-through against actual dev servers (backend + frontend) in both light and dark mode: "Log In" opens the sign-in page, "Analyze a Repository" opens account creation, no waitlist prompt anywhere in either path, and no "waitlist" text anywhere on the rendered landing page.
Collaborator
Author
|
Re-verified after a report that `#how-it-works` still opened the waitlist modal in the real app. Root cause: that report was against `dev`, not this branch. `dev` still has the pre-fix `LandingPage.tsx` (this PR is unmerged), where `analysisCta` still opens `WaitlistModal` for guests — clicking the "Analyze a Repository" hotspot sitting right next to "See how it works" in the hero would show exactly that. Did a full sweep of this branch anyway, not just a re-check of the 3 known spots:
No code changes needed on this branch — it was already correct on this exact point. Flagging for whoever merges this: until it lands, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Product-direction clarification: PARTHA stays self-hosted only for the foreseeable future, with no hosted service planned. The landing page's guest "Analyze a Repository" CTA currently opens the waitlist modal instead of linking to account creation. For a self-hosted instance, there's no reason to gate a fresh guest behind a waitlist prompt in the UI — they should be able to go straight to Login or Create Account.
Linked issue
Closes #386
Scope
What changed
apps/frontend/src/app/pages/LandingPage.tsx: the unauthenticatedanalysisCta(all three "Analyze a Repository" hotspot positions — nav, hero, and footer share the same handler) now links directly to/registerinstead of openingWaitlistModal. This matches the authenticated case's existing direct/uploadlink and the "Log In" nav hotspot's existing direct/loginlink — both of those were already unaffected by any waitlist gate. Removed theWaitlistModalimport andwaitlistOpenstate entirely.Registration itself is unchanged: it still enforces the admin-managed email allowlist (#374/#375) or the local development bypass (#384) exactly as before — a not-yet-approved email still gets the same "hasn't been approved... join the waitlist and we'll be in touch" rejection message on submission, which is unrelated to and untouched by this change. This PR only changes what the landing page's CTA points at, not what completing registration requires.
Deliberately not touched, per the issue's own scope: the backend
/waitlistroute,WaitlistEntrymodel/migration,scripts/list_waitlist.py/scripts/approve_email.py, and the frontend'sfeatures/waitlistmodule (WaitlistModal,useWaitlistForm, API client). All of it is now unreferenced by the landing page but still present and still covered by its own tests. Whether that infrastructure should be removed entirely is a separate, larger, cross-cutting question — flagged in PR #383's description, not decided yet, and explicitly out of scope here.Updated
router.test.tsx's one affected assertion to match the new link-based CTA instead of the old waitlist-button one.Acceptance criteria completed
/registerinstead of openingWaitlistModal./login(unchanged, verified).apps/frontend's ownWaitlistModal/useWaitlistForm/backend/waitlistroute left in place, untouched.router.test.tsx) updated to match the new behavior; full suite green.Testing performed
Manual, in-browser (not assumed from code), against real running dev servers (
npm run dev:backend+ the frontend dev server), in both light and dark mode:/register("Create your PARTHA account"), no waitlist modal at any point./login("Sign in to PARTHA")./registernavigation, no waitlist modal.Screenshots
Verified visually in-browser in both light and dark mode (landing page, register page, login page) — not attached here, but real screenshots were taken and inspected, not skipped.
Security and data considerations
No security-relevant change: this only changes a link target in the UI. The allowlist enforcement this UI change routes users toward is entirely unaffected — same backend validation, same rejection message, same admin-approval flow.
Dependencies and blocked work
None. The flagged question about removing the backend
/waitlistroute and the frontendfeatures/waitlistmodule entirely (now unreferenced from any page) remains open, tracked in PR #383's description — not a blocker for this PR, and not undertaken here.Scope changes or remaining work
None for this PR's scope.
Contributor checklist
devupstream/devupstream/devLandingPage.tsxand its one affected test assertion)Closes) is used only because the issue is fully resolved