Escritura

Blog

49 artículos
2026

CSS print layout: floats, BFC, and image containment

Four print layout behaviors that break screen assumptions: why floats beat CSS Grid for variable-height sidebars, why DOM order matters for floats, why overflow:hidden on a float sibling breaks multi-page layouts, and how to draw rules that actually print.

JSON-LD Entity Graph for Brand Disambiguation on Minimal Sites

How to use JSON-LD with @id, sameAs, and rel=me to establish a coherent entity graph that disambiguates a brand sharing its name with unrelated entities — the three-node minimum, Wikidata's role, and what structured data cannot do.

RSS as a cross-site content bridge in Astro SSG

Using RSS as a stateless content contract between two independent Astro static sites, with GitHub Actions repository_dispatch to trigger rebuilds only when Markdown content changes — not on every commit.

av.js — self-hosted analytics embed

API reference for av.js: the minimal analytics snippet for Avelor-hosted projects. Covers the embed pattern, the pageview payload structure, custom event API, session ID strategy, and implementation constraints like keepalive fetches and localhost filtering.

Using the URL fragment as an encryption key carrier

Client-side AES-256-GCM encryption where the key lives exclusively in the URL fragment — never transmitted to the server. The design, the constraints around browser history and intermediaries, and why out-of-band key delivery defeats the UX goal.

A WebSocket relay as a self-hosted tunnel

A single Node.js process that exposes localhost over public HTTPS using a persistent outbound WebSocket from the CLI — token auth in the handshake, request queuing with UUID correlation, 30s timeout, and no inbound ports on the developer's machine.

tailscale serve sets REMOTE_ADDR to 127.0.0.1 for every request

tailscale serve is a reverse proxy, not a network filter — it collapses all caller identities to 127.0.0.1, silently bypassing any REMOTE_ADDR-based auth guard. The only reliable identity signal is the Tailscale-User-Login header it injects.

Building gob.co.nz: A Static Corrections Register

Architecture notes for gob.co.nz, a static public corrections register for the tech industry — stack decisions, Astro 6 Content Layer footguns, build-time OG image generation with sharp, and Pagefind client-side search integration.

Building Octa: Architecture Decisions for a Static Engineering Notebook

Design decisions behind Octa: why Astro over Next.js, how the type/project dual-classification model works, the sidebar architecture, Mermaid diagram rendering without a build-time headless browser, and what was deliberately left out.