Skip to content

Latest commit

 

History

178 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Milestone

Screenshot 2026-05-04 at 22 55 43

A comprehensive R&D project management platform for multi-site organizations.

Screenshot 2026-05-04 at 22 53 48


Open in GitHub Codespaces

Features

  • Gantt chart visualization — Interactive timeline with drag & drop, resize phases
  • Resource management — Staff allocation with percentage-based assignments
  • Equipment scheduling — Book equipment across projects and phases
  • Multi-tenant architecture — Separate databases per organization
  • Organization-level SSO — Microsoft Entra ID with group-based access control
  • Cross-site visibility — View resources across locations while maintaining confidentiality
  • What-If planning — Scenario planning without affecting production data
  • Real-time collaboration — WebSocket-powered live updates
  • Import/Export — Microsoft Project (CSV, XML, MPP) support
  • Mobile responsive — Touch-optimized for tablets

Tech Stack

  • Backend: Python 3.11+ / FastAPI / SQLAlchemy 2.0 (async) / PostgreSQL 15+
  • Frontend: React 18 / TypeScript / Zustand / Vite / TanStack Query
  • Deployment: Docker / Docker Compose
  • Documentation: MkDocs Material / Cloudflare Pages

Quick Start

Option 1: GitHub Codespaces (Recommended for Demo)

Click the badge above to launch a fully configured environment with PostgreSQL, Python, Node.js, and a pre-seeded demo tenant.

The backend starts automatically on port 8485 serving the pre-built frontend — the demo is usable as soon as the Codespace is ready. For frontend development with hot reload, optionally run:

cd frontend && npm run dev -- --host 0.0.0.0 --port 3333

The Codespace automatically creates a demo tenant with sample data:

Access URL Email Password
Admin Portal /admin/ admin@demo.local demo1234
Demo Tenant /t/demo/ admin@demo.local demo1234

The demo tenant includes 2 sites (Winterthur, Frankfurt), 4 projects with phases and assignments, 8 staff members with skills, and 8 equipment items. All staff accounts use password demo1234.

Option 2: Docker Fresh Install

git clone https://github.com/vincentmakes/milestone-planner.git
cd milestone-planner
cp .env.example .env
docker compose -f docker-compose.fresh.yml up -d

This starts PostgreSQL + the app with auto-initialization. Check docker logs milestone-fresh for the admin password. Access at http://localhost:8486/.

Option 3: Production with External DB

cp .env.example .env
# Edit .env with your database credentials and secrets

# Start against a managed/external PostgreSQL (auto-creates DBs with PG_ADMIN_* creds)
docker compose -f docker-compose.external-db.yml up -d

Access at http://localhost:8485/. (The plain docker-compose.yml targets a specific Unraid deployment — external network + hardcoded host path — adapt it before using it elsewhere. See the installation guide.)

Documentation

Full documentation is published at docs-milestone.verdet.me.

Resource Description
User Guide Day-to-day usage: Gantt charts, staff, equipment, vacations
Admin Guide Installation, multi-tenant management, SSO configuration
Developer Guide Architecture, local development, API reference
API Documentation Swagger UI (when running)
Changelog Release history (SemVer)

File Structure

milestone-planner/
├── app/                    # FastAPI backend
│   ├── main.py            # Application entry point
│   ├── config.py          # Pydantic settings
│   ├── database.py        # Tenant DB engine/session
│   ├── routers/           # API endpoints (18 modules + admin/ package)
│   ├── models/            # SQLAlchemy models (15 modules)
│   ├── schemas/           # Pydantic schemas
│   ├── scripts/           # init_db (auto-init), seed_demo
│   ├── services/          # Business logic (encryption, SSO, tenant management)
│   ├── middleware/        # Auth, tenant resolution, broadcast middleware
│   └── websocket/         # Real-time collaboration (presence, change events)
├── frontend/              # React frontend source
│   └── src/               # Components, stores, API clients, types
├── docs/                  # MkDocs documentation source
│   ├── user-guide/        # End-user documentation
│   ├── admin-guide/       # Admin & multi-tenant docs
│   └── developer-guide/   # Architecture & API reference
├── .devcontainer/         # GitHub Codespaces configuration
├── .github/workflows/     # CI (audits, lint, test, build, version gate; docs deploy via Cloudflare Pages)
├── migrations/            # Raw SQL migration files
├── scripts/               # Utility scripts
├── public/                # Served frontend (built from frontend/dist/)
├── docker-compose.yml     # Production deployment
├── docker-compose.fresh.yml  # Self-contained fresh install
├── docker-compose.dev.yml # Development with hot reload
├── Dockerfile             # Multi-stage container build
├── mkdocs.yml             # Documentation site config
├── setup_databases.sql    # Complete database schema
└── .env.example           # Environment template

Multi-Tenant Mode

For SaaS deployment with multiple organizations:

  1. Set MULTI_TENANT=true in .env
  2. Configure master DB settings (MASTER_DB_HOST, MASTER_DB_NAME, etc.)
  3. Set TENANT_ENCRYPTION_KEY (64-char hex, required)
  4. Set PG_ADMIN_USER / PG_ADMIN_PASSWORD for auto-provisioning
  5. Access admin panel at /admin/

Each tenant gets an isolated PostgreSQL database. Credentials are encrypted with AES-256-GCM. See the Multi-Tenant Management Guide for details.

Access URLs

URL Description
/ Main application
/t/{slug}/ Tenant-specific access
/admin/ Multi-tenant admin panel
/api/docs API documentation (Swagger)
/health Health check endpoint

Environment Variables

Key variables (see .env.example for full list):

Variable Description
DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD PostgreSQL connection
SESSION_SECRET Secret for session signing
MULTI_TENANT Enable multi-tenant mode (true/false)
MASTER_DB_HOST, MASTER_DB_NAME, etc. Master DB (multi-tenant only)
TENANT_ENCRYPTION_KEY 64-char hex for credential encryption
PG_ADMIN_USER, PG_ADMIN_PASSWORD For auto-provisioning tenant DBs

License

MIT

About

Open Source Project and Resource Planning solution, MS Project alternative

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages