Portfolio

Interactive visualisations of the Life Itself strategy portfolio — force-directed map and indented tree, both drawing from the same markdown data source.

Visualisations

Force-directed network graph. Spatial layout showing relationships between items.

Hierarchical outline view of the same data.

Both draw from index.js, generated by scripts/build-index.js from frontmatter in initiatives/ and projects/.


Plan of Work

See PLAN.md for the full plan, open questions, and task list.

Current focus (April 2026): strategic planning + ideas pipeline for the team strategy session. Key questions: what are we actively working on? What's live vs still an idea?

Still missing: owner field on active initiatives — you can see what is active but not who is carrying it.


Building the data index

# One-time setup
cd portfolio/scripts && npm install

# Rebuild manually (also runs automatically on commit)
node portfolio/scripts/build-index.js

The pre-commit hook rebuilds portfolio/index.js automatically when any initiatives/*.md or projects/*.md file is staged.


Portfolio Map

Visual encoding

Colour = type

TypeColour
InitiativeBlue #4A90D9
ProjectGreen #50B86C
IdeaFaded yellow #F2D96B

Opacity = status (how actively something is being worked on)

StatusOpacityIcon
active1.0
maintenance0.7⚙️
paused0.25⏸️
archived0.15🗄️
idea0.55

Status icons are rendered at full opacity inside the circle so they remain readable against the faded fill.

Size = type

TypeRadius
Initiative18px
Idea15px
Project11px

Grouping nodes (category: grouping) — organisational containers that are not real work in themselves (e.g. Comms, Community, Life Itself Courses). Rendered as hollow circles (stroke only, no fill). Excluded from status counts so that "how many things are active?" reflects real initiatives only.

Links connect child items to their parent initiative (arrows point from parent to child).

Interaction

  • Drag nodes to reposition
  • Scroll to zoom
  • Click a node to open its local site page
  • In the tree view, use the View link on a row to open its local site page
  • Hover for tooltip (title, type, status, description, tags)
  • Filter panel (top right) toggles visibility by status

Appendix: Deferred encoding ideas

Fill-level / liquid fill — draw each circle with a coloured fill rising from the bottom proportional to vitality (active = full, archived = empty outline). Implemented via SVG clipPath. Intuitive "how full of life is this" read. Would allow a second dimension (e.g. priority) via stroke.

Stroke = status — keep fill for type colour, use border style for status (solid/dashed/dotted). Could combine with fill-level or replace opacity encoding.