Nadeeja NirmalaIT Manager

How this portfolio is built and tested

No framework and no template. Plain HTML and CSS, a little JavaScript, and a test suite that checks every page before anything goes live.

By Nadeeja NirmalaDesign and implementationUpdated 10 October 2026
  1. Page

    Plain HTML pages that can be read with every script switched off.

  2. Layers

    Under them, one set of design tokens drives both themes, GSAP handles the motion, and three.js draws the 3D scenes.

  3. Checks

    A test suite checks every layer: links, contrast in both themes, the fallbacks, and print.

Fig. 1  The layers of this site. Scroll to take it apart.

What the site had to do

It had to present infrastructure, Android and web work as one story, and back up the web claim with its own build: clear content, a layout that works on any screen, motion that doesn’t get in the way, accessibility, and pages search engines can read.

My roleStructure, visual design, front-end build, testing and deployment
ConstraintsStatic hosting, no front-end framework, mobile first

How it’s built

Every page is static HTML. One stylesheet of design tokens drives the whole look, and a small script handles navigation, the contact form and the animation. Both themes come from the same tokens: a light palette by default and a dark one on top. A short script in the page head picks the right one before anything is drawn, so the page never flashes the wrong colours. Your choice is remembered, or it can follow your system setting. Icons come from one inline SVG sprite, so they cost no extra requests.

Each topic has its own page, with its own title, description and links, and structured data that ties every page to the same author.

Motion that doesn’t get in the way

Motion sets the pace. It never decides whether content is there. Reveals use spring curves worked out from a damped oscillator, and moving between pages uses a view transition where the browser supports one. If you’ve asked for reduced motion, the animation and the 3D don’t load at all, and the page reads the same.

The design is monochrome on purpose: one type family, one spacing scale, and colours defined once per theme, so every component reads correctly on light and dark backgrounds.

How it’s tested

  1. Every page is checked for its title, description, canonical link and a single main heading.
  2. Every internal link is followed to make sure it resolves.
  3. Every page is loaded at 390, 768, 1024, 1280 and 1440 pixels wide, in both themes.
  4. The browser checks catch console errors, sideways scrolling, broken images and layout shifts.
  5. Reduced motion, JavaScript switched off, and printing are each tested on their own.
  6. The service worker is checked to serve repeat visits from its cache.

Results

Automated checks237 / 237 passed
Layout shift0.000 CLS
Lighthouse, mobile100 accessibility, best practices and SEO

Every page passes at all five widths, with no broken links and no sideways scrolling. In October 2026 a speed pass cut image, font and script weight, added a service worker so repeat visits load from the cache, and split the 3D setup into small steps. On Lighthouse’s mobile test, the home page’s largest paint went from 4.9 to 3.3 seconds and the network case study’s from 5.2 to 2.8. The Lighthouse scores above are for the pages I measured: the home page, a case study and the contact page.