Skip to content

Frontend redesign: new UI across every screen - #23

Merged
coderback merged 11 commits into
mainfrom
feat/redesign
Oct 16, 2026
Merged

coderback merged 11 commits into
mainfrom
feat/redesign

Conversation

@coderback

Copy link
Copy Markdown
Owner

Summary

Rebuilds the Next.js frontend to the new design (warm-neutral ground, white cards, one teal accent, Geist and Geist Mono), screen by screen, following the build order in the design handoff. The API is unchanged; where a screen needs data the API doesn't return yet, it uses a documented fallback.

  • Foundations: colour tokens as CSS variables with a dark set, wired into Tailwind. Geist from the bundled fonts. A light / dark / system theme applied before first paint. Shared components (cards, chips, status chips, fit ring, risk bar, company mark, fact and date tiles, tabs, slide-over, step tracker) and stroke icons in place of the Unicode glyphs. A new sidebar with Agent review, persona strength, the user row and the theme switch.
  • Home: what needs attention, applications paused before submit, follow-ups due, four KPI cards, the pipeline, AI exposure and top matches.
  • Job feed: paste-a-link in the top bar, a segmented search band with a two-thumb salary range, a filter column of real checkboxes, cards with a match ring and chips, and a preview pane. The fit analysis (an LLM call) runs only on "Check my fit" and is kept for the session.
  • Job workspace: header with fact tiles, a five-step tracker over the existing flow, the CV and letter editors as collapsible sections beside the paper preview, and the agent's browser inline at step 5. That step has a browser frame, the agent's notes as a timeline, and Skip / I submitted it myself / Submit. A right rail holds fit, sponsorship and AI exposure.
  • Agent review (new, /review): the applications waiting for review. With no session registry in the API, it reopens the workspace to run the agent again, or records Skip / I submitted it myself.
  • Applications: a board with drag and drop between stages, quick filters, a table view, and a slide-over with a focus trap.
  • AI exposure & roadmap: summary cards, a skill-by-skill table with level filters, and roadmap cards.
  • Persona: thirteen sections with status, the open section kept in the URL hash, autosave in place of the Save button, cards for repeating entries with undo on remove, chip inputs for skills and lists, and an export menu.
  • Sign in, sign up and onboarding: split-screen auth. Onboarding has three steps, and the CV result card replaces the drop zone once the CV is read. Onboarding now starts from the saved persona, so finishing never wipes existing data.

Notes

  • Leaving the job page during an agent run closes the agent's browser, as before; the page now warns first and cancels the stream on unmount.
  • Fallbacks for missing API data (paused sessions, event history, filled-field lists, salary and work-setting filters, facet counts, saved searches, similar roles, a single-job endpoint and others) are listed in the handoff's backend to-do, for a later API change.
  • Adds .eslintrc.json (next/core-web-vitals), so npm run lint runs without prompting.

Testing

  • npm run build and npm run lint pass with no warnings.
  • Playwright smoke tests (9) pass against the production build: the existing ones on the new selectors, plus persona autosave of comma-typed lists, a status change in the application panel (Esc closes it), the review queue recording an application you sent yourself, and the theme switch.
  • Every screen checked at 1440px and 390px, in light and dark, against a mocked API: no horizontal overflow and no console errors.

…mponents, sidebar

Colour tokens as CSS variables with a dark set under .dark, wired into Tailwind.
Geist and Geist Mono load from the bundled fonts; an inline script applies the
saved theme (light, dark or system) before first paint.

Shared pieces for the screens: buttons, cards, chips, status chips, fit ring,
risk bar, company mark, fact and date tiles, tabs, slide-over and step tracker,
plus stroke icons that replace the Unicode glyphs.

The new sidebar adds Agent review (with a count of applications waiting), the
persona strength card, the user row and the theme switch. A small shared cache
lets the sidebar and pages share API reads.
Greeting with what needs attention, the paused-before-submit card for
applications waiting for review, follow-ups due this week (applied a week ago
and still no reply), four KPI cards with a ten-week history, the pipeline by
stage, AI exposure of your skills and the top matches from the feed.

The old quick-action cards are gone; the sidebar covers them. Agent activity
and the next-interview strip wait on data the API doesn't keep yet.
A paste-a-link field in the top bar replaces the Analyze toggle. The search
band takes role or skill, location, experience asked and a two-thumb salary
range. Filters move to a column of real checkboxes and radios (sponsorship,
work setting, level, degree, clearance), behind a Filters button on narrower
screens.

Each card shows the match ring, sponsorship and requirement chips, and the
salary. Beside the list, a preview of the selected job: fact tiles, match,
sponsorship and AI exposure, with Start application, Full details and Not for
me (tracked as Discarded, so it leaves the feed). The fit analysis is an LLM
call, so it runs only on Check my fit and is kept for the session.

Salary, hybrid and clearance are matched on the loaded page until the API takes
them. Fetching, discovery polling and infinite scroll are unchanged.
The job page gets a header card with the posting link, Save, Discard and four
fact tiles (salary, setting, experience asked, visa sponsorship), and a five-step
tracker over the existing flow: fit analysis, tailored CV, cover letter, agent
fills form, you review and submit. Done steps can be revisited.

The document editor becomes collapsible section cards beside the paper preview,
with Regenerate and Download PDF. The agent's browser now opens inline at step
five: a browser frame around the live screenshot (takeover works as before),
the agent's notes as a timeline, and a sticky bar with Skip, I submitted it
myself and Submit, which send skip, done and submit. Leaving the page warns
first, and unmounting cancels the stream so the agent's browser closes.

The right rail holds the fit card, the sponsorship card (with They sponsor and
They don't), and the role's AI exposure. Below the steps, About the role has
Description and Company tabs. Previous and Next match walk the feed's order.
A cached Check my fit result from the feed is reused instead of re-running.
A new /review page lists the applications the agent filled and stopped on
(Pending Review) as tabs, with how long the oldest has waited. The API keeps no
browser sessions between page loads, so the page reopens the job workspace to
run the agent again, and records Skip (Discarded) or I submitted it myself
(Applied) directly. The review layout and browser frame are shared with step
five of the job workspace.
Applications become a board of six stage columns (Rejected and Discarded show
on request), with drag and drop between columns to change status, a search
box, and Needs attention quick filters: needs review, follow-up due (applied
7 to 13 days ago, no change since) and no reply in 14+ days. Applied cards
show how long they have sat there, amber past two weeks.

A card opens a slide-over (focus trapped, Esc closes) with the status select
as the keyboard alternative to dragging, facts, a timeline from the dates the
tracker keeps, notes, gaps to prepare for and the posting link. The table view
lists the same rows with status chips.
Three summary cards (your skill mix on a Low / Medium / High scale, the first
target role, the most resilient skill), a skill-by-skill table with level
filters, persona skill groups and the reason for each score, and the roadmap as
six numbered cards with a Start with box. Rescore my skills re-runs the
scoring; the last roadmap is kept in this browser per account so it survives
a reload. Target roles themselves aren't scored by the API yet, and the card
says so.
Digital Twin Persona becomes Persona. The single long form is split into
thirteen sections in a left list, each marked complete, needs attention or
optional, with the open section kept in the URL hash. Edits save themselves
(a debounced PUT /persona, queued so saves never overlap, flushed when you
leave); the top bar shows the save state and holds the Export menu.

Roles, education, projects, certifications and STAR stories are cards with
Edit and Remove (with undo); skills are groups of removable chips. The header
shows persona strength with the top two things to add, scored on the client,
and the page closes with what the AI never sees. The professional summary,
which the old form had no field for, is now editable under Identity.
Sign in and sign up share a split screen: the form on the left, what Windrush
does on the right. Sign up asks for a name too and saves it to the new persona
(the signup endpoint takes only email and password). Forgot password stays
hidden until there is a reset flow.

Onboarding gets a top bar with three-step progress and Finish later. Step one
is a PDF drop zone that turns into a result card once the CV is read (file name,
counts of roles, skills, degrees and projects, Use a different file). Step two
is the job-board login; step three takes job titles and locations as chips, a
work setting and whether you need visa sponsorship. It now starts from the
saved persona, so finishing never wipes existing data.
Selectors follow the new screens (labelled fields, filter checkboxes, the
experience select, Clear all), and every signed-in page now mocks the persona
and applications the sidebar reads. New tests: the persona autosaves
comma-typed titles and locations as lists, a status change in the application
panel is saved and Esc closes it, the review queue records an application you
sent yourself, and the theme switch applies and remembers dark mode.
Only ask for target titles when the persona has none; otherwise say discovery
will look again.
@coderback
coderback merged commit bcfba1a into main Oct 16, 2026
4 checks passed
@coderback
coderback deleted the feat/redesign branch October 16, 2026 01:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant