Skip to main content
Every page in your portfolio is built from an ordered array of sections. Each section is a self-contained block — a hero banner, a skills grid, a CTA strip — and you compose pages by stacking these blocks in whatever order and combination you need. You never edit templates or components directly; you only add, remove, reorder, or configure section objects in your page JSON files.

How Sections Work

A page’s sections array is rendered sequentially from top to bottom. Each section object requires four fields:

The settings Object

Every section accepts a settings object that controls its vertical breathing room. Use lg for hero sections and major transitions, md for standard content sections, and sm when two related sections should sit close together (for example, a heading section followed immediately by its content).

Section Type Reference


CTA Objects

Several section types accept CTA (call-to-action) button configurations. Every CTA follows the same shape:
Use primary for the most important action in a section and secondary for a supporting option alongside it.

Image Objects

Any section that accepts an image uses the same two-field shape:
You can use any publicly accessible image URL — Unsplash, your own CDN, or assets you’ve placed in the /public directory (reference them as "/images/your-photo.jpg"). Always fill in alt with a meaningful description.

Section Deep Dives

home-hero

The full-bleed opening section of your home page. The titleHighlight value is a word or short phrase that appears within the title string — the site renders it in the primary accent color.
Keep titleHighlight to two or three words maximum. Highlighting too much of the title dilutes the emphasis and the visual impact of the accent color.

bio-band

A two-column section pairing a portrait image with a short biography and a single CTA button. Commonly placed on the home page as an “about me” teaser, or at the top of the About page.

skills-stack

A grid of skill cards, each showing a label, category badge, and Lucide icon. Group related skills by setting the same category value — the layout uses categories to organize cards visually.
The icon field accepts any Lucide icon name in kebab-case. Common choices: code, braces, server, database, cloud, cpu, workflow, boxes.

philosophy

A list of named principles or beliefs — each item has a short title and a longer body sentence. Use this section to convey your working values or approach to craft.
Four to six philosophy items is the sweet spot. Fewer feels sparse; more dilutes each principle’s weight.

cta-band

A full-width strip with a heading, supporting text, and a single prominent CTA button. Place it at the bottom of key pages (home, about, work) to give visitors a clear next step.

Adding a New Section to a Page

1

Open the page JSON file

Navigate to the relevant page file under src/data/pages/. For example, src/data/pages/home.json.
2

Append a new section object

Add a new object to the sections array. Give it a unique id, choose a type from the reference table, and fill in the required data fields.
3

Reorder if needed

Drag the object to the correct position within the sections array. Sections render in array order, top to bottom.
4

Save and preview

Save the file. The dev server will hot-reload and display your new section in context.
Every section id must be unique within the page. Duplicate IDs cause React key conflicts and may produce unexpected rendering behaviour.