The Night I Stopped Applying to Jobs — And Built My Own Outreach Engine
The Night I Stopped Applying to Jobs
It was 1:47 AM.
I had 12 tabs open.
LinkedIn.
Naukri.
Company career pages.
My resume in one window.
A half-written email in another.
Copy.
Paste.
Edit.
Change company name.
Change role.
Rewrite first paragraph.
Attach resume.
Send.
Repeat.
By the time I finished the fifth application, I felt drained. Not because I didn’t want the job.
But because the process felt… inefficient. That night, I closed all the tabs and asked myself one question:
Why am I manually doing something that can be systemized?
The Real Frustration
Applying wasn’t hard.
But applying well — at scale — was.
If you personalize properly:
It takes 15–20 minutes per application.
Multiply that by 20 roles a week.
That’s hours of repetitive work.
And worst of all?
You don’t even know who opened your email.
You don’t track who you contacted.
You don’t optimize your message.
It’s chaos disguised as effort.
A Different Way of Thinking
Startups don’t grow by manually messaging one user at a time.
They build systems.They automate intelligently. They personalize at scale. They track outcomes.
So I thought:
What if I treated my job search like a feature of my portfolio?
What if instead of applying…
I built an Outreach Engine?
The First Version Was Ugly
I started simple.
Paste job description → generate email.
It worked.
Then I improved it. Extract responsibilities. Map them to my skills. Generate structured HTML.
Add proper signature. Allow editing.
Then came the real upgrade: Import 200 HR emails at once. Send individually. Track status per recipient.
That’s when it stopped being a script.
It became a system.
Introducing: Find a Job Studio
I integrated everything into my portfolio dashboard.
Now the flow looks like this:
Paste job description.
AI extracts key responsibilities.
Generate structured professional email.
Import HR contacts (CSV or manual).
Attach resume.
Send with delivery tracking.
Under the hood:
Dual AI providers (OpenRouter + Eden AI)
Multi mail providers (Resend, SMTP, PHP API)
Per-recipient status logging
Validation and rate limiting
HTML sanitization
Role-based access control
But from the outside?
It feels simple.
Something Unexpecteed happend
When I built this…
I realized it wasn’t just about job hunting.
It was about control.
Instead of feeling like I was chasing opportunities…
I felt like I was running campaigns.
Instead of reacting…
I was executing.
Instead of random effort…
I had structured momentum.
Why This Matters
The traditional job search model is passive.
Apply.
Wait.
Hope.
I wanted something proactive.
Strategic.
Repeatable.
So I engineered it.
What It Taught Me
This project taught me more than sending applications ever could:
AI orchestration
Secure backend design
Multi-provider failover
Email infrastructure
Input validation at scale
Workflow-driven UX
It turned a frustrating experience into a real-world product experiment.
The Bigger Lesson
Sometimes the solution to frustration isn’t working harder.
It’s building smarter.
That night at 1:47 AM…
I stopped applying to jobs.
And started building the system that would apply with me.
And honestly?
That changed everything.
Tech Stack
Find a Job Studio
│
├── Frontend Layer
│ ├── Next.js 14 (App Router)
│ ├── React
│ ├── TypeScript
│ ├── Tailwind CSS
│ └── Role-Based Dashboard Architecture
│
├── Workflow Engine
│ ├── Job Input Module
│ ├── Recipient Import Module
│ ├── AI Draft Generator
│ ├── Resume Attachment Handler
│ └── Dispatch Controller
│
├── AI Layer
│ ├── Provider Abstraction
│ │ ├── OpenRouter (Primary)
│ │ └── Eden AI (Fallback)
│ │
│ ├── Structured Output Enforcement
│ │ ├── subject
│ │ ├── html
│ │ └── extractedResponsibilities
│ │
│ ├── Job Description Parsing
│ ├── Responsibility Extraction
│ ├── Skills Mapping
│ ├── HTML Email Generation
│ └── Signature Injection
│
├── Email Delivery Layer
│ ├── Provider Abstraction
│ │ ├── Resend (API)
│ │ ├── SMTP (Nodemailer)
│ │ └── PHP Mail API
│ │
│ ├── Per-Recipient Dispatch
│ ├── Concurrency Control
│ └── Delivery Status Tracking
│
├── File & Data Handling
│ ├── CSV Parsing
│ │ ├── Client Validation
│ │ └── Server Validation
│ │
│ ├── Email Format Validation
│ ├── PDF Attachment Validation
│ │ ├── MIME Check
│ │ ├── File Signature Check
│ │ └── Size Limit
│ │
│ └── HTML Sanitization Pipeline
│
├── Persistence Layer
│ ├── Generated Templates Storage
│ ├── Extracted Responsibilities Storage
│ ├── HR Contact Memory
│ ├── Send Logs
│ │ ├── Provider Used
│ │ ├── Message ID
│ │ ├── Success / Failure
│ │ └── Error Logs
│ │
│ └── Status History
│
├── Security & Control
│ ├── Role-Based Access (RBAC)
│ ├── Rate Limiting (AI + Mail)
│ ├── Max Recipient Throttling
│ ├── Server-Side API Key Handling
│ └── Defensive Input Validation
│
└── Infrastructure Layer
├── Vercel Deployment
├── Environment-Driven Configuration
│ ├── AI Provider Config
│ ├── Mail Provider Config
│ └── Token Limits
│
├── Provider Fallback Logic
└── Scalable Serverless API Routes


Top comments (0)