Spaces:
Running
Running
File size: 2,350 Bytes
78536a8 6303ae6 78536a8 1feecbf 78536a8 6303ae6 78536a8 6303ae6 78536a8 6303ae6 78536a8 6303ae6 be469a4 6303ae6 607beb5 b352c26 6303ae6 607beb5 6303ae6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | ---
title: Upwork Proposal Strategist
emoji: 🧭
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 8501
tags:
- streamlit
pinned: false
short_description: Analyze Upwork job fit and draft grounded proposals.
---
# Upwork Proposal Strategist
A web app that helps you write better Upwork proposals, faster.
It looks at an Upwork job, compares it to **your own work files**, tells you
whether it's worth applying, and writes a first draft of your proposal — using
only true facts from your files.
## How it works
The app walks you through five steps in the left sidebar:
1. **Setup** — choose your AI provider and paste your API key.
2. **Dossier** — upload your work files (portfolio, résumé, testimonials, past proposals).
3. **Job Screenshot** — upload or paste a picture of the Upwork job.
4. **Analysis** — see the verdict (🟢 Apply / 🟡 Caution / 🔴 Do Not Proceed), strengths, and concerns.
5. **Proposal** — get a ready-to-copy proposal draft.
## Your API key & privacy
- **Bring your own key.** Each visitor enters their own provider API key
(OpenAI, Anthropic, Gemini, or Groq) on the Setup page.
- **Your key is stored encrypted, remembered on your device.** So you don't
re-enter it each visit, the key is saved **encrypted** (Fernet) using a
secret derived from a random, invisible per-browser tag. The storage backend
(Supabase) only ever holds ciphertext; the tag is never sent to it, so one
visitor's key can't be read with another's tag, and the key is never put in
the server environment. Use **Clear Credentials** to remove it. If key
storage isn't configured, the app falls back to session-only (re-enter each
visit).
- **Your files are session-only.** Uploaded dossier files are processed in a
temporary, per-session location and are not persisted on the server.
- Only a small, relevance-filtered slice of your text is ever sent to the AI
provider you chose.
> ⚠️ The **Job Screenshot** step needs a vision-capable provider — use
> **OpenAI**, **Anthropic**, or **Gemini**. **Groq cannot read images.**
## Step-by-step user guide
A complete, click-by-click walkthrough is included in this repo:
**[UpworkProposalStrategistGuide.pdf](UpworkProposalStrategistGuide.pdf)**.
## Running locally
```bash
pip install -r requirements.txt
streamlit run streamlit_app.py
```
|