Introduction
POD Governance is an internal workflow platform for managing delivery cycles, priorities & achievements (Priorities & Achievements), and team reporting. The platform implements a hierarchical approval chain: Project Lead → Project Manager → Delivery SPOC → Sales SPOC → POD Owner → Cluster Head. For Priorities & Achievements only, an optional Project Contributor tier sits below the Project Lead (Project Contributor → Project Lead → …); contributors are not shown in reports, Ups & Downs, or project membership.
App Shell
Every authenticated screen uses a unified left sidebar (dark navy, role-based navigation) plus a topbar with user avatar and notification bell. The shell is defined in AppShell.tsx.
Routing
Single-page application using React Router v6. Protected routes enforce authentication and role-based access. Admin routes additionally require the admin role.
Notifications
Email notifications use templates ET-001 → ET-022. In-app notification bell in topbar shows unread count with live polling. Clicking a notification navigates to the relevant screen.
Automation
Scheduler service runs 9 registered cron jobs (week kickoffs, reminders, digests, escalations, scheduled reports, Priorities & Achievements all-roles). Admins can inspect run history and trigger jobs manually.
Tech Stack
Frontend
- React 18 + TypeScript
- Vite build
- React Router v6
- Axios (API calls)
- Recharts (charts in reports)
Backend
- Node.js + Express
- Prisma ORM
- PostgreSQL database
- JWT authentication
- node-cron scheduler
Key Services
- Notification service (email templates)
- Scheduler service (9 cron jobs)
- MCP server (stdio adapter) — 64 tools / 3 resources / 3 pre-built prompts
- Audit log (all writes)
- Scheduler run log
File locations
src/web/src/screens/— React screenssrc/api/src/— API + servicessrc/api/prisma/— schema + migrations
Roles & Access
Role keys stored in the database and JWT claims. Every user can hold multiple roles across different projects.
| Role Key | Display Name | Workflow Screen | Priorities & Achievements Chain Position |
|---|---|---|---|
| project_contributor | Project Contributor | Priorities & Achievements Screen (P&A only) | Bottom tier — reports to Project Lead. Not shown in reports, Ups & Downs, or projects. |
| pl | Project Lead | Project Lead Screen | Reports to Project Manager; also reviews their Project Contributors |
| pm | Project Manager | Project Manager Screen | 2nd — reports to Delivery SPOC |
| delivery_spoc | Delivery SPOC | Delivery SPOC Screen | 3rd — reports to Sales SPOC |
| sales_spoc | Sales SPOC | Sales SPOC Screen | 4th — reports to POD Owner |
| pod_owner | POD Owner | POD Owner Screen | 5th — reports to Cluster Head |
| cluster_head | Cluster Head | Cluster Head Screen | 6th — top of chain |
| pmo | PMO | PMO Screen | Observer/coordinator |
| admin | Administrator | Admin Portal | Full access to all admin screens |
Authentication
Login Screen
/login- Email + password authentication form with validation
- 18 demo user tiles for quick one-click login (dev/staging)
- OTP magic-link flow: server sends a verification email (ET-001)
- Redirects authenticated users to
/dashboard - "Forgot password" link triggers account activation flow
- Demo users grouped by role (Project Lead, Project Manager, Delivery SPOC, Sales SPOC, POD Owner, Cluster Head, PMO, Admin)
Email Verify Screen
/auth/verify- 6-digit OTP input for email verification (from ET-001 magic link)
- Auto-submits when all 6 digits are entered
- Resend code option with cooldown timer
- On success: issues JWT and redirects to dashboard or intended route
- Invalid / expired token shows inline error
Activate Account Screen
/auth/activate- Password set form for first-time account activation
- Requires invitation token from email link (ET-006)
- Password strength indicator with real-time feedback
- Confirm password field with match validation
- On submit: activates account and auto-logs in the user
Navigation
Module Picker (Dashboard)
/dashboard- Landing page after login — shows role-relevant module tiles
- Tiles rendered based on the user's roles (Workflow, Priorities & Achievements, Reports, Admin, Cycles)
- Recent activity feed showing latest workflow events
- Quick-access KPI cards: open submissions, pending reviews, overdue items
- Notification bell with live unread count
- Sidebar navigation always visible for direct module access
Projects Screen
/projects- Searchable, filterable list of all projects the user is associated with
- Columns: project name, POD, status (active / inactive), assigned roles
- Clicking a project navigates to the relevant workflow screen for that project
- Status badges colour-coded (green = active, amber = pending, blue = on-hold)
- Admin users see all projects; regular users see only their assigned projects
Workflow Screens
Each role in the delivery chain has a dedicated workflow screen. Screens share a common pattern: a header with cycle info, a KPI strip, a submission area, and a team-status table showing direct reports.
Project Lead Screen
/workflow/pl- Week KPI strip: current week ID, submission deadline countdown
- Priorities text area — submit weekly priorities for the active cycle
- Achievements text area — submit achievements from last week
- Highlights / Lowlights free-text fields
- Submit / Save Draft buttons; submitted state locks the form
- Current Cycle / Next Cycle tabs — pre-plan the upcoming iteration's Ups & Downs as they happen; the next cycle is created (draft) on demand per the project cadence (weekly / biweekly / monthly)
- Next-cycle submission window — Save as Draft anytime, but Submit to the Project Manager is disabled until one day before the cycle begins. The ET-001 "cycle started" kickoff still fires when the period actually starts
- View submission history via link to cycle history
- Automated ET-007 kickoff email triggers on Monday morning
Project Manager Screen
/workflow/pm- KPI strip: total Project Leads assigned, count submitted, count missing
- Project Lead submissions table — view each Project Lead's priorities and achievements
- Review each submission inline: approve, return with comment, or escalate
- Own submission area for Project Manager's weekly Priorities & Achievements to Delivery SPOC
- Missing submission follow-up action triggers ET-008 reminder email
- Submission deadline indicator with colour change when overdue
Delivery SPOC Screen
/workflow/delivery-spoc- Aggregated view of all Project Manager rollup submissions
- KPI strip: Project Manager count, reviewed vs pending
- Expand each Project Manager row to see the full rollup detail
- Add commentary and approve the Project Manager aggregation
- Submit own rollup upward to Sales SPOC
- ET-007 Priorities & Achievements kickoff can be sent via pa_kickoff_all scheduler job
Sales SPOC Screen
/workflow/sales-spoc- Receives Delivery SPOC rollups from direct reports
- Review and approve each Delivery SPOC submission with comments
- Consolidated summary view of delivery performance across SPOCs
- Submit own synthesis upward to POD Owner
- Deadline tracking and escalation path (ET-011)
POD Owner Screen
/workflow/pod-owner- Rollup view from all Sales SPOCs within the POD
- Progress stepper showing chain completion stage by stage
- Detailed view of each SPOC's submission with diff from previous week
- POD-level commentary and approval before sending to Cluster Head
- Escalation alerts for overdue SPOC submissions (ET-012)
- Submit POD summary upward to Cluster Head
Cluster Head Screen
/workflow/cluster-head- Final stage of the delivery chain — receives POD Owner summaries
- KPI strip: POD count, all-submitted indicator, total project count
- Expand each POD row to read the full rollup with nested chain detail
- Approve, return with comment, or acknowledge each POD summary
- Priorities & Achievements Acknowledge button for Priorities & Achievements digest acknowledgement (Sprint 12)
- Weekly digest email (ET-014) sent automatically by scheduler
- Full cycle is complete when all POD summaries are acknowledged
PMO Screen
/workflow/pmo- Cross-cluster observer view — read-only access to all POD summaries
- Tabbed view: All Projects / By POD / By Status
- KPI strip: total projects, on-track count, at-risk count
- Drill down into any project to read submission history
- Export capability for offline reporting (CSV)
- No approval actions — PMO is observational, not in the approval chain
Review Cycles
Cycle History Screen
/cycles/history- Paginated list of all review cycles (past + current + upcoming)
- Columns: cycle name, ISO week, status, next scheduled run, completion %
- Status badges: Active / Complete / Pending / Upcoming
- Click any cycle row to navigate to cycle detail
- Filter by status, date range, or search by cycle name
- Admin users can see the full run log for each cycle
Cycle Detail Screen
/cycles/:id- Full detail for a single review cycle identified by ID
- KPI cards: overall completion %, submission counts, pending counts
- Chain progress stepper: Project Lead → Project Manager → Delivery SPOC → Sales SPOC → POD Owner → Cluster Head
- Per-stage completion breakdown with links to individual submissions
- Timeline of scheduler events that fired during the cycle
- Export cycle data as CSV for offline analysis
Priorities & Achievements
Priorities & Achievements Screen
/pa- Two-panel layout: submission form (left) + team submission status (right sidebar)
- Submit priorities for the current ISO week and achievements from last week
- Free-text areas for Highlights and Lowlights (optional)
- Save Draft preserves unsaved changes; Submit locks the form
- Current Week / Next Week tabs — pre-plan next week's priorities & achievements as a draft anytime; Submit to the manager is disabled until one day before the week begins
- Team Status sidebar shows direct reports' submission state (green/amber/red)
- My Contributors card (for Project Leads): lists Project Contributors reporting to this PL with a Review → link into the bilateral review screen
- Project Contributors land here as a P&A-only home — Ups & Downs / Cycle History are hidden for them
- Triggered via ET-007 kickoff email (both manual pa_kickoff_all and automated Monday cron)
- Supports combined week submissions (e.g. "2026-W22 & 2026-W23") from pa_kickoff_all
Project Contributor Submission
/pa- P&A-only role at the bottom of the bilateral chain — a Project Contributor reports to a Project Lead (e.g. Gopal Krishna Tripathi & Shivsagar Mishra → Kuntal Singha, Black Sun)
- Uses the same Priorities & Achievements submission screen as everyone else; their submission is reviewed bilaterally by their Project Lead
- After the PL approves, the entry flows up the normal hierarchy: Project Contributor → PL → PM → Delivery SPOC → POD Owner → Cluster Head
- Excluded from reports, dashboards, Ups & Downs, and project membership — visible only within the P&A workflow
- Assigned in Admin → Users; the PC→PL mapping is managed in Admin → Reporting Relationships
Project Manager Bilateral Review Screen
/pa/bilateral-review- Each reviewer reviews their direct report's Priorities & Achievements submission in a bilateral context — a Project Lead reviews their Project Contributors, a PM reviews their PLs, and so on up the chain
- Side-by-side view: direct report's submission vs. the reviewer's own this-week priorities
- Tabbed view per direct report — navigate between all direct reports
- Approve, return with comment, or escalate each Priorities & Achievements entry
- Project Manager adds bilateral review note that becomes part of the audit trail
- Completed reviews trigger ET-013 acknowledgement to the Project Lead
Cluster Head Priorities & Achievements Digest Screen
/pa/digest- Aggregated Priorities & Achievements digest for the Cluster Head — all PODs in scope
- KPI strip: total PODs, submission rate %, current week
- Grouped by POD — click to expand full team Priorities & Achievements list
- Highlights reel: top priorities and achievements across cluster
- Priorities & Achievements Acknowledge button — marks the digest as reviewed (Sprint 12)
- Weekly digest is emailed automatically via ET-014 scheduler job
Historical Priorities & Achievements Screen
/pa/history- Archive of all past Priorities & Achievements submissions by the current user
- Tabs: My Submissions / Team Submissions (if manager role)
- Filter chips: by week, by submission status, by type
- Click any row to expand and read the full entry
- Export selected entries as CSV or PDF
- Managers see all direct reports' historical entries under Team tab
Reports
Reports Screen
/reports- Ups & Downs Trend: SVG bar chart showing weekly ups vs downs counts over time
- Priorities & Achievements Completion Rate: SVG line chart — % of team submitting Priorities & Achievements per week
- Return Rate by Stage: Horizontal bar chart — % of submissions returned at each chain stage
- Approval SLA Metrics: Card showing average time-to-approve at each stage
- ViewToggle component switches between table view and chart view for each dataset
- On-demand CSV export for all chart data sets
- Admin users additionally see User Activity report and Return Rate exports (FEAT-10B)
- Scheduled report delivery via email (FEAT-10A) — admins configure cadence in Admin → Reports
Account
Profile Screen
/profile- User info tab: display name, email, avatar (initials-based), role summary
- Security tab: change password form with current password verification
- MCP Guide tab: inline API token management and MCP server setup instructions — the server exposes 64 tools / 3 resources / 3 pre-built prompts
- Personal Access Tokens: generate tokens prefixed
pgmcp_for MCP client auth - Token list shows name, created date, last used, expiry — revoke individually
- Notification preferences (email / in-app toggles per notification type)
Status Screen
/status- Real-time health indicators for API server, database, and scheduler service
- Service health table: each service with status badge and last-checked timestamp
- Automation enabled/disabled indicator (from SchedulerSettings)
- API version and build timestamp displayed
- Useful for support diagnostics — shows current user's JWT claims summary
Admin Portal
All admin screens are under /admin/* and require the admin role. The admin portal is accessible via the Admin link in the sidebar (visible only to admin users).
Admin — Projects
/admin/projects- Full CRUD for projects: create, edit, deactivate
- Assign projects to PODs; set project status (active/inactive)
- Search and filter projects by name, POD, or status
- Edit modal: project name, POD assignment, role assignments (Project Lead, Project Manager, etc.)
- Shows all assigned Project Managers and Project Leads in the edit modal
- Deactivation hides the project from workflow screens without deleting data
Admin — PODs
/admin/pods- Full CRUD for PODs (Profit Delivery Units)
- Assign POD Owner and Cluster Head to each POD
- Project count badge shows how many projects belong to each POD
- Edit modal: POD name, owner assignment, cluster head assignment
- Deactivate POD hides it from workflow without deleting history
Admin — Users
/admin/users- User directory with search by name or email
- Invite new user: sends ET-006 invitation email with activation link
- Edit user roles (multi-select from all role types)
- Activate / deactivate user accounts
- Role badges shown inline; click to expand role + project assignments
- Reset password sends a new activation email to the user
Admin — Scheduler
/admin/scheduler- Configuration tab: enable/disable all automation globally (
disableAllAutomation), per-notification toggles, manual cycle creation with project selection - Activity & Run Log tab: Upcoming Runs table + Run History table with status badges, duration, items affected, and expandable detail JSON
- Run History filters: by job type, status (success / failed / skipped), date range — Export as CSV
- Every execution is persisted to the
scheduler_runsdatabase table (jobType, status, trigger, startedAt, finishedAt, durationMs, itemsAffected, detail JSON)
| Job Type | Label | Cron / Schedule | Email Template | Description |
|---|---|---|---|---|
| cycle_creation | Cycle Creation Poll | Every minute | — | Checks active SchedulerCycle rows and auto-creates a new review cycle when the next run time is reached. Hidden from Upcoming Runs (covered by cycle table). |
| send_monday_kickoff | Monday Priorities & Achievements Kickoff | Mon 02:30 UTC | ET-007 | Sends weekly Priorities & Achievements kickoff email to all active Project Leads in projects with open cycles. Uses projectName, weekLabel, submissionLink tokens. |
| send_pl_submission_reminder | Project Lead Submission Reminder | Mon 11:00 UTC | ET-008 | Reminds Project Leads who haven't submitted by 11:00 Monday. Skipped if already submitted (idempotency guard via reminderSentLog). |
| send_cluster_head_digest | Cluster Head Weekly Digest | Fri 16:00 UTC | ET-014 | Sends aggregated weekly Priorities & Achievements digest to all Cluster Heads. Summarises all POD rollups received that week. |
| send_missed_submission_escalation | Missed Submission Escalation | Fri 14:00 UTC | ET-012 | Escalates to the manager when a team member has not submitted by Friday afternoon. Fires per active reporting relationship with missing submission. |
| send_invitation_reminders | Invitation Reminders | Daily 08:00 UTC | ET-006 | Re-sends account activation reminders to users who were invited but have not yet activated their account. Stops after 3 attempts. |
| run_reminder_engine | General Reminder Engine | Hourly | ET-008/011/012 | Orchestrates all time-sensitive reminders. Evaluates submission deadlines and fires the appropriate notification template for each overdue entity. Uses reminderSentLog to prevent duplicates. |
| run_scheduled_reports | Scheduled Report Delivery | Daily 06:00 UTC | — | Delivers reports configured in Admin → Reports. Checks each ScheduledReport row for due deliveries, generates the report data, attaches CSV, and emails to recipients. |
| pa_kickoff_all | Priorities & Achievements Kickoff — All Direct Reports | Manual only (▶ Run Now) | ET-007 | Sends ET-007 to every active direct report in the reportingRelationship table — covers ALL roles (Project Lead, Project Manager, Delivery SPOC, Sales SPOC, POD Owner, Cluster Head). weekLabel = previous week + current week combined (e.g. "2026-W22 & 2026-W23"). One email per unique recipient. Cron is set to Jan 1 (never auto-fires). API: POST /api/v1/admin/scheduler/jobs/pa_kickoff_all/fire |
Admin — Email Templates
/admin/email-templates- View and edit all ET-001 to ET-022 email notification templates
- Edit subject line and HTML body with live token preview
- Supported tokens:
{{userName}},{{projectName}},{{weekLabel}},{{deadline}},{{managerName}},{{submissionLink}}and more - Test-send any template to a specified email address
- Change history per template (audit trail)
- Reset to default option available for each template
Admin — Reporting Relationships
/admin/reporting-relationships- Manage the bilateral Priorities & Achievements reporting chain — who reports to whom
- Supports all role combinations: Project Contributor → Project Lead, Project Lead → Project Manager, Project Manager → Delivery SPOC, Delivery SPOC → Sales SPOC, etc.
- Add new relationship: select Direct Report + Manager from user search
- Toggle active/inactive without deleting (preserves history)
- This table is queried by the
pa_kickoff_allscheduler job to send ET-007 to all direct reports across all roles - Also drives the Team Submission Status sidebar in PAScreen
Admin — Reports
/admin/reports- Scheduled Reports tab: configure automated report delivery (FEAT-10A)
- Create scheduled report: choose report type, recipients, cadence (weekly/monthly), day & time
- Each scheduled report shows next delivery time and status (active/paused)
- Export tab: on-demand CSV exports for User Activity and Return Rate data (FEAT-10B)
- User Activity export: logins, submission counts, last active — filterable by date range
- Return Rate export: submissions returned at each stage, by week/POD
Admin — MCP Tokens
/admin/mcp-tokens- Admin view of all Personal Access Tokens (PATs) issued across all users
- PAT prefix:
pgmcp_— used for MCP server authentication - Columns: user, token name, created date, last used, expiry
- Admin can revoke any token (e.g. for offboarding or security incidents)
- Search by user or token name
- Users manage their own tokens in Profile → MCP Guide tab
Admin — MCP Interaction Log
/admin/mcp-log- Audit log of all MCP tool calls made via the MCP server (FEAT-09C)
- Columns: timestamp, user (token owner), tool called, request summary, status
- Filter by user or tool name; paginated results
- Failed calls shown with error detail on expand
- Useful for auditing AI-assisted access to POD Governance data via Claude/MCP clients
- Export as CSV for compliance reporting
Admin — Audit Log
/admin/audit-log- Immutable log of all write operations across the system
- Columns: timestamp, actor (user), action (CREATE/UPDATE/DELETE), entity type, entity ID
- Filter by actor, action type, entity type, or date range
- Expand any row to see before/after JSON diff for update events
- Export filtered results as CSV for compliance and OWASP audit requirements
- Sanitised log output — PII is masked in exported fields (OWASP QA fix)
POD Governance Implementation Documentation · v175 · Generated 2026-06-16 · Mockup reference (PAGES.md)