The second version of my portfolio — guilyx.github.io.
It sits between v1 and v3, and it is deliberately the smallest of the three.
One page. Three files. No framework, no build step, no dependencies to install.
index.html the whole site
css/style.css hand-written, CSS custom properties, dark + light
js/main.js ~100 lines: nav, scrollspy, filters, theme
favicon.svg
Open index.html in a browser and it works. Deploy by pushing — GitHub Pages
serves it as-is.
About · Experience · Projects · Open Source · Writing · Education · Contact
| v1 (2020) | v2 | v3 (2025) | |
|---|---|---|---|
| Stack | Bootstrap + jQuery template | Plain HTML/CSS/JS | React + Vite + Tailwind + framer-motion + d3 |
| Build | none | none | tsc && vite build |
| Dependencies | 6 vendored libraries | 0 | 30+ npm packages |
| Pages | 9 | 1 | 15 routes |
| Assets | 46 MB of GIFs | ~40 KB total | optimised images |
| Theme | light, blue #2c98f0 |
dark + light toggle | dark, neon #f72585 / #4cc9f0 |
| Colour source | template defaults | guilyx/branding |
its own |
The left sidebar is v1's signature, kept and cleaned up.
Colour and the mark come from guilyx/branding,
which is the source of truth. If this repo drifts from it, this repo is wrong.
- Dark is Ink & Iris —
#0d0e12ground,#8b95f0accent. - Light is Bone & Rust —
#f5f3eeground,#b0472baccent. It is the runner-up palette documented inbrand/palette.md, used here because it is the only light ground the brand defines; the iris accent falls to roughly 2:1 on cream and darkening it would fork the palette. - The accent is the only saturated value, and it is spent deliberately: mono keys, links, one active control per view, the mark, focus rings. No gradients.
The logo is the swarm mark — three agents holding a formation. It is inlined in
index.html rather than loaded through <img>, because currentColor does not
cross that boundary and the mark would render black.
Regenerate brand assets with the bundled skill; never hand-write the SVG:
cd .claude/skills/logo-variants/scripts
python3 build_mark.py --list
python3 build_mark.py --variant favicon --out ../../../../favicon.svg
python3 validate_mark.py ../../../../favicon.svg --tile
python3 test_validator.py # 14 cases covering every documented misuse- Content is current as of late 2022.
- Ships dark by default, respects
prefers-color-schemeon first visit, and remembers the choice inlocalStorage. - Everything readable without JavaScript; the script only adds the nav toggle, scrollspy, project filters and the theme switch.
- Honours
prefers-reduced-motion, has a skip link, visible focus rings and a print stylesheet.