A full-stack web application for analyzing project timelines using Monte Carlo simulation. Define task dependency graphs with duration estimates, run thousands of simulated scenarios, and receive probability distributions showing likely project completion times.
Frontend (UI) - /ui
- React-based visual graph editor with drag-and-drop task management
- Cycle detection, validation, and automatic layout
- JSON import/export for task graphs
Backend (API) - /api
- .NET 10.0 REST API with Monte Carlo simulation engine
- Critical path analysis: tasks are topologically sorted, then a relaxation algorithm finds the longest path by negating weights and applying shortest-path logic
- Returns probability distributions and statistical insights (mean, median, percentiles) for potential project completion times.
Frontend: React 18, TypeScript, Vite 5, ReactFlow 11, TailwindCSS, Playwright
Backend: .NET 10.0, ASP.NET Core, MedallionTopologicalSort, xUnit + Shouldly
- Node.js 20.x LTS
- .NET 10.0 SDK
- Docker (optional)
UI:
cd ui
npm install
npm run dev # http://localhost:5173
npm run build # Production buildAPI:
cd api
dotnet restore
dotnet run --project Norns.Api
# http://localhost:5000
# OpenAPI spec: http://localhost:5000/openapi/v1.jsonFull Stack (Docker Compose):
docker-compose up --build
# http://localhost:8080 (API proxied at /api/)# UI
cd ui
npm run test:unit # Vitest unit tests
npm test # Playwright E2E tests
# API
cd api
dotnet test- Open the UI application
- Use the default Start and End nodes as anchors
- Click "Add Node" to create tasks with unique IDs
- Enter duration estimates (minimum and maximum days)
- Drag between node handles to create dependency edges
- Use auto-layout to organize the graph automatically
- Export/import graphs as JSON files
- Click "Run Simulation" in the toolbar
- Configure the number of trials (default: 10,000)
- Click "Start" to queue the simulation
- Monitor real-time progress via the progress indicator
- View results when the simulation completes
The results dialog displays:
- Histogram: Probability distribution of project completion times
- Statistics: Min, max, mean, median, and percentile values (P50, P85, P95)
The P85 value indicates the duration within which the project will complete 85% of the time.