Afteroffice Studio ID
ENTRY 020 Technical appendix

This page is written for you, not for your boss.

If you've been asked whether this person is safe to work with, this is what you usually want to know. I've written it plainly, including what isn't sorted.

Recorded by
Ihsan Nugraha
Checked
6 Aug 2026, 17:17 WIB
How to verify
Ask to see any repository before deciding
Recorded by
ENTRY 021

What runs, and where

Everything I build runs on a single VPS I operate myself — not a serverless platform that changes its pricing, and not a hosting account I don't hold root on.

Reverse proxy & TLSCaddy, automatic certificates, separate per-project configuration
Application processesPM2 for Node services, Docker Compose where full isolation is needed
DatabasesPostgreSQL in Docker for anything substantial; SQLite where genuinely single-writer
Operating systemLinux, automatic security patching, SSH key access only

If you'd rather everything ran on your own infrastructure, that works too — and for the long term it's often the better call.

ENTRY 022

How a service gets exposed

The rule is the same across every project, and this is usually your first question:

Application servicesbind to 127.0.0.1, never to 0.0.0.0 on the host
Docker containersports mapped as 127.0.0.1:PORT, not opened publicly
The only public doorCaddy, on 80 and 443
Firewallenabled, with explicitly opened ports
Anything that can execute commandsauthentication required, no exceptions
Secretsin environment files on the server, never committed to git

A service binding to 0.0.0.0 inside a container is correct and has to be that way — the restriction belongs in the port mapping, not the application code. I mention it because the distinction is a common source of confusion.

ENTRY 023

Deployment

No manual step exists only in my head. Every project carries its own deploy command, recorded in its repository.

Source of truthgit, on the server too — not only on my laptop
Releaserebuild the image, rather than copying files into a running container
Rollbackreturn to the previous commit and rebuild
Schema changesrecorded migration files, not pushing schema directly

Copying files into a running container is faster, and I used to do it. The consequence was a container being recreated for an entirely unrelated reason, taking 15 fixes with it. That approach isn't used any more.

ENTRY 024

Backups, and proof they restore

Having a backup file is not the same as having a backup. What I do is prove it:

Frequencydaily database dumps, automated
Destinationoff-server cloud storage, with rotation
Verificationthe dump is downloaded and restored into a temporary database separate from production
Pass criteriarow counts on the main tables compared against production until they match

Restores are tested into a separate container and never touch production. The test container is destroyed afterwards.

ENTRY 025

When something goes down

An automated check calls every URL and records the response code. The catalogue on this site reads that same result, including when it's bad.

As this was written, several projects I'd marked live were returning 502. They stay in the catalogue. Hiding them would make every other number on this site worthless.

ENTRY 026

Source code, and what happens if I disappear

This gets asked up front least often, and matters most.

Code ownershipagreed in writing at the start, not at the end
Repositorycan live in your own git organisation from the first commit
DocumentationREADME, architecture notes, and deploy steps written as part of the work
Handovera session with your team, with enough written down to continue without me

If this arrangement ends, your team has to be able to carry on. If they can't, my work wasn't finished.

ENTRY 027

On AI, answered directly

This is usually the biggest technical objection, so here it is without hedging.

Is the code written by AI with nobody understanding it?

I read and take responsibility for every change that lands. If I don't understand a piece, it doesn't ship. Some of the hardest bugs in my case entries were found by reading code and system output, not by asking an AI to guess.

Is our data sent to an AI provider?

No, unless that's the actual feature and you've agreed to it. For AI features I keep what's sent to the minimum — on one project, personal information was deliberately kept out of prompts until there was explicit approval to include it.

Which model provider do you use?

Chosen per case — Anthropic, DeepSeek, or others — based on cost, quality, and where the data is allowed to live. For your work, that's a decision we make together at the start, not one I make alone.

Will this become a burden on our team later?

That's a real risk, and the answer isn't a promise. It's code that reads sensibly, a recorded schema, sufficient documentation, and a handover that actually happens. Ask to see any repository before deciding.

ENTRY 028

Where I'm the wrong choice

This list exists so you don't have to discover it halfway through a project.

  • 24/7 operational support with layered SLAs — I'm one person, and that can't be promised.
  • Formal compliance certification, ISO audits, or regulatory work requiring an institutional process.
  • Deep integration into large enterprise systems needing months of cross-vendor coordination.
  • A large team working parallel tracks against the same deadline.
  • Work requiring access to sensitive personal data at scale without a clear data-processing agreement.

If your need is on this list, you'll hear it in the first conversation. For some of them I can still help with the front half — shaping it, building the first version, then handing it to the team or vendor better suited to carry it.