Spaces:
Sleeping
Sleeping
|
Download README.md from SkillArbitrage/UpworkAutomation: direct link, hf CLI and curl.
- Browser
- Download file 4.13 kB
-
https://huggingface.co/spaces/SkillArbitrage/UpworkAutomation/resolve/main/README.md
- Command line
-
hf download hf://spaces/SkillArbitrage/UpworkAutomation/README.md
-
curl -L -o README.md https://huggingface.co/spaces/SkillArbitrage/UpworkAutomation/resolve/main/README.md
4.13 kB
| 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). | |
| No files? Choose **Interview me instead** and answer guided questions about | |
| your work. Your answers are saved exactly as you type them and become the | |
| same profile evidence a folder would give. | |
| 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. | |
| ## Proposal writing and refinement | |
| The writer now uses a flexible, job-specific structure instead of mandatory | |
| pain paragraphs, numbered steps and promised metrics. It revises for factual | |
| support, relevance and natural voice before the separate fact-check. Small | |
| jobs target 150-250 words, standard jobs 250-400 and complex jobs 350-550; | |
| shorter complete answers are allowed when there is less to say. Screening | |
| answers stay separate and are checked individually. | |
| Timelines, prices, availability and measured results must be supported by the | |
| freelancer's facts. The verifier preserves the voice and repairs wording | |
| around removed claims instead of adding vague achievement language. Final | |
| cleanup also applies to the checked text used for copy and download. Review | |
| the final draft and any verification warnings before sending. | |
| These writing rules supersede the older length bands and fixed five-part | |
| structure in the PDF handoff. See [the refinement notes](docs/proposal-refinement.md) | |
| for validation and maintenance details. | |
| ## 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 guided interview uses the same API by default.** The AI checks that | |
| each answer fits its question and asks a follow-up when a detail is missing. | |
| To keep those calls off your main API, add an optional free Groq key (on the | |
| Setup page, or on the interview screen itself). If no API works, the | |
| interview still runs with basic checks. | |
| > ⚠️ 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: | |
| **[UpworkAutomation_ProposalRules_Handoff.pdf](UpworkAutomation_ProposalRules_Handoff.pdf)**. | |
| ## Running locally | |
| ```bash | |
| pip install -r requirements.txt | |
| streamlit run streamlit_app.py | |
| ``` | |
| Optional, in a local `.env` file (never committed): `GROQ_API_KEY` gives the | |
| interview its own Groq key, and `INTERVIEW_MODEL` overrides its Groq model | |
| (default `openai/gpt-oss-120b`). | |