30d668f692
fix: add error rollback and error state hygiene in digest store
2026-03-20 09:56:22 -07:00
bc4d6df8f0
feat: add digest Pinia store
2026-03-20 09:52:52 -07:00
dcd41d74fc
style: pass Path(DB_PATH) to insert_job for type consistency
2026-03-20 09:51:35 -07:00
12ff809bd5
feat: add queue-jobs and delete digest endpoints
2026-03-20 07:44:19 -07:00
4873201242
fix: guard extract_digest_links db.close(), remove domain-in-path false positive, add hint assertion
2026-03-20 07:04:24 -07:00
aee8038be9
feat: add /extract-links endpoint with URL scoring
2026-03-20 06:59:26 -07:00
b718439c54
fix: guard db.close() in add_to_digest_queue with try/finally
2026-03-20 06:54:50 -07:00
641ea3da53
feat: add GET/POST /api/digest-queue endpoints
2026-03-20 02:51:17 -07:00
7d9be91aab
fix: fix indentation and add try/finally in digest startup
2026-03-20 02:36:23 -07:00
b56ad40c9e
feat: add digest_queue table to schema and dev-api startup
2026-03-20 02:34:41 -07:00
11a8441fed
docs: add digest queue implementation plan
2026-03-20 02:19:44 -07:00
24a16ee4b0
docs: add digest scrape queue design spec
2026-03-19 20:28:23 -07:00
d2dd902482
feat(signals): add Unrelated and Digest reclassify chips to InterviewsView
2026-03-19 20:01:08 -07:00
9d03cb55a9
feat(signals): add Unrelated and Digest reclassify chips to InterviewCard
2026-03-19 20:00:27 -07:00
d10093cfa0
feat(signals): strip HTML and normalize whitespace from email bodies
2026-03-19 19:59:59 -07:00
eff68791f4
feat(interviews): paginate applied list (10 per page)
2026-03-19 19:45:59 -07:00
fbb1b1ef3b
fix(signals): add .stop modifiers and aria-labels to pre-list signal banner buttons
2026-03-19 19:35:15 -07:00
f62c103654
feat(signals): expandable body + reclassify chips in InterviewsView pre-list
2026-03-19 19:31:23 -07:00
b52d7c0f5b
fix(signals): per-signal expand state, error rollback, type safety in InterviewCard
2026-03-19 19:26:36 -07:00
b973469bc4
feat(signals): expandable body + reclassify chips in InterviewCard
2026-03-19 19:22:10 -07:00
b20fef6c03
feat(signals): add body and from_addr to StageSignal interface
2026-03-19 19:19:27 -07:00
353c07cf92
fix(signals): capture rowcount after commit in reclassify_signal (consistency)
2026-03-19 19:18:43 -07:00
86d56ee2eb
feat(signals): add body/from_addr to signal query; add reclassify endpoint
2026-03-19 19:14:11 -07:00
e8b47fa60a
plan: signal banner redesign — expandable email + reclassify chips
2026-03-19 17:22:46 -07:00
f4dd99a136
docs: fix signal banner spec — neutral two-call path, Map reactivity, type union notes
2026-03-19 17:12:19 -07:00
168d2b7a4a
docs: spec for signal banner expandable email and re-classification UI
2026-03-19 17:07:55 -07:00
22e45575b7
feat(interviews): collapsible Applied section, email sync pill, pre-list signal banners
2026-03-19 16:38:05 -07:00
fb3e5b7532
feat(interviews): add stage signal banners and extend move emit in InterviewCard
2026-03-19 16:31:33 -07:00
dd151f1afc
feat(interviews): add preSelectedStage prop to MoveToSheet
2026-03-19 16:25:48 -07:00
6ea2fc5346
feat(interviews): export StageSignal interface; add stage_signals to PipelineJob
2026-03-19 16:22:59 -07:00
690a471575
feat(interviews): add stage signals, email sync, and dismiss endpoints to dev-api
2026-03-19 16:17:22 -07:00
60383281fb
docs: add interviews improvements implementation plan
2026-03-19 09:46:20 -07:00
cbdbed9a8e
docs(interviews): fix spec review issues (SQL column, emit signature, stage mapping, event_rescheduled)
2026-03-19 09:32:26 -07:00
12f714abb8
docs(interviews): spec for applied collapsible, email sync pill, stage signal banners
2026-03-19 09:24:18 -07:00
eb0a12abef
fix(apply): check saveCoverLetter error; document cover-letter-generated in wrapper
2026-03-19 08:36:19 -07:00
ff84a4f02f
fix(apply): ensure loading resets on fetchJobs error and clear toast timer on unmount
2026-03-19 08:24:52 -07:00
b1eec1b28f
feat(apply): desktop split-pane layout with narrow list, expand animation, speed demon + marathon easter eggs
2026-03-19 08:21:08 -07:00
1e8263fb4c
feat(apply): extract ApplyWorkspace component with job-removed emit and perfect match easter egg
2026-03-19 08:14:15 -07:00
1367ca377a
refactor(apply): add score-badge--mid-high token for 4-tier scoring
2026-03-19 08:09:39 -07:00
b663458b28
docs(apply): fix plan review issues (onUnmounted, mq listener cleanup, job-row__sep CSS)
2026-03-19 08:00:35 -07:00
025e53da00
docs(apply): add implementation plan for desktop split-pane
2026-03-19 07:57:55 -07:00
84e6ec1f43
docs(apply): fix spec review issues (overflow:clip, CSS var, threshold note)
2026-03-19 07:45:16 -07:00
5959860deb
docs(apply): add split-pane desktop layout design spec
2026-03-19 07:37:34 -07:00
6425da150d
feat(interviews): complete InterviewsView with kanban, keyboard nav, confetti
...
Replaces stub with full kanban implementation: three-column pipeline
(Phone Screen / Interviewing / Offer+Hired), pre-list for applied/survey
jobs, rejected accordion, keyboard navigation (arrow keys + vim keys),
confetti easter egg on hired move (respects prefers-reduced-motion),
and /prep/:id route added to router.
2026-03-19 00:38:11 -07:00
0394366b1a
feat(interviews): add MoveToSheet bottom sheet / dialog component
2026-03-18 18:15:02 -07:00
d29ee1b7f8
feat(interviews): add InterviewCard component (medium density)
2026-03-18 18:15:01 -07:00
b946155ade
feat(interviews): add interviews Pinia store with optimistic moves
...
Setup-form Pinia store with per-stage computed lanes, optimistic status
mutation on move, and API-error rollback. Shallow-copies API response
objects on fetch to prevent shared-reference mutation across tests.
2026-03-18 15:26:44 -07:00
6feafc12cd
feat(interviews): add /api/interviews and /api/jobs/:id/move endpoints
...
Adds GET /api/interviews to fetch all pipeline-stage jobs in one call,
and POST /api/jobs/:id/move to transition a job between kanban statuses
with automatic timestamp stamping (or rejection_stage capture).
2026-03-18 15:22:51 -07:00
2384345d54
feat(vue-spa): Apply view — job picker list + cover letter workspace
...
- router: add /apply/:id → ApplyWorkspaceView (lazy-loaded)
- ApplyView.vue: approved job list sorted by match score; badges for
match %, remote, and cover-letter draft status; links to workspace
- ApplyWorkspaceView.vue: two-panel desktop layout (sticky job details
left, editor right); cover letter state machine (none/queued/running/
ready/failed); auto-resize textarea; word count toolbar; Save button
with dirty tracking; Download PDF (programmatic <a> click, named file);
Generate with AI + Retry; Mark as Applied + Reject Listing actions;
polling loop for in-flight generation tasks; toast on action
- HomeView.vue: split combined "Archive Pending + Rejected" into three
separate per-status archive buttons (only shown when count > 0)
- dev-api.py: add GET /api/jobs/:id, POST /api/jobs/:id/applied,
PATCH /api/jobs/:id/cover_letter, POST .../cover_letter/generate
(wires submit_task), GET .../cover_letter/task (poll), GET .../pdf
(reportlab); has_cover_letter field on list + detail responses
2026-03-18 09:05:40 -07:00
ffec6bb843
fix(vue-spa): suppress spring snap-back on processed cards
...
When a new job prop arrives after approve/reject, the watch cleared the
exit-transform inline style while the spring transition was still active,
causing the card to animate from offscreen back to center before the new
card rendered. Fix: set transition:none before clearing the style, then
restore it on the next rAF — browser paints the new position first.
2026-03-17 22:39:06 -07:00