Personalized “why do you want to join this company?” answers for Wellfound (and similar job apps).
What it is: a small tool that writes the “why join” answer for you, from your background + the job description.
I built it because when you’re mass applying, you don’t want to rewrite that box every time, but you also don’t want the same generic paragraph pasted everywhere. You want something that still feels like you, tuned to each role.
You can dump a JD into ChatGPT or Claude. You already know how that usually reads: polished, corporate, same cadence every time. Why Join is tuned for short, first-person notes that sound like a real applicant, not a cover-letter template.
Would love if you try it and tell me what feels off (tone, length, grammar, UX). Feedback helps a lot.
- Browser extension (
extension/) — popup flow: API key → model → JD → prefs → get result - Local CLI / test UI — same generator for terminal or
npm run ui
Bring your own API key (Gemini, OpenAI, Anthropic, Groq, OpenRouter, DeepSeek). Keys stay on your device; they’re only sent to the provider you choose.
- Clone this repo
- Open Chrome or Brave →
chrome://extensionsorbrave://extensions - Turn on Developer mode
- Load unpacked → select the
extension/folder - Pin Why Join, open the popup
- Add your API key, pick a model (e.g.
gemini-3.6-flash), fill Preferences, paste a JD, hit Get result
More detail: extension/README.md
npm install
cp .env.example .env
cp profile.example.json profile.json
# edit .env with your key + model
# edit profile.json with your background
npm run ui # http://localhost:3847
node generate.js samples/evol-jewels-fullstack.txt- Your API key is stored in
chrome.storage.local(extension) or.env(CLI) - Nothing is sent to a Why Join server (there isn’t one)
- Generation calls go only to the LLM provider matching your key/model
Open an issue or PR with what broke, what sounded fake, or what you’d change. Thanks for trying it.