No description
  • Rust 56.2%
  • TypeScript 40.7%
  • CSS 2.5%
  • Dockerfile 0.3%
  • JavaScript 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
mekhi afd51364ce add a README
Public repo had no README at all. This covers the stack, the module
layout, and the four decisions in docs/adr that actually shaped the
schema: multi-tenancy from migration 0001, best-effort ATS ingestion
with a manual fallback, per-user analytics only, and the shareable resume
link as the single cross-boundary surface.
2026-09-29 11:28:08 -04:00
backend Just need to fix the pipeline issues 2026-09-07 00:56:18 -04:00
docs Initial work 2026-09-04 15:02:20 -04:00
frontend Just need to fix the pipeline issues 2026-09-07 00:56:18 -04:00
.gitignore Initial work 2026-09-04 15:02:20 -04:00
AGENTS.md Initial work 2026-09-04 15:02:20 -04:00
CONTACTS_FEATURE.md Just need to fix the pipeline issues 2026-09-07 00:56:18 -04:00
CONTEXT.md Initial work 2026-09-04 15:02:20 -04:00
docker-compose.yml Initial work 2026-09-04 15:02:20 -04:00
FAVICON_FEATURE.md Just need to fix the pipeline issues 2026-09-07 00:56:18 -04:00
FEATURES_STATUS.md archive contacts, attachments 2026-09-06 08:21:10 -04:00
IMPLEMENTATION_COMPLETE.md archive contacts, attachments 2026-09-06 08:21:10 -04:00
IMPLEMENTATION_SUMMARY.md archive contacts, attachments 2026-09-06 08:21:10 -04:00
LICENSE Initial commit 2026-08-26 20:13:05 +00:00
POSTINGS_REMOVAL.md Just need to fix the pipeline issues 2026-09-07 00:56:18 -04:00
README.md add a README 2026-09-29 11:28:08 -04:00

JobApp

A multi-user job-application tracker. Track postings, companies, contacts, and applications in one place; generate versioned résumés; ingest postings from ATS URLs; and see where each application stands.

The problem it exists to solve is that a job search is a pipeline, and most tools treat it as a list. Every posting is a different company, the résumé changes between them, and six weeks later nobody can remember which version was sent where.

Stack

  • Backend — Rust with Axum, PostgreSQL through SQLx
  • Frontend — React + TypeScript SPA, built with Vite
  • Packaging — Docker Compose for Postgres, backend, and the dev server

Layout

backend/
  migrations/    ten SQLx migrations, from tenants through attachments
  src/
    applications/   the core pipeline
    ats/            pluggable adapters for ingesting posting URLs
    resume/         generation, versioning, rendering
    sharing/        shareable résumé links
    analytics/      per-user statistics
    contacts/       company contacts and their link to an application
    attachments/    file upload, archive, and retrieval
    search/         search across the user's data
    nudges/         follow-up reminders
backend/src/auth/   authentication
frontend/           React SPA
docs/adr/           architecture decision records

Decisions worth reading about

docs/adr/ records the reasoning, and these are the ones that shaped the schema:

  • Multi-tenant by design, single-instance deployable. Every entity is tenant-scoped from migration 0001 rather than added later, so there is no table where a missing scope filter leaks one user's data into another's.
  • Pluggable ATS adapters, best-effort parsing with manual fallback. Every job board structures postings differently and will change without warning, so ingestion is explicitly allowed to fail into a manual-entry path rather than being the only route in.
  • Per-user analytics only. Cross-user insight is deferred until there is a reason for it, which is also the reason the tables are not built for it yet.
  • The shareable résumé link is the only cross-boundary surface. Sharing is a deliberate, narrow, read-only exposure rather than a general sharing mechanism, which keeps the auth model simple.

Résumés and ATS grading

Résumés are versioned per application rather than stored as one current document, so a submission can be reconstructed exactly as it was sent. The ATS grader scores a résumé against a posting so the mismatch is visible before sending, not after an automated screen rejects it.

Status

Actively developed. The backend is implemented and tested; the frontend is being built out alongside it. FEATURES_STATUS.md tracks what is done and CONTEXT.md is the domain glossary.

docker compose up

The product spec is in docs/prd/jobapp-prd.md.