Today’s mission

AI may draft the sentence — a human owns the taxonomy, the boundary and the number

Fewer than one in ten answers came from an open-ended model call. Most of the work is a fixed taxonomy that AI applies and a human audits.

🗂️

Screen

Apply a fixed taxonomy to thousands of documents and return who counts. Rule-based first; AI reads the edge cases.

Fixed rule · AI edge cases
🔎

Extract

Turn screenshots, transcripts and share links into structured rows. Vision + parsing, human confirms.

Vision · Human confirms
✍️

Draft

Write the next artefact from a real source file — minutes, briefs, slides. Facts corrected before anything is sent.

Source file · Facts checked
🛠️

Build

Stand up the dashboard, Worker or pipeline that holds the result. Agent writes code; tests and browser checks decide.

Agent codes · Tests decide
The same four moves run through all seven projects: screen, extract, draft, verify.

The portfolio

Seven projects, one working method

Different domains, the same discipline: a fixed taxonomy, a structured row, a drafted artefact, and a check a reviewer can repeat.

ProjectWhat was builtScale
NTU course mapModules coded for sustainability + entrepreneurship1,780 modules
SkillsFuture scanCourses matched against 122 official green skills25,813 courses
RNA-seq pipelineCase-vs-control differential expression, up / down genes68 / 1 genes
SEA natural capitalKeyless satellite datasets turned into SEEA-EA accounts6 datasets
Faculty AI surveyBilingual pre / post Google Forms2 rounds
EdeX FLC casesCases EL-01–07 written from transcripts7 cases
Changi partnershipPhases and a sponsored research proposal3 phases
7 projects shipped and re-runnable 4 roles AI played, all audited 0 numbers left to the model

Framing

Four roles AI actually played

Not “AI wrote everything”. Four bounded jobs, each with a named human check.

1
Screen — apply a fixed taxonomy to thousands of documents and return who counts. Rule-based first; AI reads the edge cases.
2
Extract — turn screenshots, transcripts and share links into structured rows. Vision + parsing, human confirms.
3
Draft — write the next artefact from a real source file: minutes, briefs, slides. Facts corrected before anything is sent.
4
Build — stand up the dashboard, Worker or pipeline that holds the result. Agent writes code; tests and browser checks decide.
📉

Fewer than one in ten answers came from an open-ended model call. Most of the work is a fixed taxonomy that AI applies and a human audits.

Seven cases

Seven projects, one discipline

Open any case for the numbers, the method and the check that kept the result honest.

Mapping a whole university catalog. 1,780 unique modules in the AY2025/26–AY2026/27 catalog. 85 pass the sustainability screen (27 focused / 58 inclusive); 34 pass the entrepreneurship screen (12 / 22).

Only 1 module lands in both sets — BF3122 Carbon Markets — and 0 make the strong GreenComp-Acting × EntreComp-Into-action join.

Phrase coverage inside the 85: GreenComp 28 · greening topics 62 · SDG 7 of 85. Empty fields are outline-language gaps, not proof a topic is untaught.

Method: screen → tag → crosswalk → audit. Whole-word matching, false-friend stripping and community-college prefix overrides. Domain words that decide inclusion stay on the screen and are never copied into the 12 competences — that would double-count the same phrase.

AASHE / EntreComp inclusion rule: title hit, or two distinct terms in title + outline. UNESCO ESD 8 derived from GreenComp via the Wiek 2021 crosswalk — not a second screen.

A national training catalog, checked against demand. 25,813 courses in the official directory; 2,137 match the green / ESG screen (8.3%); 122 official SWDA green skills; 2,789 course–skill links written.

Coverage of the 122 official skills: 29 with no matching course · 7 thin (1–2 courses) · 17 moderate (3–8) · 69 crowded (9+) · 0 validation against live pages.

Where supply is missing, by sector: Sea Transport 5 · Landscape 5 · Energy and Power 4 · Food Manufacturing 3 · Carbon Services 3 · Financial Services 2.

Next move: build sector-technical modules against the empty rows, and pair disclosure reporting with carbon and circular-operations courses so a report can be evidenced.

Demand is an official list. Supply is catalog text. A gap here is a catalog gap — enrolment and job outcomes are not in the open files.

An RNA-seq pipeline that runs on a laptop. Counts in → QC + CPM filter → DESeq2 → GO + GSEA → report.

  • Not FASTQ — takes an iDEP-style gene × sample count matrix, so it runs without a cluster.
  • Hard stops — fewer than 3 replicates per group, or batch confounded with condition, halts differential expression.
  • Two engines — DESeq2 with apeglm shrinkage; limma-trend if the matrix is FPKM/TPM.
  • Browser mode — a Cloudflare Worker re-runs case-vs-control in PyDESeq2; files never leave the page.

Demo run: 68 genes up · 1 gene down · 1,998 genes after CPM filter · 31.2% variance on PC1. Worked example: 6 samples, 2,000 genes, padj < 0.05 and |log2FC| ≥ 1. Top gene RNU6-163P at log2FC 2.65, padj 6.1e-11.

PCA separates case from control before differential expression is trusted; Hallmark GSEA runs on the full ranking with no hard cutoff; summary.json + HTML report carry full sessionInfo. GO enrichment returned nothing significant at this demo size — reported as-is rather than dressed up.

Six keyless datasets become ecosystem accounts:

  • io-lulc v2 — 10 m annual land cover, 2017–2023
  • CTrees AGB — 100 m annual biomass, 2000–2025
  • Sentinel-1 RTC — 10 m SAR backscatter, VV and VH
  • MODIS 13Q1 — 250 m NDVI, 16-day composite
  • MODIS 64A1 — 500 m monthly burned area
  • geoBoundaries — ADM0–ADM3 units, 48 Asian countries

Output shape — SEEA-EA accounts: extent (hectares by class) · condition (NDVI, SAR, burned) · services (carbon stock, CO₂e, 2000–2025 series) · historical change — each with a provenance block and an uncertainty flag beside the number.

Method trap: uncapped counts every pixel (7.5 s per cell; Singapore 13.2M pixels; fails past ~44M px) and is correct for area. max_size decimates to 2,048 px (0.8 s per cell; Singapore 2.2M pixels) and holds shares but under-counts area by 6×. The rule written into the engine: uncapped for area, capped for shares — and every scaled number is flagged estimated.

Before and after, in the room’s own language. The pre-course form asks for a one-sentence problem statement, 1–10 familiarity with AI tools, 1–10 practice on own work, root-cause clarity / confidence / feasibility, and what has already started. The post-course form repeats the same 1–10 scales, requires a Yes/No on whether an AI tool was used today, and asks what changed in the proposal.

Bilingual English + Chinese throughout; anonymous; email not collected.

Instrument design: no direct motivation item (it ceilings at 8–10; infer motivation from actions already taken) · familiarity ≠ practice · anchor every item to the person’s proposal · drop items that cannot move in one class · ship every item, scale label and choice bilingually, not just the question stems.

Limit: a single class cannot show whether the two-week pitch improved. The class scales measure the class; a third round at the pitch is what would measure the outcome.

From a 77-minute recording to filed cases. Voice transcript (two recordings, ~77 and ~18 min) → AI draft (minutes + case write-ups from the transcript) → case records (EL-01 to EL-07, one per practice) → human correction (names, dates and titles fixed before filing).

The date came from the recording timestamps, not from anything said in the room — and the AI sub-cluster’s driver was left open for the presenters rather than invented.

A proposal where AI drafts but never invents the evidence.

  • Phase 0 · 8–12 weeks — waste-split analysis, screens fractions, returns three candidate products. No airport machine.
  • Phase 1 · on campus — Changi feedstock on the miniTRASHPRESSO. First article, test sheet, LCA on measured yield.
  • Phase 2 · one site — a single product, stream and location, bought under green procurement. Separate decision.

Claims the draft was held to: no Miniwiz municipal carbon figure as a Changi result; no invented throughput, power or machine feedstock; FY2024/25 waste split not reassigned to FY2025/26.

AI in the workflow

Turning messy inputs into structured rows

Five recurring jobs — and the tool that actually did the work.

InputWhat AI doesTool
Brokerage / wallet screenshotsVision model reads holdings, cash and P&L from a photoOpenRouter vision
Turn a real source file into a deckOne source markdown plus a prompt; only the source is uploadedNotebookLM
Shared AI conversation linkPlaywright captures the XHR payload the static page never sendsPlaywright WebKit
Plain-language ruleNatural language becomes a validated split rule, with a local fallbackGemini / local parse
Whole platformAgent writes the Worker, pipeline and UI; type and browser checks decideCoding agent
✅

Every row ends the same way: a human confirms before the value is written.

Guardrails

Where AI output is not allowed to travel

🔢

No invented numbers

Machine throughput, cycle time, power and fee stay unstated until NTU and Miniwiz price their lines.

Named source or blank
🏭

No borrowed carbon claims

A supplier’s municipal saving is never presented as the client’s result; a percentage needs the client’s feedstock and factors.

Client boundary
💸

No double funding

The same effort is not billed to a sponsor and to a translational grant. One scope, one payer.

One scope · one payer
🧑‍🏫

No unearned attendee

Registering an institution as a participant would misread the result. Only the people who were in the room are counted.

People in the room
AI may draft the sentence, but the number and the boundary come from a named source a reviewer can open.

Reproducibility

If it cannot be re-run or checked, it is not a result

1
Pinned taxonomies — GreenComp, EntreComp, AASHE, keywords and mode lists live in YAML, so a map can be rebuilt from cached HTML.
2
Type and syntax gates — node --check and tsc --noEmit run before anything is deployed or trusted.
3
Browser verification — dashboards are exercised in a real browser: clicks, routes, empty and error states — not screenshotted once.
4
Session record — summary.json carries full sessionInfo; sessions log the model calls and spend behind the build.
5
Named-source citation — every figure in a proposal points to a report or page a reviewer can open.

The method in one line

AI screens, extracts, drafts and builds. A human owns the taxonomy, the boundary and the number.

7 projects shipped and re-runnable 4 roles AI played, all audited 0 numbers left to the model
01

Use AI for the bounded job

Screen, extract, draft, build — one job at a time, with a named check.

02

Keep the taxonomy fixed

The rule decides; the model reads the edge cases. Audit what it returns.

03

Make it re-runnable

Pinned inputs, type gates, browser checks, session records, named sources.

Two files behind this page: the editable deck and the per-page PDF.