---
title: Colophon | Marco Pontili   
description: Learn about the web techniques and open-source tools used to build this site, plus design and technology insights.   
url: https://marcopontili.com/colophon   
canonical: https://marcopontili.com/colophon   
lastmod: 2026-08-21   
author: Marco Pontili   
lang: en-US   
type: page   
---

# Colophon

An overview of the open-source tools, technologies, and techniques used to build this website.

## Design & Typography

The color palette is inspired by the [Sterrenwacht Tivoli ↗](https://www.color-hex.com/color-palette/94360 "Sterrenwacht Tivoli Color Palette") palette, with accents from the [CLRS ↗](https://clrs.cc "CLRS color palette") palette. All colors use [OKLCH units ↗](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch "OKLCH color space on MDN"), for uniform lightness adjustments across all hues. The same OKLCH-only rule drives the open-source [ForEveryone Berlin design system](https://marcopontili.com/projects/foreveryone "ForEveryone Berlin Design System case study") I co-authored, whose token pipeline is a direct sibling of this site's.  
SVG background patterns for project cards are from [Hero Patterns ↗](https://heropatterns.com/ "Hero Patterns").

The logo was created by [Linda Armelius ↗](https://www.linkedin.com/in/linda-armelius-4b502572/ "Linda Armelius on LinkedIn").

The social icons in homepage and the external link icon used across multiple pages are from [Feather Icons ↗](https://feathericons.com/ "Feather Icons").

Webfonts include [Catamaran ↗](https://fonts.google.com/specimen/Catamaran "Google Fonts: Catamaran") for H1s, [Cabin ↗](https://fonts.google.com/specimen/Cabin "Google Fonts: Cabin") for body text, and [Roboto Mono ↗](https://fonts.google.com/specimen/Roboto+Mono "Google Fonts: Roboto Mono") for monospace elements. All fonts are self-hosted via [Google Webfonts Helper ↗](https://gwfh.mranftl.com/fonts "Google Webfonts Helper"). A native [system font stack ↗](https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/ "Using System UI Fonts - Smashing Magazine") serves as a fallback for optimal performance. Cabin and Catamaran are licensed under the SIL Open Font License 1.1; Roboto Mono under the Apache License 2.0.

*See the live [UI Style Guide](https://marcopontili.com/styleguide "Site Styleguide") for a closer look at the website’s visual language.*

## Code

This site uses semantic HTML and raw PHP for templating, metadata, and navigation. The current setup is a personal playground for testing ideas, maintaining full control, and staying flexible without relying on any framework, SSG, or CMS.

Styles are written in modern CSS and processed with [PostCSS ↗](https://postcss.org/ "PostCSS") using a modular architecture, [design tokens ↗](https://m3.material.io/foundations/design-tokens/overview "Design Tokens - Material Design"), and the [BEM ↗](https://en.bem.info/methodology/ "BEM Methodology") methodology.

Vanilla JavaScript enhances UX by handling anchor and fragment navigation, managing Chromium [theme colors ↗](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/name/theme-color "MDN: Meta Theme-Color") , and enabling automatic light and dark mode support via `prefers-color-scheme` or a manual `data-theme="light/dark"` attribute on the `<html>` element.  

The testimonials grid uses [Masonry ↗](https://masonry.desandro.com/ "Masonry by Desandro") for a responsive column layout.  
[GSAP ↗](https://gsap.com/ "GSAP: GreenSock Animation Platform") handles animations, working together with CSS transitions and animations.  
Interactive carousels are powered by [Embla Carousel ↗](https://www.embla-carousel.com/ "Embla Carousel") .  
Syntax highlighting is managed by [Prism JS ↗](https://prismjs.com/ "PrismJS Syntax Highlighter") using the [“Tomorrow Night” ↗](https://prismjs.com/download.html#themes=prism-tomorrow "PrismJS Tomorrow Night Theme") theme.

Forms use [Web3Forms ↗](https://web3forms.com "Web3Forms") , for serverless submissions.

Development is done in [Visual Studio Code ↗](https://code.visualstudio.com/ "Visual Studio Code") with extensions like [ESLint ↗](https://marketplace.visualstudio.com/items/dbaeumer.vscode-eslint "VS Code Extension: ESLint") , [Stylelint ↗](https://marketplace.visualstudio.com/items/stylelint.vscode-stylelint "VS Code Extension: Stylelint") , and [Prettier ↗](https://marketplace.visualstudio.com/items/esbenp.prettier-vscode "VS Code Extension: Prettier") for linting and formatting.

Version control and code hosting are managed using [Git ↗](https://git-scm.com/ "Git Homepage") and [GitHub ↗](https://github.com "GitHub Homepage") .

## AI

This site was hand-coded for years. In 2025, [ChatGPT ↗](https://chatgpt.com "ChatGPT") was used for research and exploration. In 2026, coding assistance started with the [Cursor ↗](https://cursor.com "Cursor AI code editor") AI editor, then moved to [Claude Code ↗](https://claude.com/claude-code "Claude Code"), from the Opus model onward, driven through [Model Context Protocol (MCP) ↗](https://modelcontextprotocol.io "Model Context Protocol") servers that extend it with browser automation, debugging, refactoring, dependency updates, and security checks.

## Building & Speed

[Vite ↗](https://vite.dev/ "Vite Official Site") handles JavaScript and CSS bundling, [PostCSS ↗](https://postcss.org/ "PostCSS") processing with source maps, autoprefixing, and minification of both JS and CSS. It also copies PHP files and static assets, and provides fast Hot Module Replacement during development.

Performance tools like [Google Lighthouse ↗](https://developer.chrome.com/docs/lighthouse/overview/ "Google Lighthouse Documentation") and strategies such as lazyloading, minification, and gzip compression ensure speed and responsiveness. Check this site’ speed scores via Google’s [PageSpeed Insights ↗](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fmarcopontili.com%2F&tab=desktop "Google PageSpeed Insights") tool.

## Accessibility

Full keyboard navigation is supported, with a visible focus indicator using `:focus-visible`. The `no-js` class is removed on page load to indicate JavaScript is enabled; the site remains functional without it.

“Skip to content” and “Back to start” links improve navigation for keyboard and screen-reader users. Reduced-motion preferences are respected. The layout stays readable and usable up to 200% zoom.

Native landmark elements, such as `<main>` and `<nav>`, together with descriptive `aria-label` values, help assistive technologies interpret the structure of each page.

The main content container uses `tabindex="-1"` to ensure skip links move focus reliably. Decorative SVG icons are marked with `aria-hidden="true"` to avoid unnecessary screen-reader output.

HTML is kept valid according to W3C standards. [Validate it here ↗](https://validator.w3.org/nu/?showsource=yes&showoutline=yes&checkerrorpages=yes&useragent=Validator.nu%2FLV+http%3A%2F%2Fvalidator.w3.org%2Fservices&acceptlanguage=&doc=https%3A%2F%2Fmarcopontili.com%2F "W3C Markup Validation Service") .

CSS-only support for Right-to-Left (RTL) languages when content is auto-translated by browsers like Google Chrome. Improves readability for Arabic, Hebrew, Persian, and Urdu translations.

*Read the [accessibility statement](https://marcopontili.com/accessibility "Accessibility Statement") .*

## Testing

Testing is conducted using Chrome DevTools, [BrowserStack ↗](https://browserstack.com "BrowserStack") for cross-browser checks, [Webhint ↗](https://webhint.io "webhint") for performance and accessibility, [MDN HTTP Observatory ↗](https://observatory.mozilla.org/ "Mozilla Observatory") for security, and various [automated UI tools ↗](https://frontenddogma.com/tools/check/ "Frontend Dogma Automated UI Tools").

[Cypress ↗](https://www.cypress.io/ "Cypress Testing Framework") handles end-to-end testing, simulating user flows and verifying interactions, while [Playwright ↗](https://playwright.dev/ "Playwright") drives visual-regression screenshots and [Jest ↗](https://jestjs.io/ "Jest") covers unit tests.

## Deployment

Deployment is handled automatically by a [GitHub Action ↗](https://docs.github.com/en/actions "GitHub Actions Documentation") that runs every time code is pushed to the `main` branch. The codebase is linted before deployment to maintain consistency and avoid errors.

Manual builds and deployments are triggered by running:

```bash
npm run build:ci
```

This command is a shortcut that runs the following:

```bash
npm run build && git add . && git commit -m "ci: build" && git push
```

## Server & Hosting

The Apache configuration is a custom version of the one from [HTML Boilerplate ↗](https://github.com/h5bp/server-configs-apache/blob/main/dist/.htaccess "HTML5 Boilerplate Apache Config"), with added security rules from [Perishable Press ↗](https://perishablepress.com/category/htaccess/ "Perishable Press .htaccess Rules"). It manages CORS for fonts, removes `www.` prefixes, handles rewrites, enables caching and gzip, restricts sensitive files, and applies a Content Security Policy (CSP).

The site is hosted on [Netsons SSD 50 ↗](https://www.netsons.com/hosting/hosting-wordpress/ "Netsons Hosting"), while third-party assets remain on their original servers.

## SEO, GEO & AEO

SEO insights are provided by [Semrush ↗](https://semrush.com "Semrush"), including technical audits for crawlability, fast page load times, mobile responsiveness, proper heading structure (H1, H2, etc.), alt text for images, clean URLs, and overall site architecture.

Structured data is added via JSON to enhance search engine and LLMs understanding of the content.  

All pages are available in Markdown for AI agents and crawlers, following [Dries Buytaert's approach ↗](https://dri.es/the-third-audience "The Third Audience by Dries Buytaert"). Markdown versions are auto-generated from the HTML. The same URL can return Markdown when the client sends `Accept: text/markdown` (with correct q-value negotiation); agents can also use the `.md` path, the HTTP `Link` header, or `<link rel="alternate" type="text/markdown">`. Example: [marcopontili.com/about.md ↗](https://marcopontili.com/about.md "About page in Markdown format").  

A plain-text [llms.txt ↗](https://marcopontili.com/llms.txt "Site summary for LLMs and crawlers") at the site root describes the site structure and main pages for search engines and LLMs (inspired by [Svelte’s llms.txt ↗](https://svelte.dev/llms.txt "Svelte Documentation for LLMs")).  

The [robots.txt ↗](https://marcopontili.com/robots.txt "robots.txt crawler rules") welcomes AI and answer-engine crawlers like GPTBot, ClaudeBot, PerplexityBot, and Google-Extended, and declares Cloudflare `Content-Signal` values that allow search, AI input, and training use, so the content can be cited in AI answers. The server-level rules match it: nothing `robots.txt` welcomes is blocked.

## Analytics

Visitor analytics and behavior data are powered by a cookieless [Matomo On-Premise ↗](https://matomo.org/faq/general/faq_157/ "Matomo Analytics").

The same install records anonymous interaction events: CTA clicks, contact-form starts and submits, and case-study navigation. No cookies, no personal data.

## Privacy & Cookies

The [privacy](https://marcopontili.com/privacy-policy "Privacy Policy") and [cookie](https://marcopontili.com/cookie-policy "Cookie Policy") policies are written and maintained in-house to reflect the site’s actual data practices.  

The cookie consent is handled by [vanilla-cookieconsent ↗](https://github.com/orestbida/cookieconsent "vanilla-cookieconsent by Orest Bida") and [iframemanager ↗](https://github.com/orestbida/iframemanager "iframemanager by Orest Bida").  
Privacy preferences can be changed anytime via “Privacy Choices” in the footer.