28 KiB
Implementation Workflow: Adding Depth to the GP Clinical Record
Generated: Feb 2026 Source:
Ralph/depth-requirements.md+Ralph/depth-design.mdPrerequisite: Task 21 (cleanup) from current plan should be completed first
Dependency Graph
Phase 1: Core Infrastructure
T1 ─── Types & CSS foundations
T2 ─── DetailPanelContext + DetailPanel component ──── depends on T1
T3 ─── useFocusTrap hook ─────────────────────────── depends on T1
T4 ─── SubNav + useActiveSection update ──────────── depends on T1
T5 ─── DashboardLayout restructure ──────────────── depends on T2, T3, T4
Phase 2: Data Expansion
T6 ─── Expand skills.ts (5 → ~20, categorised) ──── depends on T1
T7 ─── Add KPI stories to kpis.ts ────────────────── depends on T1
T8 ─── Create constellation.ts data ──────────────── depends on T6
T9 ─── Create educationExtras.ts ─────────────────── depends on T1
Phase 3: Tile Modifications (parallel where possible)
T10 ─── LatestResultsTile (bigger numbers, panel) ─── depends on T2, T7
T11 ─── CoreSkillsTile (full width, categorised) ──── depends on T2, T6
T12 ─── ProjectsTile (half width, card grid) ──────── depends on T2
T13 ─── LastConsultationTile (panel trigger) ──────── depends on T2
T14 ─── CareerActivityTile (panel triggers, hover) ── depends on T2
T15 ─── EducationTile (richer content, panel) ─────── depends on T2, T9
T16 ─── PatientSummaryTile (structured presentation)─ depends on T5
Phase 4: Detail Panel Renderers
T17 ─── KPIDetail renderer ────────────────────────── depends on T10
T18 ─── ConsultationDetail renderer ───────────────── depends on T13, T14
T19 ─── ProjectDetail renderer ────────────────────── depends on T12
T20 ─── SkillDetail + SkillsAllDetail renderers ───── depends on T11
T21 ─── EducationDetail renderer ──────────────────── depends on T15
Phase 5: Career Constellation (D3.js)
T22 ─── Install d3, scaffold CareerConstellation ──── depends on T8
T23 ─── D3 force graph rendering ──────────────────── depends on T22
T24 ─── Hover/click interactions → detail panel ───── depends on T23, T18, T20
T25 ─── Constellation accessibility ───────────────── depends on T23
Phase 6: Login Refresh
T26 ─── LoginScreen visual restyle ────────────────── independent
T27 ─── Username → a.recruiter + connection status ── depends on T26
T28 ─── Post-login loading state ──────────────────── depends on T27
T29 ─── TopBar session name update ────────────────── depends on T28
Phase 7: Polish & Integration
T30 ─── CommandPalette updates for new content ────── depends on T17-T21
T31 ─── Responsive testing (panels, sub-nav) ──────── depends on T5, T2
T32 ─── prefers-reduced-motion audit ──────────────── depends on all
T33 ─── Final visual review + cleanup ─────────────── depends on all
Pre-Flight: Complete Task 21 (Cleanup)
Before starting depth work, the current plan's final task must be done:
- Remove unused old components (PatientBanner, ClinicalSidebar, Breadcrumb, MobileBottomNav, PMRInterface)
- Remove old view files (
src/components/views/*.tsx) - Remove old portfolio components (Contact, Education, Experience, FloatingNav, Footer, Hero, Projects, Skills)
- Remove unused hooks (useScrollCondensation if unused)
- Verify no dead imports
npm run buildclean
Checkpoint: Clean build with zero unused components.
Phase 1: Core Infrastructure
Task 1: Types & CSS Foundations
Files: src/types/pmr.ts, src/index.css
Effort: Small
Add all new TypeScript types and CSS custom properties needed by subsequent tasks.
Types to add (src/types/pmr.ts):
SkillCategory—'Technical' | 'Domain' | 'Leadership'KPIStory— context, role, outcomes[], period- Augment
KPIwith optionalstory?: KPIStory ConstellationNode— id, type, label, domain, org dataConstellationLink— source, target, strengthDetailPanelContent— discriminated union (kpi | skill | skills-all | consultation | project | education | career-role)EducationExtra— documentId, extracurriculars, researchDescription, programmeDetail- Add
category?: SkillCategoryfield toSkillMedication
CSS to add (src/index.css):
--subnav-height: 36px;
--panel-narrow: 400px;
--panel-wide: 60vw;
--backdrop-blur: 4px;
--backdrop-bg: rgba(26,43,42,0.15);
Plus panel animation keyframes (panel-slide-in, panel-slide-out, backdrop-fade-in) with prefers-reduced-motion overrides.
Validation: npm run typecheck passes.
Task 2: DetailPanelContext + DetailPanel Component
New files: src/contexts/DetailPanelContext.tsx, src/components/DetailPanel.tsx
Depends on: T1
Effort: Medium
DetailPanelContext (src/contexts/DetailPanelContext.tsx):
DetailPanelContextValue:{ content, openPanel, closePanel, isOpen }DetailPanelProviderwraps children, manages state- Width mapping: deterministic from
content.type(narrow for kpi/skill/education, wide for consultation/project/career-role) - Title mapping: derived from content data
DetailPanel (src/components/DetailPanel.tsx):
- Full-screen backdrop (
backdrop-filter: blur(4px), click to close) - Panel slides from right (
translateX(100%)→translateX(0), 250ms ease-out) - Adaptive width:
var(--panel-narrow)orvar(--panel-wide)based on content type - Header: close button (X, lucide
Xicon) + dot + section title - Scrollable content area renders
{children}(or delegates to content renderers) - Close triggers: backdrop click, Escape key, X button
aria-modal="true",role="dialog",aria-labelledby- Mobile: both widths become 100vw
prefers-reduced-motion: instant appear, no slide
Integration: Initially renders placeholder content ("Detail panel for {type}"). Real content renderers come in Phase 4.
Validation: Panel opens/closes correctly with keyboard and mouse. npm run typecheck + npm run build.
Task 3: useFocusTrap Hook
New file: src/hooks/useFocusTrap.ts
Depends on: T1
Effort: Small
useFocusTrap(containerRef: RefObject<HTMLElement>, isActive: boolean): void- When active: Tab/Shift+Tab cycle within container, first focusable element receives focus
- When deactivated: focus returns to the element that was focused before trap activated
- Used by DetailPanel (and already used by CommandPalette — consider if CommandPalette can share this hook)
Validation: Tab cycling confirmed in DetailPanel. Focus returns correctly on close.
Task 4: SubNav + useActiveSection Update
New file: src/components/SubNav.tsx
Modified file: src/hooks/useActiveSection.ts
Depends on: T1
Effort: Medium
SubNav component:
- Fixed/sticky below TopBar (
top: 48px,z-index: 99) - 5 sections: Overview | Skills | Experience | Projects | Education
- Click → smooth-scroll to
[data-tile-id="${tileId}"] - Active tab: teal underline (2px), text colour
var(--accent) - Inactive:
var(--text-secondary) - Height: 36px, background
var(--surface), bottom border - Tabs: 13px, font-weight 500, gap 24px
- Teal underline slides with 200ms transition
useActiveSection update:
- Observe
data-tile-idattributes on tile elements - Map tile IDs to section IDs (patient-summary→overview, core-skills→skills, etc.)
- Use IntersectionObserver with appropriate thresholds
Tile data-tile-id attributes: Ensure each tile's Card has this attribute. May need to add tileId prop to Card if not already present.
Validation: Scroll triggers correct active tab. Click scrolls to correct section. npm run build.
Task 5: DashboardLayout Restructure
Modified file: src/components/DashboardLayout.tsx
Depends on: T2, T3, T4
Effort: Medium
Changes:
- Wrap with
DetailPanelProvider(in App.tsx or DashboardLayout) - Add
SubNavbetween TopBar and content - Reorder tiles:
- PatientSummaryTile (full width)
- LatestResultsTile (half) + ProjectsTile (half) — side by side
- CoreSkillsTile (full width) — was half, now full
- LastConsultationTile (full width)
- CareerActivityTile (full width)
- EducationTile (full width)
- Render
DetailPanelalongside CommandPalette - Adjust margin-top:
calc(var(--topbar-height) + var(--subnav-height)) - Add
data-tile-idattributes to tile wrappers
Validation: Layout renders correctly with new tile order. SubNav visible. Detail panel renders. No visual regressions. npm run build.
Checkpoint: Core infrastructure complete. Detail panel opens (with placeholder content), sub-nav works, new tile order in place.
Phase 2: Data Expansion
Task 6: Expand Skills Data
Modified file: src/data/skills.ts
Depends on: T1
Effort: Medium
Expand from 5 → ~20 skills across 3 categories. Each skill retains the medication metaphor.
Categories:
- Technical (8): Data Analysis, Python, SQL, Power BI, JavaScript/TypeScript, Excel, Algorithm Design, Data Pipelines
- Healthcare Domain (6): Medicines Optimisation, Population Health, NICE TA Implementation, Health Economics, Clinical Pathways, Controlled Drugs
- Strategic & Leadership (7): Budget Management, Stakeholder Engagement, Pharmaceutical Negotiation, Team Development, Change Management, Financial Modelling, Executive Communication
Each skill: id, name, genericName, frequency, startYear, yearsOfExperience, status, proficiency, category
Source: CV_v4.md Core Competencies section.
Validation: Types check. Existing CoreSkillsTile still renders (it will show all skills or first 5 depending on current implementation).
Task 7: Add KPI Stories
Modified file: src/data/kpis.ts
Depends on: T1
Effort: Small
Add story field to each of the 4 KPIs:
- £220M — prescribing budget, forecasting models, ICB board accountability
- £14.6M — efficiency programme, data analysis identification, over-target by Oct 2025
- 9+ Years — career span Aug 2016–present, progression narrative
- 1.2M — population served, Norfolk & Waveney ICS scope
Source: CV_v4.md role descriptions.
Validation: Types check. Existing tile unaffected (story field is optional).
Task 8: Create Constellation Data
New file: src/data/constellation.ts
Depends on: T6 (needs skill IDs)
Effort: Medium
Define role-skill mapping for the D3 graph:
- 6 role nodes (Paydens → Tesco Duty → Tesco Manager → NHS HCD → NHS Deputy → NHS Interim)
- Skill nodes (from expanded skills data)
- Links connecting skills to roles with strength values
- Colour assignments: role nodes get org colours, skill nodes get domain colours
Validation: Types check. Data importable.
Task 9: Create Education Extras
New file: src/data/educationExtras.ts
Depends on: T1
Effort: Small
Expanded detail for education entries:
- MPharm: extracurriculars (Pharmacy Society President, Ultimate Frisbee VP, Alzheimer's Society), research project description
- Mary Seacole: programme detail (change management, healthcare leadership, system-level thinking)
- A-Levels: no extras needed
Source: CV_v4.md Education section.
Validation: Types check. Data importable.
Checkpoint: All data expanded and ready for consumption by tiles and detail renderers.
Phase 3: Tile Modifications
Tasks in this phase can be done in parallel where dependencies allow.
Task 10: LatestResultsTile — Remove Flip, Add Panel
Modified file: src/components/tiles/LatestResultsTile.tsx
Modified file: src/index.css (remove flip CSS if dedicated)
Depends on: T2, T7
Effort: Medium
Changes:
- Remove CSS perspective flip animation entirely
- Remove
.metric-card,.metric-card-inner,.metric-card-front,.metric-card-backCSS classes - Replace with clickable KPI cards:
- Headline number at 28-32px, bold (700), coloured by variant
- Label at 12px, weight 500
- Sub-text at 10px, Geist Mono, tertiary
- Click →
openPanel({ type: 'kpi', kpi }) - Hover: border colour shift + shadow deepens
- Keyboard: Enter/Space triggers panel
Validation: KPIs display with bigger numbers. Click opens detail panel (placeholder). No flip remnants. npm run build.
Task 11: CoreSkillsTile — Full Width, Categorised
Modified file: src/components/tiles/CoreSkillsTile.tsx
Depends on: T2, T6
Effort: Large
Changes:
- Change from half-width to full-width (
fullprop on Card) - Display skills grouped by category (Technical, Healthcare Domain, Strategic & Leadership)
- Category headers: thin divider line + label (styled like sidebar section dividers)
- Show top 3-4 skills per category on the dashboard
- "View all" button per category →
openPanel({ type: 'skills-all', category }) - Individual skill click →
openPanel({ type: 'skill', skill }) - Retain medication metaphor (frequency, status badge)
- Remove single-expand accordion for skills (replaced by panel interaction)
Validation: Skills display in 3 categories. View all opens panel. Individual click opens panel. npm run build.
Task 12: ProjectsTile — Half Width, Card Grid
Modified file: src/components/tiles/ProjectsTile.tsx
Depends on: T2
Effort: Medium
Changes:
- Change from full-width to half-width (remove
fullprop) - Position alongside LatestResultsTile in the grid (handled by T5 layout reorder)
- Compact card layout: status dot + name + year (right-aligned)
- Tech stack as small inline tags
- Click →
openPanel({ type: 'project', investigation }) - Remove in-place expansion (replaced by panel)
- Hover: border shift, shadow deepens
Validation: Projects render in half-width alongside KPIs. Click opens panel. npm run build.
Task 13: LastConsultationTile — Panel Trigger
Modified file: src/components/tiles/LastConsultationTile.tsx
Depends on: T2
Effort: Small
Changes:
- Add "View full record" button/link at the bottom
- Click →
openPanel({ type: 'consultation', consultation }) - Make the tile header area clickable too
- Keep existing inline content (header info row, achievements preview)
Validation: Click opens panel. Existing content unchanged. npm run build.
Task 14: CareerActivityTile — Panel Triggers, Hover
Modified file: src/components/tiles/CareerActivityTile.tsx
Depends on: T2
Effort: Medium
Changes:
- Timeline items: click →
openPanel({ type: 'career-role', consultation })(for role entries) - Remove in-place accordion expansion (replaced by panel)
- Hover preview: items lift slightly on hover, show 1-2 lines of preview text
- Keep colour-coded dots and entry type styling
- Reserve space for CareerConstellation embed (Phase 5)
Note: Extended timeline back to school (2009) — add education entries (Highworth Grammar, UEA) to the timeline data if not already present.
Validation: Click opens panel for role items. Hover shows preview. No accordion. npm run build.
Task 15: EducationTile — Richer Content, Panel
Modified file: src/components/tiles/EducationTile.tsx
Depends on: T2, T9
Effort: Small
Changes:
- Show richer inline content: research project score (75.1%), OSCE score (80%), A-level grades
- Each education entry clickable →
openPanel({ type: 'education', document }) - Hover: border shift
Validation: Richer content visible. Click opens panel. npm run build.
Task 16: PatientSummaryTile — Structured Presentation
Modified file: src/components/tiles/PatientSummaryTile.tsx
Depends on: T5
Effort: Small
Changes:
- Use full profile paragraph from CV_v4.md (verify
profile.tshas complete text) - Pull out key highlights as a visual strip (years of experience, population served, budget)
- Break up wall of text with hierarchy (bold key phrases, structured paragraphs)
Validation: Profile reads well, not a wall of text. Highlight strip visible. npm run build.
Checkpoint: All tiles modified. Dashboard shows new layout with panel triggers on all interactive elements. Detail panel opens with placeholder content for each type.
Phase 4: Detail Panel Renderers
Task 17: KPIDetail Renderer
New file: src/components/detail/KPIDetail.tsx
Depends on: T10
Effort: Medium
Content:
- Headline number (large, coloured by variant)
- Context paragraph (from
kpi.story.context) - "Your role" paragraph (from
kpi.story.role) - Outcome bullets (from
kpi.story.outcomes) - Period badge (from
kpi.story.period)
Wire into DetailPanel: When content.type === 'kpi', render <KPIDetail kpi={content.kpi} />.
Validation: Panel renders full KPI story. Content matches CV_v4.md. npm run build.
Task 18: ConsultationDetail Renderer
New file: src/components/detail/ConsultationDetail.tsx
Depends on: T13, T14
Effort: Medium
Content:
- Role title + organisation + dates
- History paragraph (from
consultation.history) - Achievement bullets (from
consultation.examination) - Plan/outcomes (from
consultation.plan) - Coded entries badges (from
consultation.codedEntries)
Validation: Panel renders full role detail. npm run build.
Task 19: ProjectDetail Renderer
New file: src/components/detail/ProjectDetail.tsx
Depends on: T12
Effort: Medium
Content:
- Project name + year + status badge
- Methodology description
- Tech stack tags
- Results bullets
- External link button (if
investigation.linkexists)
Validation: Panel renders full project detail. External link works. npm run build.
Task 20: SkillDetail + SkillsAllDetail Renderers
New files: src/components/detail/SkillDetail.tsx, src/components/detail/SkillsAllDetail.tsx
Depends on: T11
Effort: Medium
SkillDetail:
- Skill name + frequency + status badge
- Proficiency bar (visual)
- Years of experience
- "Used in" section: roles that used this skill (from constellation mapping, or hardcoded until T8 data available)
SkillsAllDetail:
- Full categorised list grouped by Technical / Domain / Leadership
- Each skill row clickable → switches panel to individual SkillDetail
- Category headers matching tile styling
Validation: Both renderers work. Skill click within SkillsAll switches to SkillDetail. npm run build.
Task 21: EducationDetail Renderer
New file: src/components/detail/EducationDetail.tsx
Depends on: T15
Effort: Small
Content:
- Title + institution + dates + classification
- Research project description (if MPharm, from
educationExtras) - Extracurricular activities (from
educationExtras) - Programme detail (if Mary Seacole, from
educationExtras) - Notes from document data
Validation: Panel renders education detail with extras. npm run build.
Checkpoint: All detail panel content renderers complete. Every interactive element in the dashboard opens its corresponding rich detail view.
Phase 5: Career Constellation (D3.js)
Task 22: Install D3, Scaffold CareerConstellation
Modified file: package.json (add d3, @types/d3)
New file: src/components/CareerConstellation.tsx (scaffold)
Depends on: T8
Effort: Small
npm install d3 @types/d3- Create component with
useRef<SVGSVGElement>for the SVG container - Render an empty SVG with viewBox, correct container sizing
- Import constellation data
Validation: Component renders empty SVG. d3 imports resolve. npm run build.
Task 23: D3 Force Graph Rendering
Modified file: src/components/CareerConstellation.tsx
Depends on: T22
Effort: Large
Implement the force-directed graph:
d3.forceSimulationwith charge, link, x (chronological), y (centred), collision forces- Role nodes: 24px radius, org colour fill, white text
- Skill nodes: 10px radius, domain colour-coded (clinical=green, technical=teal, leadership=amber)
- Links: thin lines (1px),
var(--border), opacity 0.3 - Container: full width of CareerActivityTile, 400px desktop / 300px tablet / 250px mobile
- SVG with responsive viewBox
- Subtle radial gradient background
D3 integration pattern:
- D3 operates imperatively via
useEffecton the SVG ref - React handles wrapper, D3 handles graph
- No React state for node positions (performance)
Validation: Graph renders with nodes and links. Nodes positioned chronologically. npm run build.
Task 24: Constellation Interactions → Detail Panel
Modified file: src/components/CareerConstellation.tsx
Depends on: T23, T18, T20
Effort: Medium
Hover interactions:
- Hover role → connected skill nodes scale up, links brighten to
var(--accent), non-connected nodes fade to 0.15 opacity - Hover skill → all connected role nodes highlight, link paths illuminate
- Tooltip with node name on hover
Click interactions:
- Click role →
onRoleClick(id)→ opens ConsultationDetail panel - Click skill →
onSkillClick(id)→ opens SkillDetail panel
Validation: Hover highlighting works correctly. Click opens correct detail panels.
Task 25: Constellation Accessibility
Modified file: src/components/CareerConstellation.tsx
Depends on: T23
Effort: Medium
role="img"on SVG witharia-label- Screen-reader-only text description of graph structure
- Keyboard navigation: Tab through role nodes, Enter to open detail
prefers-reduced-motion: disable force simulation animation, render static final layout- Focus indicators on nodes when keyboard-navigating
Validation: Screen reader describes graph. Keyboard nav works. Reduced motion shows static layout. npm run build.
Checkpoint: Career Constellation complete and integrated into CareerActivityTile. Interactive, accessible, visually impressive.
Phase 6: Login Refresh
Task 26: LoginScreen Visual Restyle
Modified file: src/components/LoginScreen.tsx
Depends on: None (independent)
Effort: Medium
Colour changes:
#005EB8→#0D6E6E(shield icon bg, active field border, cursor, button)#004D9F→#0A8080(button hover)#004494→#085858(button pressed)- Background:
#1E293B→ keep or lighten to#1A2B2A
Typography:
- Ensure Elvaro Grotesque is used (not DM Sans or system defaults)
- Shadows should match three-tier system
Validation: Login looks cohesive with dashboard. Teal accents throughout. npm run build.
Task 27: Username → a.recruiter + Connection Status
Modified file: src/components/LoginScreen.tsx
Depends on: T26
Effort: Medium
Username change:
- Typed username:
a.recruiter(notA.CHARLWOOD) - Password typing remains as dots
Connection status indicator (below login button):
- New state:
ConnectionState = 'connecting' | 'connected' - Initial: red dot + "Awaiting secure connection..."
- After ~2000ms: green dot + "Secure connection established"
- Dot: 6px circle, colour transitions with 300ms ease-out
- Text: 10px, Geist Mono, tertiary colour
- Login button disabled until BOTH
typingCompleteANDconnectionState === 'connected'
Validation: Username types as a.recruiter. Connection dot transitions red→green. Button enables correctly.
Task 28: Post-Login Loading State
Modified file: src/components/LoginScreen.tsx
Depends on: T27
Effort: Small
- On login click:
isLoading = true - Card content replaces with: spinner + "Loading clinical records..."
- Duration: ~600ms
- Then calls
onComplete()→ dashboard materialises
Validation: Brief loading state visible between login click and dashboard. Feels purposeful, not slow.
Task 29: TopBar Session Name Update
Modified file: src/components/TopBar.tsx
Depends on: T28
Effort: Tiny
- Change session display:
Dr. A.CHARLWOOD→A.RECRUITER - Geist Mono font (should already be the case)
Validation: TopBar shows A.RECRUITER. npm run build.
Checkpoint: Login flow refreshed with teal aesthetic, recruiter narrative, connection status, and loading state.
Phase 7: Polish & Integration
Task 30: CommandPalette Updates
Modified file: src/components/CommandPalette.tsx, src/lib/search.ts
Depends on: T17-T21
Effort: Medium
- Update search index to include expanded skills (20 skills vs 5)
- Add "View [X] detail" actions that open the detail panel directly
- Ensure palette results link to panel opens, not just scroll-to-section
- Update grouping if new content types warrant it
Validation: Search finds all 20 skills. Selecting a result opens the detail panel. npm run build.
Task 31: Responsive Testing
Modified file: Various Depends on: T5, T2 Effort: Medium
- DetailPanel: both
narrowandwidebecome 100vw on mobile (<768px) - SubNav: test on tablet/mobile (may need horizontal scroll or hamburger)
- Constellation: test at 300px/250px heights on smaller screens
- Projects + KPIs: stack vertically on mobile (grid fallback)
- Touch targets: all interactive elements ≥48px
Validation: Test at 375px, 768px, 1024px, 1440px breakpoints. No overflow, no hidden content.
Task 32: prefers-reduced-motion Audit
Modified file: Various Depends on: All phases Effort: Small
Verify every new animation respects prefers-reduced-motion: reduce:
- DetailPanel slide → instant appear
- Backdrop fade → instant
- SubNav underline transition → instant
- Constellation force simulation → static layout
- Connection status dot transition → instant
- Post-login spinner → static indicator
- Hover shadows/borders → can keep (non-motion)
Validation: Enable prefers-reduced-motion in browser. No animations visible except hover state changes.
Task 33: Final Visual Review + Cleanup
Depends on: All phases Effort: Medium
- Visual review against
References/GPSystemconcept.html(where applicable) - Content verification against
References/CV_v4.md - Dead import cleanup
- Unused CSS removal (old flip card styles)
- Console warning check
npm run typecheck— zero errorsnpm run lint— pass (pre-existing warning OK)npm run build— clean
Final checkpoint: Complete depth enhancement. All features working, accessible, responsive, and polished.
Summary
| Phase | Tasks | New Files | Modified Files | Effort |
|---|---|---|---|---|
| 1. Core Infrastructure | T1-T5 | 3 | 3 | Medium-Large |
| 2. Data Expansion | T6-T9 | 2 | 2 | Medium |
| 3. Tile Modifications | T10-T16 | 0 | 7 | Large |
| 4. Detail Renderers | T17-T21 | 6 | 1 | Medium |
| 5. Career Constellation | T22-T25 | 1 | 1 | Large |
| 6. Login Refresh | T26-T29 | 0 | 2 | Medium |
| 7. Polish | T30-T33 | 0 | Several | Medium |
| Total | 33 tasks | 12 new files | ~16 modified |
Parallelisation Opportunities
- T2, T3, T4 can be built in parallel (all depend only on T1)
- T6, T7, T9 can be built in parallel (all depend only on T1)
- T10-T15 can be built in parallel (all depend on T2 + their data task)
- T17-T21 can be built in parallel (each depends on its tile task)
- T26-T29 (login refresh) is independent of Phases 2-5, can run in parallel
Critical Path
T1 → T2 → T5 → T10 → T17 (shortest path to first visible depth feature) T1 → T6 → T8 → T22 → T23 → T24 (path to constellation)
New Dependency
npm install d3 @types/d3
Next Step
Use /sc:implement or begin manual implementation following this workflow phase by phase.