Commit graph

355 commits

Author SHA1 Message Date
Ashwin Kumar Sivakumar
5fad33634a Show specifically what's missing before submit-for-verification
All checks were successful
build-and-release / build (push) Successful in 1m44s
The disabled-button hint just said "Complete all required fields to
submit" with no indication of which section was incomplete. For job
seekers, portfolio completion (headline, summary, education, work
experience, skills — filled in via My Portfolio, a separate page from
this one) is required alongside Basic Info and Documents, so seeing
both visible tabs fully checked while submit stays disabled looked
like a bug. Now names the actual missing items.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 23:02:11 +05:30
Ashwin Kumar Sivakumar
cab192d946 Fix job seeker document submission: hide raw storage URL, fix error masking
All checks were successful
build-and-release / build (push) Successful in 1m48s
Two issues in the job seeker (and shared profile) dashboard:
- The uploaded document's full Backblaze URL was rendered as visible text
  and linked directly; view-document now resolves a short-lived signed
  URL on demand instead of exposing the permanent storage link.
- "Submit for Verification" always showed a generic "Network error"
  message on any failure because request() throws on non-2xx responses,
  making the destructured status/data unreachable in the catch-free path
  (e.g. a 409 "verification already in progress" looked identical to a
  network failure). Now surfaces the real backend error message.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 18:07:37 +05:30
Ashwin Kumar Sivakumar
83b5072011 Fix forgot-password flow: UI never let users enter the emailed code
All checks were successful
build-and-release / build (push) Successful in 2m14s
The backend emails a plain 6-digit reset code (crates/email/templates/
password-reset.html just renders {{reset_code}}, no link) and expects
POST /api/auth/reset-password with {code, new_password}. This page was
built for a different, unused link-based flow instead: it only read a
`token` from the URL query string and posted it as `token`, a field
name the backend's ResetPasswordPayload doesn't even have. Users had
no way to type the code in at all, so submitting a request just left
them stuck back on the request screen.

Now: requesting a reset code moves straight to a "set new password"
step with a 6-digit code input, and the code is submitted under the
correct `code` field name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 22:25:31 +05:30
Ashwin Kumar Sivakumar
7a0799f1d1 Fix security audit finding: replace fake client-side captcha
All checks were successful
build-and-release / build (push) Successful in 2m5s
The captcha on login and all four signup forms was generated and
checked entirely in the browser (answer readable via window global),
so it provided no real bot/brute-force protection. Wire up the new
server-side captcha endpoint instead: fetch a challenge on mount,
submit captcha_id + captcha_answer with login/register, and refresh
the challenge on CAPTCHA_FAILED.

Also bump patchable dependency vulnerabilities via npm audit fix
(all criticals resolved; remainder needs an upstream SolidStart/vinxi
bump not yet available).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 17:32:43 +05:30
Ashwin Kumar Sivakumar
070c4bdab1 fix: job seekers unable to submit verification documents
All checks were successful
build-and-release / build (push) Successful in 1m51s
The dashboard's Submit for Verification widget checked profile_data for
a documents/documents_data field that GET /api/jobseeker/profile/me never
returns, so the Submit button stayed permanently disabled. Even bypassing
that, it POSTed {document_urls: []}, a field the backend doesn't
recognize, instead of the profile_data shape submit-for-verification
actually expects.

Now fetches the job seeker's real uploaded documents via
GET /api/jobseeker/profile/documents, checks the correct document_type
field, and submits profile_data merged with the uploaded document URLs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 04:26:13 +05:30
Ashwin Kumar Sivakumar
18a9161e4f chore: remove orphaned legacy dashboard routes; fix NotificationBell's broken API calls
All checks were successful
build-and-release / build (push) Successful in 1m28s
An entire route/component cluster was built on a legacy sibling of
DashboardShell (DashboardLayout.tsx) and called APIs via the bare
api.get/post/patch/delete helper, which never prefixes /api/ — so
every call 404s against the real ingress (which only routes /api/*
to the backend). Confirmed orphaned: nothing in the live dashboard
shell (DashboardShell.tsx / dashboard.tsx) links to any of it; the
only cross-references are within the cluster itself. Some of it also
targeted the apps/leads backend service removed in the companion
backend commit.

Removed:
- src/routes/dashboard/wallet/ (buy.tsx, payu-return.tsx, invoices/*)
- src/routes/dashboard/requests.tsx
- src/routes/dashboard/leads/accepted/*
- src/routes/dashboard/marketplace/*
- src/components/dashboard/AcceptedLeadsView.tsx
- src/components/DashboardLayout.tsx (only consumer was the above)
- the unused `api` object in src/lib/api.ts (the unprefixed-path
  footgun itself — `request()`, which it wrapped, stays; it's used
  correctly elsewhere with explicit /api/ paths)

Fixed rather than deleted: src/components/NotificationBell.tsx uses
the same broken convention but IS live (rendered on every dashboard
page via DashboardShell). Switched it to apiFetch with correct
/api/me/notifications/* paths, matching the routes that actually exist
in apps/users/src/handlers/notifications.rs.

`tsc --noEmit` shows no errors under src/ after these changes (pre-
existing node_modules/type-declaration noise unrelated to this change
remains, as it did before).
2026-07-21 04:25:36 +05:30
Ashwin Kumar Sivakumar
142e185fc6 feat: render human-readable reference numbers and show submitted documents
All checks were successful
build-and-release / build (push) Successful in 1m41s
Replaces raw/truncated UUID labels with the backend's new reference_number
field across verification, application, and lead request views. Verification
status page now renders actual uploaded documents (previously invisible
after submission since the API never returned them).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 16:35:30 +05:30
Tracewebstudio Dev
49b979eb16 fix: eliminate API prefix double-encoding across all dashboard components
All checks were successful
build-and-release / build (push) Successful in 1m40s
All dashboard pages and widgets had one of three bugs:
- const API = "/api" combined with paths already starting /api → double prefix
- const API = '/api/gateway' → nonexistent gateway path prefix
- cleanPath stripping /api off paths when API was set to ""

Fix: set const API = "" uniformly and remove cleanPath rewrite in all 30+
affected files (CompanyJobsPage, CompanyApplicationsPage, CreditsPage,
JobSeekerJobsPage, CustomerRequirementsPage, all widgets, etc.).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-18 11:40:20 +02:00
Ashwin Kumar Sivakumar
6318b445d7 fix(ai-chat): fix gateway routing so chat send and KB lookups actually work
All checks were successful
build-and-release / build (push) Successful in 1m48s
AiChatWidget.tsx's local API constant was still "/api/gateway", a path
that only exists via the dev-only vite proxy and has no equivalent in
production (the gateway's resolve_upstream() has no "/api/gateway"
prefix). The usage-summary fetch had been patched to add auth headers
but this constant was left broken, and the two chat-send calls
(/chat/ask, /chat/message - the widget's core send-message path) were
untouched and doubly broken (wrong prefix plus a duplicated "/api").
Every send would 404 in production. Changed API to "/api" and dropped
the duplicated segment from both chat-send calls.

Also corrected a comment in CompanyJobsPage.tsx that incorrectly
described its own local API constant as "/api/gateway" (it's "/api");
no behavior change there, that fetch was already correct.

help-center.ts's uncommitted change (adding an "/api/gateway" prefix to
already-correct direct "/api/kb" calls) was reverted separately since it
introduced the same class of bug rather than fixing anything - it now
matches HEAD with no diff.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 05:48:15 +05:30
Ashwin Kumar Sivakumar
2025d912a5 fix(ci): sort registry prune by real image build time, protect current SHA
All checks were successful
build-and-release / build (push) Successful in 1m24s
registry_prune.py sorted candidate tags by the manifest GET response's
Date header - which is just "now", the moment the prune script made
that request - not when the image was actually built. Every tag it
queries in the same prune run lands within the same second, so the
"sort by age" was effectively random. On run #56 this deleted the tag
this same CI run had just pushed (4efe848, digest 60114dea) seconds
after pushing it, and seconds before the gitops step committed a
deployment pointing at that now-deleted digest - the cluster then
sat in ImagePullBackOff since the referenced image no longer existed.

Now reads the real "created" timestamp from the image's config blob
(resolving through a manifest list/index if the tag is multi-platform),
and always protects the current run's own SHA from deletion regardless
of sort order, as defense in depth against any remaining timestamp edge
cases.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 05:37:14 +05:30
Tracewebstudio Dev
4efe848f3a fix: local dev proxy, TypeScript errors, and test quality
All checks were successful
build-and-release / build (push) Successful in 2m15s
- middleware.ts: default GATEWAY_URL to localhost:9100 (was K8s hostname);
  proxy all /api/* to gateway instead of falling through to SolidStart renderer
- signup/index.tsx: fix kebab-case style property (align-items)
- dashboard/CreditsPage.tsx: fix IIFE closing in Show children
- AskAsh/index.ts: use ~ alias to fix bundler module resolution
- vite.config.ts: add string type to rewrite callback
- global.d.ts: add Window.__captchaCode and __testMode declarations
- help-center/article/[slug].tsx: add missing ContentBlock import
- test/setup.ts: add vitest/globals reference, fix IntersectionObserver mock
- tests/e2e: fix implicit any, string|null/undefined type errors in e2e specs
- tests/tsconfig.json: add tests-specific tsconfig with node types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 00:47:32 +02:00
Ashwin Kumar Sivakumar
0b38bc6ca5 fix(api): stop routing through a nonexistent /api/gateway rewrite layer
All checks were successful
build-and-release / build (push) Successful in 1m27s
The K8s ingress for this domain routes any /api/* path directly to the
Rust gateway service — there is no rewrite/proxy layer in production that
collapses /api/gateway/* down to /api/*. That rewrite only exists as a
dev-only vite proxy, so lib/api.ts's request()/apiFetch() (used by Save
Changes, Submit for Verification, document upload, wallet, jobs,
marketplace, portfolio, and more) were 404ing on every call in production
with "Route not found in gateway". ProfilePage.tsx and
VerificationStatusPage.tsx each had their own local apiFetch with the same
assumption, doubly broken (paths already included /api/, prefixed again).
All three now hit the already-fully-qualified /api/... path directly,
matching how the working signup/login calls have always done it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 01:17:44 +05:30
Ashwin Kumar Sivakumar
3ec5e60d15 fix(signup): remove duplicate role_key field from professional registration
All checks were successful
build-and-release / build (push) Successful in 1m29s
The register() request body sent both profession and role_key with the
same value. The backend's registration DTO aliases role_key onto the same
field as profession, so serde_json rejected the payload outright with a
"duplicate field" deserialization error — professional signup was
returning 422 for every role in production.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 22:14:10 +05:30
Ashwin Kumar Sivakumar
5290e7c70f fix(profile): persist uploaded document URLs and fill in missing doc config
All checks were successful
build-and-release / build (push) Successful in 1m47s
Uploaded document URLs lived only in a client-side signal and were never
included in the Save or Submit-for-Verification payloads (the latter sent
a document_urls field the backend silently ignored), so every submitted
verification case ended up with no attached documents for every role
except COMPANY. Now merges doc URLs into profile_data on save/submit and
repopulates them from the saved profile on reload.

Also adds the missing DOC_FIELDS entries for Developer, Video Editor,
Graphic Designer, Social Media Manager, and UGC Content Creator, and makes
the verification-status Documents tab role-aware instead of showing 3
hardcoded generic labels.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 21:23:45 +05:30
Ashwin Kumar Sivakumar
629a5eeebc fix(ci): push gitops updates via GitHub instead of direct-to-Forgejo
Some checks failed
build-and-release / build (push) Failing after 1m23s
GITOPS_PAT auth was failing against Forgejo. GitHub is the source of
truth for nxtgauge-gitops; push there and let sync-to-forgejo.yml
relay to Forgejo, which Flux actually watches.
2026-07-12 22:55:19 +05:30
Ashwin Kumar Sivakumar
c8af6e4114 fix(ci): use GITOPS_PAT for gitops push, not never-configured SSH secrets
Some checks failed
build-and-release / build (push) Failing after 1m50s
Third bug in the same chain: GITEOPS_REPO/GITEOPS_SSH_KEY were
referenced but never actually configured as repo secrets (only
REGISTRY_*, GITOPS_GITHUB_*, and GITOPS_PAT exist) — the digest
extraction fix got the job to actually reach this step, where it then
failed instantly and silently (a bare `test -n` with no echo). Switch
to an HTTPS clone with GITOPS_PAT, matching nxtgauge-backend-rust's
already-working workflow.
2026-07-12 18:36:42 +05:30
Ashwin Kumar Sivakumar
52e7e86a0e fix(ci): tolerate whitespace in buildx metadata-file digest grep
Some checks failed
build-and-release / build (push) Failing after 1m31s
The docker gateway fix got the build to actually run and push
successfully, but the digest-extraction grep required a compact
":" with no space, while buildx writes the metadata file
pretty-printed ("containerimage.digest": "sha256:..."), so the match
always failed, aborting the step post-push and skipping the
GitOps-release step entirely. Match nxtgauge-backend-rust's
whitespace-tolerant pattern.
2026-07-12 18:32:36 +05:30
Ashwin Kumar Sivakumar
ca1d3f504d fix(ci): detect docker gateway instead of hardcoding 127.0.0.1
Some checks failed
build-and-release / build (push) Failing after 2m8s
Every build on this branch has been failing with "Cannot connect to
the Docker daemon at tcp://127.0.0.1:2375" — the job container is
nested one level inside the runner pod's dind sidecar, so its own
loopback isn't the sidecar's. nxtgauge-backend-rust already carries
the fix (read the container's default-route gateway from
/proc/net/route); porting the same step here.
2026-07-12 18:28:17 +05:30
Ashwin Kumar Sivakumar
474fa637c3 fix: dead sidebar/wallet/leads/marketplace navigation links
Some checks failed
build-and-release / build (push) Failing after 1m11s
- DashboardLayout sidebar: Leads/Credits/Settings/Logout pointed to
  routes with no matching file (404). Leads now routes to the real
  accepted-leads page; Credits/Settings/Logout reuse the working
  /dashboard?nav= deep-link into the main dashboard's tab switcher
  (fixes Logout leaving users authenticated on a 404).
- wallet/buy.tsx, wallet/payu-return.tsx: post-purchase, cancel, and
  payment-verification redirects targeted non-existent /dashboard/wallet;
  now redirect to the existing credits/wallet tab.
- leads/accepted.tsx already contained a detail view gated on
  useParams().id, but was only registered as a flat route with no :id
  segment, so the detail view was dead code. Split into
  leads/accepted/index.tsx + leads/accepted/[id].tsx backed by a shared
  AcceptedLeadsView component.
- Added marketplace/[id].tsx: "View Requirement" buttons navigated to
  a route that never existed.
2026-07-12 17:58:37 +05:30
Ashwin Kumar Sivakumar
3d6a81d4ff feat(profile): add 3-step wizard for COMPANY role with single submit button
Some checks failed
build-and-release / build (push) Failing after 1m15s
2026-07-11 01:44:27 +05:30
Ashwin Kumar Sivakumar
ec4bb48358 feat(api): add submitCompanyProfileWithDocuments helper for wizard
Some checks failed
build-and-release / build (push) Failing after 1m7s
2026-07-11 01:34:37 +05:30
Benimaru
158c947944 fix(profile): use request() helper, check status correctly for save + submit
Some checks failed
build-and-release / build (push) Failing after 1m16s
2026-07-10 14:15:00 +05:30
Ashwin Kumar Sivakumar
67af6e4a5f test: Verify CI/CD automation end-to-end
Some checks failed
build-and-release / build (push) Failing after 1m7s
This is a test commit to verify:
1. GitHub Actions syncs to Forgejo
2. Forgejo Actions triggers build
3. Runners execute build
4. Image is pushed and deployed

Test timestamp: 2026-07-08T04:28:54+05:30
2026-07-08 04:28:54 +05:30
Ashwin Kumar Sivakumar
b130ce23b8 fix: Update Dockerfile to use ci.nxtgauge.com registry
Some checks failed
build-and-release / build (push) Failing after 1m6s
Changed from registry.nxtgauge.com to ci.nxtgauge.com/admin/
to fix SSL certificate issues and use Forgejo registry.
2026-07-08 03:37:18 +05:30
Ashwin Kumar Sivakumar
d0fb78d21d fix: Update buttons from orange to navy blue for accessibility WCAG AA compliance
Some checks failed
build-and-release / build (push) Failing after 1m19s
- Changed all buttons with orange background (#fd6116) and white text
  to navy blue background (#050026) with white text
- Maintains 12.5:1 contrast ratio (exceeds WCAG AA 4.5:1 requirement)
- Keeps brand orange (#fd6116) for decorative elements and accents
- Preserves all hover states and transitions

Fixes accessibility violations for chip buttons, nav buttons, auth buttons,
submit buttons, and primary action buttons.
2026-07-07 05:07:28 +05:30
Ashwin Kumar Sivakumar
bb252318ab feat: Implement light theme for NXTGAUGE
- Change background from dark #07051a to light #F4F2EC
- Update dashboard background to white #ffffff
- Update text color to #0F1729 (dark navy)
- Add light theme CSS variables
- Keep brand orange #fd6116
2026-07-06 22:39:48 +05:30
Ashwin Kumar Sivakumar
d0143c229b fix: Restore brand color #fd6116, use brand navy text for accessibility
- Keep original brand orange #fd6116 for buttons
- Use brand navy #050026 as text color on orange background
- Ensures WCAG AA compliance (6.67:1 contrast ratio)
- Maintains brand consistency
2026-07-06 22:32:24 +05:30
Ashwin Kumar Sivakumar
53ec112b50 chore: Configure Playwright for test111.nxtgauge.com testing
- Add TEST_ENV environment variable support
- Use production URL when TEST_ENV=production
- Disable webServer when testing production
2026-07-06 22:03:06 +05:30
Ashwin Kumar Sivakumar
2cb4d52fb3 fix: Storybook, Playwright runtime, accessibility color contrast, test routes
- Fix Storybook path alias resolution for ~ imports
- Fix Playwright runtime error by using production build
- Fix accessibility color contrast issues (WCAG AA compliant)
- Fix test route from /jobs to /professionals
- Update chip-btn.active and .btn.primary colors to #a33500
2026-07-06 22:02:39 +05:30
Ashwin Kumar Sivakumar
ba6390b158 chore: trigger build 2026-07-06 04:42:21 +05:30
Ashwin Kumar Sivakumar
7b29226a64 ci: remove GitHub Actions workflow - using Forgejo CI exclusively
Some checks failed
build-and-release / build (push) Failing after 1m16s
- Remove build-and-deploy-forgejo.yml from GitHub Actions
- Forgejo CI at ci.nxtgauge.com now handles all builds and deployments
- All images pushed to Forgejo registry (ci.nxtgauge.com/ashwin/*)
2026-07-06 04:19:48 +05:30
Ashwin Kumar Sivakumar
cab8cf5575 fix(ci): switch from GHCR to Forgejo registry
Some checks failed
build-and-release / build (push) Failing after 1m16s
- Update workflow to push to ci.nxtgauge.com/ashwin/nxtgauge-frontend-solid
- Use FORGEJO_USERNAME and FORGEJO_TOKEN secrets
- Fix gitops repo cloning to use x-access-token
2026-07-06 03:49:19 +05:30
Ashwin Kumar Sivakumar
f55a2dad77 feat: AI Credits Admin Panel
Some checks failed
build-and-release / build (push) Failing after 1m6s
- Add AiCreditsAdmin component for managing AI credits
- View user balance with detailed credit breakdown
- Transaction history (ledger) viewer with pagination
- Manual credit adjustment (ADD/DEDUCT) with audit reasons
- Reconcile tab for generating reports
- Integrate with backend /admin/ai-credits endpoints
2026-07-06 01:58:29 +05:30
Ashwin Kumar Sivakumar
a0cfbe15eb fix(ci): use runner docker host
Some checks failed
build-and-release / build (push) Failing after 1m17s
2026-07-05 22:25:37 +05:30
Ashwin Kumar Sivakumar
da7898e083 fix(dashboard): change all API endpoints from /api/gateway to /api
Some checks failed
build-and-release / build (push) Failing after 1m17s
2026-07-05 18:29:07 +05:30
Ashwin Kumar Sivakumar
09e26d2935 fix(profile): change API path from /api/gateway to /api
Some checks failed
build-and-release / build (push) Failing after 1m11s
2026-07-05 18:00:39 +05:30
Ashwin Kumar Sivakumar
38c7b4022d fix(signup): auto-login after OTP verification
Some checks failed
build-and-release / build (push) Failing after 1m17s
2026-07-05 17:04:10 +05:30
Ashwin Kumar Sivakumar
3ee5e908cf fix(signup): add role_key to registration requests
Some checks failed
build-and-release / build (push) Failing after 1m12s
2026-07-05 16:51:30 +05:30
Ashwin Kumar Sivakumar
d7810ace96 fix(auth): change all /api/gateway/auth endpoints to /api/auth for forgot-password, login, and dashboard
Some checks failed
build-and-release / build (push) Failing after 1m6s
2026-07-05 16:25:32 +05:30
Ashwin Kumar Sivakumar
1bf3191c49 fix(signup): change all auth API endpoints from /api/gateway to /api
Some checks failed
build-and-release / build (push) Failing after 1m17s
2026-07-05 16:21:17 +05:30
Ashwin Kumar Sivakumar
07aa835da5 fix(signup): change API endpoint from /api/gateway/auth/register to /api/auth/register
Some checks failed
build-and-release / build (push) Failing after 1m16s
2026-07-05 14:56:11 +05:30
Ashwin Kumar Sivakumar
0cf975f227 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'.
2026-07-04 22:08:03 +05:30
Ashwin Kumar Sivakumar
c06860367c ci(forgejo): update frontend build pipeline
Some checks failed
build-and-release / build (push) Failing after 0s
2026-07-03 19:51:38 +05:30
Ashwin Kumar Sivakumar
48ef3e23f5 ci: sync GitHub pushes to Forgejo
Some checks failed
build-and-release / build (push) Failing after 1s
2026-07-03 18:59:00 +05:30
Ashwin Kumar Sivakumar
6604842788 ci: add GitHub Actions workflow to sync commits to Forgejo
Some checks failed
build-and-release / build (push) Failing after 0s
2026-07-03 18:42:59 +05:30
Ashwin Kumar Sivakumar
6e92ed43b6 fix(signup): create proper index.tsx for signup folder, rename job-seeker to jobseeker
- Fix routing structure with index.tsx
- Remove conflicting signup.tsx at root level
- Rename job-seeker.tsx to jobseeker.tsx for cleaner URLs
2026-07-03 17:59:34 +05:30
Ashwin Kumar Sivakumar
cbe49ff5ad fix: update CTAs and fix company signup validation
- Update homepage CTAs to point to new signup URLs
- Fix company signup to not validate lastName
- Add customer signup page
- Fix professionals page CTA
2026-07-03 17:55:45 +05:30
Ashwin Kumar Sivakumar
bdf51ba3da feat(signup): create separate signup pages for each role
- /signup/company - dedicated company registration page
- /signup/job-seeker - dedicated job seeker registration page
- /signup/professional - dedicated professional registration page
- /signup - redirects to appropriate role-specific page
- Removed tabs, each role has its own clean registration flow

Fixes role assignment issues by having dedicated pages per role type.
2026-07-03 17:51:16 +05:30
Ashwin Kumar Sivakumar
9519337030 fix(signup): show role badge for professional/customer intents, fix role assignment
- Hide role selector tabs when intent is provided via URL
- Show role badge for professional/customer roles
- Add profession field to API call for backend role assignment
- Fixes issue where roles weren't properly assigned after signup
2026-07-03 17:40:14 +05:30
Ashwin Kumar Sivakumar
50a27aaed0 Remove dead fake card-entry UI from AI credits checkout
This form (card number/expiry/CVV/name) was never wired to anything -
PayU collects card details on its own hosted page. Now that AI credit
purchases actually open a real PayU checkout instead of faking a
payment_id/signature, this leftover UI was just misleading.
2026-07-02 18:58:51 +05:30