Open-source, AI-assisted resource management for agencies and teams: allocation grids, conflict awareness, an AI assistant (“Remi”) via Anthropic Claude, and cross-PM approvals.
- Department View — Allocation grid with bookings and utilisation
- Project View — Single-project resource breakdown
- Unassigned Requests — Open resource requests
- AI assistant — Availability, bookings, and project help (requires
ANTHROPIC_API_KEY) - Conflict detection — Overallocation and suggestions
- Cross-PM approvals — Changes affecting another PM’s work can require approval
- Real-time — Socket.IO for live updates
| Layer | Technology |
|---|---|
| Backend | Node.js 20+, Express 4, TypeScript |
| Database | PostgreSQL 16, Prisma |
| Frontend | React, TypeScript, Vite, Tailwind CSS |
| AI | Anthropic Claude (tool use) |
| Real-time | Socket.IO |
| Auth | JWT |
- Node.js 20+ (see
.nvmrcfor a recommended major) - Docker (for PostgreSQL via Compose)
- Anthropic API key for AI features
git clone <repo-url> resource-ai
cd resource-ai
npm install
cd frontend && npm install && cd ..
cp .env.example .env
# Edit .env — set ANTHROPIC_API_KEY at minimum
docker compose up -d
npx prisma migrate dev
npm run seed
npm run dev- API: http://localhost:3000
- App: http://localhost:5173
Copy .env.example to .env. Important variables:
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
JWT_SECRET |
Signing secret; in production must be ≥32 characters |
FRONTEND_URL |
Comma-separated browser origins for CORS (default: http://localhost:5173) |
ANTHROPIC_API_KEY |
Required for AI chat |
TRUST_PROXY |
Set to 1 when behind a reverse proxy (for correct client IP / rate limits) |
npm run seed(default) — Small synthetic dataset only (@example.compeople). No Excel file required.npm run seed:xlsx— Load a workbook; setSEED_XLSX_PATHor seedocs/README.md. Use this for private full datasets; do not commit proprietary spreadsheets to a public repo.
| Role | Password | |
|---|---|---|
| Superadmin | superadmin@example.com |
superadmin123 |
| PM / CS users | alex.morgan@example.com, dana.singh@example.com |
changeme123 |
These passwords are for local development only. Change them before any production or public deployment. Override superadmin via SEED_SUPERADMIN_* in .env, or run npm run ensure-superadmin against your database.
resource-ai/
├── prisma/ # Schema, migrations, seed
├── src/ # Express API, services, AI
├── frontend/ # Vite + React UI
├── docs/ # Technical PRD (reference), seed notes
├── scripts/ # Utilities (e.g. ensure-superadmin, private snapshot)
└── docker-compose.yml
- Prefix:
/api/v1 - Except
POST /api/v1/auth/login, routes expectAuthorization: Bearer <jwt>. - Response shape:
{ data, meta, errors }.
| Command | Description |
|---|---|
npm run dev |
Backend + frontend |
npm run typecheck |
Typecheck API and UI |
npm run build |
Production build |
npm run seed |
Synthetic minimal seed |
npm run seed:xlsx |
Seed from Excel (SEED_SOURCE=xlsx) |
npm run ensure-superadmin |
Ensure superadmin user from env |
To keep a full private copy of history before open-sourcing:
chmod +x scripts/create-private-snapshot.sh
./scripts/create-private-snapshot.sh ~/resource-ai-private.bundle
# Later: git clone ~/resource-ai-private.bundle my-private-copyOr: git clone --mirror <your-remote-url> resource-ai-private-mirror
See SECURITY.md for reporting issues and self-hosting notes.
See CONTRIBUTING.md.
See CODE_OF_CONDUCT.md.
- Anthropic Claude — AI engine powering Remi
- Prisma — database ORM
- Vite — frontend tooling
- Tailwind CSS — styling
- Socket.IO — real-time communication
- TanStack Query — server state management
