How this site was made.

Art direction, motion and design by Nicolae Herrera; built with Claude, Anthropic’s AI, as engineering partner, through the same seven steps as client work.

The team and the tools

One designer, one AI partner, many iterations.

Nicolae directs it: the art direction, the motion and every call on what to make, how it feels and when it’s done. Claude does the hands-on build: writing the code, testing in a real browser and reporting back with screenshots and measurements. Imagery no camera could capture came from Figma AI and Google Gemini, then cut, graded and composited to his direction.

The workflow

Ask, build, measure, look, commit.

Every change, small or large, went through the same loop, often several times an hour. It works for any designer and AI pairing: the person keeps the judgment, the AI does the work, and nothing counts as done until it has been rendered and checked.

  1. 01

    Ask

    A request in plain words, usually a cropped screenshot with the problem described, sometimes naming the CSS at fault (“line-height”). One change, or a short list.

  2. 02

    Clarify

    If it could mean two things, Claude asks in one line, or makes the call and says which call it made. Never a silent guess.

  3. 03

    Edit where the files live

    Changes go straight into the project on the designer’s computer, never into a copy that drifts.

  4. 04

    Build

    A full production build after every change. A warning counts as a failure.

  5. 05

    Test the whole page

    In a real browser from phone to laptop widths, once with reduced motion, then by Nicolae on a 24-inch monitor and a MacBook. The whole page, not just the change: nothing overflowing, no sideways scroll.

  6. 06

    Measure, then look

    Sizes, contrast and timing are measured, and both sides of a comparison are reported. Then the screenshot is actually read.

  7. 07

    Report

    What changed, the numbers and anything that went wrong, said plainly.

  8. 08

    Commit and document

    A commit with what and why; the docs, the hidden-content log and the list of traps updated in the same pass.

Step I of VII

Discovery and research

The site began as an inventory: every client and project since 1998, the old site’s pages and search traffic, and the sites it would sit beside. Reference sites were documented, the work was traced as a journey from 1998 to today, and baselines were set for search and accessibility.

  • Content inventory since 1998
  • Old-site audit
  • Reference sites documented
  • SEO baseline
  • Accessibility baseline

Step II of VII

UX: structure and flow

Seventeen pages in a simple shape: home, work, case studies, the full list of past work, approach, contact and this page with its brand, motion and component guides. Every case study follows one template, so a visitor learns it once. Keyboard and screen-reader paths were planned with the layout, not after it.

  • Information architecture
  • Case-study template
  • Work overlay
  • Skip link and landmarks
  • Keyboard paths

Step III of VII

UI and design systems

One design system in its own package: color, type, spacing and motion as tokens, with 13 sector colors and contrast measured against WCAG. Every component is built from it, so the last page is as considered as the first.

  • @pure/tokens package
  • Contrast-checked colors
  • Inter Tight + Roboto Condensed
  • Spacing and type scales
  • 61 components

Step IV of VII

Interaction and motion design

Motion is treated like film editing. A section’s background waits until the section is well in view — its top past 65% of the screen — so each one arrives as a cut, not something already playing. Backgrounds are drawn live in WebGL, canvas and SVG, or composited as films; every one has a reduced-motion version. The storyboards below show them frame by frame.

With AIImagery generated with Figma AI and Gemini; Claude writes the shaders, canvas code and compositing scripts; the designer judges every frame, often from storyboards like these.

  • @pure/motion package
  • Split-text reveals
  • WebGL shaders
  • Canvas and SVG animation
  • Composited films
  • Reduced-motion variants
  • Section start at 65%

395 frames · 27 storyboards · every frame has an ID

Home hero: the full sequence

Tessera, the home page’s opening: one flight through four worlds, from microbes to the Earth, with no cuts. Ninety frames, one every half second, with each scene change caught at three points.

  • Cells divide, diatoms turn and an embryo forms. A frame every half second, plus the transition into the next scene.

    • HeroMosaic
    • WebGL shader
    • Captured frame by frame through its seek hook
    1. HH-0010.0s

    2. HH-0020.5s

    3. HH-0031.0s

    4. HH-0041.5s

    5. HH-0052.0s

    6. HH-0062.5s

    7. HH-0073.0s

    8. HH-0083.5s

    9. HH-0094.0s

    10. HH-0104.5s

    11. HH-0115.0s

    12. HH-0125.5s

    13. HH-0136.0s

    14. HH-0146.5s

    15. HH-0157.0s

    16. HH-0167.5s

    17. HH-0178.0s

    18. HH-0188.5s

    19. HH-0199.0s

    20. HH-0209.5s

    21. HH-02110.0s

    22. HH-02210.5s

    23. HH-02311.0s

    24. HH-02411.5s

    25. HH-02512.0s

    26. HH-02612.5s

    27. HH-02713.0s

    28. HH-02813.5s

    29. HH-02914.0s

    30. HH-03014.5s

    31. HH-03115.0s

    32. HH-03215.5s

    33. HH-03316.0s

    34. HH-03416.5s

    35. HH-03517.0s

    36. HH-03617.5s

    37. HH-03718.0s

    38. HH-03818.5s

    39. HH-03919.0s

    40. HH-04025%

    41. HH-04150%

    42. HH-04275%

  • The flight carries on into deep space. A frame every half second, plus the transition into the next scene.

    • HeroMosaic
    • WebGL shader
    • Captured frame by frame through its seek hook
    1. HH-0430.0s

    2. HH-0440.5s

    3. HH-0451.0s

    4. HH-0461.5s

    5. HH-0472.0s

    6. HH-0482.5s

    7. HH-0493.0s

    8. HH-0503.5s

    9. HH-0514.0s

    10. HH-0524.5s

    11. HH-0535.0s

    12. HH-0545.5s

    13. HH-05525%

    14. HH-05650%

    15. HH-05775%

  • The flight carries on into a spiral galaxy. A frame every half second, plus the transition into the next scene.

    • HeroMosaic
    • WebGL shader
    • Captured frame by frame through its seek hook
    1. HH-0580.0s

    2. HH-0590.5s

    3. HH-0601.0s

    4. HH-0611.5s

    5. HH-0622.0s

    6. HH-0632.5s

    7. HH-0643.0s

    8. HH-0653.5s

    9. HH-0664.0s

    10. HH-0674.5s

    11. HH-0685.0s

    12. HH-0695.5s

    13. HH-07025%

    14. HH-07150%

    15. HH-07275%

  • The flight carries on into the Earth. A frame every half second.

    • HeroMosaic
    • WebGL shader
    • Captured frame by frame through its seek hook
    1. HH-0730.0s

    2. HH-0740.5s

    3. HH-0751.0s

    4. HH-0761.5s

    5. HH-0772.0s

    6. HH-0782.5s

    7. HH-0793.0s

    8. HH-0803.5s

    9. HH-0814.0s

    10. HH-0824.5s

    11. HH-0835.0s

    12. HH-0845.5s

    13. HH-0856.0s

    14. HH-0866.5s

    15. HH-0877.0s

    16. HH-0887.5s

    17. HH-0898.0s

    18. HH-0908.5s

Home section backgrounds

Each statement on the home page has its own background.

  • Seven faces appear and dissolve behind the statement.

    • DfFaces
    • Canvas 2D
    • Captured frame by frame through its seek hook
    1. HS-ML-012.0s

    2. HS-ML-024.5s

    3. HS-ML-037.0s

    4. HS-ML-049.0s

    5. HS-ML-0511.5s

    6. HS-ML-0614.0s

    7. HS-ML-0716.0s

    8. HS-ML-0818.5s

    9. HS-ML-0921.0s

    10. HS-ML-1023.0s

    11. HS-ML-1125.5s

    12. HS-ML-1228.0s

    13. HS-ML-1330.0s

    14. HS-ML-1432.5s

    15. HS-ML-1535.0s

    16. HS-ML-1637.0s

    17. HS-ML-1739.5s

    18. HS-ML-1842.0s

    19. HS-ML-1944.0s

    20. HS-ML-2046.5s

    21. HS-ML-2149.0s

  • Patient records drift in as faint points of light and are drawn toward the AI.

    • TnxAiField
    • Canvas 2D
    • Captured frame by frame through its seek hook
    1. HS-TNX-010.0s

    2. HS-TNX-021.0s

    3. HS-TNX-032.0s

    4. HS-TNX-043.0s

    5. HS-TNX-054.0s

    6. HS-TNX-065.0s

    7. HS-TNX-076.0s

    8. HS-TNX-087.0s

    9. HS-TNX-098.0s

    10. HS-TNX-109.0s

    11. HS-TNX-1110.0s

    12. HS-TNX-1211.0s

  • The store-fulfillment flow from the case study, as a live wireframe.

    • FlowWireframe
    • SVG
    • GSAP
    • Captured in real time
    1. HS-CVS-010.0s

    2. HS-CVS-0219.3s

    3. HS-CVS-0319.6s

    4. HS-CVS-0419.8s

    5. HS-CVS-0520.1s

    6. HS-CVS-0620.4s

    7. HS-CVS-0720.7s

    8. HS-CVS-0820.9s

    9. HS-CVS-0921.2s

    10. HS-CVS-1021.5s

    11. HS-CVS-1121.8s

    12. HS-CVS-1222.0s

  • A quiet field of fine stars at many depths, twinkling and drifting.

    • StarField
    • Canvas 2D
    • Captured frame by frame through its seek hook
    1. HS-NASA-010.0s

    2. HS-NASA-021.0s

    3. HS-NASA-032.0s

    4. HS-NASA-043.0s

    5. HS-NASA-054.0s

    6. HS-NASA-065.0s

    7. HS-NASA-076.0s

    8. HS-NASA-087.0s

    9. HS-NASA-098.0s

    10. HS-NASA-109.0s

    11. HS-NASA-1110.0s

    12. HS-NASA-1211.0s

  • Her own florals and wallpaper designs: on the left, florals bloom in and out of focus on a rhythm of their own; on the right and along the bottom, designs fade in one at a time.

    • SketchToSystem
    • EllieDesigns
    • GSAP
    • Captured in real time
    1. HS-ECD-010.0s

    2. HS-ECD-0213.8s

    3. HS-ECD-0331.6s

    4. HS-ECD-0432.6s

    5. HS-ECD-0533.8s

    6. HS-ECD-0634.9s

    7. HS-ECD-0736.1s

    8. HS-ECD-0837.1s

    9. HS-ECD-0938.1s

    10. HS-ECD-1039.3s

    11. HS-ECD-1140.6s

    12. HS-ECD-1241.6s

  • Labor history in four scenes, played once: the women on the dock slow to a stop as a moody vignette closes in from the top right.

    • SectionFilm
    • Interpolated slow motion
    • 10-bit AV1 + HEVC, H.264 + VP9
    • The film, paused at each moment
    1. HS-LHRP-010.0s

    2. HS-LHRP-021.0s

    3. HS-LHRP-032.0s

    4. HS-LHRP-043.0s

    5. HS-LHRP-054.0s

    6. HS-LHRP-065.0s

    7. HS-LHRP-076.0s

    8. HS-LHRP-087.0s

    9. HS-LHRP-098.0s

    10. HS-LHRP-109.0s

    11. HS-LHRP-1110.0s

    12. HS-LHRP-1211.0s

    13. HS-LHRP-1312.0s

Case-study heroes

The background behind each case-study title.

  • The eye plays once over looping wings, then holds its last frame.

    • Two-film handoff
    • AV1 + H.264
    • Captured in real time
    1. C-TNX-010.0s

    2. C-TNX-021.5s

    3. C-TNX-033.0s

    4. C-TNX-044.5s

    5. C-TNX-056.0s

    6. C-TNX-067.5s

    7. C-TNX-079.0s

    8. C-TNX-0810.5s

    9. C-TNX-0912.0s

    10. C-TNX-1013.5s

    11. C-TNX-1115.0s

    12. C-TNX-1216.5s

  • The client site’s own wall-of-screens animation, as a vortex of faces.

    • DfBackdrop
    • Captured in real time
    1. C-ML-010.0s

    2. C-ML-021.0s

    3. C-ML-032.0s

    4. C-ML-043.0s

    5. C-ML-054.0s

    6. C-ML-065.0s

    7. C-ML-076.0s

    8. C-ML-087.0s

    9. C-ML-098.0s

    10. C-ML-109.0s

    11. C-ML-1110.0s

    12. C-ML-1211.0s

    13. C-ML-1312.0s

    14. C-ML-1413.0s

    15. C-ML-1514.0s

    16. C-ML-1615.0s

    17. C-ML-1716.0s

    18. C-ML-1817.0s

    19. C-ML-1918.0s

    20. C-ML-2019.0s

    21. C-ML-2120.0s

  • The clip plays, then the CVS heart arrives and settles half off the left edge; glints of light drift along its border.

    • CvsHero
    • Video + canvas 2D
    • Captured in real time
    1. C-CVS-010.0s

    2. C-CVS-021.6s

    3. C-CVS-032.3s

    4. C-CVS-042.9s

    5. C-CVS-053.6s

    6. C-CVS-064.3s

    7. C-CVS-075.5s

    8. C-CVS-086.7s

    9. C-CVS-097.7s

    10. C-CVS-108.4s

    11. C-CVS-118.9s

    12. C-CVS-129.5s

  • MIT’s own footage, cut on motion; the mark rises over the last shot and settles behind the title as a quiet watermark, its i in dots.

    • SectionFilm
    • Canvas 2D ending
    • v8
    • Captured in real time
    1. C-MIT-010.0s

    2. C-MIT-021.1s

    3. C-MIT-032.2s

    4. C-MIT-043.3s

    5. C-MIT-054.4s

    6. C-MIT-065.5s

    7. C-MIT-076.6s

    8. C-MIT-087.7s

    9. C-MIT-098.8s

    10. C-MIT-109.9s

    11. C-MIT-1111.0s

    12. C-MIT-1212.1s

    13. C-MIT-1313.2s

    14. C-MIT-1414.3s

  • Her florals at the top of the case study, each in its own place.

    • CaseFlorals
    • WebGL
    • SVG
    • Captured in real time
    1. C-ECD-010.0s

    2. C-ECD-021.2s

    3. C-ECD-032.4s

    4. C-ECD-043.6s

    5. C-ECD-054.8s

    6. C-ECD-066.0s

    7. C-ECD-077.2s

    8. C-ECD-088.5s

    9. C-ECD-099.6s

    10. C-ECD-1010.8s

    11. C-ECD-1112.0s

    12. C-ECD-1213.2s

  • Labor history in four scenes, slowed to 85%; the steel mill fades as the Georgetown seal draws in, large, off the right edge.

    • Film, interpolated slow motion
    • Seal film
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Captured in real time
    1. C-LHRP-010.0s

    2. C-LHRP-022.2s

    3. C-LHRP-034.4s

    4. C-LHRP-046.6s

    5. C-LHRP-058.8s

    6. C-LHRP-0611.0s

    7. C-LHRP-0713.2s

    8. C-LHRP-0815.4s

    9. C-LHRP-0917.6s

    10. C-LHRP-1019.8s

    11. C-LHRP-1122.0s

    12. C-LHRP-1224.2s

  • A planet hangs from the top right; a satellite crosses it and maps a swath.

    • NasaOrbit
    • Canvas 2D
    • Captured frame by frame through its seek hook
    1. C-NASA-010.0s

    2. C-NASA-021.5s

    3. C-NASA-033.0s

    4. C-NASA-044.5s

    5. C-NASA-056.0s

    6. C-NASA-067.5s

    7. C-NASA-079.0s

    8. C-NASA-0810.5s

    9. C-NASA-0912.0s

    10. C-NASA-1013.5s

    11. C-NASA-1115.0s

    12. C-NASA-1216.5s

  • The film turns into a live halftone in its last second and a half, and the mark forms in dots. Her smile is drawn dot by dot: white teeth, pink lip.

    • CaFilm
    • Video + canvas 2D
    • v21
    • Captured in real time
    1. C-CA-010.0s

    2. C-CA-020.8s

    3. C-CA-031.6s

    4. C-CA-042.4s

    5. C-CA-053.2s

    6. C-CA-064.0s

    7. C-CA-074.8s

    8. C-CA-085.6s

    9. C-CA-096.4s

    10. C-CA-107.2s

    11. C-CA-118.0s

    12. C-CA-128.8s

    13. C-CA-139.6s

    14. C-CA-1410.4s

    15. C-CA-1511.2s

    16. C-CA-1612.0s

    17. C-CA-1712.8s

    18. C-CA-1813.6s

    19. C-CA-1914.4s

    20. C-CA-2015.2s

Work logo films

The short films on the work page, each ending on the client’s mark.

  • 6.0s film, from the footage to the client’s mark.

    • v2
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-TNX-010.0s

    2. W-TNX-020.5s

    3. W-TNX-031.1s

    4. W-TNX-041.6s

    5. W-TNX-052.2s

    6. W-TNX-062.7s

    7. W-TNX-073.3s

    8. W-TNX-083.8s

    9. W-TNX-094.3s

    10. W-TNX-104.9s

    11. W-TNX-115.4s

    12. W-TNX-126.0s

  • 3.3s film, drawn in code, ending on the client’s mark.

    • v3
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-ML-010.0s

    2. W-ML-020.3s

    3. W-ML-030.6s

    4. W-ML-040.9s

    5. W-ML-051.2s

    6. W-ML-061.4s

    7. W-ML-071.8s

    8. W-ML-082.0s

    9. W-ML-092.3s

    10. W-ML-102.6s

    11. W-ML-112.9s

    12. W-ML-123.2s

  • 6.5s film, from the footage to the client’s mark.

    • v4
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-CVS-010.0s

    2. W-CVS-020.6s

    3. W-CVS-031.2s

    4. W-CVS-041.8s

    5. W-CVS-052.4s

    6. W-CVS-062.9s

    7. W-CVS-073.5s

    8. W-CVS-084.1s

    9. W-CVS-094.7s

    10. W-CVS-105.3s

    11. W-CVS-115.9s

    12. W-CVS-126.5s

  • 6.3s film, drawn in code, ending on the client’s mark.

    • v7
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-MIT-010.0s

    2. W-MIT-020.6s

    3. W-MIT-031.1s

    4. W-MIT-041.7s

    5. W-MIT-052.3s

    6. W-MIT-062.8s

    7. W-MIT-073.4s

    8. W-MIT-084.0s

    9. W-MIT-094.5s

    10. W-MIT-105.1s

    11. W-MIT-115.6s

    12. W-MIT-126.2s

  • 7.1s film, from the footage to the client’s mark.

    • v18
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-ECD-010.0s

    2. W-ECD-020.6s

    3. W-ECD-031.3s

    4. W-ECD-041.9s

    5. W-ECD-052.6s

    6. W-ECD-063.2s

    7. W-ECD-073.8s

    8. W-ECD-084.5s

    9. W-ECD-095.1s

    10. W-ECD-105.8s

    11. W-ECD-116.4s

    12. W-ECD-127.0s

  • 7.5s film, from the footage to the client’s mark.

    • v6
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-LHRP-010.0s

    2. W-LHRP-020.7s

    3. W-LHRP-031.4s

    4. W-LHRP-042.0s

    5. W-LHRP-052.7s

    6. W-LHRP-063.4s

    7. W-LHRP-074.0s

    8. W-LHRP-084.7s

    9. W-LHRP-095.4s

    10. W-LHRP-106.1s

    11. W-LHRP-116.7s

    12. W-LHRP-127.4s

  • 3.3s film, from the footage to the client’s mark.

    • v2
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-NASA-010.0s

    2. W-NASA-020.3s

    3. W-NASA-030.6s

    4. W-NASA-040.9s

    5. W-NASA-051.2s

    6. W-NASA-061.4s

    7. W-NASA-071.8s

    8. W-NASA-082.0s

    9. W-NASA-092.3s

    10. W-NASA-102.6s

    11. W-NASA-112.9s

    12. W-NASA-123.2s

  • 5.7s film, from the footage to the client’s mark.

    • v32
    • 10-bit AV1 + HEVC, H.264 + VP9
    • Frames extracted from the encoded film with ffmpeg
    1. W-CA-010.0s

    2. W-CA-020.5s

    3. W-CA-031.0s

    4. W-CA-041.5s

    5. W-CA-052.0s

    6. W-CA-062.5s

    7. W-CA-073.1s

    8. W-CA-083.6s

    9. W-CA-094.1s

    10. W-CA-104.6s

    11. W-CA-115.1s

    12. W-CA-125.6s

Details

Smaller moments elsewhere on the site, framed close.

  • One strand of yarn loops through the last 8 of the 98.8 and ties off in a bow, then sways. Framed close on the stat.

    • YarnBow
    • Canvas 2D
    • Captured frame by frame through its seek hook
    1. A-BOW-010.2s

    2. A-BOW-020.5s

    3. A-BOW-030.7s

    4. A-BOW-041.0s

    5. A-BOW-051.2s

    6. A-BOW-061.5s

    7. A-BOW-071.8s

    8. A-BOW-082.1s

    9. A-BOW-092.4s

    10. A-BOW-102.8s

    11. A-BOW-113.4s

    12. A-BOW-124.4s

Step V of VII

Stories and acceptance criteria

Every change starts as a requirement and ends checked against it.

With AIEach chat request sets the acceptance criteria, and the result is checked against the request, not against the change.

  • Requirements per change
  • Hidden-content log: 10 entries
  • Regression checks for every fix
  • Fixes broken on purpose to prove the check
  • Every page compared before and after

Step VI of VII

Build, QA and debugging

An Astro 5 monorepo that builds to static pages. Heavy animations have a seek hook, so tests and storyboards can stop on an exact moment.

With AIThe designer reviews the result, not the code.

  • Static build
  • Edge-hosted contact form
  • Monorepo: site, tokens, motion
  • Browser tests at 1440, 820 and 390
  • Every control clicked: no dead buttons
  • Low Power Mode simulated
  • Pinch zoom on a real iPhone
  • Accessibility scans
  • Crawl for broken links
  • Four film encodes
  • Scripted compositing

Step VII of VII

Release and refine

In seven weeks to launch, 1,106 commits; 1,106 in all so far. Every push to GitHub builds and deploys on Cloudflare, with a private preview for each branch. Search and AI crawlers get the same care as people: structured data, a sitemap with images, social cards and an llms.txt.

With AIFeedback rounds take minutes, not days, so another version is always cheap to try.

  • Structured data
  • Image sitemap
  • llms.txt
  • WCAG 2.2 AA

Iteration

Most things took more than one try.

Version counts are kept on purpose: superseded versions are archived, not deleted, and the storyboards above show only the final ones.

Film and animation

Crystal clear took a process.

The first films looked fine in an editor and fell apart on the page: banding in dark gradients, hard edges, blocks in Safari, stale cuts in the cache. This is the pipeline every film and background goes through now.

  1. 01

    Start from the source

    Footage from Gemini or the client, stills from Figma AI. Every cut is rendered from the source frames, never from an earlier encode, so quality never drops version to version.

  2. 02

    Composite in code

    Python grades, masks and composites each frame: vignettes, halftones, face alignment and morphs. Nothing is done by hand twice.

  3. 03

    Feather into the page

    Edges fade into the page’s own black over a long, soft falloff, with a trace of noise so the fade has no steps. The film ends where the page begins, with no visible frame.

  4. 04

    Storyboard it

    Frames pulled at fixed moments and judged side by side, every version numbered. Reviewing a strip is faster and more honest than scrubbing a video.

  5. 05

    Encode four ways

    10-bit AV1 and HEVC first, so dark gradients stay smooth, then H.264 and VP9 for every other browser. Each browser plays the best one it can.

  6. 06

    Check before it ships

    Scripts confirm the length, that the edges match the page and that every format loads on every page, in Safari’s engine as well as Chrome’s.

  7. 07

    Stamp and ship

    Each file’s address carries a fingerprint of its contents, so a re-cut film is never served stale from a visitor’s cache.

Lessons learned

Core Web Vitals

Fast is measured, not felt.

Core Web Vitals are how Google measures what visitors feel: how soon the main content shows (Largest Contentful Paint, good under 2.5s), how quickly a tap answers (Interaction to Next Paint, under 200ms) and whether the page holds still (Cumulative Layout Shift, under 0.1). Every page was timed in Chrome on a Mac, on the live site, and in Lighthouse on a throttled phone, then fixed where it was slow. Each fix got a check that fails if it’s undone.

How pages are kept fast

Lessons learned

Rules that made it faster

Written down once, applied everywhere.

Every correction that could happen twice became a rule, kept in a working-notes file the AI reads before every session and in the project’s docs. That is what made the pace possible: the same feedback never had to be given twice.

Working together

  • Ask in one line, or make the call and name it.
  • Say plainly when something was wrong.
  • The best brief: a cropped screenshot (circled or not) and a line on what’s wrong.
  • Hide means keep: comment it out and log it, never delete.

Quality

  • Check the whole page, not just the change.
  • Measure, don’t estimate, and report both sides of a comparison.
  • Every bug fix gets a check, proven by breaking the fix on purpose.
  • A check that skips quietly is worse than none: a missing target fails.
  • Desktop and phone every time; reduced motion is its own version.
  • Time it on a throttled phone, not only a fast desktop.

Design

  • Tokens, not literals.
  • No browser-default controls: custom, and fully keyboard accessible.
  • A section’s background starts once its top passes 65% of the screen.
  • Sentence case; acronyms like UX, UI and IxD as they are written.
  • No rule above the first item in a list or below the last.
  • Scrollbars are thumb only; video vignettes are soft, never an oval.
  • Links and buttons show the lime arrow cursor, never the system hand.

Engineering

  • Edit files where they live; build after every change.
  • Server-render the real content; enhance after paint.
  • Heavy animations get a seek hook, so tests stop on an exact moment.
  • Every trap that cost time is written down once, in notes the AI reads before each session.
  • Commit after every change, with what and why.

More about this site

Start a conversation