Digital Transformation
Turning manual, paper-and-spreadsheet operations into lean digital systems that people actually use.
Medical by education · Tech & business by blood and brain
I help teams and ventures turn manual, messy operations into AI-assisted, automated systems — pairing domain rigor with an engineer’s toolkit to bridge healthcare, software and business.
I work at the seam between medicine, software and business.
I come from a medical field by education — years in a world where precision is non-negotiable and every decision is checked, documented and accountable. But I’m a technology and business enthusiast by blood and brain: I taught myself to build software and found the same instincts translate directly — systems should be correct, legible and safe to change.
Today I help teams and early ventures adopt AI, automation and digital transformation — mapping manual workflows to lean digital systems, and building products that close real-world gaps, driven by a simple belief: the best solutions come from people who understand both the problem and the technology.
Turning manual, paper-and-spreadsheet operations into lean digital systems that people actually use.
LLM-powered workflows, agents and integrations that remove busywork and surface better decisions.
Deep domain understanding meets product thinking — technology built with the field, not just for it.
From first prototype to reliable, maintainable systems — shipped on modern cloud infrastructure.
A live suite of genuinely useful tools — built into this page, free for anyone to use. A small demonstration of the kind of practical software I like to build.
Exploring a project, an idea, or a collaboration? Close the circuit and my address is yours.
Not your kind of puzzle? Slide to bypass — the board wires itself, a different way every time.
Times come from your browser's Intl API reading the IANA timezone database — the same source servers and OSes use. Daylight saving shifts (AEST→AEDT, half-hour zones like Adelaide +9:30, even Eucla's +8:45) are applied automatically for the exact date you pick.
Search ranking: exact word > word prefix > substring > in-order letters (catches typos like sydny). Try city, country or code.
The converter treats your chosen time as wall-clock time in the source zone, converts to a universal instant, then re-renders it in every pinned zone.
Uses Cloudflare’s public speed endpoints. The Start button runs up to 1 minute by default (auto-stops sooner once readings stabilise) — raise the max or use a stress preset (5–30 min) for longer runs. Long stress runs can move several GB of data. Keep this tab focused for accurate numbers.
Download: 25 MB streams pulled from Cloudflare's nearest edge; the instantaneous rate is sampled ~8×/second from the byte stream. Upload: POSTs that grow from 1 MB to 8 MB until your link saturates.
Auto duration: the test stops early only when the variation of the last 20 samples stays under 5% for 2.2s — i.e. the reading genuinely converged. Otherwise it runs to the cap.
Latency = round-trip of a 1-byte request. Jitter = average change between successive pings. Bufferbloat = latency measured while downloading ÷ idle latency — the number that ruins video calls on “fast” connections.
Route: your IP/ISP from ipapi.co, the edge datacentre (colo) and request ray IDs from Cloudflare's own trace headers. Browsers can't run raw traceroute; this is the honest approximation.
Retailer’s pricing workbench. Every number is editable — change any one and the rest re-balance instantly (the formula each field follows is written under it). Fields also accept maths, e.g. 1200*1.18.
Effective rate = purchase rate − wholesaler discount. That's your true buying price per billed unit.
Free quantity doesn't change what you pay — it changes what you receive. The same total investment spreads over qty + free units, so effective cost/unit = total ÷ (qty + free). That's why free stock silently widens your margin.
GST: within a state, tax splits equally as CGST + SGST; across states it's charged as IGST alone. Same total either way — which is why this tool treats IGST = CGST + SGST and back-solves whichever side you edit.
Two margins: profit % here is margin on cost (profit ÷ cost). The donut shows margin on selling price (profit ÷ sell) — retailers quote the first, accountants the second. Know which one you're being quoted.
Everything runs in your browser. Numbers never leave this page — share links carry them only inside the URL itself.
What you actually keep from a sale, after every cost, fee and tax. Fill the boxes top-to-bottom — each one explains itself — and read the plain-words answer below.
The waterfall reads left to right: revenue − tax − goods − running costs − fees − deductions = what you keep.
Two tax types, two behaviours. GST included in price: the tax lives inside what the customer pays — your real revenue is price × 100 ÷ (100 + rate), and GST is due on every sale, profit or loss. Example: sell at 3500 with 5% GST → 3333.33 is yours, 166.67 is the government's; with goods at 1300 you keep 3500 × 100/105 − 1300 = 2033.33. Income tax: charged on the profit that remains after all costs — and only if it's positive; you don't pay income tax on a loss.
Fees are a % of revenue (card/marketplace charges scale with the sale). Everything else is an amount for this sale or order.
Gross margin = what's left after goods alone. Net margin = what's left after everything. A healthy gross with a weak net means your overheads — not your pricing — are the problem.
Every unit converts through a base unit (metre, kilogram, litre, second…): value × factor-in ÷ factor-out. One table of factors, zero rounding chains.
Temperature is the exception — scales have different zero points, so it uses offset formulas (°F = °C × 9/5 + 32), not factors.
Data distinguishes decimal (KB = 1000) from binary (KiB = 1024) — the gap disk makers and operating systems argue about.
Expressions are parsed by a hand-written recursive-descent parser — no eval(), so nothing you type can execute as code. Operator precedence and parentheses work like maths class.
DEG/RAD changes how trig reads angles: sin(90) = 1 in DEG, sin(π/2) = 1 in RAD. History is stored locally in your browser only.
The editor is contenteditable, so pasted text keeps its bold/italic/links, and case changes walk the text nodes underneath — formatting survives conversion.
Copy (keep formatting) writes both text/html and text/plain to the clipboard via the async Clipboard API, with a selection-based fallback for older browsers. Paste into Docs/Word keeps styling; paste into a code editor gets clean text.
Your everyday health numbers, interpreted in plain words. Everything runs in your browser — nothing is stored or sent anywhere.
BMI = weight ÷ height² (kg/m²), shown against both WHO cutoffs and the lower Asian-Indian cutoffs (23 overweight / 25 obese) that better predict metabolic risk in South-Asian bodies. BMR uses the Mifflin-St Jeor equation; TDEE multiplies it by your activity level. Ideal-weight range = BMI 18.5–24.9 for your height (Devine formula shown for reference).
Blood sugar bands follow the American Diabetes Association: fasting <100 / 100–125 / ≥126 mg/dL; 2-h post-meal <140 / 140–199 / ≥200; HbA1c <5.7 / 5.7–6.4 / ≥6.5%. eAG (estimated average glucose) = 28.7 × HbA1c − 46.7. mmol/L = mg/dL ÷ 18.
Blood pressure categories follow ACC/AHA 2017: normal <120/80, elevated 120–129/<80, stage 1 130–139 or 80–89, stage 2 ≥140 or ≥90, crisis ≥180 or ≥120.
Heart-rate zones: max HR estimated by Tanaka (208 − 0.7 × age); with a resting HR the Karvonen method scales zones to your heart-rate reserve. Sleep plans backwards/forwards in ~90-minute cycles plus 15 minutes to fall asleep. Water is the common 33 ml/kg guide — climate, pregnancy, kidney or heart conditions change it.
One number never tells the story — trends and context do. Use these as conversation starters with your clinician, not conclusions.