DEV Community

Cover image for Dev Log: 2026-07-16
Nasrul Hazim
Nasrul Hazim

Posted on

Dev Log: 2026-07-16

TL;DR

  • Rewrote a product's landing-page differentiators to only keep claims a rival can't copy — its own post today.
  • Made two server installers genuinely end-to-end and resumable, and taught them to probe SSH before doing any work.
  • Handled a Cloudflare-proxied origin so the installer talks to the real box, not the edge.
  • Fixed a Laravel cache config to use CACHE_STORE, and documented Redis ACL (username + password) auth.

Differentiators a rival can't copy

Most of a landing page's "differentiators" turned out to be claims any competitor could paste verbatim. I rewrote them to keep only structural, checkable facts, and redrew two diagrams to state their argument literally instead of hiding it in a metaphor. Full write-up in its own post today — the short version: if a rival can say it too, it isn't a differentiator.

Installers that survive being run twice

Spent the evening on provisioning scripts for a fresh server (a dedicated analytics database plus an API deploy). Two lessons worth keeping.

Resumable beats "run once, pray." An installer that dies halfway and leaves you with a half-built box is worse than no installer. The fix is to make every step idempotent — check whether the thing already exists before creating it — so re-running picks up where it left off instead of tripping over its own earlier work.

Probe before you provision. The script now checks SSH connectivity up front, before it starts changing anything. Failing fast on "I can't even reach this host" is far kinder than failing on step 14 with a half-configured server.

The Cloudflare-proxied origin trap

The API host sat behind a Cloudflare proxy, so the name resolved to Cloudflare's edge, not the origin box. An installer that SSHes to "the domain" ends up talking to the wrong thing entirely. Lesson: when a host is proxied, the deploy path needs the real origin address, not the public DNS name. Obvious in hindsight, a confusing 20 minutes in the moment.

Laravel: CACHE_STORE and Redis ACL

Small but worth noting. Laravel renamed the cache env var to CACHE_STORE (from the older CACHE_DRIVER); a config was still keyed off the old name, so the intended store wasn't being picked. Fixed the reference and documented the Redis setup alongside it — modern Redis supports ACLs, so auth is a username and password pair, not just a password. If you've only ever set REDIS_PASSWORD, that's the bit that bites you when the server enforces ACLs.

That's the day: sharper positioning copy, tougher install scripts, and two config gotchas documented so future-me doesn't rediscover them.

Top comments (0)