POSEIDON
Depth0 m
Pressure1.0 atm
Temp28.0 °C
Sunlight100%
ZoneSurface

1°21′N 103°49′E · Singapore

Poseidon Custom software for Singapore SMEs, shaped around how you work.

I’m Don, a developer in Singapore. Off-the-shelf software makes your team work around it. I build software that works the way your business already does, and because AI does much of the typing, I can change it in days when you need something new.

Scroll down to dive. The deeper you go, the more load-bearing it gets.

0–200 mThe sunlight zone

Software that fits your business, not the other way round.

Every SME works a little differently, and that difference is often your edge. Packaged software tends to sand it off. Here is what I build instead.

Off-the-shelf vs built around you

QuestionOff-the-shelf softwareBuilt around you
How it fitsYou change how you work to fit itIt follows how you already work
Your special casesWorkarounds and side spreadsheetsBuilt in. A-Tec’s mechanics tap picture buttons, because many don’t read English
When you need a changeAsk the vendor, then waitUsually done in days, because AI does much of the typing
Singapore detailsOften missingPayNow, COE and road tax, English and Chinese
Who you talk toA support queueThe person who built it

200–1,000 mThe twilight zone

Businesses already running on it.

Three Singapore businesses, three very different problems. Each one got software that works the way they do.

Car workshop & vehicle rental · since 2012

A-Tec Automotive

What they needed: one place for rental contracts, payments, fleet paperwork and the workshop floor, built around how a Singapore workshop actually runs.

  • Customers sign their rental contract on their phone and pay by PayNow QR.
  • Reminders before road tax, COE or insurance runs out.
  • A picture-button kiosk, so mechanics can log jobs without reading English.
  • Repair bills split between the insurer and the customer automatically.
  • Every morning, the owner gets an email of what needs attention.
  • Kept safe with continuous backups, and a full restore that has been rehearsed.

In daily use since July 2026 · nearly 300 updates since · I built atec.sg too

Engineer’s view · under A-Tec’s hood

Case study · A-Tec Automotive, Singapore · in production since July 2026

RFMS + WMS

Rental Fleet Management System and Workshop Management System: one Django codebase that runs two businesses.

  • 2,354commits since March 2026
  • 292production releases since July
  • 4,430tests (Django + Playwright)
  • v5.88and counting

Lines of test code vs application code

tests · 86kapp · 79k
Rental contract lifecycle, one explicit state machine: draft, held, signed, active, returned, closed, with renew, extend, amend and swap looping on active, and breach or cancel as exits. Draft Held48 h Signed Active Returned Closed Breach · Cancel Reopen renew · extend · amend · swap
Every contract change goes through one explicit state machine. The frozen signed snapshot is the legal record, and the PDFs are rendered from it.

Fleet & contracts

  • A six-step contract wizard with drafts and a 48-hour vehicle hold. Hirers sign in person, by remote link or online.
  • Deposits, split counter payments, credit notes, late fees and PayNow QR pay pages. Receipts can be voided but are never deleted.
  • Singapore compliance: road tax, COE and insurance expiry, ranked by severity.
  • Work orders with automatic downtime credit for hirers. Twelve reports, from P&L by vehicle to receivables aging, and a morning digest for the owner.
  • Every write is audited: who made it, where, and whether an AI agent did. Customer ID data is encrypted at rest.

Workshop

  • A picture-tile kiosk with PIN login for each branch, built for mechanics who don’t read English.
  • Colour-coded service intervals, so work that isn’t covered shows up red and gets charged.
  • Job cases billed to several payers (insurer and customer), parts and stock, supplier-invoice checks, and month-end invoicing that refuses to bill the same period twice.

How it’s kept upright

  • CI runs on real PostgreSQL on purpose, because SQLite silently skips the row locks that protect the money paths.
  • Gated deploys: a backup that is test-restored, a tag, a smoke test, a canary and a CDN purge. Rollback is one command.
  • Continuous point-in-time recovery (≈5 min of data at risk at most) and nightly encrypted dumps. A full restore has been rehearsed and takes about 40 minutes.
  • A stage environment restored from production on demand, because there is no QA team. There’s me.
  • Python 3.12
  • Django
  • DRF
  • PostgreSQL 16
  • Vanilla JS SPA
  • WeasyPrint
  • Playwright

atec.sg

Live

I built the company website too: a dark glass design, service tiles that play video on hover, interactive maps of the three hubs, and support for reduced-motion settings. It deploys from git and backs up the live site first.

Feng-shui & Chinese astrology consultancy

LZFS 靈珠風水

What they needed: precise charts and readings that clients can use themselves, in three languages.

  • A client portal and a staff workspace: BaZi, Zi Wei Dou Shu, Flying Stars, the Tong Shu almanac and I Ching readings.
  • PDF reports in English, Simplified or Traditional Chinese.
  • Calculations checked against reference tools. No personal data is stored.
  • Solar terms are solved to the minute (sun longitude plus bisection). Birth times are corrected for historical time zones: Singapore was UTC+7:30 before 1982.
  • Engines are cross-checked against reference tools, with 255 assertions. It runs entirely in the browser, so it keeps no personal data.
  • Vanilla JS
  • iztro
  • three.js
  • CF Workers

lzfs.win ↗ · this site lives on its domain

Crystal & silver jewellery brand

L’Claire

What they needed: a store that feels like the brand, and less admin after every sale.

  • An online store with WhatsApp checkout and a guide to 40+ crystals, live in about a week.
  • JewelStream, a desktop tool: photograph a handwritten sales bag and AI turns it into customer, item and price records, then invoices.
  • Its CSS design system (~3.8k lines) was written by hand with no framework. Designed, built and shipped in about a week.
  • Hand-off from phone to desktop: the desktop shows a QR code, the phone uploads, and the photo arrives live over server-sent events. Data is stored locally in IndexedDB.
  • HTML
  • CSS
  • Electron
  • React
  • Gemini
  • IndexedDB

lclaire.win ↗

Curious how all this is built?

1,000–4,000 mThe midnight zone

How we’d work together.

No sunlight reaches this deep, so everything here makes its own light. Your software will too: it should feel like it was made for you, because it was.

  1. 1

    We talk

    You tell me how your business really runs, including the messy parts and the workarounds.

  2. 2

    A first version, early

    Something useful arrives early, so your team can try it on real work instead of a slideshow.

  3. 3

    We shape it

    Tell me what’s annoying. Because AI does much of the typing, changes come back in days, not months.

  4. 4

    I look after it

    Backups, updates and monitoring are part of it. If something breaks, I’m the one who fixes it.

Hi, I’m Don.

I’m a developer in Singapore. I build software for small businesses, and in my spare time I build games, a Chinese learning app and tools for online communities. Side projects keep my skills sharp, and they are where I try ideas before they reach client work.

I work with AI tools that do much of the typing, which is how one person can build and look after this much. You deal with me directly, from the first chat to the day something needs changing.

I work AI-native. I write the specs and the tests. A fleet of AI coding agents (Claude, ChatGPT, Gemini, GLM) does much of the bulk work in isolated worktrees, and the test suite decides what ships. I own the whole stack: the interface, the data model, the deploy script and the server it runs on.

Everything on this page is real, and I wrote down how I measured it. The numbers come from git and the test suites, and the widgets further down read my live servers.

Engineer’s view · field rules

  1. 01

    Tests are the gate.

    Code lands when the suite is green. Green means the log file says green, not an agent’s summary of it.

  2. 02

    What’s live is a commit.

    Every deploy comes from git, so a rollback means “the previous commit”, never a guess.

  3. 03

    Backup first.

    Then deploy, verify and canary, in that order. I don’t skip a step to save time.

  4. 04

    Stale, never wrong.

    When a source fails, serve the last good value with an honest timestamp. Never make one up.

  5. 05

    Machines report, humans decide.

    PulseBot’s detectors can flag a scammer. Only a person can ban one.

4,000–6,000 mThe abyss

Strange creatures, made with care.

The things I build because I can’t help it: games, a learning app for kids, and tools that thousands of people in online communities use every day. Move your pointer quickly and the plankton will light up.

Games & apps

Bianjing Peddler 汴京小贩

Building

Run a Song-dynasty bun stall, one hand-painted day at a time.

A calm business sim set in 12th-century Kaifeng. You start with a pole basket at the Rainbow Bridge and work up to a shop. You set prices, batch sizes, charcoal and charity, while weather, fame, omens and rascals push back.

  • The whole economy is 31 engine modules with no DOM. They run headless under node --test, with ~1,070 tests.
  • Prices and wages come from written research on the Song economy. One design rule: every coin you spend is visible on screen.
  • PixiJS 8 with displaced water, seasonal day and night backdrops, an adaptive quality monitor and a priority-ordered asset streamer.
  • An AI art pipeline turns video clips into animated characters (cut into frame atlases), and text-to-speech voices the dialogue.
  • JavaScript
  • PixiJS 8
  • WebGL
  • node:test

395 commits in its first week

King of Kings: Ascendant

Building

A modern hex-tactics remake of a 1988 Famicom classic.

Turn-based hex strategy in the browser, with fog of war, kings to protect, and units that level up and evolve (15 lines, 45 forms) or fuse: Grand Knight + Dragon = Dragon Rider.

  • The rules, AI and map generator don’t touch the DOM. A test suite plays AI-vs-AI games across seeds, plus a win-rate balance sim per kingdom.
  • Honest AI: the computer only reacts to what its team can actually see.
  • Seeded, symmetric map generation with fbm terrain and heap-based pathing.
  • JavaScript
  • Canvas 2D
  • Web Audio

no build step · SHA-256 file manifest

Hanzi Hero 汉字英雄

Private

Gamified Chinese characters for Singapore primary schoolers.

It covers the P1–P6 curriculum through stroke-order practice, pinyin games, dictation, boss battles and a real-time “Hanzi Rush” mode. Companions evolve with XP.

  • Spaced repetition per character and per skill. Memory strength decays while a review is overdue, so “mastered” means you still remember it.
  • Hanzi Rush runs on a fixed-timestep, seeded loop outside React, so every game is deterministic and can be replayed.
  • Difficulty ramps up with look-alike characters (日 vs 目), not with speed. ~400 tests.
  • React 19
  • TypeScript
  • Zustand
  • Express
  • SQLite

Private for now: built for my son first.

4D & Toto Stats

Live

A statistics dashboard that updates itself after every draw.

Scrapers load each new draw into SQLite on the draw schedule. A Python API serves the history and analysis to a dashboard in English and Chinese.

  • Chi-square randomness tests, plus frequency, gap and pattern analysis.
  • v1.1 removed the AI “prediction” feature. It shows statistics and makes no promises.

Agent Kanban

Tooling

A local board that keeps my AI coding sessions in order.

It reads live session metadata and sorts each session into Inbox, Doing, Waiting on me, Parked or Done. A model then suggests which AI lane should take each new idea, and at what effort.

  • The routing policy is code: security- and production-sensitive work always goes to the strongest model. The board is read-only by design and only listens on localhost.
  • Node
  • Vanilla JS

Colony

Concept

An ant colony that a six-year-old can run with one finger.

Three designs, each built on a single verb: tap a song that schedules the workers, place, or trace. I researched them against SimAnt, Mini Metro and ScratchJr, and built a starter sim with no DOM.

  • JavaScript
  • sim engine

FareHawk

Experiment

An explorer for cheaper, unconventional flight routings.

It searches two fare APIs and compares hidden-city, positioning, split-ticket and cross-currency routings, with a toggle for each strategy.

  • React 19
  • Amadeus
  • Duffel

Plankton: small things that drift by

  • Agent Template A three-layer scaffold for AI-agent projects: SOPs, the agent, and deterministic scripts, with one rule set mirrored for every AI tool.
  • Motion studies Promo videos rendered in React with Remotion, 14 compositions in all.
  • PulseChain prices for Android A Kotlin and Jetpack Compose app that reads my price feed.
  • Math Adventure Game-style practice for P2 maths, with a number-to-words engine for 0–9,999.

Community tools · for the PulseChain crypto community

Bots, data feeds and browser extensions that run around the clock on my own servers. When they misbehave, I’m the one who gets paged.

Sonar: one blip per project. Hover over a blip to identify it, or click it to jump to the project.

Live from my feeds

This page is reading data.pulsex.win right now: the same feeds my extensions and bots use.

PulseChain gas · beats

  • slow…
  • standard…
  • fast…
  • rapid…

connecting…

Transactions since the fork

…

block …

Signed dApp manifest

verifying…

ECDSA P-256, checked with WebCrypto in your browser

PulseBot

Live

Self-hosted Telegram moderation with anti-scam detection.

One instance runs many PulseChain Telegram groups. It handles global bans, captcha gating, raid protection, a trigger engine and reputation, plus a Flask dashboard with role-based logins and a complete moderation log.

  • 12 detector plug-ins on a typed hook contract: lookalike domains and contracts, avatar clones, cross-chat echo, raid contagion and more. A broken plug-in is logged and skipped. Detectors report, and only a human tap bans.
  • Cross-chat /spam bans a user in every managed chat and sweeps their last 24 h of messages. It refuses to act on admins and established members, and every action can be undone from the log channel.
  • Five captcha modes, CAS lookups, admin-impersonation watch, /lockdown, /why explainers, and per-user dossiers built on 330k+ rows of imported moderation history.
  • ~1,620 tests, a pre-push hook and a written trust model. A new release ships almost every day.
  • Python 3.12
  • python-telegram-bot
  • Flask
  • SQLAlchemy
  • SQLite WAL
  • pytest

730 commits · v1.3.50 · since Nov 2025

PulseChain Info

Live

Explorer, analytics and learning hub, in 10 languages.

A React app with ~39 routes. It covers live network stats, token security checks, HEX stake lookups, a “Who Dumped” wallet analysis, an impermanent-loss calculator, a directory of 1,300+ projects and developer guides. It also has PulseTown, a 3D town with mini-games.

  • Combines Blockscout, DexScreener, Sourcify, the beacon API, batched JSON-RPC and four GraphQL subgraphs.
  • The homepage “heartbeat” is synced to real block times.
  • It is absorbing my older standalone tools: bridge status, gas tiers and the ProveX dashboard now live inside it.
  • Strict TypeScript (no any), jsx-a11y, ~208 tests.

Site Checker & Gas Estimates

Live

Two browser extensions and the signed feeds behind them.

Site Checker warns you when a PulseChain dApp’s IPFS build changes unexpectedly. Gas Estimates shows live gas tiers. Both read feeds that my services publish every block.

  • The manifest is ECDSA-signed, and its public key is pinned inside the extension. This page verifies it live in your browser (scroll up a little).
  • RPC failover across three endpoints. The single endpoint it replaced went down about 38 times a day.
  • Gas tiers are the next base fee plus the 20-block median tip at p25/50/75/90, all from one eth_feeHistory call.
  • Deploys from git with a preflight check, a backup, a 40 s health check and automatic rollback.

PulseX Whale Alerts

Live

Real-time big-swap alerts that ignore MEV and impostor tokens.

Polls the PulseX V1 and V2 subgraphs, merges multi-hop swaps per transaction, works out the net flow and USD value, and posts the big ones (plus big transfers) to Telegram.

  • Merge-first design that copes when one subgraph lags behind the other.
  • Skips circular arbitrage, and tells real tokens apart from twins that share a symbol.
  • I traced a leak that had grown to 1.04 GB of memory. It now runs in about 41 MB.
  • Python
  • GraphQL
  • Telegram API

77 commits · v2.4.1 · 95 tests

PLSX Price Bot

Live

Prices, charts and a chain-wide transaction counter.

A Telegram bot (/price, /volume, /ratio, /hexdaily…) plus two services. One renders a price card every five minutes. The other publishes the chain’s total transaction count, which you can see in the live panel above.

  • The counter can never go backwards. It rejects impossible values, caps jumps at chain capacity and holds the last good value on errors.
  • Atomic writes, so the web root is never briefly empty. 117 tests with the network mocked.

Older dives in the logbook

  • ProveX DashboardAnalytics for a 16.5k-transaction token launch. Rendering got ~10× faster. Now part of PulseChain Info.moved ↗
  • Bridge StatusHow long the PulseChain bridge is taking right now, from subgraph data. Now a widget on PulseChain Info.moved ↗
  • Gas TrackerLive gas tiers and prices that degrade gracefully when the upstream goes down. Now on PulseChain Info.moved ↗
  • Treasury TrackerETH balances across a watched set of wallets, fetched with batched Etherscan calls.archived
  • Validator Node ScriptsContribution: preflight checks, key-generation guards and beginner docs for a community validator installer.fork ↗

Curious how the lab is built?

6,000–10,935 mThe trench

The part you never see.

Software isn’t finished when it launches. This is the dull, important work that keeps it running while you get on with your business.

Engineer’s view · how code gets to production

  1. SpecA written task spec with the verifier inside it.
  2. CodeMe, or an AI agent working in an isolated worktree.
  3. TestGreen means the log file says green.
  4. ReviewRisky diffs get an independent AI review. Production and security changes get mine.
  5. BackupA fresh one, and actually test-restored.
  6. ShipPush first, then the server deploys a commit.
  7. VerifyHealth checks, a canary, and a one-line report.
  8. ↺ RollbackIs the previous commit.

Home server

Ubuntu on an Intel NUC running KVM. It hosts a Home Assistant VM with a passed-through Zigbee coordinator, and records the cameras in Docker.

Drive-health watch

Tracks the SMART attributes that Backblaze’s data shows actually predict failure, plus cable CRC errors, against a baseline, and alerts my phone.

Dead-man’s switch

The home server sends a heartbeat to an external server every five minutes. Fifteen minutes of silence and my phone rings. The channel can do nothing else.

3-2-1 backups

A Raspberry Pi and the home server each pull nightly encrypted production dumps. A year of them is kept, mirrored add-only to a RAID 6 NAS.

CI at home

A self-hosted GitHub Actions runner with native PostgreSQL, plus a cron CI that pings me on a failure and on the first green build after one.

Cloud fleet

A handful of VPSes, each built by one bootstrap script. Migrations are scripted step by step, and every change comes with its own rollback script.

This site

No framework, no dependencies, no build step, and no images. The ocean is a single WebGL fragment shader. Above the surface it raymarches a heightfield sea. Below it, light is absorbed channel by channel with depth (red first, then green), just as real water does. The fish are a boids flock, the plankton light up when disturbed, and each project emblem is a radiolarian grown from a hash of the project’s name. The render resolution adapts itself to hold 60 fps, and with reduced motion turned on the page keeps still.

Press ` for a terminal. Try help.

Curious how the plumbing is built?

10,935 mChallenger Deep

Questions people ask.

What kind of businesses do you work with?

Singapore SMEs whose way of working doesn’t fit a packaged system: workshops and rental fleets, consultancies, retail and e-commerce brands, education. If your team keeps a spreadsheet on the side because the software can’t do something, you are exactly who I build for.

Why not just buy off-the-shelf software?

Off-the-shelf software is built for the average company, so you end up changing how you work to fit it, and paying for features you never use. Custom software follows the way your business already runs, including the special cases that make you different from your competitors.

Isn’t custom software expensive and slow to build?

It used to be, because every line was typed by hand. Today AI does much of the typing, and thousands of automated checks catch mistakes, so made-to-measure software is within reach for a small business. We can start small, with one problem and one tool, and grow from there.

How long does it take?

It depends on the size. A brand website or online shop can be live in about a week; L’Claire’s was. A system your whole business runs on is built in stages: A-Tec’s first part went live about four months after we started, and it has had nearly 300 updates since.

Is software written with AI safe to rely on?

AI helps me work faster; it doesn’t decide what goes live. Every change must pass an automated test suite first (A-Tec’s has more than 4,000 checks), risky changes get a second, independent review, and I personally check anything that touches money, security or your live system.

Can it work with the tools we already use?

Usually, yes. I’ve connected PayNow QR payments, WhatsApp, Telegram, email, Excel uploads, GPS tracker reports and PDF invoices. If your team lives in spreadsheets today, we can start by bringing those in.

Can it be in Chinese?

Yes. I’ve built software in English, Simplified and Traditional Chinese: a feng-shui portal in three languages, a Chinese learning app for primary-school kids, and bilingual dashboards.

What happens after it goes live?

I look after it. Backups run automatically and I prove they work by restoring them, monitoring alerts me when something is wrong, and updates go out safely with a one-step undo. If something breaks, you message me, not a hotline.

Who will I actually be working with?

Me, Don. I’m a developer based in Singapore. You talk to the person who designs, builds and runs your system, from the first chat to the day something needs changing.

You made it to the bottom.

Few visitors get this far. If your business runs on workarounds, spreadsheets or software that almost fits, tell me how you work, and I’ll tell you what I’d build.

dev@lzfs.win