Tatang Haryadi

Chief Technology Officer

I fix technology programmes that are already late, then build the products and the teams that come after. A USD 3 million transformation delivered in nine months, after three years of not delivering. Social commerce scaled to 1.5 million monthly users across three markets. A global technology team of up to 50. I still read the diffs.

Portrait of Tatang Haryadi

Ask

Ask a question about my work and get the passages that answer it, ranked. Nothing you type leaves this tab, because there is no server to send it to. How it works, and what it deliberately is not, is in the colophon.

Or read the portfolio straight through, without loading anything.

Work

Four projects. Each title opens the detail in place, including what it cost and what it returned. With no JavaScript the same title is an ordinary link into the portfolio page, which is where that detail is written and where every fragment below is generated from. Nothing on this page restates a figure that lives there, because two copies of a number is one copy too many.

  1. Product Management

    Restaurant Technology Platform

    Point-of-sale, kitchen display and loyalty; an ESP32 and EMQX sensor layer running inference on the device; menu planning by retrieval over real product mix data.

  2. Technology Strategy Optimization

    Ghost Kitchen Startup

    A cost-structure problem before an engineering one: AWS to GCP, repurchasing ERP rather than carrying it across, GitHub Actions and Terraform and Go, and building capability in-house instead of buying it.

  3. Digital Transformation

    Multinational Retail Company

    A rescue that turned on scope rather than delivery speed: new WMS, legacy ERP kept for financials, omnichannel across e-commerce and point-of-sale and loyalty, then harmonising systems across three more markets.

  4. Applied AI

    Browser-Local Semantic Search

    The search at the top of this page. Built end to end rather than specified: a quantised transformer under WebAssembly, every byte served from this origin, and an exhaustive scan because the approximate index would be slower.

Read the portfolio in full

Colophon

What this page is made of and what a machine checks on every commit. The long version of all of it is in the repository, which is the point of writing it down.

Model
all-MiniLM-L6-v2, quantised to 8-bit ONNX
Runtime
ONNX Runtime Web on WebAssembly, one thread
Embedding
384 dimensions, L2-normalised, precomputed
Retrieval
Exhaustive cosine, no approximate index
Transfer
20.0 MB over the wire, 37.3 MB on disk, gzip
Inference servers
None. There is no backend to this site
First-party JavaScript
One module, js/ask.js. No bundler, no package manager
Build step
None. GitHub Pages serves the repository as written

How the search works, and what it deliberately is not

The library is Transformers.js. It, the runtime, the tokenizer and the weights are all served from this domain, which is what lets the claim above be literal rather than approximate: your question is tokenised, embedded and compared in this tab, and no network request carries it. One script here does come from a CDN, htmx, pinned to a version and a Subresource Integrity digest so the host cannot change what runs. It takes no part in answering.

It retrieves; it does not generate. What comes back is a passage I actually wrote, scored and linked to where it sits on the portfolio page. No language model writes prose about me here, so there is nothing that can invent a credential. The honest limitation: it answers "what did he do with IoT" well and "would he suit a fintech CTO role" badly, because the second is asking for a judgement and this only knows how to find the nearest paragraph.

What a machine checks, so you do not have to trust me

The interesting claim on a page like this is never the design, it is whether anything stops the design from quietly going wrong. Six checks run on every pull request, each catching a failure that is invisible on a page that loads cleanly.

  • The palette, written out in four files, cannot drift from the stylesheet that is its source of truth. Text contrast is held at 4.5:1 against the tighter of the two colour schemes.
  • The navigation, written out three times so the site works with no JavaScript and a crawler sees the links as content, cannot disagree with itself.
  • Every passage in the search index must still exist on the page it was generated from. Editing prose without regenerating the index retrieves worse and raises no error.
  • Every project detail in the index above must be exactly what the generator emits from the portfolio page, so the two cannot say different things.
  • Every fragment an interaction fetches must resolve, and every control that fetches one must keep its identifier. A missing fragment is a silent no-op on click, and a control that loses its identifier mid-swap strands keyboard focus.
  • The design tokens must still parse as design tokens, and a warning fails the build rather than only an error, because a warning means the file has started describing something no longer on the page.

Checks like these are not the only place this repository does real work rather than a demo of one. Grain hides a file inside a picture — real AES-256-GCM encryption behind a passphrase, not an obfuscation — entirely in your browser, with nothing uploaded.

On how this was built

A frontier model wrote most of the code here, and saying so is not the interesting part: in 2026 that is true of most pages, and a model asked for a personal site will hand back the same centred hero and the same carousel every time. This page had one of each until recently. The difference is not what the model can produce, it is what it is asked to hold itself to. Judge the repository, not the hero.