in progress
Career Tracker App
Full-stack career tracking application — FastAPI backend on Oracle Cloud Free Tier, React frontend, deployed at sandeeprn.in/tracker.
FastAPI React Python OCI Full-Stack Docker
View on GitHub
Overview
A personal full-stack project that solves a real problem: tracking job applications, cert progress, and skill milestones during a career transition. The goal is also to demonstrate end-to-end ownership — backend API, frontend UI, containerized deployment, and OCI Free Tier hosting.
Status: In progress. Architecture is finalised, backend scaffolded. Frontend in development. Live at sandeeprn.in/tracker once deployed.
Architecture
┌────────────────────────────────────────────────────┐
│ sandeeprn.in/tracker │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ React Frontend (Vite) │ │
│ │ Job Board · Cert Progress · Skill Timeline │ │
│ └─────────────────┬────────────────────────────┘ │
│ │ REST API │
└────────────────────┼───────────────────────────────┘
│
┌────────────────────┼───────────────────────────────┐
│ Oracle Cloud Free Tier (ARM VM) │
│ │ │
│ ┌─────────────────▼────────────────────────────┐ │
│ │ FastAPI (Python) │ │
│ │ /applications /certs /skills /stats │ │
│ └─────────────────┬────────────────────────────┘ │
│ │ │
│ ┌─────────────────▼────────────────────────────┐ │
│ │ SQLite (dev) → PostgreSQL (prod) │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ Docker Compose · Nginx reverse proxy · HTTPS │
└────────────────────────────────────────────────────┘
Backend: FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
from datetime import date
app = FastAPI(title="Career Tracker API")
class Application(BaseModel):
company: str
role: str
applied_date: date
status: str # applied | screening | interview | offer | rejected
notes: str = ""
@app.post("/applications")
async def create_application(app: Application):
# persist to DB
return {"id": 1, **app.dict()}
@app.get("/stats")
async def get_stats():
return {
"total_applied": 24,
"in_progress": 5,
"offers": 1,
"response_rate": "29%"
}
API endpoints planned:
POST /applications— log a new job applicationGET /applications— list with filters (status, date range, role type)PATCH /applications/{id}— update status as pipeline progressesPOST /certs— track cert progress (name, % complete, target date)GET /stats— aggregated metrics for the dashboard
Frontend: React + Vite
Three main views:
- Job Board — Kanban-style columns (Applied → Screening → Interview → Offer/Rejected)
- Cert Progress — progress bars for active certifications with target dates
- Timeline — visual arc of skills and certs by year
OCI Free Tier Deployment
Oracle Cloud’s Always Free tier provides an ARM-based VM (4 OCPUs, 24GB RAM) — more than enough to host this stack permanently at zero cost:
# docker-compose.yml on OCI VM
services:
api:
image: sandeeprn/career-tracker-api:latest
env_file: .env
restart: always
frontend:
image: sandeeprn/career-tracker-frontend:latest
restart: always
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/letsencrypt
restart: always
What This Demonstrates
- Full-stack ownership — API design, frontend, deployment, and DNS wiring end-to-end
- OCI Free Tier — practical use of cloud free tier for personal projects (relevant to cost optimisation)
- FastAPI + Pydantic — modern Python API patterns with automatic OpenAPI docs
- Docker Compose — production-like deployment without Kubernetes overhead for a small project