A follow-up on the double-click-to-confirm button component, now rebuilt as a ViewComponent with a Stimulus sidecar controller. Shows how overlapping text with CSS grid keeps the button width stable during the confirm animation, plus a caveat about long confirmation strings.
Inspired by a confirm-by-double-clicking pattern seen in CasaOS, this post recreates it with a small Stimulus controller. It swaps the button text on first click and submits on the second, then adds stimulus-use's clickOutside to cancel the pending confirmation.
Clears up a common Traefik misconception: you don't need new entrypoints to expose extra services like Grafana on a subdomain, just new routers and services. Walks through enabling the internal API dashboard and the routing rules that connect a Host rule to a Docker service.
A two-server Kamal deployment on Hetzner: one exposed web server, one locked-down accessories server for Postgres, Redis, and backups, reachable only via SSH jump host. Covers the Terraform setup for provisioning, splitting background jobs by priority, and configuring Traefik for automatic SSL.
Uses dry-validation to turn a Service Object's loose params hash into an explicit, self-documenting contract with typed, required/optional fields and business rules. Also covers custom dry-types, coercion, and how this compares to Sorbet.
Explains how the GVL still allows I/O-bound work to run in parallel via concurrent-ruby's Future, and how to safely combine it with Rails' Executor. Covers wrapping threads in executor.wrap and using permit_concurrent_loads to avoid autoloading deadlocks.
How to verify Mandrill's X-Mandrill-Signature header in a Rails controller by HMAC-SHA1 signing the webhook URL and raw POST params. The key gotcha: you must use request.request_parameters, not Rails' parsed params, since Mandrill signs the raw mandrill_events string.
Argues that ActiveRecord getters/setters aren't real encapsulation, since callers still need to know about an object's internal fields to mutate it. Proposes using DDD's Aggregate pattern so that all state changes happen through the owning model instead of leaking into other classes.
Building an Untappd clone in Kotlin and Spring to explore event sourcing and CQRS. Covers organizing code into independent domains connected only through events, dispatching events via AbstractAggregateRoot, and the eventual-consistency trade-offs that come with async listeners.
A walkthrough of deploying a Eureka server, a Hystrix dashboard with Turbine, and a microservice to a Kubernetes cluster. Covers Dockerizing each Spring Cloud Netflix component, exposing them with kubectl, and verifying the circuit breaker under load with siege.
Refactoring a bloated login controller in a Rails side project (Chathub) by extracting single-purpose Command classes and a Service object to tie them together. Discusses the resulting testability gains and the coupling issues still left to fix.
Fourth part of the Netflix OSS series, adding Hystrix circuit breakers to a microservice and aggregating their streams with Turbine. Wires up a combined Hystrix Dashboard/Turbine app and watches the circuit state change as instances scale up.
Third part of the Netflix OSS series, adding Zuul as an edge server to route and load-balance requests across microservice instances. Shows the Zuul route configuration and tests it with curl against a scaled-out contacts-service.
Second part of the Netflix OSS series: registering a microservice with the Eureka server built in part one. Covers the @EnableDiscoveryClient annotation, the client-side eureka.client configuration, and confirming the service shows up in Eureka's dashboard.
First part of a series introducing the Netflix OSS microservices stack, starting with Eureka, the service registry. Walks through generating a Spring Boot project, configuring application.yml, and enabling the server with @EnableEurekaServer.