Documentation

Buildfolio

A modern developer portfolio template — dark/light mode, glassmorphism, and a handful of interactive components. This page covers the folder structure, design tokens, components, and how to make it yours.

01 · Getting Started

Getting Started

Buildfolio is a static template — no build step, no framework, no dependencies to install. Clone it, open index.html, and start editing.

git clone https://github.com/rikiag/buildfolio.git
cd buildfolio
open index.html

For live reload while editing, serve the folder with any static server (e.g. the VS Code "Live Server" extension, or npx serve) — this also avoids the rare browser restriction on clipboard access when opening files directly via file://.

02 · Folder Structure

Folder Structure

.
├── assets/
│   ├── css/
│   │   ├── style.css        // design tokens + components
│   │   └── animation.css    // keyframes + reveal/stagger
│   ├── js/
│   │   └── app.js           // all interactive behavior
│   ├── images/
│   └── icons/
│       └── favicon.svg
├── pages/
│   ├── about.html
│   ├── projects.html
│   ├── project-detail.html
│   ├── blog.html
│   ├── blog-article-read.html
│   ├── lab.html
│   ├── resume.html
│   └── contact.html
├── docs.html                // this page
├── index.html                // home page
└── README.md

index.html and docs.html live at the project root; every other page lives under pages/. That's the only thing to keep in mind when linking or moving files: pages inside pages/ reference assets and the root pages one level up, with ../.

03 · Design Tokens

Design Tokens

Every color, radius, and font is a CSS custom property defined once in assets/css/style.css, split into a dark set (default) and a light set under [data-theme="light"]. Change a value in one place and it updates everywhere.

Color palette

--bg
--card
--blue
--cyan
--purple
--green
TokenDarkLightUsed for
--bg#09090B#F8FAFCPage background
--card#111827#FFFFFFCard / surface background
--borderrgba(255,255,255,.08)#E2E8F0Card & input borders
--text#F8FAFC#0F172AHeadings, primary text
--text-dim#CBD5E1#475569Body copy
--text-faint#94A3B8#64748BLabels, meta text
--blue / --cyan#3B82F6 / #06B6D4#2563EB / #06B6D4Accent, gradient, links

Typography & shape

TokenValue
--font-headingSpace Grotesk
--font-bodyInter
--font-monoJetBrains Mono
--radius20px (cards)
--radius-sm12px (buttons, inputs, chips)
--maxw1180px (container width)
04 · Components

Components

Every component is a plain CSS class — no build tooling, so you can copy a block of HTML from any page and it'll carry its styling with it.

ClassWhat it isFind an example in
.cardBase surface — border, radius, hover lift, mouse-spotlight glowevery page
.btn .btn-primary / .btn-ghostGradient and outline buttonshero, forms
.tag / .pill / .difficultySmall status & category badgesprojects, blog
.terminal-cardHero "whoami" terminal widget with typing effectindex.html
.metrics-panelLive-metrics bento panel with progress barsindex.html, pages/lab.html
.service-card-v2Icon + category + status + uptime service cardpages/lab.html
.tech-cardSkill card with rating, years, hover-reveal descriptionindex.html
.timeline / .timeline-hVertical and horizontal journey timelinespages/about.html, index.html
.proseLong-form article typography, code blocks, blockquotesdocs.html, pages/blog-article-read.html
.toc-asideSticky table of contents with scrollspypages/blog-article-read.html
05 · JS Features

JS Features

Everything interactive lives in assets/js/app.js — one file, no dependencies, split into small self-contained blocks:

  • Theme toggle — follows system preference by default, persists a manual choice to localStorage, no flash on load.
  • Scroll reveal + stagger — sections fade up via IntersectionObserver; card grids reveal one-by-one.
  • Counters — animated number count-up, including a live GitHub public-repo count with a static fallback.
  • Search & filter — powers the Projects category filter and the Blog search box from the same code path.
  • Contact form — demo submit flow with a success-state panel (wire up your own backend or a service like Formspree).
  • Copy-code buttons — auto-attached to every code block inside .prose.
  • Reading progress bar & TOC scrollspy — active on article pages.
  • Page fade transitions & mouse-spotlight card glow — small, GPU-cheap polish applied site-wide.
06 · Customization

Customization

Colors & fonts

Edit the two :root blocks at the top of assets/css/style.css — one for dark, one under [data-theme="light"]. Swap the Google Fonts <link> in every page's <head> to change typefaces.

Projects

Duplicate a card in pages/projects.html, then duplicate pages/project-detail.html for its full case study. Update data-category and data-name attributes so search and filtering keep working.

Blog posts

Duplicate pages/blog-article-read.html. Add id attributes to your headings and matching links in the .toc-list to get the sidebar and scrollspy for free.

Social links & contact

Social URLs and the contact form's destination live in pages/contact.html and the footer of every page. The contact form currently only simulates a submit — connect it to your own backend or a form service to actually receive messages.

Live GitHub stat

Open assets/js/app.js and find GITHUB_USERNAME near the top of the counters block — replace the placeholder with your real GitHub username to pull a live public-repo count on the homepage.

07 · License

License

Buildfolio is released under the MIT License — use it, modify it, and ship it for personal or commercial projects. See README.md for the full license text.