- VerificationStatusPage: showInlineEditors now hides for PENDING and
UNDER_REVIEW (only shows when user action is needed: NOT_SUBMITTED,
DOCUMENTS_REQUESTED, REVISION_REQUESTED, REJECTED). Previously the
old ProfilePage form with validation errors appeared after submission.
- VerificationStatusPage: wrap onVerificationStatusChange passed to
ProfilePage so the local status signal also updates when the wizard
calls onSubmitted. Previously the status card kept showing NOT_SUBMITTED
until a page reload.
- VerificationStatusPage progress tracker: inline signal reads directly
in JSX instead of capturing them in local variables. In Solid.js, local
const done = signal() inside a For callback is computed once and goes
stale — the step circles stayed grey even after status changed to PENDING.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
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>
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>
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>
- DashboardShell: sticky sidebar + header wrapper with shared style tokens
- ProfilePage: 3-tab form (Basic, Documents, Settings) per role, save/submit-for-verification
- PortfolioPage: full CRUD wired to /api/:prefix/portfolio/me endpoints
- VerificationStatusPage: 7-state status display with progress timeline and resubmit flow
- dashboard.tsx: REAL_PAGES routing intercepts these three sidebar items and renders
real components instead of DashboardDesignPreview mock
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>