Architecture overview
Tarnished is a multi-surface self-hosted application made of one main backend and several clients.
Primary components
Backend
The backend is a FastAPI application.
It is responsible for:
- authentication
- database access
- file handling
- imports and exports
- analytics and dashboard data
- AI-backed extraction and insight generation
- serving the frontend static assets in production builds
Frontend
The main web UI is a React-based frontend built separately and served as static assets by the backend in production.
CLI
The Tarnished CLI is a separate Python package that talks to the backend over the HTTP API using API keys.
Browser extension
The browser extension also talks to the backend over the API and focuses on:
- job detection
- job lead saving
- application creation/lookup
- profile-driven autofill
Backend route layout
The FastAPI application wires together route groups for:
- auth
- applications
- application history
- profile
- rounds
- settings and API keys
- analytics and dashboard
- admin
- import and export
- job leads
- files
- user preferences and streaks
- AI settings and insights
- users
Data and files
Tarnished keeps relational state in the configured database and file-backed state in the configured upload directory.
Depending on deployment mode, the database may be:
- SQLite
- PostgreSQL
Production serving model
When the frontend static directory exists, the backend serves:
/assetsfrom the built frontend asset bundle- the SPA shell for non-API routes
That means the packaged app can run as a single combined web service in common deployments.