Full stack developer, writer, and lifelong learner.
I’m Rama, a backend-leaning full stack developer based in Magetan, East Java. I build and tune enterprise web systems at PT Javan Cipta Solusi — mostly Laravel, lately a lot of TypeScript and Java — and I write here about technology, AI, and the habits of thinking that make us better at both.
[email protected] shipped on 31 August and I moved five apps off beta.5 the next morning. The bump tripped two wires: my own npm minimum-release-age guard, whose failure mode looks like a missing version, and a createAssetServer rename (fileMap → mounts, allow → allowFiles) that crashed every server on boot. Plus the uncomfortable lesson of five green test suites with zero tests — and the two-curl smoke check that actually caught the breakage.
Answering a comment on one of my reels: my technical explainer videos aren't edited in CapCut or Canva — they're compiled. Declarative JavaScript scenes drawn by a Canvas 2D engine, captured with Playwright/Chromium, assembled by ffmpeg, then narrated with an ElevenLabs eleven_v3 voice-over fitted to the engine's timing. Plus an automated verifier that tests hooks, durations, collisions, and loops via pixel diff.
Codex, ChatGPT Work and Workspace Agents share one rolling 5-hour + weekly pool; regular ChatGPT chat does not. My four content-production agents were on the wrong side of that line — 170M tokens a month against the Codex pool. Where to check usage, when limits actually reset, and the move that fixed it: the same agents in ordinary chat, with a self-hosted MCP server doing the work.
An OpenAI engineer published a three-step recipe for pointing Claude Code at GPT-5.6 Sol, and it works. After running it as a daily driver: why a settings profile beats an alias, why a model name is a runtime capability rather than config, and how an unbounded subagent fan-out emptied a weekly quota in half a day.