Base64 converter
Encode or decode UTF-8 text without sending tokens, payloads, or fixtures to a service.
Encode or decode UTF-8 text without sending tokens, payloads, or fixtures to a service.
Turn a base color into a restrained five-step palette you can move into design tokens.
Measure normal and large text against the WCAG contrast thresholds.
02 / Articles
Original writing about the practical decisions behind dependable websites.
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 overviewA 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 VitalsAccessibility 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: WCAGChanging 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 1034Cache-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-ControlA 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 SRE03 / Field notes
Accessibility, CSS, security headers, observability, and interface design notes.
Name the values that should remain coherent, then let components consume those names instead of inventing local colors.
Design TokensCSP, framing controls, and permissions should describe the resources the application actually needs.
MDN CSPEvery interactive path should be reachable, visible, and understandable without a pointer.
WCAG keyboard guidanceRecord the context needed to investigate failures while keeping access, retention, and sensitive fields intentional.
OpenTelemetryField data reveals slow devices, networks, and interactions that a fast development laptop hides.
Chrome UX ReportDocument inputs, outputs, errors, and ownership so the next engineer can change a service with confidence.
HTTP Semanticsdontdaterobots.com publishes original web-development writing and small client-side utilities for people who design, build, review, and operate websites.