Apply to jobs with personalized outreach in 1 click β powered by Llama 3 & Groq.
The open-source job application tool that actually respects your time.
π See job post β β‘ 1 click β π Personalized email sent. Done.
You: *copies job description*
You: *opens ChatGPT*
You: "Write me a cold email for this job"
GPT: "Dear Hiring Manager, I am writing to express my keen interest..."
You: *dies inside*
You: *does this 30 more times today*
There has to be a better way.
1-click from LinkedIn post β personalized email sent from your real Gmail. Real demo gif coming β PRs welcome!
ApplyX is a Chrome extension + web dashboard that lives on LinkedIn. Spot a job post, click once, and a laser-targeted cold email β written from your resume, in your voice β is sent via your real Gmail. No copy-paste. No generic templates. No cringe.
| Feature | What it does |
|---|---|
| β‘ 1-Click Generation | Reads the LinkedIn post, grabs your resume, writes a tailored email via Groq (Llama 3.1) in ~1 second |
| π Auto-attach Resume | Your PDF resume is automatically attached to every outreach email |
| π¬ One-Click Send | Fires the email via your real Gmail β without leaving LinkedIn |
| π¨ Dynamic Personalization | Your name, portfolio, and vibe are baked into every message |
| π Self-Hosted & Private | Your data lives in your Supabase. Zero middlemen. |
| π Actually Free | Groq's free tier handles thousands of generations per day |
| π No OAuth Audit | Uses Gmail App Password β no Google verification process required |
| v1 | v2 |
|---|---|
| NextAuth + Google Cloud Console setup | Supabase Auth only |
| Gmail API (requires Google app verification) | Nodemailer + Gmail App Password |
| Extension Key to identify users | Supabase JWT token |
localhost:3000 hardcoded in extension |
Dynamic backend URL β fully self-hostable |
| Only worked on LinkedIn feed page | Works on all LinkedIn pages |
| 7 environment variables | 4 environment variables |
Prerequisites: Node.js 18+, a Supabase account, a Groq API key, a Gmail account with 2FA enabled.
git clone https://github.com/kiet7uke/ApplyX.git
cd ApplyXDeploy to Vercel (recommended):
cd apps/web
npm install
vercel deployOr run locally:
cp .env.example .env.local # fill in your keys
npm run devOpen localhost:3000 π
cd apps/extension
npm install
npm run devIn Chrome β chrome://extensions β Developer Mode ON β Load Unpacked β select apps/extension/build/chrome-mv3-dev
- Go to LinkedIn β click the ApplyX floating button (bottom right)
- Enter your deployed Vercel URL
- Click Open Dashboard & Login β sign in with Google
- Upload your resume PDF
- Add your Gmail App Password (see below)
- Done β β click ApplyX Outreach on any LinkedIn post
ποΈ Supabase (Database + Auth) β click to expand
- Create a free project at supabase.com
- In the SQL Editor, paste and run the contents of
supabase/schema.sql - Go to Authentication β Providers β Google β enable it
- Add your Google OAuth credentials (Client ID + Secret from Google Cloud Console)
- Set redirect URL to:
https://your-app.vercel.app/auth-callback - Go to Authentication β URL Configuration and set:
- Site URL:
https://your-app.vercel.app - Redirect URLs:
https://your-app.vercel.app/auth-callback
- Site URL:
- Note your
Project URL,anon publickey, andservice_rolekey from Project Settings β API
π Google OAuth (for Supabase login) β click to expand
- Go to Google Cloud Console β New Project
- APIs & Services β Credentials β Create OAuth 2.0 Client ID
- Application type: Web application
- Authorized redirect URI:
https://xxxx.supabase.co/auth/v1/callback
- Required OAuth Scopes:
openid,email,profile - Save your
Client IDandClient Secretβ paste into Supabase Google provider settings
β No Gmail API. No app verification. No waiting weeks for Google approval.
βοΈ Gmail App Password (for sending emails) β click to expand
- Enable 2-Step Verification on your Google account
- Go to myaccount.google.com/apppasswords
- Create a new app password β name it
ApplyX - Copy the 16-character password
- Paste it into the extension settings or the dashboard Settings page
Your App Password is stored AES-256 encrypted in your own Supabase instance.
π€ Groq (AI Engine) β click to expand
- Sign up free at console.groq.com
- Create an API key
- That's it. Llama 3.1 is absurdly fast (~300 tokens/sec) and the free tier is incredibly generous.
No OpenAI bill. No rate limit anxiety. Just vibes. β¨
Create apps/web/.env.local:
# π€ AI
GROQ_API_KEY=gsk_...
# ποΈ Supabase
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
# π Encryption (exactly 32 characters)
# Generate: openssl rand -base64 24 | tr -d '=+/' | cut -c1-32
ENCRYPTION_KEY=your-32-character-secret-key-hereApplyX/
βββ apps/
β βββ extension/ # π§© Chrome Extension (Plasmo + React)
β β βββ contents/
β β β βββ LinkedInSidebar.tsx # Sidebar UI + 4-step setup wizard
β β β βββ LinkedInSendEmail.tsx # Inline outreach button on posts
β β βββ background/
β β βββ index.ts # Service worker
β β
β βββ web/ # π Dashboard & Backend (Next.js)
β βββ app/
β β βββ api/
β β β βββ generate-email/ # Groq AI generation
β β β βββ send-email/ # Nodemailer sending
β β β βββ resume/ # Upload + status
β β β βββ user/ # Profile + Gmail setup
β β βββ (dashboard)/ # Web UI pages
β β βββ auth-callback/ # OAuth redirect handler
β βββ hooks/
β β βββ useAuth.ts # Shared auth hook
β βββ lib/
β βββ supabase.ts # Browser Supabase client
β βββ supabase-admin.ts # Server admin client (bypasses RLS)
β βββ mailer.ts # Nodemailer Gmail SMTP
β βββ crypto.ts # AES-256 encryption
β βββ openai.ts # Groq / Llama email generation
β
βββ supabase/
β βββ schema.sql # Full DB schema + RLS policies
β
βββ .env.example # 4 variables β that's it
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LinkedIn Feed β
β β
β [Job Post by Recruiter] ββββββββββββββββββββ β
β "We're hiring a Senior β ApplyX Sidebar β β
β Backend Engineer at Stripe!" β β β
β β [Generate β‘] β β
β ββββββββββ¬ββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββ
β
ββββββββββΌβββββββββ
β Your Resume β
β + Post Context β
β + Your Name β
ββββββββββ¬βββββββββ
β
ββββββββββΌβββββββββ
β Groq Llama 3.1 β
β (~800ms) β‘ β
ββββββββββ¬βββββββββ
β
ββββββββββΌβββββββββ
β Personalized β
β Email β Gmail β
β SMTP Sent β
β
βββββββββββββββββββ
ApplyX is fully open-source and contributions are very welcome!
# Fork the repo, then:
git checkout -b feature/your-amazing-idea
git commit -m "feat: add your amazing idea"
git push origin feature/your-amazing-idea
# Open a PR πIdeas for contributions:
- π― LinkedIn Easy Apply form auto-fill
- π Application tracking dashboard
- π Support for other job platforms (Wellfound, Lever, Greenhouse)
- π Follow-up email scheduling
- π§ͺ A/B testing different email tones
- π Multi-language outreach support
Q: Is this actually free? A: Yes. Groq's free tier handles ~14,400 requests/day. You won't hit that limit job hunting.
Q: Is my resume data safe? A: Your resume lives in your own Supabase instance. ApplyX never touches it.
Q: Do I need to pay for Google Cloud or get OAuth verified? A: No. v2 uses Supabase Auth for login and Gmail App Password for sending β no Google Cloud billing, no OAuth consent screen verification required.
Q: Will recruiters know I used AI? A: The output is grounded in your real resume and their actual job post β it reads as genuinely tailored because it is.
Q: Does it work with LinkedIn Premium? A: Works with any LinkedIn account. Premium not required.
Q: Which LinkedIn pages does it work on? A: All of them β feed, job listings, profiles, company pages, search results.
If ApplyX helped you land an interview, drop a β β it keeps the project alive.
Built with π by kiet7uke and contributors.
Let's make it smarter, together.

