A lightweight calendar app for coordinating availability across people. Each person selects the days they're free; everyone can see who's available on any given day at a glance.
- User picker — choose your identity from a predefined list (saved in localStorage)
- Calendar — click any day to toggle your availability; navigate to any month
- Color coding — green for days you selected, blue for days others selected
- Hover tooltips — see exactly who's available on a given day
- Popular dates sidebar — top dates ranked by headcount, with name popover on hover
npm install
npm run devOpen http://localhost:3000.
Testing from a phone on the same network — add your machine's LAN IP to next.config.ts:
allowedDevOrigins: ["192.168.x.x"],Edit data/users.json — no rebuild needed, it's read on every request:
[
{ "id": "alice", "name": "Alice" },
{ "id": "bob", "name": "Bob" }
]docker build -t schedule .
docker run -p 3000:3000 -v $(pwd)/data:/app/data scheduleMount data/ as a volume so schedule.json survives container restarts. You can also edit users.json on the host without rebuilding the image.
| File | Purpose |
|---|---|
data/users.json |
Predefined user list |
data/schedule.json |
Availability selections (auto-created on first write) |
Concurrent writes to schedule.json are serialized with a mutex — safe for multiple users clicking simultaneously.
- Next.js (App Router) — frontend + API routes
- Tailwind CSS — styling
- async-mutex — concurrent-safe file writes