← All templates

Applicant Tracking

Business & SaaS · React + Node (Express) · 21 @molecule/* packages

Greenhouse-like ATS with job posts, applications, pipeline, and scoring — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • search
  • jobs
  • applications
  • pipeline
  • scoring
  • resume-upload
  • subscriptions

Screens (18)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Dashboard /dashboard (signed in)
  • Pipeline /pipeline (signed in)
  • CandidateDetail /candidates/:id (signed in)
  • Jobs /jobs (signed in)
  • Interviews /interviews (signed in)
  • Settings /settings (signed in)
  • JobDetail /jobs/:id (signed in)
  • NewJob /jobs/new (signed in)
  • Candidates /candidates (signed in)
  • Reports /reports (signed in)
  • Notifications /notifications (signed in)
  • Profile /profile (signed in)
  • Billing /billing (signed in)

Data model (18 tables)

  • activities — id, actorId, action, resourceType, resourceId, metadata, createdAt
  • activity_seen_status — userId, lastSeenActivityId, updatedAt
  • ai_score_breakdowns — id, user_id, candidate_id, criterion, score, comment, generated_at, updatedAt
  • applications — id, user_id, job_id, candidate_id, stage, source, resume_url, cover_letter, …
  • candidate_stage_events — id, user_id, candidate_id, application_id, from_stage, to_stage, actor_user_id, occurred_at, …
  • candidates — id, user_id, first_name, last_name, email, phone, location, source, …
  • comments — id, resourceType, resourceId, userId, parentId, body, editedAt, createdAt, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • interviews — id, user_id, candidate_id, job_id, scheduled_at, duration_minutes, panel_user_ids, stage, …
  • jobs — id, user_id, title, department, location, type, description, requirements, …
  • notes — id, user_id, candidate_id, author_user_id, body, created_at, updatedAt
  • notifications — id, user_id, kind, payload, read_at, created_at, updatedAt
  • offers — id, user_id, candidate_id, job_id, salary_cents, currency, start_date, status, …
  • payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
  • resource_tags — id, tagId, resourceType, resourceId, createdAt
  • resume_uploads — id, user_id, candidate_id, s3_key, filename, content_type, size_bytes, uploaded_at, …
  • scorecards — id, user_id, candidate_id, application_id, interview_id, reviewer_id, criterion, overall_rating, …
  • tags — id, name, slug, color, description, createdAt, updatedAt

API (9 handlers)

  • applications api/src/handlers/applications.ts
  • candidates api/src/handlers/candidates.ts
  • interviews api/src/handlers/interviews.ts
  • jobs api/src/handlers/jobs.ts
  • notifications api/src/handlers/notifications.ts
  • profile api/src/handlers/profile.ts
  • reports api/src/handlers/reports.ts
  • scorecards api/src/handlers/scorecards.ts
  • settings api/src/handlers/settings.ts

Subscription tiers

free / pro / team — gated by: maxApplications, maxCandidates, maxJobs, maxScorecards, advancedFeatures, canExport, retentionDays

Built from 21 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MEILISEARCH_API_KEY MeiliSearch API key
  • S3_BUCKET S3 bucket for resumes
  • MAILGUN_API_KEY Mailgun API key
  • MAILGUN_DOMAIN Mailgun sending domain

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing