COLOPHON · DESIGN SPECIFICATION · LAST UPDATED 20 MAY 2026

The system.

Every decision behind flavioclesio.com, with the reasoning that produced it. This page is the source of truth. If the site disagrees with this document, the site is wrong.

§1 Identity

Field Value
Name flavioclesio.com
Author Flavio Clesio (fclesio)
Established 2012
Subject Machine Learning Engineering, Data Engineering, engineering culture, long-form reflection.
Audience Practitioners. Engineers, data scientists, researchers, hobbyists. Not “the C-suite”.
Languages Portuguese-Brazilian and English, mixed by topic. lang: front-matter selects the post feed.
Posture Reading first. No decoration without purpose. Typographic hierarchy over visual hierarchy. Invisible infrastructure. No JavaScript for layout.
Build Jekyll · Netlify · Pagefind for search · Spectral & Newsreader via Google Fonts · Roboto Mono self-hosted.

§2 Typography

2.1 Type families

Family Role Used in Rationale
Newsreader Literary serif Home · Essay · Podcast Variable serif designed for screen reading. Stronger italic, warmer baseline than Spectral. Carries “this is writing meant to be read slowly.”
Spectral 300 Editorial serif Post (default) · Technical · Colophon Designed for long-form digital reading; light weight reads as elegant rather than crowded. Carries “this is an article.”
Roboto Mono Machine text Metadata · code · datelines · timestamps Monospace contrast against the serif signals “this is data, not prose.” Self-hosted via woff2.

2.2 Per-layout scale

Layout Body Weight Line-height H1 H2 Background
Home Newsreader 19px 380 1.6 48px / 400 26px / 400 italic #f6f1e8
Post (A) Spectral 20px 300 1.55 35px / 500 30px / 500 #ffffff
Essay (B) Newsreader 21px 380 1.62 48px / 400 italic 26px / 400 italic #f6f1e8
Technical (C) Spectral 19px 300 1.6 38px / 500 25px / 500 #fbfaf7
Podcast Newsreader 19px 380 1.6 40px / 400 italic 22px / 400 italic #f6f1e8

2.3 Code type

Property Value
Family Roboto Mono, weights 300 & 500
Inline size 0.78em–0.82em
Block size 13–14px / 1.55
Inline background #efeae0
Block background #f5f5f5 light · #1f1d1a dark (technical, opt-in)

§3 Color

3.1 Light tokens

Hex Name Use
#ffffff paper / white bg · post
#fbfaf7 paper / warm 1 bg · technical · colophon
#f6f1e8 paper / warm 2 bg · home · essay · podcast
#1a1a18 ink / max titles · primary text
#2a2a26 ink / body body text
#3a3631 ink / sub lead, deck
#555555 ink / muted secondary copy
#8a7e6a ink / metadata dates, eyebrows, footer
#b5a888 ink / faint counters, dim tags
#c8b896 rule / warm borders in essay/home
#e8e3da rule / cool borders in post/technical
#2a6b7c link / teal links in post · technical · colophon
#c19b58 link / amber links in home · essay · podcast
#b8593a callout / warn WARNING callouts
#7a8f4a callout / tip TIP callouts

3.2 Dark tokens

Hex Name Use
#1a1a1a bg / black post · technical dark
#1c1814 bg / warm dark home · essay · podcast dark
#2a2520 surface / raised callouts, active rows
#f0e9dc ink / max titles
#d4cfc8 ink / body body
#b5ada0 ink / sub lead
#8a7e6a ink / metadata dates, eyebrows
#3a3530 rule / warm dark borders home/essay
#2a2a2a rule / cool dark borders post/technical
#7ab8c4 link / teal-light links in post · technical dark
#d4b677 link / amber-light links in home · essay · podcast dark

3.3 Rejected

Color Why rejected
#33c default blue Clashes with serif warm undertone; reads as “default link”, undermines intent.
Pure #000 Halation on LCD; #1a1a18 reads identically printed but easier on the eye on screen.
Saturated brand color No brand. The site is the writing.

§4 Layout

Layout Max column Padding Sidebar Footer
Home 720px 36px 48px asterism + 2 rows mono
Post (A) 680px 20px 40px centered mono recolhido
Essay (B) 700px 36px 56px 80px colophon line (set in…)
Technical (C) 1080px (660 main + 220 TOC) 24px 48px 220px right · sticky last reviewed + edit on github
Podcast 720px 28px 48px asterism + body
Colophon 880px 32px 56px shared footer

Vertical rhythm derived from font-size. Paragraphs at 1.2em apart. Section heads at 1.5em above / 0.6em below. Line length is the design constant; column widths derived from it (62–68ch target).

§5 Page system

Three writing layouts + the home + podcast. Selected via Jekyll front-matter, never via URL routing.

File Front-matter Renders
_layouts/post.html layout: post Spectral, 680px, optional numbered footnotes block.
_layouts/essay.html layout: essay Newsreader, paper warm, drop cap, justified body, asterism between sections, mono dateline.
_layouts/technical.html layout: technical Spectral, paper warm 1, sticky TOC right, callouts, code with file label + copy, last-reviewed footer.
_layouts/episode.html layout: episode Newsreader, paper warm 2, minimal player, numbered chapters, em-dash shownotes.
index.md is_home: true Newsreader, paper warm, sections: Essays · Technical · Notes · Podcast · Archive · Recent.

§6 Components

6.1 Dateline

Layout Format Type Style
Post 2026 Apr 30 Spectral 20px #bbb
Essay 30 · APRIL · 2026 Roboto Mono 11px letter-spacing 0.3em, #8a7e6a, centered
Technical 30 APR 2026 · UPDATED 02 MAY 2026 · TAGS Roboto Mono 11px letter-spacing 0.12em, #888, left
Podcast 2026 May 01 · 5 min 53 s · Portuguese · Host Flavio Clesio Roboto Mono 11px letter-spacing 0.14em, #8a7e6a, left

6.2 Footnotes

Kramdown native [^1] syntax. Numbered at bottom; superscript call-out in teal (post/technical) or amber (essay/home).

6.3 Pull quote · Epigraph

Bar variant: italic 20–26px serif, 2px left border in layout accent color. Epigraph: centered, 18px italic; cite block in mono caps.

6.4 Callouts

Type Left border Label color
NOTE #2a6b7c #2a6b7c
WARNING #b8593a #b8593a
TIP #7a8f4a #7a8f4a
TL;DR #2a6b7c (background #f3edde) #2a6b7c

Label rendered automatically from class via ::before content.

6.5 Code blocks

Default: light #f5f5f5, no chrome. Dark: opt-in via Kramdown attribute on the fenced block ({: data-chrome="dark" data-file="path"}).

6.6 Drop cap

Essay-only. CSS via .essay-body > p:first-child::first-letter. Combine with <span class="smallcaps"> on the first 3 words.

6.7 Asterism

Markdown * * *<hr>. In essay, restyled to ∗ ∗ ∗ centered, #c8b896, letter-spacing 0.6em.

6.8 Podcast player

A single horizontal strip between two thin warm-gray rules. No skip ±15/30, no volume, no share — the URL ?t=N param is the share contract. Composed of: 52px black play/pause circle · 3px progress bar with amber chapter ticks · mono elapsed/total · single speed pill (popover for 0.75/1/1.25/1.5/2).

6.9 Chapters

Each row: stacked mm:ss (mono caps) · title (italic Newsreader) · [tag] (mono small). Active row: prefix on time + title in amber. Whole row is clickable, jumps to timestamp.

6.10 Show notes

Simple list. Each entry is a hyperlink.

Element Spec
Inner page nav Mono 11px · uppercase · letter-spacing 0.14em. ← flavioclesio on left, contextual links on right.
Home nav Same scale, more items: About / Sobre · Conference Talks · Contents from Other Authors · Aforismos / Aphorisms · Podcast · RSS.
Dropped from nav Livros · Newsletter · Busca · Archive (Archive is its own home section).
Footer Asterism · social row · legal row. Both rows mono 11px, color #8a7e6a.
Footer contents Row 1: GitHub · Twitter · LinkedIn · RSS. Row 2: Disclaimer / Aviso · Colophon · CC BY-SA 4.0 · :wq.

§8 Markdown extensions

Kramdown native, no plugins. Authors mark up posts as normal markdown plus the following recognized class hooks:

{: .callout .note}     → NOTE callout
{: .callout .warning}  → WARNING callout
{: .callout .tip}      → TIP callout
{: .callout .tldr}     → TL;DR (use once, above first H2)

{: .pullquote}         → pull-quote bar variant
{: .epigraph}          → pull-quote epigraph variant

[^1]                   → footnote reference (numbered automatically)
[^1]: footnote text    → footnote definition (placed at end of file)

* * *                  → asterism (renders as ∗ ∗ ∗ in essay layout, hr elsewhere)

<span class="smallcaps">My friend Paulo</span>  → small caps run

Usage example (callout — note the blank line above the attribute block):

> The `scope["type"] != "http"` guard lets this coexist with WebSocket traffic.
{: .callout .note}

§9 Dark mode

Single button, fixed top-right of every page. Toggles body.dark; persisted in localStorage under key theme. No JS heuristics, no prefers-color-scheme auto-switching. The reader chose for a reason.

Property Value
Strategy Per-layout dark palette. Home/essay/podcast use warm dark (#1c1814); post/technical/colophon use neutral dark (#1a1a1a).
Link in dark Teal layouts: #7ab8c4. Amber layouts: #d4b677.
Rules in dark Warm: #3a3530. Cool: #2a2a2a.
Code in dark Block: #242424. Inline: #2a2520 + ink #d4cfc8.

§10 Front-matter contract

Every Jekyll source file declares its layout and language. Layout-specific fields are read only by their layout. Extra fields never break a build.

# Universal
layout:         post | essay | technical | episode    # required
title:          string                                # required
date:           ISO-8601                              # required
lang:           pt-br | en-us                         # required
permalink:      /:title                               # required
excerpt:        string (<= 200 chars)                 # optional

# Technical-only
series:         slug                                  # links sibling posts
series_index:   integer                               # 1-indexed
series_total:   integer
last_reviewed:  ISO-8601                              # footer "last reviewed"
tags:           [string, ...]

# Episode-only
duration:       hh:mm:ss
audio.mp3.url:  /assets/podcast/epNNN.mp3
audio.mp3.size_mb: number
chapters:       [ { start: mm:ss, title: string, tag: string } ]
shownotes:      [ { url, title } ]
guests:         [ { name, url, role } ]

# Essay-only
location:       string  # defaults to "Lisbon"