Most freelance posts aren't worth a proposal. Winnow scores the fit, drafts from your real projects, and grades the draft against a rubric. You copy the text out and submit it yourself.
Nothing talks to Upwork. Not affiliated with Upwork.
Profile → paste a job → fit score → three openers → draft → rubric → copy out.
Python 3.12+, uv, Node 20+.
cp .env.example .env # add LLM_API_KEY
cd backend && uv sync
uv run fastapi dev app/main.py # :8000
cd frontend && npm install
npm run dev # :5173Open localhost:5173. Fill in Profile first (headline, a skill, your rate, one project with a real outcome). Then paste a job on Compose.
cd backend && uv run pytest # no API key, no costOnly LLM_API_KEY is required. Defaults are OpenRouter:
| Model | Used for | |
|---|---|---|
| Draft | z-ai/glm-5.2 |
Openers, body, critique |
| Utility | qwen/qwen3.7-flash |
Job and resume parsing |
About a cent per proposal. Other providers (OpenAI, Groq, Ollama) and models
are in .env.example.