Portfolio Expansion System

This system uses a combination of Eleventy data, Nunjucks templating, vanilla CSS, and minimal JavaScript to create a performant hover-expand interaction for the portfolio list.

Data Model

All portfolio data is stored in _data/portfolio.json.

{
  "name": "Ansa Biotechnologies",
  "url": "https://www.ansabio.com/",
  "detail": "Enzymatic DNA synthesis that eliminates the length and accuracy ceiling of phosphoramidite chemistry.",
  "press": {
    "label": "press",
    "url": "https://www.biospace.com/article/releases/ansa-biotechnologies-closes-oversubscribed-68-million-series-a-financing-to-power-the-next-era-of-dna-enabled-industries/?s=80"
  },
  "acquired": true,
  "tba": true
}

Templating

The list is rendered in index.html using a Nunjucks loop. Each item with a detail property receives:

The loop also generates the Structured Data (JSON-LD) block at the bottom of the page, ensuring the SEO metadata is always in sync with the visible list.

CSS Implementation (css/styles.css)

JavaScript Interaction (js/portfolio.js)

The interaction is split into two modes:

1. Desktop (Hover)

2. Mobile / Touch (Full-Row Tap)

Performance Notes