Skip to content
vhmns

Open for workTaking on web products, AI tooling and automation.

I build software small businesses actually run on — and dig into the layer underneath.

I'm a developer in Indonesia. Most of what I ship is the software a small business runs on day to day.

The job is rarely “build a website”. It is taking something a shop already does and making it work online: the price stated before anyone has to ask, opening hours that are true right now, an order that lands in the WhatsApp thread they actually read. That is the part that decides whether the thing gets used at all. And when a problem turns out to live further down — how a hash chains to the next one, what a token really costs across providers, what a contract can and cannot be made to do — I go down there rather than route around it.

Read the index

01–14

Index

14 entries, ordered by what they are worth looking at rather than by when they were made. 6 of them are client work. Every one links straight to the running thing or its source.

01WebClient work

Jadiin Rupiah

Used cooking oil, collected from your door and paid for on the spot.

A working business on a page: it buys used cooking oil from households, warungs and restaurants across Jakarta, Tangerang, Bekasi and Bogor, then passes it on to licensed facilities that turn it into biodiesel, bio-avtur, soap and candles.

The commercial terms are the first thing you see rather than something you have to ask for — Rp6.000-8.000 per litre, 15 litres minimum, free pickup, weighed in front of you, paid on the spot. An offer form and a WhatsApp thread are the only two ways in, because those are the two the sellers already use.

jadiinrupiah.com · Next.js · React · Tailwind CSS · Vercel

02ToolClient work

KitchenCy

HPP that is actually right, and a production plan that follows real sales.

A free assistant for small F&B businesses. It works out cost of goods properly instead of stopping at the price of ingredients, plans the day’s production from past sales patterns with AI suggestions on top, and tracks what is left over so it does not quietly end up as landfill.

The framing is deliberate: the pitch leads with waste, and treats the better margin as the side effect rather than the headline.

kitchencycle.vercel.app · Next.js · React · Tailwind CSS · Vercel

03ToolOwn project

Hermes Cost Tracker

A CLI that answers what an agent actually cost, across every provider it touches.

Agents rack up API spend quietly — the runaway cost problem. Every provider has its own dashboard, its own billing period and its own unit of account, so the one number that matters, what this agent cost me today, exists nowhere.

The tool logs every call’s token usage, computes the dollar cost from an editable pricing table and renders a dashboard over the lot. It speaks to any OpenAI-compatible endpoint, with rates for roughly twenty providers — OpenRouter, Anthropic, Nous Portal, Groq, DeepInfra, Together, Ollama and more — all editable in one JSON file rather than compiled in.

Two constraints shaped it. No dependencies at all, so installing a cost tracker never becomes its own supply-chain problem. And keys are read from environment variables or a git-ignored config, never committed.

github.com/vhmns14/hermes-cost-tracker · Python · Zero dependencies · CI

04WebClient work

Sijantan

Straight answers about vasectomy, with nothing kept about who asked.

Contraception in Indonesia is treated as the wife’s problem, and most of what men hear about vasectomy is wrong. This works through the myths one at a time — a quiz, articles, an AI you can ask directly, and a way to find a doctor when you are ready.

The privacy stance is the product decision, not a footnote: no account, no personal data, no saved history. Someone reading this page is doing it quietly, and the site is built so it stays that way.

sijantan.id · React · Vite · Tailwind CSS · Vercel

05WebClient work

ZFC.Idn

A geprek storefront that knows when it is closed.

Menu, cart, spice levels, delivery areas and branch locations for an ayam geprek business, with ordering handed off to WhatsApp and Grab because that is where the orders already come from.

The detail that matters on a food page: opening hours are live rather than printed. The header states whether it is open right now and when it closes, so nobody places an order into a closed kitchen.

zfcidn.vercel.app · Next.js · React · Tailwind CSS · Vercel

06WebClient work

Rill Kopi & Dessert

A Purwokerto coffee and dessert bar, orderable three ways.

Story, menu, locations and contact for a specialty coffee and dessert shop, with ordering through WhatsApp, GrabFood or ShopeeFood.

A deliberately different register from the other storefronts: quiet type, a lot of air, illustration instead of photography. A cafe and a fried chicken counter should not look like the same template, and here they do not.

rilldessert.vercel.app · Next.js · React · Tailwind CSS · Vercel

07ToolOwn project

Hermes Skill Audit

Scans agent skills for the things that should never have been in them.

Agent skills are user-contributed and largely unvetted — you install one from a hub and it runs with your shell and your keys. This scans a skill or plugin folder before that happens.

It looks for destructive commands, downloads piped straight into a shell, privilege escalation, obfuscation like base64-decoded eval, outbound POSTs that could be exfiltration, and prompt-injection text hidden in the skill’s own markdown. That last one is the interesting case: the attack is not in the code at all, it is in the prose the agent is about to read.

github.com/vhmns14/hermes-skill-audit · Python · Zero dependencies · CI

08OnchainOwn project

ProofOfHabit

Stake on a habit. Every day you miss, that day's share burns.

An agreement between you and yourself, witnessed by a chain. Name a habit, stake MON, set a term in days. Each day you check in onchain earns that day’s share back; each day you miss is sent to the dead address, beyond anyone’s reach including the author’s.

Settlement is pro rata rather than all-or-nothing: ten days with two missed returns eighty percent and burns twenty. The contract has no owner and no backdoor, which is the only reason the promise means anything.

proofofhabit.vercel.app · github.com/vhmns14/proofofhabit · Solidity · React · Vite · wagmi · WalletConnect · Zustand · Monad Testnet

09LabOwn project

Merkle Tree Visualizer

The structure that makes tampering visible, made touchable.

A Merkle tree is usually explained with a diagram you cannot touch. You can read that changing one leaf changes the root and still not feel why that matters, because the chain reaction is the whole idea and a still picture cannot show a reaction.

Edit a block and every hash above it recomputes with real SHA-256. Click a leaf and it marks the sibling hashes that make up its Merkle proof, then replays them step by step to show they reconstruct the same root. Odd levels duplicate the last node the way Bitcoin does, and the padded node is drawn dashed rather than hidden.

The demo further down this page is the same idea rebuilt for this site, with a synchronous hash so the whole tree can be recomputed on every keystroke.

merkletree-visualizer.netlify.app · github.com/vhmns14/merkle-tree · JavaScript · Web Crypto SHA-256

10GameClient work

Airline Tycoon

Found an airline, pick a hub, try to keep it solvent.

A management sim in the browser: name the airline, give it a slogan, an emblem and two brand colours, choose a home hub from real airport codes, set a difficulty, then run real-time flights, map cargo and fleet operations from there.

An economy is a system, and the fastest way to understand one is to build a small one and watch where it breaks.

airline-tycoon-six.vercel.app · github.com/vhmns14/airline-tycoon · TypeScript · React · Vite · Tailwind CSS · Zustand

11WebOwn project

Invoice Generator

Invoices with a live preview and a PDF at the end, and no backend anywhere.

Up to five business profiles, each with its own logo and invoice counter. Line items total themselves, tax and discount are editable, and the preview sits beside the form on desktop and behind tabs on mobile. Status runs Draft, Sent, Paid — and flips to Overdue on its own once the due date passes.

Everything lives in the browser’s localStorage, which is the whole design: no account to make, no server to trust with someone’s client list, and the A4 PDF is rendered on the same machine that typed it. Finished invoices can be shared as WhatsApp-ready text or exported to CSV for a spreadsheet.

invoice-generator-nine-kappa.vercel.app · github.com/vhmns14/invoice-generator · React 19 · Vite 8 · Tailwind CSS 4 · jsPDF · html2canvas-pro

12ToolOwn project

Agent Log Redactor

Strips secrets and personal data out of agent logs before they reach a commit.

An agent workspace quietly fills up with things that must never be pushed: API keys in debug output, email addresses in transcripts, home directory paths in memory files. One careless git add . and it is public permanently.

This masks them first — provider keys for OpenAI, Anthropic, OpenRouter, GitHub, Google, Stripe, AWS, Slack and Telegram, plus JWTs, SSH private keys and bare KEY=secret assignments, alongside emails, IP addresses, card numbers and /home/... paths. Extra patterns can be added on the command line, and a --fail exit code turns it into a CI gate rather than a thing you have to remember to run.

github.com/vhmns14/agent-log-redactor · Python · Zero dependencies · CI

13ListOwn project

Free AI API Tiers

Which AI providers are actually free, kept honest by a weekly check.

A curated list with a strict definition: free means a recurring tier that resets, not a one-off coupon that evaporates in thirty days. Promotional credits are labelled as promotions rather than folded into the same column, and every row carries the date it was last verified.

The table in the README is generated from a single JSON file by a Python script, and a scheduled GitHub Action re-checks the links and rebuilds it. A list like this is worthless the moment it goes stale, so the maintenance is automated rather than promised.

github.com/vhmns14/free-ai-api-tiers · Python · JSON · GitHub Actions

14ToolOwn project

gwt — Git Worktree Manager

One directory per branch, without the ceremony that usually comes with it.

Working in a single tree means a constant churn of stashing and checking out whenever a feature and a PR review want your attention at the same time. Git worktrees fix that by giving each branch its own directory, but the built-in commands are wordy enough that most people never adopt them.

gwt shortens the whole loop: add a branch and its worktree in one command, list everything with dirty and locked status, jump in by name, see the status of every worktree at once, open one in your editor, and clean up the worktrees whose branches are already merged. Shell hooks make the jump an actual cd rather than a subshell.

github.com/vhmns14/git-worktree-manager · Python 3.10+ · Zero dependencies · MIT

Scope

What I can do

Grouped by the kind of work rather than by tool. Every line names the projects it comes from — nothing here is a skill I have only read about.

  • Storefronts

    Sites a shop can actually trade on: menus and catalogues, carts, opening hours that are true right now, service areas, and ordering handed to WhatsApp, Grab or ShopeeFood rather than a checkout nobody uses.

    Next.js · React · Tailwind CSS · Vercel

    ZFC.IdnRill Kopi & DessertJadiin Rupiah

  • Product & tools

    Software with accounts and state behind it, not just pages: costing that has to be arithmetically right, planning that follows real sales history, and data normalised across sources before anything is compared.

    Next.js · React · Python · Vite

    KitchenCyInvoice Generator

  • AI in products

    LLM features that earn their place — an assistant answering in the product, suggestions drawn from a business's own numbers — plus the unglamorous side: tracking what the tokens cost and auditing what an agent is about to run.

    OpenAI-compatible APIs · Python · Prompt-injection scanning

    SijantanKitchenCyHermes Cost TrackerHermes Skill Audit

  • CLI & automation

    Small command-line tools that do one job and install without dragging a dependency tree behind them — cost tracking, secret redaction, skill auditing, worktree juggling — with exit codes meant for CI gates and scheduled jobs that keep data from going stale.

    Python · Zero dependencies · GitHub Actions

    Hermes Cost TrackerHermes Skill AuditAgent Log Redactorgwt — Git Worktree ManagerFree AI API Tiers

  • Onchain

    Contracts and the front ends that talk to them: wallet connection, transaction flows, and settlement rules written so they cannot be quietly overridden — no owner, no backdoor.

    Solidity · wagmi · WalletConnect · Monad Testnet

    ProofOfHabit

  • Systems

    The layer under the framework: hashing and tree structures, proofs, and implementations checked against a reference rather than assumed correct.

    SHA-256 · Merkle proofs · TypeScript

    Merkle Tree VisualizerAirline Tycoon

Fig.

Take apart a Merkle tree

Add, edit or delete a leaf. Every hash above it is recomputed and the path from that leaf to the root lights up. That chain reaction is the entire reason a chain cannot be quietly edited: change one byte at the bottom and the number at the top stops matching.

Root

37f6a56851365b14f4034fbfaaa613e4cb42d2d23b3cd2d0540053e1752baecb

Leaves

3/12
54deede94d792b7845117faadb42d88d5e078848ffd0a05ae8db4fb4964d8ad354deed…#1bc6b000636c401dd81526b37d07101b9b30e5e7da61b7e94d93011c97f77fe04bc6b00…#21e1519739bb411e674d8314816ec56bc30a1d20ed9602c2d723b975dadee843d1e1519…#31e1519739bb411e674d8314816ec56bc30a1d20ed9602c2d723b975dadee843d1e1519…1d9cbebf77e952a0eb9d77a590ee59feb540dabaeb201d4d0ed3b2cbf438b5d31d9cbe…5951fb31941a4f98d68ec1da04206a269d325cb9ef896b3ba1474d5409fc15035951fb…37f6a56851365b14f4034fbfaaa613e4cb42d2d23b3cd2d0540053e1752baecb37f6a5…
  • affected path
  • proof siblings
  • duplicated (odd count)

Select a leaf to trace its path to the root.

Figure — Merkle tree, SHA-256, rebuilt on every keystroke

@

Contact

Open to work on web products, AI tooling and automation. Happy to talk about anything above.