Skip to content

KIET7UKE/ApplyX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


GitHub stars License: MIT PRs Welcome Powered by Llama Chrome Extension


ApplyX - Apply to jobs with 1-click personalized outreach | Product Hunt



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.


😀 The Problem (You Know This Pain)

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.


⚑ Enter ApplyX

ApplyX Demo

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.


πŸ”₯ Features

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

πŸ†• What's new in v2

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

πŸš€ Quick Start

Prerequisites: Node.js 18+, a Supabase account, a Groq API key, a Gmail account with 2FA enabled.

1. Clone & Install

git clone https://github.com/kiet7uke/ApplyX.git
cd ApplyX

2. Deploy the Web App

Deploy to Vercel (recommended):

cd apps/web
npm install
vercel deploy

Or run locally:

cp .env.example .env.local  # fill in your keys
npm run dev

Open localhost:3000 πŸŽ‰

3. Load the Chrome Extension

cd apps/extension
npm install
npm run dev

In Chrome β†’ chrome://extensions β†’ Developer Mode ON β†’ Load Unpacked β†’ select apps/extension/build/chrome-mv3-dev

4. First-time Extension Setup (30 seconds)

  1. Go to LinkedIn β†’ click the ApplyX floating button (bottom right)
  2. Enter your deployed Vercel URL
  3. Click Open Dashboard & Login β†’ sign in with Google
  4. Upload your resume PDF
  5. Add your Gmail App Password (see below)
  6. Done βœ… β€” click ApplyX Outreach on any LinkedIn post

πŸ› οΈ Full Infrastructure Setup

πŸ—„οΈ Supabase (Database + Auth) β€” click to expand
  1. Create a free project at supabase.com
  2. In the SQL Editor, paste and run the contents of supabase/schema.sql
  3. Go to Authentication β†’ Providers β†’ Google β†’ enable it
  4. Add your Google OAuth credentials (Client ID + Secret from Google Cloud Console)
  5. Set redirect URL to: https://your-app.vercel.app/auth-callback
  6. Go to Authentication β†’ URL Configuration and set:
    • Site URL: https://your-app.vercel.app
    • Redirect URLs: https://your-app.vercel.app/auth-callback
  7. Note your Project URL, anon public key, and service_role key from Project Settings β†’ API
πŸ”‘ Google OAuth (for Supabase login) β€” click to expand
  1. Go to Google Cloud Console β†’ New Project
  2. APIs & Services β†’ Credentials β†’ Create OAuth 2.0 Client ID
    • Application type: Web application
    • Authorized redirect URI: https://xxxx.supabase.co/auth/v1/callback
  3. Required OAuth Scopes: openid, email, profile
  4. Save your Client ID and Client 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
  1. Enable 2-Step Verification on your Google account
  2. Go to myaccount.google.com/apppasswords
  3. Create a new app password β†’ name it ApplyX
  4. Copy the 16-character password
  5. 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
  1. Sign up free at console.groq.com
  2. Create an API key
  3. 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. ✨

πŸ” Environment Variables

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-here

πŸ—‚οΈ Project Structure

ApplyX/
β”œβ”€β”€ 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

🧠 How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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 βœ…  β”‚
                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🀝 Contributing

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

πŸ’¬ Frequently Asked Questions

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.


⭐ Star History

Star History Chart


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.


Buy Me A Chai


About

πŸš€ Apply to jobs with 1-click personalized outreach β€” Chrome extension that reads LinkedIn posts, matches your resume, and sends tailored emails via Gmail. Powered by Llama 3.1 & Groq.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages