Skip to content
Sarang

2026/ Case study · Live

Aavedak

A personal job-search operating system — resumes, cover letters, ATS scoring, job discovery, referrals and application tracking in one pipeline. It recommends and prepares; you decide and send.

[Next.js] — [TypeScript] — [Tailwind CSS v4] — [Vinyaas] — [FastAPI] — [Python] — [Neon Postgres] — [Better Auth] — [Vercel]

Overview

अवसर — "opportunity." Aavedak is built around one workflow: onboarding → resume → dashboard → job discovery → cover letters → ATS scoring → referrals → applying → tracking → follow-up. App areas include a dashboard, jobs, job tracker, documents, referrals and a shareable public profile at /{username}.

01/ Architecture

A pnpm monorepo with three apps:

  • apps/web — Next.js App Router + TypeScript + Tailwind v4, the product surface
  • apps/api — a FastAPI (uvicorn) service, served under /svc/*
  • apps/extension — a Chrome extension for capturing postings (currently a stub)

Both web and API deploy as Vercel Services inside a single Vercel project, so there is one domain and no separate server to run. Neon Postgres holds application data and auth sessions.

02/ Implementation

Authentication is self-hosted Better Auth with Google as the only sign-in provider; session tables live on Neon. The UI uses Vinyaas theme tokens and components (oklch CSS variables, Geist, dark by default), so it shares a design system with this site. Web and API keep separate env files so keys are never mixed, and a setup script bootstraps the JS workspace and the Python 3.12 virtualenv.

03/ Testing

The web app is linted and type-checked in CI-style scripts (pnpm lint, pnpm build), and the API exposes a /svc/health check used to verify the Vercel Services deploy.

04/ Trade-offs

Python for scoring and discovery gives better text tooling, at the cost of a second runtime. Running both as Vercel Services keeps hosting at zero ops — but requires the Vercel root directory to be the repo root, and pins pnpm to a version Vercel supports.

Architecture diagram

Open in Lab
HTTPSRESTcaptureSQLreadsOAuthBrowserclientExtensionclientNext.js webedgeFastAPIserviceNeon PostgresdataGoogle OAuthexternal
Request flow