{
  "id": 14451418,
  "title": "Haggle: rehearse your freelance rate against a lowballing client who lives in your browser tab",
  "url": "https://urgent.news/2026/10/14/haggle-rehearse-your-freelance-rate-against-a-lowballing-client-who",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-14T12:54:39.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/mrmaran/haggle-rehearse-your-freelance-rate-against-a-lowballing-client-who-lives-in-your-browser-tab-56ni"
  },
  "original_language": "en",
  "account": "Haggle is a tool that helps freelance professionals practice negotiating their rates against difficult clients. The client is played by an open-weight model (Gemma 2 2B) running in your browser tab, which means there's no server or API key involved – everything runs locally. You quote a price, and the client makes up to eight moves, asking for lower rates, free trials, additional work, or 90-day payment terms. Your goal is to negotiate effectively and avoid giving away your services for less than you deserve. At the end, you receive a score, the client's real limit, and the exact line where you let the client take advantage of you. The tool is built for the DEV Hacktoberfest 2026 Open-Source AI Challenge and is MIT licensed. It's written in TypeScript with Vite, has unit tests, and plays without an API key or server, making it accessible and easy to use.",
  "summary": "This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Built by @mrmaran and @vettri_vel_f6a5c117c95b00 . What I Built A client reads your quote and writes back: \"$4,000 is a bit steep for me right now. Could we try a trial project for $1,800?\" Most freelancers answer a message like that for the first time when the money is real. In a 2018 survey of 267 freelance…",
  "key_points": [
    "Haggle is a local tool for freelance rate negotiation practice.",
    "Client is simulated by an open-weight model in browser tab.",
    "Tool scores performance, reveals client's limit and shows negotiation mistakes."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}