Why
Traceback already tracks a freelance lead from first note to Closed or Lost. What it does not do is help you decide whether the work is yours, what to say, or what to charge.
A generic chatbot does not know that you will not touch PHP, that you price in a band, or that you are slower than the market on native iOS. ChatGPT memory and Claude Projects cannot be imported through official APIs. The profile has to live in the app.
This issue is the product: the phone already knows the pipeline; it should also know you.
What it should feel like
- Me — one screen. Who you are, what you will not do, how you sound in a proposal, optional rate band and pace.
- Your keys, on the phone — paste an API key. Encrypted on device. Last four characters in the UI. Never a Room column, never a log line, never a Traceback server. There is no Traceback server. Uninstall loses the key; re-paste is the recovery.
- Brief on an opportunity — one tap. The job (title, description, source, anything you already wrote) plus Me goes to the model you chose. The screen still observes Room. The network is a command, not a source of truth.
- Five boxes stay on the lead until you brief again:
- Fit — yes / stretch / no, and why, against your will-not-do list
- Proposal — in your voice; copy into the existing applied message
- Price — a range that does not undercut your band
- Duration — hours and a range; your pace if you wrote one, otherwise typical
- Approach — a few sentences and a short stack, not a tutorial
If Me is empty or there is no key, Brief does not run. A 401 is a bad key, not a crash.
Shape on the phone
Me (profile + keys)
│
▼
Opportunity detail
│ Brief
▼
┌──────────┬──────────┐
│ Fit │ Proposal │ → applied message
│ Price │ Duration │
│ Approach │
└─────────────────────┘
Pipeline stage and money are still different axes. The price box is a suggestion. It is not payment tracking.
Plan
Ship the loop, then widen it. Domain stays Android-free so the same UserContext, JobBrief, and clients can move to Compose Multiplatform.
|
Ships |
Still true in the end state |
| 1. First loop (Android) |
Me, one OpenAI key in the Keystore, one structured call, five boxes persisted on the opportunity |
No backend. UI reads Room. |
| 2. Your tools |
Claude and Gemini as extra slots. Pick a provider per brief. Only slots with a key are enabled. |
Keys never leave the device except as Authorization to that vendor. |
| 3. Both phones |
Same app on iOS via Compose Multiplatform. Keychain instead of EncryptedSharedPreferences. |
One profile, one brief model, two screens of chrome. |
OpenAI is first because it is one client and one key. It is not “the only model Traceback will ever speak.”
Out of this issue
- Payment status, invoices, statistics
- Pulling ChatGPT / Claude / Gemini account memory or Projects (not available on their public APIs)
- ChatGPT Plus / Claude Pro as a login — those are chat subscriptions; this feature needs API keys
- A Traceback proxy, our billing, or uploading keys anywhere
- Scraping Upwork or mail for leads
Notes for implementers
Decisions live in ADR-0014 and ADR-0015. Schema steps and the first Android slice are docs/sprints.
Why
Traceback already tracks a freelance lead from first note to Closed or Lost. What it does not do is help you decide whether the work is yours, what to say, or what to charge.
A generic chatbot does not know that you will not touch PHP, that you price in a band, or that you are slower than the market on native iOS. ChatGPT memory and Claude Projects cannot be imported through official APIs. The profile has to live in the app.
This issue is the product: the phone already knows the pipeline; it should also know you.
What it should feel like
If Me is empty or there is no key, Brief does not run. A 401 is a bad key, not a crash.
Shape on the phone
Pipeline stage and money are still different axes. The price box is a suggestion. It is not payment tracking.
Plan
Ship the loop, then widen it. Domain stays Android-free so the same
UserContext,JobBrief, and clients can move to Compose Multiplatform.Authorizationto that vendor.OpenAI is first because it is one client and one key. It is not “the only model Traceback will ever speak.”
Out of this issue
Notes for implementers
Decisions live in ADR-0014 and ADR-0015. Schema steps and the first Android slice are docs/sprints.