Template Vanilla Site MIT
Developer Portfolio
A personal, technical, editorial-minimal portfolio template for a software / design engineer, built with semantic HTML, CSS, and vanilla JavaScript. Light, neutral, and typography-driven: a sticky header with brand mark, anchor nav, theme toggle, and a responsive mobile drawer; an editorial intro with a clamp() lead, status badge, and metadata grid; a selected-work list of project cards (index, title, role, year, description, stack tags, case-study link); an about/capabilities split with a capability table and a four-up stat row; a notes/writing list with date + category meta; and a contact section with a lead, channels list, and footer. Split into modular files: code.html (HTML structure) + style.css (the design system, following the shared design-tokens.md --ds-* token layer with light-default + calm opt-in dark mode and reduced-motion guard) + script.js (theme toggle, mobile nav, scrollspy active nav, IntersectionObserver reveal), with preview.html as a self-contained single-file preview. No React, Vue, Next.js, Tailwind, Bootstrap, or backend.
- Vanilla
- HTML
- Pages
- Site
- Stack
- Vanilla HTML/CSS/JS + HTML
- Theme
- System
- Responsive
- Yes
- Files
- 7
- License
- MIT
Preview
The whole site, live.
Scroll inside the frame, switch viewports, or open the raw preview in a new tab — it is the same file the CLI installs.
devsnips.dev/templates/vanilla/developer-portfolio/ What's inside
Everything the folder ships.
Straight from the registry's metadata — every line maps to a file you can open in the source tabs below.
- sticky header with brand mark, anchor nav, theme toggle, and responsive mobile drawer (aria-expanded)
- editorial intro with clamp() oversized lead, availability status badge, and metadata grid
- selected-work list of project cards (index, title, role, year, description, stack tags, case-study link)
- about / capabilities split layout with capability table and four-up stat row
- notes / writing list with date + category meta and hover affordance
- contact section with lead, channels list (email / GitHub / calendar), and footer
- light-default theme with calm opt-in dark mode (no-flash pre-paint script + persisted toggle)
- scrollspy active nav state (aria-current=location via IntersectionObserver)
- IntersectionObserver scroll-reveal (.reveal -> .is-visible, threshold 0.12, unobserved after)
- DevSnips --ds-* shared design-token layer (design-tokens.md) with template tokens on top
- hairline 1px borders, small controlled radii, restrained shadows, single controlled accent
- modular file split (code.html + style.css + script.js)
Technical
Stack, scripts, structure.
Everything you need to know before you install.
root 4
-
AGENTS.mddoc -
metadata.jsonconfig -
preview.htmlpreview -
README.mddoc
pages/ 3
-
code.htmlcode -
script.jscode -
style.csscode
Install
One command, whole folder.
Pulls the template into your project through the DevSnips CLI. The registry path below is stable across the CLI, MCP server and Skills.
npx devsnips add Vanilla/Templates/developer-portfolio Vanilla/Templates/developer-portfolio AI-ready
Hand the whole job to your agent — Cursor, Cline, Claude Code or Windsurf. One prompt installs the template, fixes the theme toggle, optimises it and reshapes it for what you are building.
Scaffold the DevSnips template "Developer Portfolio" (Vanilla/Templates/developer-portfolio) into this project, then audit, fix and tailor it. 1. Install — if the DevSnips MCP server is connected, fetch the resource with get_resource(id="Vanilla/Templates/developer-portfolio"). Otherwise run npx devsnips add Vanilla/Templates/developer-portfolio and install the dependencies the template declares. 2. Audit — check the template end to end before changing anything: theme toggling (dark/light), responsive behaviour, accessibility, unused files and assets. 3. Fix — repair what the audit found, starting with the theme toggle: it must persist across reloads, never flash the wrong theme on first paint, and every component must read the same tokens in both modes. 4. Optimise and adapt — trim what the site does not need, then customise the template for the product being built here: replace the placeholder branding, copy, imagery, navigation and routes so it reads as this project rather than as a demo.
devsnips://templates/developer-portfolio The same path the CLI, MCP server and Skills resolve — one registry, one resource URI.
Source
Read it before you ship it.
The README, manifest and entry document — verbatim, straight from the registry.
# Developer Portfolio
A personal, technical, editorial-minimal portfolio template for a software / design engineer. Part of the DevSnips Vanilla Templates collection and built on the shared [`design-tokens.md`](../design-tokens.md) `--ds-*` token system.
## Design language
Minimal · light · editorial · neutral · typography-driven · restrained.
- Light-default, calm opt-in dark mode (no-flash, persisted).
- Hairline 1px borders over shadows; small controlled radii.
- Inter (text) + JetBrains Mono (labels / metadata), system fallbacks.
- Single controlled blue accent; neutral-first palette.
- High information density with intentional whitespace.
## Structure
```
developer-portfolio/
├── pages/
│ ├── code.html # HTML structure (links style.css + script.js)
│ ├── style.css # design system (--ds-* tokens)
│ └── script.js # theme toggle, mobile nav, scrollspy, reveal
├── preview.html # self-contained single-file preview (inlines CSS+JS)
├── metadata.json
└── README.md
```
`preview.html` opens directly with no backend. The modular files in `pages/` are for customization.
## Sections
1. **Header** — brand mark, anchor nav, theme toggle, mobile drawer.
2. **Intro** — editorial `clamp()` lead, availability status badge, metadata grid.
3. **Selected work** — project cards (index, title, role, year, description, stack tags, case-study link).
4. **About** — narrative + capabilities table + four-up stat row.
5. **Notes** — writing list with date + category meta.
6. **Contact** — lead, channels list (email / GitHub / calendar).
7. **Footer** — copyright + footer links.
## Interactions
Scoped, dependency-free vanilla JS:
- Theme toggle (light ↔ dark, persisted, no-flash pre-paint).
- Mobile nav drawer (`aria-expanded`, Esc closes, auto-close on link click).
- Scrollspy active nav (`aria-current="location"` via `IntersectionObserver`).
- Scroll-reveal (`.reveal` → `.is-visible`, reduced-motion safe).
## Accessibility
Skip link, semantic landmarks, single `h1`, `aria-expanded`/`aria-controls` on the mobile toggle, `aria-current` on active nav, `:focus-visible` rings, native controls throughout, `prefers-reduced-motion` guards.
## Responsive
Three breakpoints (640 / 768 / 1024). Zero horizontal overflow at 320–1920px. Nav collapses to a drawer below 768px; grids reflow; intro splits to two columns on desktop.
## Dependencies
Google Fonts (Inter + JetBrains Mono). No framework, no build step. # AGENTS.md — Developer Portfolio
Guidance for an AI agent adapting this template. Read this before editing.
## What this template is
A personal, technical, editorial-minimal portfolio for a software / design engineer. Single page: header, intro, selected work, about/capabilities, notes, contact, footer.
## Design system
Built on the shared [`design-tokens.md`](../design-tokens.md) `--ds-*` token system. **Light-default**; calm opt-in dark mode (no-flash, persisted). Inter + JetBrains Mono. Hairline 1px borders, small radii, single controlled blue accent.
## File layout
```
developer-portfolio/
├── pages/
│ ├── code.html # HTML structure (links style.css + script.js)
│ ├── style.css # design system (--ds-* tokens)
│ └── script.js # theme toggle, mobile nav, scrollspy, reveal
├── preview.html # self-contained preview (inlines CSS+JS)
├── metadata.json
└── README.md
```
## How to adapt it
1. **Swap the persona**: edit `pages/code.html`—name, brand mark, role, intro lead, status badge, metadata grid.
2. **Swap projects**: edit the `.work-card` blocks in the selected-work section (index, title, role, year, description, stack tags, link).
3. **Swap notes**: edit the `.note-row` blocks (date, category, title, excerpt).
4. **Rebrand**: edit the `--ds-*` tokens in `pages/style.css` `:root`—keep one controlled accent.
5. **Rebuild the preview**: run `python3 ../_build_preview.py .` from the template folder (inlines `style.css` + `script.js` into `code.html`).
## Do not
- Do not add glassmorphism, neon, gradients, blobs, or oversized decoration.
- Do not introduce a framework. Vanilla HTML + CSS + JS only.
- Do not remove the `--ds-*` token layer or hardcode visual values.
## Quality bar
Skip link, semantic landmarks, single `h1`, `aria-expanded`/`aria-controls` mobile toggle, `aria-current` scrollspy, `:focus-visible` rings, reduced-motion guard. Run `python3 scripts/qa/resources/qa_vanilla.py` after changes. Validate with `python3 scripts/qa/resources/_qa_template.py Vanilla/Templates/developer-portfolio/preview.html` (overflow + console + interactions).