A full-stack web application for automating the creation of enterprise-grade program plans, roadmaps, and execution dossiers. Built with a secure Node.js API backend and a modern vanilla JS frontend, connected to a PostgreSQL database with AI-powered analytics and JIRA integration.
-
10-Step Planning Wizard: Comprehensive journey through program basics, phases, workstreams, task backlog, RAID log, stakeholder mapping, export configuration, JIRA import, and AI analysis.
-
Searchable Portfolio Dashboard: Centralised program library with real-time search, pagination, health indicators, and progress bars.
-
Advanced JIRA Integration:
- Import from JIRA via direct API (routed through backend proxy to solve CORS) or CSV file upload
- Automatic field mapping and data extraction
- Historical data sync with incremental updates
-
AI Sprint Analyst: AI-powered sprint performance analysis with actionable insights
-
KPI Dashboard: Real-time project metrics including:
- Sprint Predictability
- First Time Pass Rate (FTPR)
- Defect Density
- Regression Rate
- Defect Leakage
- Reopen Rate
- Cross-project Dependencies
-
Advanced Analytics: Chart.js powered dashboards for task distribution, resource allocation, and RAID criticality.
-
Export Suite:
- MS Excel β Multi-sheet workbook with Gantt chart (ExcelJS)
- MS PowerPoint β Executive steering pack (PptxGenJS)
- PDF β Formal program dossier (jsPDF + AutoTable)
-
Cloud Sync: Explicit "Save & Sync" to PostgreSQL via backend API for full control over when data persists.
-
MCP Server Integration: Model Context Protocol server for enhanced JIRA connectivity and AI capabilities
The application follows a full-stack Client-Server architecture with AI-enhanced capabilities. All business logic, database access, and external API calls are handled server-side by a dedicated Node.js (Express) backend. The browser acts as a pure Presentation Layer with modern JavaScript components.
graph TD
Browser["π Browser (Presentation Layer)"]
Backend["βοΈ Node.js / Express Backend\n(API Server β localhost:3000)"]
Supabase[("ποΈ Supabase\nPostgreSQL Database")]
Jira["π Jira Cloud API"]
subgraph Frontend ["Frontend (Vanilla JS)"]
Wizard["7-Step Wizard & State Manager"]
Dashboard["Portfolio Dashboard"]
Analytics["Analytics Dashboard"]
JiraUI["Jira Import UI"]
Generators["Client-side Export Generators\n(Excel / PPT / PDF)"]
end
subgraph API ["Backend API Routes"]
ProgramsAPI["POST /api/programs\nGET /api/programs\nGET /api/programs/:id"]
ExportAPI["POST /api/export/excel\nPOST /api/export/ppt\nPOST /api/export/pdf"]
JiraProxy["POST /api/jira/fetch\n(Jira Proxy β solves CORS)"]
end
Browser --> Frontend
Frontend --> |"fetch (JSON)"| API
API --> ProgramsAPI & ExportAPI & JiraProxy
ProgramsAPI --> |"Service Role Key"| Supabase
ExportAPI --> |"Server-side generation"| Browser
JiraProxy --> |"Proxied Request"| Jira
| Concern | Design Decision |
|---|---|
| Security | Supabase Service Role Key never exposed to the browser. Jira credentials proxied server-side. |
| Data Integrity | Frontend DB service uses a promise-based save mutex ensuring saves execute sequentially, preventing duplicate inserts. |
| Export | Client-side generators for instant downloads; backend export endpoints for server-triggered generation (reports, email, etc.). |
| State Management | AppData global object on the frontend. dbId tracks the Supabase primary key for update vs. insert logic. |
| Async Safety | Steps.render() includes a race condition guard β stale API responses can never overwrite a newer step. |
| Layer | Technology |
|---|---|
| Frontend | Vanilla HTML5, CSS3 (Flex/Grid), ES6+ JavaScript |
| Backend | Node.js, Express.js |
| Database | PostgreSQL (Local/Cloud) | | Auth / DB Proxy | PostgreSQL connection (server-side only) | | Excel | ExcelJS (CDN + npm) | | PowerPoint | PptxGenJS (CDN + npm) | | PDF | jsPDF + jsPDF-AutoTable (CDN + npm) | | Analytics | Chart.js (CDN) | | AI Integration | OpenAI API for Sprint Analysis | | JIRA Integration | JIRA Cloud API with OAuth2 | | CSV Parsing | SheetJS / xlsx (CDN) |
This project uses npm scripts as the unified command interface. All commands should be run from the project root.
| Command | Description |
|---|---|
npm install |
Install all dependencies (run once after cloning) |
npm start |
Start the backend server in production mode using node |
npm run dev |
Start the backend in development mode using nodemon β auto-restarts on file save |
Why
nodemon?
During development, any change toserver.jsorserver/generators.jsrequires a server restart.nodemonwatches for file changes and restarts automatically, removing manual interruptions and making the dev loop significantly faster. It is listed underdevDependenciesand is not installed in production.
- Node.js v18+ and npm (nodejs.org)
- Git
- PostgreSQL v14+ (local or cloud instance)
- JIRA Cloud account (for JIRA integration)
- OpenAI API Key (for AI Sprint Analyst)
git clone https://github.com/satyasgit/Program_Planner.git
cd Program_Plannernpm installCreate a .env file in the project root (this file is gitignored and never committed):
# .env
PORT=3000
# PostgreSQL Database
PG_HOST=localhost
PG_PORT=5432
PG_DATABASE=program_planner
PG_USER=your_db_user
PG_PASSWORD=your_db_password
# JIRA Integration
JIRA_CLOUD_URL=https://your-domain.atlassian.net
JIRA_API_TOKEN=your_jira_api_token
JIRA_USER_EMAIL=your_email@company.com
# AI Integration
OPENAI_API_KEY=your_openai_api_key
# MCP Server (Optional)
MCP_SERVER_PORT=3001Where to find these:
- PostgreSQL: Use your local PostgreSQL installation or cloud provider credentials
- JIRA API Token: Go to Atlassian Account Settings
- OpenAI API Key: Get from OpenAI Platform
Run the database migrations:
# Run all migrations
npm run migrate
# Or manually run migrations
cd database
node run-migrations.jsThe migrations will create all necessary tables including:
users- User managementprojects- Project metadataprograms- Main program datasteps- Wizard step datajira_sync_tracking- JIRA synchronization tracking
# Production mode
npm start
# Development mode (with auto-restart)
npm run devYou should see:
π Program Planner Backend running on http://localhost:3000
β
PostgreSQL connection established
π KPI endpoints ready
π€ AI Sprint Analyst ready
For enhanced JIRA integration:
cd mcp-server
npm install
npm startOpen index.html directly in your browser, or serve it with a simple server:
# Python (Mac/Linux)
python3 -m http.server 8080
# Python (Windows)
python -m http.server 8080Then open http://localhost:8080.
Important: The Node.js backend (
node server.js) must be running before you open the app. The frontend makesfetchcalls tohttp://localhost:3000/api/....
Program_Planner_High_Level/
βββ server.js # Express API server (entry point)
βββ server/
β βββ generators.js # Server-side Excel, PPT, PDF generators
βββ package.json # Node.js dependencies
βββ .env # Secrets β NOT committed to git
βββ .gitignore
βββ index.html # Frontend entry point
βββ kpi-dashboard-page.html # KPI Dashboard page
βββ ai-sprint-analyst.html # AI Sprint Analyst page
βββ analytics.html # Analytics Dashboard
βββ css/
β βββ styles.css # Application styles & design system
β βββ kpi-dashboard.css # KPI Dashboard styles
βββ js/
β βββ app.js # Bootstrap & event delegation
β βββ wizard.js # Wizard engine, navigation, state reset
β βββ steps.js # Step renderers, validation, Jira import
β βββ data.js # AppData schema & sample data
β βββ db.js # Frontend API proxy (fetch β Node.js)
β βββ kpi-calculator.js # KPI calculation logic
β βββ kpi-dashboard.js # KPI Dashboard functionality
β βββ jira-field-sync.js # JIRA field synchronization
β βββ components/ # JavaScript components
β β βββ KpiDashboard.js # KPI Dashboard component
β β βββ ErrorBoundary.js # Error handling component
β βββ generators/ # Client-side export logic
β βββ excel.js
β βββ ppt.js
β βββ pdf.js
βββ database/
β βββ migrations/ # SQL migration files
β βββ pg-connection.js # PostgreSQL connection
β βββ run-migrations.js # Migration runner
βββ mcp-server/ # Model Context Protocol server
β βββ server.js # MCP server entry point
β βββ connectors/
β β βββ jira-connector.js # JIRA API connector
β βββ middleware/
β βββ auth.js # Authentication middleware
βββ config/
β βββ jira-field-mappings.json # JIRA field configuration
βββ docs/
βββ database_setup.md # Database setup guide
βββ KPI_IMPLEMENTATION_SUMMARY.md # KPI implementation details
| Issue | Fix |
|---|---|
npm not recognised |
Install Node.js from nodejs.org and restart your terminal |
npm : File cannot be loaded because running scripts is disabled |
Open PowerShell as Administrator and run: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
| Port 3000 already in use | Change PORT=3001 in .env, then update API_BASE in js/db.js to match |
fetch to localhost fails |
Make sure node server.js is running in a separate terminal before opening the app |
| Git commit fails with special characters | Wrap commit messages in double quotes, avoid colons in the message |
| Issue | Fix |
|---|---|
node not found |
Install Node.js via nodejs.org or brew install node |
Permission denied on npm install |
Never use sudo npm install. Fix npm permissions: npm config set prefix ~/.npm-global |
| Port 3000 in use | Run lsof -i :3000 to find the process, then kill -9 <PID>, or change the PORT in .env |
| CORS error in browser console | The browser must call the local Node.js backend, not Supabase directly. Ensure server.js is running |
python3 not found for serving frontend |
Use npx serve . instead of Python |
| Issue | Fix |
|---|---|
| Dashboard shows no programs | Check PostgreSQL connection in .env and ensure migrations have been run |
| Programs are not saving | Open browser DevTools (F12) β Network tab β check for failed requests to localhost:3000/api/programs |
| JIRA import fails | Ensure your JIRA URL is the full base URL (e.g. https://yourcompany.atlassian.net), API token is valid, and user has necessary permissions |
| Dates reset after reload | Ensure you click "Save & Sync to Cloud" before navigating away from the program |
| Export files not downloading | Check browser popup/download permissions; some corporate browsers block auto-downloads |
-
KPI Dashboard
- Real-time calculation of 6 key performance indicators
- Historical trend analysis with interactive charts
- Cross-project dependency visualization
- Automated data extraction from JIRA
-
AI Sprint Analyst
- AI-powered sprint performance analysis
- Actionable insights and recommendations
- Historical analysis storage
- Integration with OpenAI GPT-4
-
Enhanced JIRA Integration
- Extensible field mapping system
- Incremental data synchronization
- Custom field support
- Automatic KPI calculation from JIRA data
-
MCP Server
- Model Context Protocol implementation
- Enhanced JIRA connectivity
- WebSocket support for real-time updates
- Middleware for authentication and caching
-
Database Improvements
- PostgreSQL migration from Supabase
- New tables for JIRA sync tracking
- Optimized indexes for performance
- Support for JSON/JSONB fields
- Error Handling: Comprehensive error boundaries and logging
- Performance: Optimized data fetching and caching strategies
- Security: Enhanced authentication and API key management
- Scalability: Modular architecture for easy feature additions
- Documentation: Extensive inline documentation and guides
- Advanced AI capabilities for predictive analytics
- Real-time collaboration features
- Mobile-responsive design
- Integration with Microsoft Teams and Slack
- Advanced reporting and custom KPI builder
- Multi-language support
- Machine learning for resource optimization
- Blockchain for audit trails
- AR/VR visualization for complex programs
- Voice-activated program management
Internal Property β Designed for Program Management Professionals.
For internal contributors:
- Create a feature branch from
main - Follow the coding standards in
CONTRIBUTING.md - Ensure all tests pass
- Submit a pull request with detailed description
For issues or questions:
- Internal Teams: #program-planner-support
- Email: program-planner@company.com
- Documentation: Internal Wiki