Work

I turn real problems and complex workflows into usable products.

01

Core product cases

Three cases, each proving a different product ability: end-to-end delivery, user-led iteration, and industry-workflow innovation.

  1. №01

    proves End-to-end product ownership: workflow design, full-stack delivery, launch, operations, and Agent iteration

    A trilingual study-recruitment platform built from product definition through full-stack launch, operations, and a continuously calibrated review Agent.

    scenario Hong Kong university study recruitment is scattered across department sites, social media, chat groups, and offline posters. Researchers lack a continuous way to publish, review applicants, schedule sessions, record compensation, and build reputation; participants must repeatedly compare fragmented eligibility, timing, and reward information.

    strategy I designed one operating flow for three roles: researchers publish studies, manage time slots, and review applicants; participants browse, enrol, complete studies, and exchange ratings; administrators govern external sources and review submissions. The Agent extracts structured evidence from source pages and posters, detects freshness, duplicates, and publishing risks, then routes proposals to review queues for an administrator to decide.

    evaluation A fixed 2026-07-04 production snapshot records 14 Agent runs and 31 review suggestions: 27 were closed, including 22 accepted and 5 rejected. A compensation-amount error was traced to field semantics and became a permanent amount-decomposition rule and policy gate.

    outcome The live platform has 81 managed studies (41 published, 38 completed, 2 cancelled), 20 enabled sources, 11 official domains, and 54 platform profiles. The next product stage is B2B outreach to university laboratories and research teams.

    project screenshots
    UniExp HK landing page with researcher and participant entry points
    Landing page for the trilingual study-recruitment platform.
  2. №02

    proves Designing a complete two-sided user flow and converting testing feedback into product iteration

    A live two-sided decision product that helps candidates organise fit evidence and helps recruiters verify the basis of a match, then improves the flow through testing and user feedback.

    scenario Candidates need to compare a job description with scattered experience evidence and identify honest gaps; recruiters need to verify why a person may fit without reading an entire portfolio or accepting a black-box score. The two sides share evidence but make different decisions.

    strategy The product accepts pasted or uploaded job descriptions, retrieves verifiable evidence from the portfolio, and produces strong matches, transferable experience, honest gaps, and follow-up questions. Source cards keep every conclusion inspectable; candidates use the brief to prepare, while recruiters use the same evidence to continue their own assessment.

    evaluation I track the route from landing to JD submission, brief rendering, follow-up questions, and contact actions, then use internal testing and recruiter feedback to reduce first-use friction, improve report actions, shorten initial wait, and strengthen source and claim guardrails.

    outcome The public product is live in three languages with text and file input, source-linked evidence briefs, Agent follow-up, and explicit next actions. A private candidate beta extends the same product logic through consented materials, reports, and feedback without changing the public flow.

  3. №03

    proves Discovering an under-served industry problem and turning tacit expert judgement into a governable product workflow

    A creator-led operating system that turns tacit creative intent into traceable knowledge and carries it across the long workflow from source material to screenplay, shots, edit, and QC.

    scenario A film is a chain of interdependent creative decisions: source interpretation, story, screenplay, shots, performance, and edit. A single model call cannot preserve creative authority, continuity, provenance, and revision history across that chain. Without production governance, later outputs drift from approved intent and it becomes difficult to explain what was accepted, what changed, and why.

    strategy Director Intent OS runs the whole chain as one governed production. Materials enter with traceable provenance and are extracted into candidate knowledge; that knowledge becomes authoritative only after human signoff; story develops from Seed and Brief through screenplay and storyboard; Cinematic IR and provider-neutral prompt packages carry the approved vision into shot planning; an Assembly Plan coordinates offline production; selected Takes then move through edit, deterministic local render, and evidence-backed QC.

    evaluation A fixed local multimodal pipeline was checked on 24 shots and 168 atomic observations to lock extraction and prompt behaviour. This offline fixture validates the knowledge-review boundary rather than claiming finished-film quality.

    outcome The local creative chain and offline production workbench are usable as one persistent system: projects can resume across sessions, story can move between screenplay and storyboard, and shot work can progress from production assets through candidate Takes, repair, edit, local render, and QC. The next phase extends that chain with qualified video-generation models, real shot creation, and film assembly.

02

Academic productivity toolkit

Two complete local-first macOS apps built around the distinct jobs of evidence-based writing and viva preparation.

  1. №04

    proves Turning repeated academic-writing friction into a complete, privacy-aware desktop product

    A local-first academic evidence workspace that audits claims and citations against source evidence with a deterministic NLI judge. It ships as an Electron desktop app plus MCP-capable core, with external scite/Consensus evidence search kept explicitly opt-in.

    scenario Citation auditing and literature review are error-prone at scale: LLMs hallucinate support where none exists, and 'supports' from a lexical judge is meaningless if it can't detect contradiction. Every claim needs a grounded locator, not a model guess.

    strategy I built a local-first pipeline that ingests papers, retrieves evidence, judges claims with deterministic NLI, and exposes verdicts with snippets and locators. External evidence search stays opt-in, so private drafts and libraries are not sent out by default.

    evaluation The app is checked with 42 hand-labelled claims and 317 offline tests, and was used as part of the real writing workflow for my own thesis. Iteration follows missing evidence, misleading verdicts, and operation friction rather than model demos.

    outcome 317 offline tests · 42-claim hand-labeled gold set · latest packaged release for macOS arm64 / x64 / universal

    stack
    • TypeScript
    • Electron
    • MCP
    • +9
    project screenshots
    D-academic-agent citation audit workspace with evidence verdicts
    Citation checking against imported source evidence.
  2. №05

    proves Designing a phase-specific learning workflow from source material to practice, feedback, and review

    A private desktop app for thesis viva preparation. It turns a student's own thesis into evidence-linked practice questions, scoring, and revision tasks while keeping the thesis file and practice history on the device.

    scenario Existing viva prep tools are either generic flashcard apps or require hand-crafting every question. The real bottleneck is grounding: an AI examiner is only useful if its questions trace back to what the thesis actually says, and scoring is only trustworthy if it cites the evidence it used.

    strategy I built a private desktop workflow where the thesis is ingested into evidence blocks, practice questions and scoring cite those blocks, and low-scoring answers feed a review queue. The app keeps files and history local unless the user opts into a provider.

    evaluation I used the app throughout real thesis defence preparation, checking whether questions trace back to the thesis, feedback leads to a concrete revision, and weak answers return to a usable review queue.

    outcome Shipped local-first viva prep app · evidence-linked practice · privacy-first desktop use

    stack
    • Next.js
    • TypeScript
    • AI SDK v6
    • +5
    project screenshots
    D-viva-assistant-agent practice workspace with examiner question, scoring, and evidence-linked revision
    Local-first thesis viva practice with scoring and review tasks.

03

AI Coding and open-source collaboration

Recurring workflow friction turned into public tools, collaboration contracts, upstream contributions, and shipped platform experience.

  1. №06

    A public, local-first developer tool that checks whether README files, docs, AGENTS.md, CLAUDE.md, examples, API notes, and source-bound documentation still match the repository that exists now. It gives humans, CI, and coding agents the same repo-local evidence before they trust or repair stale context.

    scenario Agentic repositories accumulate stale instructions quickly: README commands drift from package scripts, AGENTS.md and CLAUDE.md keep obsolete paths, examples stop matching APIs, and coding agents may trust those claims before checking the source. Evidoc turns that trust problem into a local evidence workflow.

    strategy I packaged the trust check as a local workflow available from the CLI, MCP server, local web UI, and GitHub Action. Each surface compares documentation claims against repository evidence before suggesting repairs or blocking a gate.

    outcome Public v0.3.2 · published on npm as @evidoc/evidoc · CLI, MCP server, Local Web UI, GitHub Action, Local Git Gate · package artifacts for CLI, core, dashboard, local app, MCP server, reports, and review log

    stack
    • TypeScript
    • Node.js
    • MCP
    • +5
  2. №07

    A public personal skills repository that turns repeated multi-agent coding practice into explicit operating rules. Four named workflows cover the pairings actually in use — Claude-Codex mutual review, Codex-OpenCode, Codex-Grok, and Codex-Antigravity — and each fixes the same questions: what gets delegated, what stays private, who owns git, and which checks must pass before a second agent's opinion becomes an accepted change. Two of the three run inside the Codex CLI on plugins from my own six-plugin matrix; the third runs inside Claude Code on a third-party plugin.

    scenario Multi-agent coding work fails when scope, privacy, review authority, and verification are implicit. A second agent is useful only if its remit is bounded and its claims are checked against the real repo. And the failures that actually cost time are rarely reasoning failures — they are runtime ones: a config value that kills the second agent at startup with no useful error, a long job that returns only an id, a flag the wrapper silently drops.

    strategy I wrote the recurring practice down as skills: bound what the second agent can see or do, require review gates, and verify every claim against the repo before shipping — as a work packet where the second agent is a delegate, and as a reviewed spec and plan where it is a peer. Each runtime failure is recorded with its symptom, its actual cause, and the exact recovery, so the next session recognises it instead of rediscovering it.

    outcome Public skills repository · four named workflows in two shapes — one peer mutual review, three bounded delegations · a field-tested failure log grown across 2026-07 and 2026-08 · the three delegation skills defer to the installed plugin's current contract instead of pinning a version

    stack
    • Codex
    • Claude Code
    • OpenCode
    • +4
  3. №08

    A Claude Code port of the official openai/codex-plugin-cc surface, adapted to drive the local OpenCode CLI. It lets Claude Code hand bounded review, adversarial-review, rescue, transfer, status, result, cancel, setup, and optional stop-time review work to OpenCode, which can front Anthropic, OpenAI, Google, open-weight, and free zen models.

    scenario Claude Code needed a controlled way to use a second model without leaving its local workflow or losing ownership of context. The risk was handing too much scope to another tool.

    strategy I ported the official command surface to OpenCode CLI and kept job control, stop-time review, and the delegation boundary explicit. Claude Code remains responsible for files, git, verification, and final judgment.

    outcome Public v0.2.0 · port of the official codex-plugin-cc surface · multi-provider second-model delegation · optional stop-time review gate

    stack
    • JavaScript
    • Node.js
    • Claude Code Plugin
    • +2
  4. №09

    A Claude Code port of the official openai/codex-plugin-cc surface, adapted to drive the local Grok CLI headless mode. It mirrors the same bounded review, adversarial-review, rescue, transfer, status, result, cancel, setup, and optional stop-time review flow while adding the grok:grok-rescue subagent.

    scenario Claude Code needed a bounded path to ask Grok for review or rescue work without making Grok the owner of local files or git. Manual tool switching weakens scope and evidence tracking.

    strategy I ported the official command surface to Grok CLI headless mode, with job controls, a grok:grok-rescue subagent, stop-time review, and explicit boundaries. Claude Code keeps verification and shipping decisions.

    outcome Public v0.2.0 · port of the official codex-plugin-cc surface · Grok CLI headless delegation · optional stop-time review gate

    stack
    • JavaScript
    • Node.js
    • Claude Code Plugin
    • +2
  5. №10

    A Claude Code port of opencode-plugin-cc, itself a port of the official openai/codex-plugin-cc surface, driving Google's Antigravity CLI (agy). It carries the review, adversarial-review, rescue, transfer, status, result, cancel, and setup command surface, plus an optional stop-time review gate. Headless agy has no read-only mode, so reviews use a disposable workspace copy rather than the real repository. Independent project, not affiliated with Google or OpenAI.

    scenario Claude Code needed a controlled way to use a second model through Antigravity, while headless agy cannot grant reads without also allowing writes. A reviewer that can read the repository can write it too.

    strategy The port keeps the command surface but makes read-only review a filesystem boundary: a disposable working-tree copy has no .git and the real tree is fingerprinted before and after. That boundary is for read-only review only — write-capable rescue runs deliberately get the real repository. Claude Code keeps files, git, and final judgment.

    outcome Public v0.1.0 · port of the codex-plugin-cc surface via opencode-plugin-cc · mirror-based read-only reviews · optional stop-time review gate

    stack
    • JavaScript
    • Node.js
    • Claude Code Plugin
    • +2
  6. №11

    A public Codex plugin that lets OpenCode support code review, troubleshooting, and handoff work from inside Codex. It keeps collaboration controllable with job status, cancellation, and a narrow privacy boundary.

    scenario Codex and OpenCode are useful in different ways, but switching between them usually loses context and makes reviews harder to track. The goal was to make OpenCode a controlled collaborator inside Codex, with clear job control and a narrow privacy boundary.

    strategy I exposed OpenCode through Codex MCP tools with capability checks, background job status, cancellation, and transcript boundaries. OpenCode can review or troubleshoot, while Codex keeps final control over files, git, and verification.

    outcome Public v0.2.3 · eleven typed MCP tools sharing one response envelope · OpenCode review support inside Codex

    stack
    • TypeScript
    • Node.js
    • MCP
    • +3
  7. №12

    A public Codex plugin that lets Codex ask the local Grok CLI for bounded repo work, code review, rescue analysis, adversarial checks, session inspection, and background jobs without handing over hidden Codex context.

    scenario Grok can be useful as another engineering perspective, but switching tools manually makes scope, session history, and review ownership hard to control. The goal was to let Codex ask Grok for help while Codex still owns files, tests, git, and final judgment.

    strategy I exposed Grok CLI through Codex MCP tools with capability checks, bounded run/review/rescue wrappers, session listing/export, background status/result/cancel controls, and explicit safeguards around hidden context and private runtime paths.

    outcome Public Codex plugin · 0.3.0, reporting contract version 3 over a typed MCP surface with explicit workspace roots · Grok review and rescue inside Codex · bounded second-agent workflow

    stack
    • TypeScript
    • Node.js
    • MCP
    • +3
  8. №13

    A Codex plugin with an MCP server and vendored Skill, built as a sibling of opencode-plugin-codex and grok-plugin-codex. Its agy adapter follows a measured runtime contract: every behavior claim in docs/AGY-RUNTIME-CONTRACT.md carries its probe command rather than relying on CLI analogy. Independent project, not affiliated with Google or OpenAI.

    scenario agy ignores process cwd and is only ever told about the directory passed to --add-dir — it runs with its permission prompts skipped and is not confined to that directory — and it can report SUCCESS after a nonexistent --add-dir sends it to the wrong place. Its read and write permissions cannot be separated, and its reported outcome is independent of exit code.

    strategy The plugin validates a workspace before spawn and returns a typed refusal when it cannot resolve one. Read-only reviews receive a disposable working-tree copy, and completion means resultComplete; exit code remains recorded for failure classification, not agy's verdict or completion decision.

    outcome Public v0.1.0 · measured agy runtime contract with published probes · filesystem-isolated read-only reviews · restart-safe background jobs

    stack
    • TypeScript
    • Node.js
    • MCP
    • +3
  9. №14

    A focused macOS menu-bar tool for people who run multiple AI coding accounts every day. It keeps account pools, remaining quota, and throttled states visible before a run stalls.

    scenario AI-coding sessions can fail because quota or account-pool status stays invisible until a provider throttles a run. A compact menu-bar signal gives users that warning before work stalls.

    strategy I built a native macOS menu-bar app that polls quota and account status, then keeps the signal one click away so users can switch pools before a coding run stalls.

    outcome Open-source MIT macOS menu-bar tool · built for daily AI-coding account monitoring

    stack
    • Swift
    • macOS
    • Developer Tools
    project screenshots
    relaybar macOS menu-bar panel showing AI coding account usage and quota status
    Menu-bar quota and account-pool status for daily AI coding work.
  10. №15

    Open-source maintenance work on Memoh, a Go multi-agent platform for running coding agents in isolated environments. The merged PRs made failures easier to diagnose, Docker deployment docs clearer, and fork CI less surprising for contributors.

    scenario Multi-agent developer platforms often fail at the edges: container setup, Docker instructions, fork CI, and vague diagnostics. Contributors need errors and setup paths that point to the next action.

    strategy I contributed small upstream fixes that made those edges easier to operate: diagnostics surface container failures, Docker docs match current deployment, and fork CI no longer tries to publish images.

    outcome 3 merged upstream PRs · diagnostics, Docker docs, and fork-safe CI

    stack
    • Go
    • Docker
    • GitHub Actions
    • +1
  11. №16

    Independently developed and shipped worldwide on the App Store in spring 2025, Power Minder(满电!)was a paid utility (¥1 in the China storefront) and has since been delisted. It manages home-device charging rhythms with per-device reminders for daily, selected weekly days, monthly dates, or every N days, plus last-charge and battery-state records. SwiftUI, local notifications, and CloudKit sync support bilingual en/zh-Hans use. I completed the path from an HTML prototype to App Store review materials, including embedded privacy-policy and terms pages.

    scenario Household devices such as camera batteries and Switch need separate charging rhythms and records. A device-level view keeps last-charge time and battery state together with each reminder.

    strategy Device profiles pair recurring charging reminders with last-charge and battery-state records. Local notifications drive the schedule while CloudKit sync and local persistence keep the data available.

    outcome Shipped to the App Store as a paid utility (spring 2025) · bilingual en/zh-Hans · has since been delisted

    stack
    • Swift
    • SwiftUI
    • iOS
    • +3
    project screenshots
    Power Minder screenshot showing device details, a reminder list, and a device list

04

More work

Additional products and learning tools that extend the same problem-finding and delivery practice.

  1. №17

    Role Fit turns pasted or uploaded JDs into source-backed fit briefs for recruiters; the same han-dong.link system also pairs a live Q&A assistant for source-backed answers with a Three.js cockpit for profile, work, research, and CV.

    scenario A public portfolio has to serve recruiters, technical peers, and research collaborators without making them guess which evidence supports each claim. Static pages can list work, but they rarely answer role-specific questions or show how the site itself organizes evidence.

    strategy I built a spatial cockpit plus canonical read-mode pages, then connected both to the same Astro content collections that power Q&A and Role Fit. The portfolio can be browsed visually, read linearly, or queried through evidence-backed cards.

    outcome Live on han-dong.link · homepage cockpit entry with live portfolio counts · answer cards cite source pages · visible answer trace · Role Fit turns JD text or files into strengths, transferable experience, gaps, and questions

    stack
    • TypeScript
    • Astro
    • React
    • +7
    project screenshots
    han-dong.link cockpit with four planets, navigation, Q&A assistant, and Role Fit JD matching
    The spatial cockpit is the default portfolio entry.
  2. №18

    A lightweight learning tool for comparing Cantonese and Mandarin readings side by side. It turns HKEdU correspondence data into a learner-facing lookup path with Jyutping, recorded audio, and a mobile-friendly interface.

    scenario Cantonese learners often have to jump between dense correspondence tables, romanization notes, and audio sources to understand how a Mandarin reading maps to Cantonese.

    strategy I turned the correspondence data into a fast learner-facing lookup path with character search, Mandarin-to-Cantonese mapping, Jyutping, recorded audio, simplified/traditional switching, and mobile support.

    outcome Open-source learner tool · Cantonese-Mandarin lookup · Jyutping and recorded audio

    stack
    • JavaScript
    • Jyutping
    • Language Education
    project screenshots
    Cantonese-Mandarin cross-reference tool usage instructions explaining lookup modes and features
    The usage guide explains bidirectional lookup, character search, audio playback, and script switching.
Do these projects fit your role? Paste or upload the JD for an evidence-backed brief with supported strengths and gaps to confirm. Go to Role Fit →