Portfolio iconElysCom
✍ Blog

Articles & Thoughts

Exploring ideas in web development, design systems, and software engineering.

A restore that exits 0 has answered one question

Last month's drill proved a backup could be restored. This one proved the data was right: an outside heartbeat so the backup monitor reports its own outage, then a restore test that compared the copy with live staging — every table by content hash, old encrypted customer data decrypted to the same digest, and the restored app giving byte-identical answers. Plus the 74 minutes I broke my own monitoring while testing it.

·14 min read
→

Booking and More — Útmutató a vállalkozás adatainak kitöltéséhez

Hogyan írja meg a vállalkozás bemutatkozását, a szolgáltatásleírásokat, a foglalási szabályokat és a gyakori kérdéseket úgy, hogy az ügyfelek — és a nekik válaszoló AI-asszisztens — pontos, ellenőrizhető információt kapjanak. Kitöltési mintákkal, ellenőrzőlistákkal és másolható FAQ-prompttal.

·8 min read
→

Booking and More — Guide to Completing Your Business Information

How to write your company profile, service descriptions, booking policies and FAQ so that customers — and the AI assistant answering them — get accurate, verifiable information. Templates, field checklists and a copyable FAQ-drafting prompt included.

·9 min read
→

A backup nobody has restored is a hypothesis

A few weeks after writing that a backup nobody has restored is a hypothesis, I stopped hedging: independently stored encryption keys, images rebuilt from source, a database and Redis restored on a Hetzner VPS that had never heard of this app, and a real HTTPS login in an actual browser — two hours and ten minutes from provisioning to a working session.

·11 min read
→

Two editors, one diary

How to stop a receptionist and a doctor from silently deleting each other's work — the bug, the two-step fix, the race the first fix didn't close, and the checklist to steal.

·15 min read
→

Connecting pgAdmin through an SSH tunnel — and landing in the wrong database

pgAdmin connected on the first try and showed me a server with no tables in it. Nothing was broken: on a Coolify VPS every application brings its own PostgreSQL, they all answer to the user postgres, and a successful login tells you almost nothing about which one you reached.

·12 min read
→

Deploying a multi-tenant booking SaaS: what a real customer actually needs

A customer said yes, and asked what they need to install. Nothing — which turns one question into two: deploy the platform once, then onboard them through the product. This is the whole path, including the three failed deploys and the CERT-Bund report that reordered the steps.

·28 min read
→

Hardening a Hetzner VPS: SSH keys, a cloud firewall, and four traps

A port scan of my own server came back with PostgreSQL and the Coolify dashboard open to the internet. Closing them took an afternoon; the SSH key that was supposed to be the easy part took considerably longer, and cost me a lesson about a single hyphen.

·16 min read
→

The queue is disposable: what a Redis worker actually bought us

A background worker and a Redis queue added no visible feature. What they added was the ability to keep promises the system had only been making.

·15 min read
→

Encrypting Patient Data When the Server Must Not Hold the Key

Field-level AES-256-GCM with clinic-held keys, blind indexes, a canary against wrong keys, age-encrypted backups the server can't read, and what a disaster-recovery fire drill actually taught us.

·13 min read
→

TurboRepo workflow that leverages both Antigravity/Agent Kit and Claude Code together.

How to create a consistent workflow to develop a Turborepo app with React/NextJS, Fastify, BetterAuth, Prisma, PostgreSQL, Tailwind v4, and Shadcn/ui stack. Be aware that Claude Code has overlapping tools with Antigravity.

·10 min read
→

Configure Claude Code within Antigravity

With this setup, Claude Code in Antigravity will understand your Next.js 16.2.1, Prisma, PostgreSQL, Tailwind v4, and shadcn/ui stack – and follow your rules consistently across sessions.

·10 min read
→

Multilingual Voice App

# Crafting the Ultimate Retell System Prompt for Your Multilingual n8n Voice App So, you're building a voice AI agent with **Retell AI** and orchestrating the backend with **n8n**. You've got the webhooks set up, the nodes connected, and the LLM is ready to roll. But there's one piece of text that will make or break your user experience: **The System Prompt.** If you're building a multilingual application, the system prompt isn't just a set of instructions; it's the architectural blueprint for your agent's brain. A weak prompt leads to broken language switches, robotic tone shifts, and confused users. Here is how to structure a comprehensive, production-ready system prompt for a multilingual Retell agent integrated with n8n. ## The Architecture of a Multilingual Prompt A robust prompt for this stack needs four distinct layers: 1. **Core Identity & Immutable Rules** 2. **The Language Matrix** 3. **The Data Injection Layer (The n8n Bridge)** 4. **Retail-Specific Guardrails** Let's break each one down with a concrete example. We'll build a prompt for a fictional "Global Travel Support" AI. --- ### 1. The Core Identity (The "Who") Start by anchoring the AI. This prevents the LLM from drifting into generic assistant territory. ## CORE IDENTITY You are "Nova," a senior customer support specialist for "Global Travel Support." Your tone is professional, empathetic, and efficient. You are not a salesperson; you are a problem solver. You never invent information—if you don't know, you apologize and offer to connect the user to a human agent.

·6 min read
→