fix(signup): fix /signup routing so job-seeker and role-specific URLs work
Some checks failed
build-and-release / build (push) Failing after 1m17s

Three related bugs made signup pages appear blank/'Not found':

1. /signup/index.tsx redirected to /signup/job-seeker (hyphen) but the
   actual file was signup/jobseeker.tsx (no hyphen). Result: every
   /signup visit (no intent) 404'd.

2. signup/company.tsx had the same broken link in the 'Register as
   Job Seeker instead' link.

3. Landing page CTAs link to /signup?intent=professional&role=DEVELOPER
   which the index correctly redirects to /signup/professional - but
   /signup/developer, /signup/photographer etc. were 404 because there
   were no route files for them. Added signup/[role].tsx catch-all
   that maps all professional role slugs (developer, photographer,
   tutor, makeup-artist, video-editor, graphic-designer,
   social-media-manager, fitness-trainer, catering-services,
   ugc-content-creator) to /signup/professional?role=<ROLE>.

Verified via Playwright: all role-specific signup paths now load the
full signup form instead of 'Not found'.
This commit is contained in:
Ashwin Kumar Sivakumar 2026-07-04 22:08:03 +05:30
parent c06860367c
commit 0cf975f227
3 changed files with 59 additions and 4 deletions

View file

@ -0,0 +1,55 @@
import { useNavigate, useParams } from "@solidjs/router";
import { createEffect } from "solid-js";
/**
* Catch-all signup route for role-specific URLs.
*
* Routes like /signup/developer, /signup/photographer, /signup/tutor, etc.
* all map to the professional signup form with the role pre-selected.
*
* The professional route reads `role` from the query string (?role=DEVELOPER).
*/
const ROLE_ALIASES: Record<string, string> = {
developer: "DEVELOPER",
photographer: "PHOTOGRAPHER",
"makeup-artist": "MAKEUP_ARTIST",
makeup: "MAKEUP_ARTIST",
tutor: "TUTOR",
"video-editor": "VIDEO_EDITOR",
video: "VIDEO_EDITOR",
"graphic-designer": "GRAPHIC_DESIGNER",
graphic: "GRAPHIC_DESIGNER",
"social-media-manager": "SOCIAL_MEDIA_MANAGER",
social: "SOCIAL_MEDIA_MANAGER",
"fitness-trainer": "FITNESS_TRAINER",
fitness: "FITNESS_TRAINER",
"catering-services": "CATERING_SERVICES",
catering: "CATERING_SERVICES",
"ugc-content-creator": "UGC_CONTENT_CREATOR",
ugc: "UGC_CONTENT_CREATOR",
};
export default function SignupRoleRoute() {
const navigate = useNavigate();
const params = useParams();
createEffect(() => {
const slug = (params.role || "").toLowerCase();
const role = ROLE_ALIASES[slug] || slug.toUpperCase();
navigate(`/signup/professional?role=${role}`, { replace: true });
});
return (
<div
style={{
display: "flex",
"justify-content": "center",
"align-items": "center",
"min-height": "100vh",
background: "#07051a",
}}
>
<p style={{ color: "#fff" }}>Redirecting...</p>
</div>
);
}

View file

@ -548,7 +548,7 @@ export default function CompanySignupRoute() {
Already have an account? <A href="/login">Sign In</A>
</p>
<p class="note" style={{ "margin-top": "8px" }}>
<A href="/signup/job-seeker">Register as Job Seeker instead</A>
<A href="/signup/jobseeker">Register as Job Seeker instead</A>
</p>
</div>
</Show>

View file

@ -24,11 +24,11 @@ export default function SignupIndexRoute() {
navigate("/signup/professional", { replace: true });
} else if (intent.includes("customer")) {
navigate("/signup/customer", { replace: true });
} else if (intent.includes("job_seeker") || intent.includes("jobseeker")) {
navigate("/signup/job-seeker", { replace: true });
} else if (intent.includes("job_seeker") || intent.includes("jobseeker") || intent.includes("job-seeker")) {
navigate("/signup/jobseeker", { replace: true });
} else {
// Default to job seeker if no intent specified
navigate("/signup/job-seeker", { replace: true });
navigate("/signup/jobseeker", { replace: true });
}
});