chore(M001/S01): auto-commit after research-slice
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# M001: Gmail and draft quality loop
|
||||
|
||||
**Gathered:** 2026-03-24
|
||||
**Status:** Ready for planning
|
||||
|
||||
## Project Description
|
||||
|
||||
This milestone upgrades an existing personal job-tracking app into a workflow the user can trust every day. The user still finds jobs outside the app and applies outside the app, but once a job is imported, the app should become the place where the user prepares stronger application material, imports relevant Gmail correspondence, generates follow-up and reply drafts, and keeps the process organized without losing the thread.
|
||||
|
||||
## Why This Milestone
|
||||
|
||||
The codebase already has job import, Gmail import, CV tooling, AI-assisted draft generation, readiness analysis, and per-job workspaces. The problem is not total feature absence; it is that the two most important weak points in the current product are Gmail import and AI draft quality. Those are foundational trust surfaces. If Gmail import feels dumb or the AI drafts feel weak, the app does not earn a place in the user’s daily job-search loop. This milestone focuses on making the existing workflow materially better before broadening the product outward.
|
||||
|
||||
## User-Visible Outcome
|
||||
|
||||
### When this milestone is complete, the user can:
|
||||
|
||||
- import a job found on an external job site, generate a tailored application package, and use it as the basis for a real application outside the app
|
||||
- connect Gmail, import the right correspondence into the right job with less cleanup, and generate follow-up or reply drafts from real context
|
||||
|
||||
### Entry point / environment
|
||||
|
||||
- Entry point: browser UI starting from the job table and per-job workspace
|
||||
- Environment: browser + local/dev or deployed web app backed by API, database, Gmail OAuth, and local AI service
|
||||
- Live dependencies involved: database, Gmail OAuth/import, local AI service, optional SMTP for reminder/follow-up workflows
|
||||
|
||||
## Completion Class
|
||||
|
||||
- Contract complete means: the relevant API endpoints, UI flows, persisted job/correspondence state, and draft-generation paths are wired and verified with tests and artifact checks
|
||||
- Integration complete means: real Gmail import, job-linked correspondence, and AI draft generation work together across frontend, API, and AI service boundaries
|
||||
- Operational complete means: the workflow survives real auth/config/service conditions well enough that a user can use it repeatedly without hidden setup traps or dangerous outbound automation
|
||||
|
||||
## Final Integrated Acceptance
|
||||
|
||||
To call this milestone complete, we must prove:
|
||||
|
||||
- a user can import a real job, generate a stronger tailored CV and cover-letter package, and save/edit that material in the job workspace
|
||||
- a user can connect Gmail, import the correct message or thread into a job, and then generate a context-aware follow-up or reply draft from that imported correspondence
|
||||
- the full loop from job table → follow-up/dashboard → individual job workspace works cleanly enough for real repeated use, and no part of the milestone relies on auto-send or auto-apply behavior
|
||||
|
||||
## Risks and Unknowns
|
||||
|
||||
- Gmail matching quality may still be noisy — if message-to-job association is weak, the correspondence workflow will not feel trustworthy
|
||||
- Draft quality may plateau even with better prompts — if outputs still feel generic, the main value promise remains unproven
|
||||
- Existing capability may be present but fragmented — if the workflow still feels scattered across tabs and screens, the product will not feel like one coherent workspace
|
||||
- The daily overview may still under-signal urgency — if the table and dashboard do not turn state into action, tracking value stays abstract
|
||||
|
||||
## Existing Codebase / Prior Art
|
||||
|
||||
- `JobTrackerApi/Controllers/GmailController.cs` — existing Gmail OAuth, message listing, and import endpoints
|
||||
- `JobTrackerApi/Services/GmailOAuthService.cs` — Gmail token handling and Gmail API access
|
||||
- `JobTrackerApi/Controllers/JobImportController.cs` — existing external job import preview flow
|
||||
- `JobTrackerApi/Controllers/JobApplicationsController.cs` — current candidate-fit, focus-plan, interview-prep, readiness, tailored-CV, and follow-up draft surfaces
|
||||
- `JobTrackerApi/Controllers/ProfileCvController.cs` — profile CV upload, extraction, parse, rebuild, and improve flows
|
||||
- `job-tracker-ui/src/components/Correspondence.tsx` — current Gmail connection/import UI inside job correspondence
|
||||
- `job-tracker-ui/src/components/JobDetailsDialog.tsx` — current per-job AI tabs, draft editing, attachment context selection, and readiness UI
|
||||
- `job-tracker-ui/src/components/JobTable.tsx` — job table surface that should remain the primary daily control view
|
||||
- `job-tracker-ui/src/components/DashboardView.tsx` — dashboard/follow-up surface that should become a clearer urgency view
|
||||
- `tools/summarizer/app.py` — local AI service boundary for summarization and extraction
|
||||
|
||||
> See `.gsd/DECISIONS.md` for all architectural and pattern decisions — it is an append-only register; read it during planning, append to it during execution.
|
||||
|
||||
## Relevant Requirements
|
||||
|
||||
- R001 — establishes the import-first workflow around jobs discovered elsewhere
|
||||
- R002 — improves Gmail import into something the user can trust as part of the daily workflow
|
||||
- R003 — raises AI application draft quality from present to genuinely useful
|
||||
- R004 — turns imported job and correspondence context into better reply/follow-up drafting
|
||||
- R005 — preserves the job table as the first control surface
|
||||
- R006 — makes follow-up/dashboard views better at surfacing urgency and next actions
|
||||
- R007 — strengthens the individual job workspace as the place to do focused work
|
||||
- R008 — keeps all outbound communication manual and user-controlled
|
||||
- R009 — keeps milestone scope optimized for an individual user, not a recruiter workflow
|
||||
- R010 — ensures tracking continuity across manual updates and imported correspondence
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- smarter Gmail message/thread import and job matching quality
|
||||
- better use of imported correspondence as context for reply and follow-up drafting
|
||||
- stronger tailored CV and cover-letter generation quality
|
||||
- tighter daily-use flow across job table, follow-up/dashboard, and individual job workspace
|
||||
- coherence improvements that make existing AI and tracking capability feel like one product loop
|
||||
|
||||
### Out of Scope / Non-Goals
|
||||
|
||||
- automatic job application submission
|
||||
- automatic sending of follow-up or reply emails
|
||||
- turning the app into a job-discovery product that replaces external job boards
|
||||
- recruiter CRM, shared pipelines, or team collaboration workflows
|
||||
- broad product expansion unrelated to Gmail import quality, draft quality, or the daily control loop
|
||||
|
||||
## Technical Constraints
|
||||
|
||||
- preserve the no-auto-send trust boundary across all AI-assisted communication flows
|
||||
- build on the existing React + ASP.NET Core + local FastAPI service architecture rather than replacing it
|
||||
- respect existing Gmail OAuth and job-linked correspondence patterns already in the codebase
|
||||
- keep draft generation grounded in real profile CV, job, attachment, and correspondence context rather than generic prompts alone
|
||||
- maintain an individual-first UX even where admin/multi-user code exists in the repo
|
||||
|
||||
## Integration Points
|
||||
|
||||
- Gmail API — used for message listing, thread retrieval, and import into job correspondence
|
||||
- local AI service — used for summarization, extraction, and draft generation context building
|
||||
- ASP.NET Core API + EF Core database — persists jobs, correspondence, CV/profile state, and draft outputs
|
||||
- browser UI — presents the table/dashboard/job-workspace control flow that must feel coherent after this milestone
|
||||
|
||||
## Open Questions
|
||||
|
||||
- How far matching confidence and message-to-job suggestion logic can be pushed with the current Gmail data model — current thinking: prove it through real import UX in S01 rather than abstract matching rules
|
||||
- Whether prompt/workflow changes alone are enough to make drafts feel strong, or whether UI/context shaping is the bigger lever — current thinking: test both because “quality” here is partly generation and partly surrounding workflow
|
||||
- Which existing dashboard/table elements should be simplified versus enriched — current thinking: prioritize action clarity over adding more analytics first
|
||||
Reference in New Issue
Block a user