A hand-built (no framework, no template) portfolio site: Home, About, Portfolio and Contact pages, ready for GitHub Pages.
index.html → Home / landing page
about.html → About page
portfolio.html → Portfolio (data science / web-UX / graphic design)
contact.html → Contact page + form
css/style.css → ALL styling + design tokens (colours, fonts, spacing)
js/script.js → Nav toggle, hero typer, portfolio filter, contact form
assets/cv/ → Your downloadable CV PDF lives here
assets/img/ → Put your photo + design gallery images here
-
Your photo — drop a square photo into
assets/img/(e.g.portrait.jpg), then inindex.htmlfind the.hero-portraitplaceholder div and replace it with<img src="assets/img/portrait.jpg" alt="Joy Mweru Gitau">(the comment right above it shows exactly what to paste). -
Your CV — your current CV is already in
assets/cv/Joy_Mweru_Gitau_CV.pdfand wired up to the "Download my CV" button on the About page. When you have a newer version, just replace that file (keep the same filename) and the button keeps working automatically. -
LinkedIn & GitHub links — search each HTML file for
YOUR-LINKEDINandYOUR-GITHUBand swap in your real usernames. These appear in the footer on every page and on the Contact page. -
Contact form → your inbox — the form is wired to use Formspree (free, no backend needed):
- Create a free Formspree account and a new form.
- Copy the endpoint it gives you (
https://formspree.io/f/xxxxxxxx). - In
contact.html, find<form class="contact-form" id="contact-form" action="https://formspree.io/f/YOUR_FORM_ID" ...>and replaceYOUR_FORM_IDwith your real one. - That's it — submissions will land in your email, and visitors see a "message sent" confirmation right on the page.
-
Project GitHub links — in
portfolio.html, each project card has a<div class="links"><a href="#" ...>GitHub repo ↗</a></div>— replace the#with the real repo URL for each project. -
Graphic design gallery — in
portfolio.html, the "Graphic design" section has six placeholder tiles. Drop your images intoassets/img/, then replace each placeholder<div class="gallery-item">...</div>with:<div class="gallery-item" data-category="design"> <img src="assets/img/your-file.jpg" alt="short description"> </div>
- Colours / fonts / spacing — all defined once at the top of
css/style.cssunder:root { ... }. Change a hex value there and it updates the whole site. - Nav menu items — the
<nav><ul class="nav-links">block, repeated at the top of every HTML page (About, Portfolio, Contact stay simple to add: copy an<li><a href="...">line and add the new page's HTML file). - The hero role-typer ("$ whoami → data_scientist…") — edit the
ROLESarray at the top ofjs/script.js. - Certifications — plain list of
.cert-itemblocks near the bottom ofindex.html. Copy one to add another. - Adding a new project — copy a
.project-cardblock inportfolio.html(data science) or a.exp-itemblock (web/UX), and give it the rightdata-category="data" | "web" | "design"so the filter buttons work.
- Create a new GitHub repository — for a personal site, name it exactly
your-username.github.io(e.g.joymweru.github.io). - Push all these files to the repo's
mainbranch (the root, not a sub-folder —index.htmlshould sit at the top level). - In the repo, go to Settings → Pages, set the source branch to
mainand folder to/ (root), and save. - Your site goes live at
https://your-username.github.iowithin a minute or two.
If you'd rather use a project repo (not username.github.io), the process is
the same — your URL will just be https://your-username.github.io/repo-name/.
Palette pulls from your blush/chocolate/sand/slate brief. Display type is Fraunces (the warm serif in headlines), body is Sora, and JetBrains Mono shows up in labels, the hero "$ whoami" line and eyebrows — a small nod to the dev side of your journey sitting next to the softer, editorial data-storyteller side. That contrast is the whole idea: this isn't a generic dev portfolio or a generic design portfolio, it's built to hold both.