App for the Mega Infrastructure AI Integration programme (A000) and Mega Plant (B110). 100 activities across 2 programmes, 06 Oct 2026 - 31 Aug 2027, parsed from the client PDF and frozen as an immutable baseline. Views: Dashboard, Timeline (month grid + week grid matching the PDF's Friday-anchored week numbering), Todo list, WBS, Data. Notes on the source data: - Hierarchy is derived from the PDF's indentation, not the activity code. Codes do not sort structurally (A490 sits under Workforce, A510 under Financials), so a code-ordered import would produce a wrong tree. - The schedule is built from the dates, not the PDF's "Durn" column, which disagrees with its own dates for 13 of the 100 activities. - Spec issues found in the PDF are surfaced in-app under Data: 2 unresolved "?" placeholders, 6 activities sharing one stretched 6-week window while declared 15 days, 13 duration mismatches, 17 spelling corrections (original wording preserved and viewable). Progress (status, % complete, note) is stored behind a pluggable adapter so the site can be static today and point at a shared JSON store later without touching the UI.
30 lines
1.2 KiB
HTML
30 lines
1.2 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
<title>Mega Infrastructure — Project Tracker</title>
|
|
<meta name="description" content="Project tracker for the Mega Infrastructure AI Integration programme, seeded from the Candy barchart." />
|
|
<script>
|
|
// Resolve the theme before first paint so there is no flash of the wrong
|
|
// colours. Must mirror src/lib/appearance.ts (DEFAULT_MODE / DEFAULT_ACCENT).
|
|
;(function () {
|
|
try {
|
|
var t = localStorage.getItem('mega-tracker/theme/v1')
|
|
if (t !== 'light' && t !== 'dark') t = 'dark'
|
|
var a = localStorage.getItem('mega-tracker/accent/v1')
|
|
if (['blue', 'violet', 'emerald', 'amber'].indexOf(a) < 0) a = 'blue'
|
|
var el = document.documentElement
|
|
el.dataset.theme = t
|
|
el.dataset.accent = a
|
|
el.style.colorScheme = t
|
|
} catch (e) {}
|
|
})()
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|