A personal daily planner with time blocks, recurring events, and analytics.
| Layer | Tech |
|---|---|
| Backend | .NET 10, ASP.NET Core Web API |
| Frontend | React 19 + TypeScript + Vite + Tailwind |
| Database | JSON file (backend/DailyPlanner/Data/planner.json) |
- Day Planner — Visual 24-hour timeline; click any hour slot to add a block
- Time Blocks — Title, description, time range, category, custom color
- Recurring Blocks — Repeat on chosen weekdays, auto-generates instances 90 days ahead
- Analytics — Charts for daily hours, category breakdown, busiest hours, block count trends
- Range filter — 7 / 14 / 30 / 90-day analytics window
docker compose up --build
# Frontend → http://localhost:3000
# Backend → http://localhost:5000Data is stored in a named Docker volume (planner-data) and survives container restarts.
docker compose down # stop
docker compose down -v # stop + delete data volumeBackend:
cd backend/DailyPlanner
dotnet run
# Listening on http://localhost:5000Frontend:
cd frontend
npm install # first time only
npm run dev
# Open http://localhost:3000The Vite dev server proxies
/api→http://localhost:5000automatically.
time-tracker/
├── backend/
│ └── DailyPlanner/
│ ├── Controllers/
│ │ ├── BlocksController.cs # CRUD for time blocks
│ │ ├── RecurringBlocksController.cs # Recurring logic + auto-generation
│ │ └── AnalyticsController.cs # Aggregated stats
│ ├── Models/
│ │ ├── TimeBlock.cs
│ │ ├── RecurringBlock.cs
│ │ └── PlannerData.cs
│ ├── Services/
│ │ ├── JsonDataService.cs # Read/write planner.json
│ │ └── AnalyticsService.cs
│ └── Data/
│ └── planner.json # Created automatically
└── frontend/
└── src/
├── pages/
│ ├── PlannerPage.tsx # Main planner view
│ ├── RecurringPage.tsx # Manage recurring blocks
│ └── AnalyticsPage.tsx # Charts & stats
├── components/
│ ├── Navbar.tsx
│ ├── DayView.tsx # 24h timeline
│ ├── WeekStrip.tsx # Week navigator
│ ├── BlockModal.tsx # Create/edit block form
│ └── RecurringModal.tsx # Create/edit recurring form
├── services/api.ts # Typed API client
└── types/index.ts # Shared types & constants
| Method | Path | Description |
|---|---|---|
| GET | /api/blocks?date=&fromDate=&toDate= |
List blocks |
| POST | /api/blocks |
Create block |
| PUT | /api/blocks/:id |
Update block |
| DELETE | /api/blocks/:id |
Delete block |
| GET | /api/recurringblocks |
List recurring blocks |
| POST | /api/recurringblocks |
Create (auto-generates 90d) |
| PUT | /api/recurringblocks/:id |
Update (regenerates future) |
| DELETE | /api/recurringblocks/:id |
Delete + optionally purge future |
| GET | /api/analytics?fromDate=&toDate= |
Analytics data |