<- projects/
PERSONAL PROJECT · PRODUCTIVITY
Effort Planner
A professional, feature-rich calendar application for managing resource effort, shifts, tasks, daily notes, and events — with precise scheduling logic and a premium modern UI.
Architecture
Frontend
FullCalendar.js v6 · Vanilla JS · Font Awesome · Dark glassmorphism UI
FastAPI Backend (Python 3.12+)
REST endpoints · Pydantic validation · input sanitization
JSON Storage
data/ directory · tasks, shifts, notes, events
Holidays Library
Dynamic global holiday detection for scheduling
Smart Effort Scheduling
Total task effort is automatically split among assigned resources, with completion dates computed individually by allocation percentage and daily shift hours:
Example: a 40-hour task split between
Alice (100%, 8h/day) → finishes in 2.5 days
Bob (50%, 4h/day) → finishes in 5 days
Alice (100%, 8h/day) → finishes in 2.5 days
Bob (50%, 4h/day) → finishes in 5 days
Tasks render as colored bars with tooltips showing daily working hours and total effort. Supports overlapping events, shift planning, and daily notes (max 250 chars) as distinct all-day events.
Tech Stack
Python 3.12+
FastAPI
FullCalendar.js v6
Pydantic
JSON Storage
holidays lib
Font Awesome
Codebase Layout
├── main.py # FastAPI app: routes, CORS, request lifecycle (~13 KB)
├── models.py # Pydantic schemas: Task, Shift, Note, Event, Assignment
├── crud.py # CRUD operations per resource type
├── utils.py # Effort-splitting math & scheduling helpers
├── data/ # JSON persistence
│ ├── tasks.json · shifts.json · notes.json · events.json
│ ├── holidays.json # resolved holidays per country
│ └── countries.json # global country/holiday dataset (~34 KB)
└── static/ # Frontend
├── index.html · style.css · script.js (~56 KB, FullCalendar.js v6)