Availability
All career features ship together and are available without a release flag: Today, the coach, Knowledge, offer comparison, the application workspace (fit checks, application answers, interview preparation, practice, debriefs and employer messages), discovery, reminders, and recorded voice practice. AI generation requires a usable AI connection. Voice can use a speech-capable connection or supported browser speech. Scheduled work requires a working deployment scheduler and explicit user opt-in. The verification section below covers deterministic checks and live-provider evaluation before production deployment. The assistant uses the existing saved AI connections. ConfigureENCRYPTION_SECRET, then add and test a provider in Settings → AI & developer. Users choose their provider; provider usage is billed under that connection. Public research uses the selected web-access connection. See web access and job search and AI configuration for deployment and credential requirements.
Where things live
The career platform has two places:- Career (sidebar): Today (notifications that need you, new roles from discovery, the next interview and your schedules), Coach (conversations across your whole search), Knowledge (facts, STARR stories and preferences) and Offers (two saved offers side by side).
- The application workspace (open an application, then Open workspace): one job in seven tabs, in the order a search happens. Fit, Apply, Prepare, Practise, Debrief, Messages and Saved. The workspace opens on the tab for the application’s stage, and Ask the coach opens the coach beside any tab. A job can have several conversations: start a new one, or reopen or delete an earlier one from the sheet’s history.
Prepare for an interview
- Add the round with Edit in the workspace’s Next step card: type, date and time (in a chosen timezone), length, who you’ll meet, and what they asked you to prepare. A linked resume is optional.
- On Prepare, choose Plan my preparation. The briefing is a timed plan, questions to ask, the stories to bring and a 10-minute briefing (your focus, an opening line, two stories and what isn’t evidenced yet).
- Switch on Refresh the briefing 24 hours before to run it again automatically. Editing the interview later moves that run with it.
- From 15 minutes before the start, Prepare becomes a short checklist that needs no AI or research, with Rehearse one answer aloud.
Control knowledge and what is sent
Knowledge holds facts, stories and preferences separately from document formatting. Add a few relevant accomplishments, or tell the coach about them; no questionnaire is required.- Remember facts from my messages has three modes. Ask first (the default) shows a proposal under the coach’s answer; nothing is saved until you choose Remember. Automatically saves facts you state and shows Undo. Never turns memory off. Mock answers are never remembered.
- Facts show where they came from and their correction history. Correct keeps the original in the history and marks stories that use the fact for review. Switching a fact off stops the coach from reading it; a switched-off fact can’t back a story. Facts private to one application are used only when coaching for it, until you choose Use for all applications.
- Forget removes the fact after a six-second undo, unlinks it from stories and saved items, and keeps a content-free marker so it isn’t re-extracted from the same source. The original resume, message or file isn’t changed.
- STARR stories contain Situation, Task, Action, Result and Reflection with the facts that back them. Leave a part blank until you can support it.
- Preferences (target roles, places, what matters, minimum base salary, office days, notice period) feed discovery, the match chips on new roles, Fit’s requirement checks and Offers. All times in Career are shown in the account’s timezone, set in Settings → Preferences (UTC until changed).
Use the workspace tabs
Offers compares two saved offers in their own currency and pay period. Differences are marked only when the currency and period match, unknown or conditional values are flagged, and totals aren’t added up. Plan what to ask opens the coach with both offers as context.
Undo replaces confirmation dialogs throughout: forgetting, deleting, dismissing and applying changes all show a six-second Undo.
Operate scheduled work
Supported deployments schedule career work automatically once a minute. Users still explicitly enable each schedule and configure any required AI/web connection.
Vercel’s checked-in once-per-minute schedule requires Pro or Enterprise. Hobby supports at most one invocation per day and rejects more frequent schedules during deployment. On Hobby, change the schedule to
0 0 * * *; daily ticks can delay reminders and preparation by a day. See Vercel Cron limits. Native Vercel Cron runs on production deployments. Cloudflare trigger changes can take up to 15 minutes to propagate; see Cron Triggers.
Generate the Vercel token with openssl rand -hex 32, supply it through the deployment’s secret mechanism, and never log authorization headers. The UI checks deployment configuration, not successful delivery of ticks. Verify a due test reminder in a dedicated installation after deployment. Minute-by-minute polling queries PostgreSQL even when no schedules are due, so a database that scales to zero can remain awake.
All adapters await the same bounded PostgreSQL-backed processor. Node prevents overlapping ticks within its process; database claims coordinate multiple processes and native platform invocations. Cloudflare keeps scheduled work alive with waitUntil() and releases its invocation’s database pool after work completes. No task depends on an open browser.
Optional manual invocation
An operator can trigger a tick for diagnostics or use a custom scheduler. SetCRON_SECRET (at least 16 characters), then call GET or POST /api/career/run with Authorization: Bearer <secret>. Without this token the HTTP endpoint returns 404; invalid authorization returns 401. Internal Node and Cloudflare ticks continue without this token.
From a source checkout with Node.js 24, a manual tick can use a protected environment file outside the repository:
Enable a user’s schedule
In Career → Today, Schedules → Add (or a schedule’s row) opens the schedule sheet:- Find roles: a public search (it starts from Preferences) run every day, every 3 days or every week. Results wait in Today for review; tracking one creates an application at Saved only when the user chooses Track in Applications.
- Prepare: an interview, when the briefing runs (24 hours before, 2 hours before, or Morning of: 08:00 on the day, moving earlier to two hours before interviews starting before 10:00) and a tested AI connection. If the interview starts sooner than that, saving runs it now.
- Remind me: an application and a time; it fires once into Today.
Understand delivery and retry limits
PostgreSQL owns due work, leases, attempts, and deduplication. A tick handles at most two jobs, and active work is serialized per user. Duplicate ticks and reclaimed leases are designed to avoid duplicate visible results. Failed jobs wait five minutes before a later tick can retry, with at most three attempts. Retries can repeat provider work and incur usage. Scheduled preparation uses its selected AI connection while that connection is usable; if it is disabled, deleted, or cannot be resolved, it falls back to the default usable connection. This can change which provider receives the context and incurs usage. A generation failure does not immediately switch providers; it follows the normal retry schedule. Exhausted work produces an actionable in-app failure. Discovery reads each new search result and keeps it only when it is one open role’s posting: the page describes exactly one schema.orgJobPosting whose closing date hasn’t passed, or it sits at a posting address on a common applicant tracking system or job board (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Workday, LinkedIn, Recruitee, Personio, Teamtailor, Wellfound or Welcome to the Jungle). Job-board lists, careers pages and articles never reach New roles and aren’t read again. Pages are read with the built-in reader first and with the web search connection only when that fails. URLs are canonicalized and common tracking parameters stripped, so a result seen before stays quiet. Untracked visible postings found again are rechecked after a week to refresh their description and open status without another new-role notice. Tracking a role saves its posting text, company and location with the application, so Fit can check it at once. Dismissed results stay hidden. A posting being found is an observation, not proof that it is open or genuine.
Owner-email notifications require explicit opt-in, a verified account email, and working SMTP configuration. In-app results are retained independently. The email attempt is recorded before contacting SMTP, with a deterministic message ID. A claim left unfinished by a stopped worker becomes eligible again after ten minutes. Completed sends and recorded failures are not retried. A crash after SMTP accepts a message but before completion is recorded can cause a duplicate; SMTP acceptance does not establish inbox delivery. A recorded failure appears in-app; use the in-app result as the durable record.
Notifications are written in English for now. Each one is stored as what happened (its type and details), and its words are written when it’s shown, so a later release can show notifications in your language and their times in your timezone.
Optional voice practice
On Practise, choose Speak. Voice starts with the default connection when it supports speech, otherwise another usable speech connection; Voice settings chooses another, or a different model.
Speech calls are billed separately from text coaching and may use tokens on the connection’s account; the page says so where they happen. Without a connection for a job, the browser does it: its own voice reads questions aloud (every major browser), and its dictation turns your answer into text (Chrome, Edge and Safari; not Firefox). Browser speech is free, but depending on the browser, its maker may process the audio. Where neither is available, typing remains a complete alternative.
With a connection, record up to two minutes, or choose a nonempty WebM, MP4/M4A, MP3, WAV, or Ogg file of at most 2 MiB. With the browser’s dictation, your words appear as you speak, for up to two minutes. Check the transcript (it becomes your answer and can be edited), then choose Get feedback. Original and edited transcripts remain distinguishable and can be deleted.
The server keeps the transcript, not the raw recording. After successful transcription, browser audio is cleared unless you choose to keep it locally for download. Failed transcription leaves the current recording available for retry. Local audio is temporary and clears when the panel unmounts. Provider retention follows the selected provider’s policies. Spoken questions send only the question’s text.
Migrations, export, and deletion
Career storage ships through additive migrations, including new user-owned tables and conversation context fields. Back up your database and file storage, review generated SQL, and apply the normal migration workflow before deploying the update. Server startup also applies migrations. Account export includescareer.json: preferences, facts and source/revision metadata, stories, saved items, workspace state (answers, checklist, plan ticks), schedules, notifications, discovery results, jobs, voice transcripts, and career conversations/messages with attachment metadata. Conversations include their application context. Provider credentials are not included. Attachment metadata is not a backup of the attachment’s binary contents.
Account deletion removes the user’s dependent career records along with the existing account data and private upload storage. Deleting an individual fact, saved item, transcript, application, or conversation has narrower effects; it does not delete copies previously exported or sent to a provider. Include database backups and externally retained data in your installation’s retention policy.
Verify before rollout
Use a disposable PostgreSQL database and synthetic users. These integration suites create an isolated schema, apply the complete migration chain, and remove their schema afterward. Never point test environment variables at production data.INTEGRATIONS_TEST_DATABASE_URL or the supported COVER_LETTER_TEST_DATABASE_URL fallback, the career database suites skip; a green run with skipped suites is not verification. Follow development setup for the remaining environment and package prerequisites.
The deterministic cases cover ownership, submitted-version isolation, correction/forget behavior, practice/debrief separation, stale material, exports/cascades, overlapping ticks, retries/cancellation, recurrence, and endpoint authorization. Also run affected package typechecks, existing assistant regression suites, boundary/lint/format checks, and the production build. Test the deployed endpoint and owner-email flow in a dedicated installation as described in deployment checks.
Career browser scenarios require FLAG_ALLOW_UNSAFE_AI_BASE_URL=true for the local synthetic provider. With the browser test environment configured, run pnpm test:e2e tests/e2e/specs/career.spec.ts. These cover offline urgent preparation, memory controls, selected submitted snapshots, persistence, and first-send context exclusions.
Opt-in live evaluation
Live evaluation is a manual, separately authorized use of configured provider accounts; the deterministic suite makes no live quality claim. Use synthetic histories, known public sources, and a recorded provider/model configuration. Include several professions (for example software engineering, nursing, and sales), junior and experienced candidates, and at least three supported UI/coaching languages. Include career changes, missing metrics, conflicting documents, and ambiguous interviewer identities. For each configuration, record the following outcomes without retaining private resumes or transcripts in operational logs:
Treat any cross-account access, invented personal claim, wrong submitted document, or inability to remove private context as a release blocker. Record unresolved quality and accessibility findings before production deployment. Monitor latency, completion/failure counts, provider usage, corrections, and user-rated usefulness; avoid raw document, research-page, or transcript content in operational logs.
Keep product guides current
Update user-facing guides in the same change as the behavior they describe. Start with the changed screen or service below, then follow its guide’s related links. The overview explains the product, the first application tutorial teaches the starting flow, and the reference records controls and limits.
Guide names above live in
docs/guides/; screenshots live in docs/images/guides/career/. Keep new pages in docs/docs.json. Use fictional people, companies, messages and results for screenshots. Capture the actual interface, inspect the image and explain what the reader should notice in its caption and alt text.
Verify labels in the web component and behavior in the owning API service before documenting them. Recheck opt-ins, default AI selection, chat versus workspace context, account timezone, the early-interview exception, voice fallback, unknown values and Undo. A fact is a user-confirmed record; it is not independently verified. Result fields can remain blank but do not enforce proof. Never promise fixed daily role counts, guaranteed inbox delivery or error-free AI claims.
Check local links, image paths, navigation entries and formatting after edits. Preview changed pages when a documentation preview is available. Changes confined to prose do not need application tests; changed behavior still needs its normal checks.