Skip to content

Brief a lead with your context and your own model key #3

Description

@Erishan

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

  1. Me — one screen. Who you are, what you will not do, how you sound in a proposal, optional rate band and pace.
  2. 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.
  3. 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.
  4. 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.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions