The OFCI Command Center
What you'll learn
~60 min- Build an Express.js dashboard server integrating data from all procurement tools
- Implement a Monday Morning Run that refreshes all data sources and generates a prioritized briefing
- Create a portfolio overview with project cards, RAG status, and drill-down views
- Build a Top 15 priority action queue that surfaces the most urgent items across all tools
What you’re building
It’s 7 AM on Monday. You open your laptop and need to answer one question: “What do I need to do this week?” Right now that means checking email, opening three spreadsheets, scanning Procore for submittals, looking at the delivery calendar, hoping you don’t miss something critical, and trying to remember that thing from Friday that you swore you’d remember on Monday. You never remember. Nobody remembers.
The OFCI Command Center kills that entire ritual. One URL. One dashboard. One button. You click “Monday Morning Run” and in 10 seconds you have:
- Portfolio health across all projects (RAG scorecards)
- Your Top 15 most urgent action items, ranked by an algorithm that’s better at prioritizing than your Monday-morning brain
- Overdue submittals that need follow-up calls
- Procurement windows closing this week
- Deliveries scheduled in the next 14 days
- Budget variances that need attention
This is the capstone. Every tool you’ve built in this module becomes a data source that feeds the Command Center. Seven tools, one dashboard, zero “oh shit I forgot about the SV9 switchgear.”
You know the feeling — it’s drop day and you’re hitting 203, 374, and 131 before anybody else gets the call. You’ve got your route, you know which stores to trust and which ones will lie to your face, and you’re not wasting time on stores that never have shit. Your Monday Morning Run is the procurement version. One click, full refresh, prioritized action queue. No driving to six stores. No “oh crap I forgot about the SV9 switchgear submittal.” Just clarity, first thing, every week. That’s the whole damn point of everything we’ve built.
By the end of this lesson you will have a web dashboard — a page you open in your browser, like any website — that aggregates data from all your procurement tools, provides a portfolio overview with project-level drill-downs, runs a “Monday Morning Run” to refresh all data and generate a prioritized action queue, and gives you a single operational cockpit for OFCI procurement management. It’s the thing you wish you’d had for the last five years.
Multiple tool outputs → data aggregation layer → prioritized action queue → web dashboard with drill-downs. This pattern works for any operations center: NOC dashboards, DevOps control panels, executive command centers, project management hubs. The key insight is that individual tools are useful, but a unified view with intelligent prioritization is transformative.
🔍What's different about this lesson (read this first)
Lessons 1-7 built CLI tools — you typed a command, got text output. This lesson builds a web dashboard — a local website running on your machine that you view in Chrome or Edge.
Here’s the plain-English version of the new tech involved:
- Express.js is a tiny web server. It’s like a local version of a website — instead of going to google.com, you go to
localhost:3000(your own machine). When you typenode server.js, you’re starting that local website. - EJS templates are HTML pages with blanks that get filled in with your data. Think of them like mail merge in Word — the template has placeholders, and the server fills them in with your actual project numbers before showing you the page.
- Routes are just URLs. When you click a project card, the browser goes to
/project/SV9, and the server knows to show you the SV9 detail page. It’s the same as clicking a link on any website. - The data directory is where the dashboard reads JSON files from. These are the same output files your other tools generate. The dashboard doesn’t do any procurement logic itself — it just reads the results and displays them visually.
The AI CLI tool handles all the code. You paste one prompt and get a working dashboard. The only difference from previous lessons is that instead of running node src/index.js and reading terminal output, you run node server.js and open a browser tab.
The showcase
Here’s what you’re looking at when you open localhost:3000:
- Dashboard home: Portfolio overview with project cards showing RAG status, budget health, and key metrics. Think of it as the “how screwed am I?” view, but prettier.
- Monday Morning Run: One-click refresh that reads all data sources and generates the weekly briefing + action queue. This is the button that replaces your entire Monday morning orientation routine.
- Top 15 Queue: Prioritized list of the 15 most urgent action items across all tools and projects, ranked by impact and urgency. Not ranked by “whichever PM yelled at you last,” which is how most of us currently prioritize.
- Project drill-down: Click a project card to see the detailed scorecard, submittals, lead times, budget, and deliveries. Everything you need to walk into a project meeting and not look like you’re winging it.
- Responsive design: Works on laptop (primary) and tablet (site visits). Because sometimes you need to pull this up in a construction trailer and pretend you knew about the delivery conflict all along.
The prompt
Build a Node.js/Express web dashboard called ofci-command-center that servesas a unified operations hub for data center MEP procurement management.
PROJECT STRUCTURE:ofci-command-center/ package.json server.js (Express server entry point) src/ aggregator.js (reads data from all tool output directories) prioritizer.js (Top 15 action queue ranking engine) monday-run.js (Monday Morning Run orchestrator) routes/ dashboard.js (main dashboard routes) api.js (JSON API routes for dynamic updates) public/ css/ styles.css (dashboard styling — dark theme) js/ dashboard.js (client-side interactivity) views/ layout.ejs (base HTML layout with nav) dashboard.ejs (main dashboard view) project.ejs (project detail view) briefing.ejs (Monday Morning Run briefing view) data/ sv9/ (symlink or copy of tool output data) budget.json submittals.json leadtimes.json deliveries.json ch2/ budget.json submittals.json leadtimes.json deliveries.json den3/ budget.json submittals.json leadtimes.json deliveries.json
REQUIREMENTS:
1. EXPRESS SERVER (server.js) - Port: 3000 (configurable via PORT env var) - View engine: EJS - Static files from public/ - Routes: / (dashboard), /project/:code (detail), /briefing (Monday Run), /api/status (JSON health check), /api/refresh (trigger data reload)
2. DASHBOARD VIEW (views/dashboard.ejs) Main page with four sections:
a. PORTFOLIO HEADER - Title: "OFCI Command Center" - Last refresh timestamp - "Monday Morning Run" button (triggers full refresh) - Portfolio-level stats: total projects, total equipment items, overall budget
b. PROJECT CARDS (grid layout, 1 card per project) Each card shows: - Project code and site name - Overall RAG status (large colored indicator) - Four mini RAG indicators for schedule, budget, submittals, deliveries - Key number: total budget and variance % - Key number: days to next delivery - Click to drill down to project detail view
c. TOP 15 ACTION QUEUE Ranked list of the 15 most urgent items across all projects: - Each item has: rank number, urgency indicator (🔴🟡🟢), project code, action description, source tool, due/deadline - Example items: "🔴 SV9 — Issue PO for switchgear (order-by date was 14 days ago) [Lead Time]" "🔴 CH2 — Follow up on Eaton submittal (22 days overdue, Tier 3) [Submittals]" "🟡 DEN3 — Confirm crane for March 28 generator delivery [Deliveries]" "🟡 SV9 — Review chiller budget variance (12% over) [Budget]" - Clicking an item shows details in a slide-out panel
d. UPCOMING WEEK Timeline showing the next 7 days with scheduled deliveries, submittal deadlines, and order-by dates across all projects.
3. PROJECT DETAIL VIEW (views/project.ejs) Detailed view for a single project: - Full scorecard with RAG status for all four dimensions - Budget summary with variance table - Submittal status breakdown with overdue list - Lead time watchboard for that project's equipment - Upcoming deliveries with conflict indicators - Back link to main dashboard
4. MONDAY MORNING RUN (src/monday-run.js) When triggered (via button click or /api/refresh): - Reload all JSON data files from the data directory - Recalculate all RAG statuses and scores - Regenerate the Top 15 action queue - Generate a briefing summary (key changes since last run) - Save a snapshot to data/snapshots/YYYY-MM-DD.json - Redirect to /briefing to show the results
5. TOP 15 PRIORITIZER (src/prioritizer.js) Scoring algorithm for action queue ranking: - Base score by source: Lead time (black status) = 100 Lead time (red status) = 80 Submittal (Tier 3 overdue) = 90 Submittal (Tier 2 overdue) = 60 Delivery conflict = 70 Delivery unconfirmed (<14 days) = 50 Budget variance (>10%) = 40 Budget variance (5-10%) = 20 - Modifiers: + days_overdue (for submittals — always positive, adds to urgency) + abs(days_past_order_by) (for lead times — use absolute value so past-due items score HIGHER, not lower) + equipment_criticality multiplier (generator/switchgear = 1.5x, chiller/UPS = 1.2x, CRAH/PDU = 1.0x) - Formula: final_score = (base_score + days_modifier) * criticality_multiplier - Sort by final score descending, take top 15
6. STYLING (public/css/styles.css) Dark theme matching data center aesthetics: - Background: #0a0a0f (near black) - Cards: #1a1a2e with subtle border - Text: #e0e0e0 (light gray) - RAG colors: Red #ef4444, Amber #f59e0b, Green #22c55e - Accent: #D97706 (amber — matches track theme) - Font: system-ui for body, monospace for numbers/codes - Responsive grid: 3 columns on desktop, 2 on tablet, 1 on mobile
DEPENDENCIES: express, ejs, chalk
SAMPLE RUN:cd ofci-command-centernpm installnode server.js# Open http://localhost:3000
# Click "Monday Morning Run" to refresh data and see the briefing# Click any project card to drill into details# The Top 15 queue shows your most urgent actions across all projectsThis lesson ties everything together. The data files in the data/ directory simulate what you’d get from running the tools you built in Lessons 1-7. In a real deployment, you’d point the aggregator at the actual output directories of those tools. For now, the sample JSON files give you a working dashboard to demonstrate the concept.
What you get
Fire it up
cd ofci-command-centernpm installnode server.jsOpen http://localhost:3000 in your browser. You should see the OFCI Command Center with project cards, the Top 15 action queue, and the Monday Morning Run button. If this is the first time you’ve built something with a browser interface from a single prompt — yeah, that reaction is normal. It’s a whole-ass dashboard. From one paste.
If something is off
| Problem | Follow-up prompt |
|---|---|
| Express server crashes on startup | The server fails to start. Make sure server.js has correct requires for express and path, sets up the EJS view engine with app.set('view engine', 'ejs') and app.set('views', path.join(__dirname, 'views')), and serves static files from public/ with app.use(express.static('public')). Also ensure all view files exist in the views/ directory. |
| EJS templates show raw variables | The templates show raw <%%= variable %> tags instead of rendered values. Make sure the route handlers pass the data object to res.render() as the second argument: res.render('dashboard', { projects, actions, lastRefresh }). Also check that the EJS syntax uses <%%= %> for escaped output and <%%- %> for unescaped HTML. |
| Project cards don’t link to detail view | Clicking a project card doesn't navigate to the detail page. Make sure each card is wrapped in an anchor tag with href="/project/<%%- project.code %>" and that the /project/:code route exists in routes/dashboard.js and passes the correct project data to the project.ejs template. |
| Monday Morning Run doesn’t refresh data | The refresh button sends a request but data doesn't update. Make sure the /api/refresh route re-reads all JSON files from disk (not from a cached variable), recalculates scores, and saves a snapshot. After refresh, redirect to /briefing or reload the dashboard. Use synchronous file reads or await async reads before sending the response. |
When Things Go Wrong
Use the Symptom → Evidence → Request pattern: describe what you see, paste the error, then ask for a fix.
How it works (the 2-minute explanation)
Four moving pieces, and none of them are complicated on their own. The power is in the wiring.
- Express server serves an EJS-templated web dashboard on port 3000. That’s it — it’s a local website. Routes handle the main dashboard, project detail views, and the Monday Morning Run briefing. When you click things, the server shows you different pages with different data. If you’ve ever used a website, you already understand this part.
- Aggregator reads JSON data files from each project’s subdirectory and merges them into a unified data model. Think of it as the thing that takes output from seven different tools and makes one big picture out of it. Without this, you’re the aggregator — and you’re doing it in your head every Monday morning while also trying to remember if you fed the dog.
- Prioritizer is the part that makes this thing actually useful. It scores every actionable item across all tools and projects using a weighted algorithm that considers urgency, impact, and equipment criticality. Then it ranks them and gives you the top 15. Your brain is great at procurement decisions. It’s terrible at remembering which of 100 items across three projects needs attention first. Let the algorithm handle the sorting so your brain can handle the decisions.
- Monday Morning Run re-reads all data sources, recalculates everything, saves a snapshot for historical comparison, and generates the weekly briefing. One click. Full refresh. Prioritized action queue. That’s the whole thing.
🔍From seven tools to one platform
Look at what you’ve built across this module:
- RFP Machine → generates procurement documents
- Vendor Scorecard → evaluates bids with weighted scoring
- Submittal Tracker → manages submittal lifecycles
- Lead Time Watchboard → monitors procurement windows
- Budget Hound → tracks financial health
- Delivery War Room → coordinates logistics
- Executive Briefing → synthesizes for leadership
- Command Center → unifies everything into one view
Each tool solves one problem well. The Command Center connects them into an integrated procurement operating system. This is the difference between having seven useful scripts and having a platform. And you built it all from prompts.
Customize it
You’ve got a working command center. Now make it yours. These are the extensions that turn “cool demo” into “this is how I actually run my portfolio.”
Add a Slack/Teams notification integration
Add a --notify flag to the Monday Morning Run that formats the Top 5 mosturgent action items as a Slack-compatible webhook payload. Send to a configuredwebhook URL. Include the overall portfolio RAG status, the Top 5 items withurgency indicators, and a link to the dashboard. This lets your team see theMonday briefing without opening the dashboard.Add historical trend charts
Add a /trends route that loads all snapshots from data/snapshots/ and showstime-series charts: portfolio budget variance over time, submittal completionrate over time, and average lead time window health over time. Use Chart.jsor a simple ASCII chart library. This lets you see whether your procurementhealth is improving or declining month over month.Add a custom action queue
Add the ability to pin, snooze, or dismiss items from the Top 15 queue.Pinned items always appear at the top regardless of score. Snoozed itemsdisappear for N days then reappear. Dismissed items are hidden until thenext Monday Morning Run regenerates the queue. Store preferences in auser-prefs.json file.Try it yourself
- Open your CLI tool in an empty folder.
- Paste the main prompt. Go get coffee while it builds. Actually, it’ll probably be done before you stand up.
- Run
npm install && node server.jsand open the dashboard. - Click the Monday Morning Run button and review the briefing. This is the moment it all clicks.
- Click each project card and explore the detail views. Everything you used to hold in your head is now on a screen.
- Scan the Top 15 queue — imagine this is your actual Monday morning. What would you do first? The algorithm already answered that for you, but it’s worth checking whether your gut agrees.
- Pick one customization and add it. The Slack notification is the one most people want first, because your PM is going to lose their mind when they see this.
This is the tool you open at 7 AM every Monday. If it saves you 30 minutes of “what do I need to focus on?” orientation time, that’s 26 hours per year. If it prevents one missed delivery or one forgotten submittal follow-up, it’s paid for itself ten times over. And it cost you nothing but a prompt.
Key takeaways
- Unified views beat scattered tools, and it’s not close — seven individual CLI tools are powerful, but a single dashboard that aggregates them all shows you connections and conflicts that no individual tool reveals. That delivery conflict on DEN3 that intersects with the budget variance on SV9? You’d never catch that in separate spreadsheets.
- The Monday Morning Run is the killer feature — one click, full refresh, prioritized action queue. It turns “let me check everything and hope I don’t miss something” into “here’s what matters, ranked, with context.” Your Monday mornings just got 30 minutes shorter and significantly less stressful.
- Prioritization by algorithm beats prioritization by memory — your brain is good at procurement decisions. It’s not good at remembering which of 100 items across three projects needs attention first. That’s not a character flaw, that’s just how brains work. The scoring algorithm handles the sorting so you can focus on the actual work.
- You built all of this from prompts — eight lessons, eight tools, one integrated platform. The IT department would’ve needed a budget request, three meetings, and a vendor evaluation just to START talking about this. You built it in a weekend.
You open the Command Center on Monday morning. The Top 15 queue shows item #1 as '🔴 SV9 — Issue PO for switchgear (order-by date was 14 days ago)' and item #2 as '🔴 CH2 — Follow up on Eaton submittal (22 days overdue, Tier 3).' Both are critical. How does the prioritizer determine that the switchgear PO is #1?
Module complete
You just built eight tools and a command center from prompts. Eight. Every one runs locally on your machine. Every one solves a real problem you face every week. Here’s the full lineup:
| Lesson | Tool | What It Does |
|---|---|---|
| 1 | RFP Machine | Generates complete RFP documents from rough equipment specs |
| 2 | Vendor Scorecard | Evaluates vendor bids with weighted multi-criteria scoring |
| 3 | Submittal Tracker | Tracks submittal lifecycles across projects with overdue alerts |
| 4 | Lead Time Watchboard | Monitors procurement windows and calculates order-by dates |
| 5 | Budget Hound | Analyzes budget variances with waterfall charts and narratives |
| 6 | Delivery War Room | Manages delivery logistics with conflict detection |
| 7 | Executive Briefing | Generates portfolio scorecards and risk heat maps for VP review |
| 8 | OFCI Command Center | Unified dashboard with Monday Morning Run and Top 15 queue |
The gap between “construction procurement manager” and “construction procurement manager who builds custom AI-powered tools” is eight prompts wide. You just crossed it. The IT department didn’t need to be involved. No software vendor gave you a demo. No budget request sat in someone’s inbox for six weeks. You just… built the thing you needed.
Now go open something good. Might I suggest the Provenance 14 — absolute overload of dark fruit, like Gushers fruit snacks overload. You’ve earned it.