01

Base64 converter

Encode or decode UTF-8 text without sending tokens, payloads, or fixtures to a service.

02

CSS palette generator

Turn a base color into a restrained five-step palette you can move into design tokens.

03

Color contrast

Measure normal and large text against the WCAG contrast thresholds.

02 / Articles

Notes from the delivery room.

Original writing about the practical decisions behind dependable websites.

Security · 2022

HTTPS is a product feature

Teams often treat HTTPS as the last checkbox before launch. That framing misses the useful part: a certificate is a dependency, a redirect is behavior, and the browser is an active participant in your product.

Start by deciding which host is canonical. Redirect every other HTTP and hostname variant to it, then test the redirect without a cached browser. Keep certificate validation records in DNS, monitor expiry, and make renewal part of the same operational ownership as the application.

When HTTPS is reliable, other choices become possible: secure cookies, modern APIs, service workers, and meaningful referrer policy. The feature is not the padlock. The feature is a predictable boundary for every request.

Reference: MDN HTTP overview
Performance · 2022

Make the first view count

A page can be technically small and still feel slow. The browser must discover the document, parse its dependencies, negotiate connections, decode fonts and images, and decide what to paint first. Every blocking resource spends part of the user’s attention budget.

Begin with the visible path. Give the document useful HTML, reserve image dimensions, preload only a resource you can name, and defer work that does not affect the first interaction. A smaller JavaScript bundle helps, but removing a layout jump can matter just as much.

Measure on a representative phone and network. A laptop on a fast connection is a development environment, not a user population. Use field metrics to find the gap between the page you intended and the page people actually received.

Reference: Web Vitals
Accessibility · 2023

HTML is your first interface

Accessibility work gets expensive when it starts after the interface has already been abstracted into anonymous containers. The cheapest accessible component is the native element that already knows its role, name, states, and keyboard behavior.

Use a button for an action and a link for navigation. Give every form control a visible label. Keep one useful page heading, make the heading order describe the content, and make focus visible. These decisions improve screen-reader output, keyboard flow, zoom, voice control, and maintainability at the same time.

ARIA has a place, but it should clarify a real interface rather than disguise a missing one. Test the finished route with a keyboard and with the browser zoomed before calling it done.

Reference: WCAG
Operations · 2023

DNS is part of your release

Changing DNS is a distributed release. Different resolvers hold different answers, negative responses are cached, and a certificate authority may inspect the same record from another network while you are watching your own.

Write down the old record, the new record, the TTL, and the owner before making the change. Keep unrelated mail and verification records in view. Validate from an authoritative nameserver first, then from a public recursive resolver, and finally through the actual HTTPS hostname.

The successful command is not the end of the work. A release is complete when the intended host serves the intended certificate and the previous route has a deliberate fate.

Reference: RFC 1034
HTTP · 2024

Cache with a contract

Cache-Control is a promise between an origin and every intermediary that stores its response. Before choosing a long freshness window, decide how the object changes, how a user receives a correction, and whether a URL identifies one immutable version or many possible versions.

Immutable assets can carry a long lifetime when their filenames change with their contents. HTML usually needs a shorter policy because it points at the next set of assets. If the team cannot explain how to invalidate a response, the response is not ready for an aggressive cache.

Reference: Cache-Control
Delivery · 2024

Deployments need a rollback story

A rollback plan is a design constraint, not a paragraph added after the incident. Name the last safe version, make the change reversible where possible, and decide which data migrations can move backward before they become coupled to the new code.

Practice the route in a low-risk environment. During a real failure, the team should be choosing between known actions rather than inventing a procedure in front of customers.

Reference: Google SRE

03 / Field notes

Short references for the rest of the work.

Accessibility, CSS, security headers, observability, and interface design notes.

CSS · 2024

Design tokens are constraints

Name the values that should remain coherent, then let components consume those names instead of inventing local colors.

Design Tokens
Security · 2024

Headers are policy

CSP, framing controls, and permissions should describe the resources the application actually needs.

MDN CSP
Accessibility · 2025

Keyboard support is quality

Every interactive path should be reachable, visible, and understandable without a pointer.

WCAG keyboard guidance
Reliability · 2025

Logs should answer a question

Record the context needed to investigate failures while keeping access, retention, and sensitive fields intentional.

OpenTelemetry
Performance · 2025

Measure the path users take

Field data reveals slow devices, networks, and interactions that a fast development laptop hides.

Chrome UX Report
Standards · 2026

Write the interface down

Document inputs, outputs, errors, and ownership so the next engineer can change a service with confidence.

HTTP Semantics

Engineering guidance you can inspect.

dontdaterobots.com publishes original web-development writing and small client-side utilities for people who design, build, review, and operate websites.