Synapse — A Free, Production-Grade ATS Resume Builder. Here's What It Actually Took to Build.
A few months ago an internal opening came up at Emirates. Good role, right timing. I decided to apply — then opened my resume. Two years out of date. What should have taken twenty minutes was going to take an evening of reconstructing timelines and rewriting bullet points to pass an ATS before a human ever read them.
The obvious question followed: where do I already have the most current version of my professional life? LinkedIn. Everything is there — roles, dates, responsibilities, skills. It just exists in a format completely useless for job applications.
So I built the tool I needed. Upload your LinkedIn PDF, pick a target market (US, UAE, India, or Global — ATS expectations differ by region), and get a properly formatted, ATS-optimized resume back in under 100 seconds. No account. No paywall. Free.
That's Synapse.
This Isn't a Form That Calls an API
The difference between a side project and a product is the 80% of work that users never see.
Any engineer can wire up an AI API to a file upload and call it a resume builder. What makes this different is the layer of decisions underneath — the processing pipeline, the privacy model, the observability setup, the deployment process. The parts that determine whether something is actually trustworthy, not just functional.

The Backend Pipeline
The entire stack is containerized and deployed on AWS Lightsail. Relying on robust cloud infrastructure ensures that the heavy lifting—specifically the LaTeX compilation and AI orchestration—scales reliably under load without bottlenecking the user experience.
The backend runs on self-hosted Directus — serving as API layer, database, and async flow orchestration simultaneously. When a resume is submitted, it enters a status-driven processing pipeline. The frontend polls for status updates every three seconds, and the UI transitions automatically as each stage completes — from validation through AI extraction to the final output. The user never has to refresh or wait on an opaque spinner with no feedback.
The AI extraction uses Anthropic's Claude Haiku — specifically Haiku, not a larger model. On structured data extraction from a well-formatted PDF, Haiku is faster and the quality difference versus a heavier model is negligible. After extraction, the user lands on an edit step to review and correct the output before generation runs. That's intentional — AI gets things wrong sometimes, and putting a human review gate before the final render avoids producing a polished result with a wrong job title or missing skills.
The PDF itself is compiled LaTeX.
Not a formatted HTML export. Not a Word document with styles applied. The backend takes the structured data, feeds it into a LaTeX template, and compiles it to a proper PDF. This is why the output looks like a document built by someone who knows typography — because LaTeX handles the layout, spacing, and rendering correctly. It's also why generating it takes a few seconds rather than milliseconds. Quality has a cost, and it's worth it.
Observability and DevOps
Running a production service means knowing when things break before users do.
Sentry monitors both client and server. Every unhandled error surfaces with a full stack trace and enough context to diagnose quickly. PII transmission is disabled — error reports contain no personal data, no resume content, nothing from the upload.

BetterStack monitors uptime and centralizes our structured logs. Knowing instantly if the AI parsing pipeline stalls or API latency spikes is critical for reliability. Logs are kept lean and sanitized—giving immediate visibility into backend performance and document rendering times without capturing any sensitive payload data from the user.

PostHog (EU infrastructure) handles product analytics. No cookies, sessionStorage only, all form inputs masked. The data I care about is funnel behavior: did the upload succeed, did processing complete, did the user download the result. That's it. The EU host was a deliberate choice — a significant portion of users are in the UAE and India, where data residency matters and privacy skepticism is warranted.

Cloudflare sits at the edge. It isn't just serving DNS; it acts as a strict Web Application Firewall (WAF) and proxies all traffic to keep the AWS origin completely hidden. When you are processing people's employment histories, getting scraped or hit with malicious traffic isn't a theoretical risk. Cloudflare drops the junk requests at the edge before they ever wake up a server, keeping the backend secure and the AWS compute bill predictable.

On the deployment side, every push to master runs a GitHub Actions CI pipeline — dependency install, lint, build validation — before anything ships. A second workflow handles semantic versioning automatically based on commit message conventions and cuts a tagged GitHub release on every merge. No manual version bumps, no release toil.

The Reality of Engineering Trade-offs
Every architectural decision is a compromise. Building Synapse to a production standard meant making explicit trade-offs between speed, infrastructure complexity, and output quality.
- LaTeX Compilation vs. HTML-to-PDF: Generating PDFs via headless Chrome (like Puppeteer) is the industry standard because it's fast and easy to style. However, the resulting text layers are often mangled, making them a nightmare for ATS parsers. LaTeX is significantly heavier to run on a server and adds seconds to the generation time, but the underlying document structure and typography are flawless. I deliberately traded backend performance for parseability.
- Async Polling vs. WebSockets: The AI extraction and LaTeX compilation pipeline can take up to 100 seconds. Holding an HTTP request open that long is asking for timeout failures from the load balancer. Instead of over-engineering a WebSocket layer for a single, linear transaction, the Next.js frontend uses a resilient 3-second polling mechanism against the Directus API. It keeps the infrastructure stateless and handles transient drops gracefully.
- Directus vs. Custom Node.js Backend: Writing a bespoke backend from scratch would have yielded a smaller footprint, but self-hosting Directus gave me a production-ready PostgreSQL schema, instant REST endpoints, and automated data flows out of the box. It allowed me to spend my engineering hours tuning the AI prompts and LaTeX engine rather than reinventing database migrations and API scaffolding.
Privacy Is the Architecture
Someone uploading a resume is handing over their employment history and personal contacts. The default should be that it disappears.
Files auto-delete after 24 hours. A separate permanent log keeps the running count of resumes processed — the statistic survives, the data doesn't. If a user wants to retrieve their resume later, they can opt in with an email. That's an active choice, not a default. PDF downloads are proxied through the Next.js layer — storage URLs never reach the browser. Sentry and PostHog are configured to capture zero personal data.
This isn't a compliance checkbox. It's what building something you'd actually use yourself looks like.
Why It's Free
The honest answer: this project exists to prove something. Not to anyone else first — to myself. That I can take a real problem, architect a proper solution, build it to a production standard, and ship it. The observability, the LaTeX compiler, the CI pipeline, the privacy model — none of that was required for a side project. It was required for the standard I was building to.
The best portfolio isn't a list of technologies. It's a working product that strangers use and trust. Synapse is free because the point was never monetization. It was execution.