Internal web app to visualize and manage resource allocation across projects on a weekly basis.
Resource Master answers a simple question: who is on what project, and when? It provides a weekly timeline (by project or by resource), CRUD for projects, resources, and bookings, and a minimalist dark UI suited for internal planning.
Why it exists: Lightweight alternative to heavy PPM tools for teams that need quick visibility and editing of who is assigned to which project each week — without timesheets, approvals, or permissions.
- Projects — Create, edit, archive, restore, and delete projects (name, optional client, color from a fixed palette of ten swatches).
- Resources — Create, edit, archive, restore, and delete resources (name, optional role and team, weekly capacity in hours).
- Bookings — Assign a resource to a project for a given week with an allocation percentage (1–100%); create, edit, and delete inline from the planning grid. Attach optional notes to any booking.
- Planning view — Weekly grid with toggle: By project or By resource. Week navigation with Today button, single/multi-week arrows, and configurable span (4/8/12 weeks; 12 by default when
spanis not in the URL). Team filtering. URL-based state for shareable views. - Search & filter — Search by name, client, role, or team on list pages. Filter by status (Active / Archived / All) and by team.
- Over-allocation warnings — Visual indicators when a resource exceeds 100% in a week.
- CSV import — Bulk import projects or resources from CSV/TSV files with automatic column mapping, preview, and upsert-by-name.
- In-app help — Cheatsheet accessible via the ? button in the header, covering all features and keyboard shortcuts.
- Toast notifications — Non-blocking success/error feedback for all actions via Sonner.
- No auth (v1) — No login or permissions; internal use only.
- Framework: Next.js 16 (App Router) + React 19 + TypeScript
- Styling: Tailwind CSS v4, custom dark-first design system (CSS variables), Geist font
- Data: Prisma ORM, PostgreSQL
- Validation: Zod
- UI libraries: Sonner (toasts), focus-trap-react (modal accessibility)
- CSV: PapaParse
- Date logic: Custom ISO-week utilities (
lib/weeks.ts)
| Screen | Purpose |
|---|---|
Planning (/planning) |
Weekly timeline grid. Toggle by project or by resource. Inline editing of allocation percentages. Notes on cells. Team filter, Today button, span selector. |
Projects (/projects) |
List with search, status filter (Active/Archived/All). Create/edit via modal. Archive/restore/delete with confirmation dialogs. |
Resources (/resources) |
List with search, status filter, team filter. Create/edit via modal with capacity field. Archive/restore/delete. |
Admin (/admin) |
CSV import wizard: upload, map columns, preview, and import. |
Concepts: A booking is a single assignment: one resource, one project, one week, one allocation percentage, and an optional note. One resource can have multiple bookings in the same week (different projects); over 100% is allowed but shown as a warning.
- See docs/SETUP.md for prerequisites, env, database, and running the app.
- After setup:
npm run dev→ open http://localhost:3000. Root redirects to/planning. - Click the ? button in the header for the built-in cheatsheet, or read CHEATSHEET.md.
| Doc | Purpose |
|---|---|
| docs/SETUP.md | Install, env, migrations, seed, troubleshooting |
| CHEATSHEET.md | End-user reference (mirrors in-app help) |
| docs/ui-system.md | Design tokens, layout, and component conventions |
| docs/PRODUCT_ASSUMPTIONS.md | Domain model, weeks, lifecycle, security assumptions |
| docs/FUTURE_IMPROVEMENTS.md | Backlog ideas post-MVP |
- MVP first — Only what's needed for internal planning; no enterprise scope.
- Simplicity — Straightforward patterns, minimal abstractions, easy to change.
- Internal tool — No auth or permissions in v1; trust and access controlled outside the app.