Milestone - https://www.milestoneplanner.net
A comprehensive R&D project management platform for multi-site organizations.
- 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
- Mobile responsive - Touch-optimized for tablets
- Backend: Python 3.11+ / FastAPI / SQLAlchemy 2.0 (async) / PostgreSQL 15+
- Frontend: React 18 / TypeScript / Zustand / Vite / TanStack Query
- Deployment: Docker / Docker Compose
- Docker and Docker Compose
- PostgreSQL 15+
- (Optional) Node.js 20+ for frontend development
cp .env.example .env
# Edit .env with your database credentials and secrets# Run the full setup script as PostgreSQL superuser
psql -U postgres -f setup_databases.sqlOr manually:
psql -U postgres
CREATE DATABASE milestone;
CREATE USER milestone WITH PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE milestone TO milestone;
\c milestone
-- Run the tenant schema section from setup_databases.sql# Production
docker-compose up -d
# Development with hot reload
docker-compose -f docker-compose.react-dev.yml up -dpsql -U milestone -d milestone
-- Create admin user (password: 'admin' - change this!)
INSERT INTO users (email, password, first_name, last_name, role)
VALUES (
'admin@example.com',
'$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/X4.G6J8EHyFj2YQXW',
'Admin',
'User',
'admin'
);- Main app: http://localhost:8485/
- API docs: http://localhost:8485/api/docs (requires admin login)
milestone/
├── app/ # FastAPI backend
│ ├── main.py # Application entry point
│ ├── config.py # Pydantic settings (env vars)
│ ├── database.py # Tenant DB engine/session
│ ├── routers/ # API endpoints
│ ├── models/ # SQLAlchemy models
│ ├── schemas/ # Pydantic schemas
│ ├── services/ # Business logic (master_db, tenant_manager, encryption)
│ └── middleware/ # Auth, tenant middleware
├── frontend/ # React frontend source
│ └── src/ # Components, stores, API clients, types
├── public/ # Served frontend (built from frontend/dist/)
├── migrations/ # Raw SQL migration files
├── scripts/ # Utility scripts (fresh install, seeding, etc.)
├── docker-compose.yml # Production deployment
├── docker-compose.dev.yml # Development with hot reload
├── docker-compose.react-dev.yml # React dev server variant
├── Dockerfile # Container build
├── setup_databases.sql # Complete database schema
├── deploy-react.sh # Frontend deployment helper
├── requirements.txt # Python dependencies
├── .env.example # Environment template
└── DEVELOPMENT.md # Development guide
- Development Guide - How to make changes and deploy
- Migration Guide - Database migration procedures
- Frontend Guide - Frontend development
- API Documentation - Swagger UI (when running)
For SaaS deployment with multiple organizations:
- Set
MULTI_TENANT=truein.env - Configure master DB settings (
MASTER_DB_HOST,MASTER_DB_NAME, etc.) - Set
TENANT_ENCRYPTION_KEY(64-char hex, required) - Set
PG_ADMIN_USER/PG_ADMIN_PASSWORDfor auto-provisioning - Access admin panel at
/admin/
The master database schema (organizations, tenants, SSO config) is auto-applied on startup.
| URL | Description |
|---|---|
/ |
Main application |
/t/{slug}/ |
Tenant-specific access |
/admin/ |
Multi-tenant admin panel |
/api/docs |
API documentation (Swagger) |
/health |
Health check endpoint |
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 |
Proprietary - All rights reserved