Contract Lifecycle Tracker
Central ledger for every contract. Auto reminders before expiry. Outstanding sends and counter-signatures surface instantly.
The problem to solve
Legal teams track sends, counter-signatures, renewal dates, and terminations across many contracts. Information hides in email, chat, and spreadsheets. Things slip.
Solution
A local ledger. One card per contract: counterparty, type, amount, key dates, status. Auto-red flag 30 days before expiry; a dashboard surfaces anything stuck in "to send" or "awaiting counter-sign".
Expected outcome
- Home shows contract cards filterable by status (Drafting / To send / Awaiting signature / Active / Expiring / Terminated).
- Each card: counterparty, type, amount, signed date, expiry date, status.
- Red 30 days before expiry, yellow at 60 days, green otherwise.
- A "follow-up" view aggregates anything needing action — perfect for weekly review.
- Bulk import from Excel. Export follow-ups to Excel.
- Sensitive fields (amount, counterparties) have a visibility toggle to avoid accidental exposure during screen-sharing.
Example input fields
Before copying, rename your Excel / CSV headers to match these fields — or just paste your real headers into Codex along with the prompt.
Copy-ready prompt
You are a senior engineer building local desktop tools and a thoughtful product manager. Before writing code, you walk through it as the user: what they see first, how they use it first, how they recover when something breaks. Build a runnable local desktop tool. The user is an in-house legal team, focused on business outcomes and usability.
[Opening Brief]
Before you build, use 3-8 numbered lines to tell the user what's coming. If 3 lines do it, use 3 — one short sentence per line.
Picture, feel, result — not implementation. Plain words. Speak to "you".
Don't promise a timeline ("ready in X minutes") — you can't know. Don't wait for a reply. Follow the [Quick Start Protocol] below immediately.
[Goal]
Central ledger for all contracts. Track by status. Auto-remind before expiry. Nothing slips.
[Platform & Stack]
- Windows 10/11 desktop app
- Electron + React + TypeScript
- Local SQLite; offline; ship a Windows .exe installer
[Core Features]
1. Home card list: filter by status; sort by expiry; left-edge status color band.
2. Create/edit form with clear required fields. Attachment field picks a local file; store relative path, do not copy.
3. Follow-up board: aggregates To-send, Awaiting-signature, and Expiring-within-30-days — weekly-review ready.
4. Rules (configurable): <=30 days red, <=60 days yellow, else green.
5. Risk view: missing attachment, blank expiry date, awaiting signature for more than 7 days, expired without renewal, blank amount where the contract type requires amount.
6. Excel import/export. Import headers: Counterparty / Type / Amount / Currency / Signed / Effective / Expiry / Status / Notes. Export follow-ups with ID / Counterparty / Status / Expiry / Days left / Risk reason / Suggested action.
7. Privacy: toggle hide for sensitive fields (amount, counterparty) in list view. Nothing uploaded.
8. Search by id, counterparty, notes.
9. Sensitive fields (amount, counterparty) hidden by default; click to reveal.
[Visual Style]
- Dashboard density with soft dividers.
- Muted status colors — no harsh reds.
- System fonts; bilingual toggle.
- Follows system dark mode.
[Robustness]
- Auto-recover DB from last backup.
- Friendly validation on required fields.
- Catch invalid date ranges with a gentle hint.
- Include 3 sample datasets: normal contracts, overdue awaiting-signature items, blank expiry / invalid date ranges.
[Data Model]
Contract: id (auto), counterparty, type, amount, currency, signed date, effective date, expiry date, renewal cadence, owner, status, renewal owner, reminder lead days, notes, attachment path (relative).
Statuses: Drafting, To send, Awaiting signature, Active, Expiring, Terminated.
[Safety Rules]
- Process locally by default; network calls require encryption and explicit user consent.
- No hard-coded API keys, absolute paths, personal emails, or internal hosts.
- All writes go through "Save as"; never overwrite originals; auto-timestamp on conflict.
- Do not invent npm packages; verify with npm view first.
- If real files are missing, create anonymized sample-data first; do not block on user files.
[Execution Discipline]
- Verify each feature immediately after writing it; do not batch all testing to the end.
[Warm UX Contract]
What happens around the code matters more than the code itself. The finish should feel like a gift.
- First launch = demo mode: auto-load sample-data/ and run the main flow once so the user sees a real result page, not an empty state.
- The workspace always has a "Try with sample data" button up top — one click to a full demo any time.
- Buttons, hints, and errors in business language. Example: "Can't find the Order ID column", not "Column 'order_id' not found".
- Operations with ≥3 steps offer Undo or Cancel; ≥5-step critical actions require confirmation.
- Long-running tasks show a progress bar + ETA, refreshed at most once per second.
- The moment the main flow finishes, give in-app feedback; if the window is in the background, also fire a system notification that opens the result on click.
- On failure, always offer the next move (retry / pick another file / view log / copy the error) — never leave a lone red line.
[Success Picture]
The screen at the end of the main flow is the user's lasting impression. Make it feel like a gift.
- Big-number outcome + a ≤30-word business-language summary. Example: "Reconciled 482 orders, 5 mismatches. Saved to Desktop/diff-2026-05.xlsx".
- Key findings as a single colored chip row: "⚠ 3 amount mismatches · ✦ 2 likely refunds".
- Three action buttons in a fixed position: "Open output folder", "Run again", "Pick another file".
- Include a collapsible "What just happened" panel with 5-10 lines of copyable activity log.
- No raw internals (millis, PID, stack traces); if you show time, use human words — "Done in 4s · 482 rows", not "4231ms".
[Project Structure]
├── src/main/ # Electron main process (main.ts, preload.ts)
├── src/renderer/ # React UI (pages, components, hooks)
├── src/core/ # Pure business logic (testable, no Electron deps)
├── src/types/ # TypeScript type definitions
├── sample-data/ # Anonymized sample data (main flow works on launch)
├── scripts/ # dev / build / package scripts
├── docs/ # User guide + known limitations
└── package.json # entry, scripts, dependencies
[Error Recovery]
When hitting issues, follow these strategies instead of retrying the same approach:
- Dependency install fails → check spelling, try one major version down, or use --legacy-peer-deps
- Too many TypeScript errors → use any to get the main flow running, then add types incrementally
- Electron white screen → check preload path, CSP policy, console errors
- Packaging fails → confirm dev mode works perfectly first, then debug packaging config
- Styles broken → check CSS load order and selector specificity
- Same error 3 times → switch approach or downgrade that feature, do not keep retrying
[Delivery]
1. Summary should include the list, edit, follow-up board screens.
2. Phase 1: list + create. Phase 2: follow-up + auto-coloring. Phase 3: import/export + privacy toggle.
3. Package .exe; write a 500-word user guide.
Acceptance checklist (all must pass):
☐ Double-click .exe launches; home shows contract card list
☐ New contract → form fills → save → list displays
☐ 30 days before expiry auto-red, 60 days yellow
☐ Follow-up board aggregates actionable contracts → export Excel
☐ Sensitive fields toggle hide/reveal
☐ Invalid dates, missing required fields → friendly message, no crash
[High-Quality Delivery Addendum]
If the prompt says to wait for confirmation, summarize in ≤8 lines, then implement/run/fix/verify; stop only for real files, accounts, certificates, or irreversible actions.
[Quick Start Protocol]
After outputting the [Opening Brief], execute in this order — do not output a plan and wait:
1. Create project directory, init config files
2. Install core deps: electron, react, react-dom, typescript, @types/react
3. Write minimal main.ts (create window) + index.html + renderer entry; confirm the window launches
4. Create sample-data/ with realistic anonymized business data
5. Implement features one by one; verify each immediately after writing
6. Finish with docs, packaging scripts, and user guide
[Anti-Patterns — Never Do These]
- Empty function bodies or TODO comments as "done"
- Rendering UI with fake data without wiring real logic
- Writing imports before installing dependencies
- Writing all code at once then running (verify per feature instead)
- Retrying the same failing approach more than 3 times
- Using console.log instead of real error-handling UI
- Ignoring empty states and loading states
- First screen on launch is blank / welcome / settings (should be workspace + demo data)
- Error messages leaking jargon ("Cannot read property", "Column not found")
- Bulk operations with no progress bar / ETA
- Overwriting original files on write (always Save as; timestamp conflicts)
- Finishing with zero feedback (no summary, no buttons, no system notification)
[DoD / Stop-Vibe-Coding]
Done criteria (check each — all must pass before reporting):
☐ Launches; sample data creates the artifact
☐ Edge cases are friendly (empty data, bad format, cancel, name conflict → no crash)
☐ UI meets minimum standards (clear type hierarchy, comfortable spacing, empty states have guidance)
☐ lint/typecheck/test/build pass
☐ Smoke test: launch → main flow → export/save with sample-data; note result
☐ setup/dev/package scripts, README, guide, limits, and samples exist
Stop; new ideas go to v2.
[Final Report Schema]
When everything is done, post this 4-section schema back to me (the user) in chat — not as UI copy. Each section opens with an emoji; body in business language.
✅ Delivered: ≤5 core capabilities, business framing, no jargon.
▶ How to open: one command or "double-click this file" — the user can use it now.
✔ What I verified: lint / typecheck / build / smoke test with sample-data on the main flow, each with PASS or FAIL.
⚠ Known limits & v2 ideas: ≤3 lines, each a single sentence — not a TODO list.After you copy
Open Codex Desktop and start a new task
Paste the whole prompt into the chat and send
Let Codex build and verify, then tweak names, fields, and buttons as you like