Japanese Literature major turned AI-Native Software Engineer (JLPT N1). I ship enterprise systems (Text-to-SQL, an SRE triage agent, a job scheduler), ML models and cloud infrastructure with a spec-driven, AI-agent workflow, and launch my own products with the same workflow in days; I write Claude Skills, built an MCP Gateway, and teach the workflow internally. In the AI era an engineer's value is judgment and process design, not typing speed.
Read the full story
Act 1: An unusual start
Japanese Literature degree, JLPT N1. My career began with language; a six-month AI/cloud bootcamp moved me into engineering. I built AI applications at a startup (content-to-video, LINE avatars and voice cloning) and now work as a Senior Systems Analyst at a retail group's IT subsidiary, spanning data engineering, DevOps and cloud architecture.
Act 2: AI changed how I work
Over the past year I moved my workflow to spec-driven development with AI agents: brainstorm → design spec → implementation plan → TDD, where AI executes and I review and decide. Real projects grew it into my own version — design phases produce only documents, and subagents implement only after decisions are final; a self-made dispatch skill routes each task to the cheapest model that is good enough; one shared AGENTS.md drives two agents; an automated AI code-review loop. With it I independently delivered an enterprise allocation platform (2.5 months), a CDP's AI service and job scheduler (88 commits and 1,190 unit tests in one day), took Text-to-SQL from PoC to a production service, and built a company MCP Gateway in 3 days. After hours, same workflow: a ramen map live on day one, a Japanese typing trainer with 470 tests in 3 working days. Every number is in the git history.
Act 3: From user to builder
I don't just use AI tools — I package team domain knowledge as Claude Skills with evals, built the gateway that lets every AI tool in the company reach internal APIs safely, wrote a Claude Code mod that shows context usage and cost in real time, and draw boundaries for AI agents: proposal-only changes gated by automated tests, zero shell and zero cloud permissions, never writing to third-party platforms on a user's behalf. I also learned to reject upgrades with data: a 65-case eval showed the bottleneck was the rules, not the model, so I built human-precedent override instead and triage accuracy went from 12% to 80%. Next: build something that actually matters.
02
How I work
01
Ship products with AI
Enterprise retail allocation platform, delivered solo in 2.5 months; a CDP job scheduler with 1,190 unit tests
menmap ramen map live on day one; pachipachi Japanese typing trainer with 470 tests in 3 working days
Career Agent, an AI job-search assistant, live in 3 days with real users
02
Manage how AI works
Spec-driven: brainstorm → spec → plan → TDD; design phases produce documents only, subagents implement after decisions are final
A dispatch skill that tiers work: haiku to find, sonnet for well-specified tasks, opus for concurrency and cross-file changes; 7 worktree agents in parallel, merged the same day
One shared AGENTS.md driving Claude Code and Copilot CLI; an automated AI code-review loop until it converges
03
Build tools for AI
Self-built MCP Gateway wrapping internal APIs as MCP tools, with both input and output audited
Domain knowledge packaged as Claude Skills with evals; a Claude Code mod showing context usage and cost live
Boundaries for AI agents: proposal-only changes gated by tests, zero shell and zero cloud permissions, never writing to third-party platforms for a user
03
Featured projects
Career Agent
AI job-search assistant: upload résumé → AI diagnosis → auto-crawl listings → fit ranking → tailored cover letters → application board
FastAPI
MongoDB
curl_cffi
Claude API
React
TypeScript
3 daysto launch
543commits
10K+post views
Built so others could solve their own problem with a tool. The launch post on Threads passed 10K views and it has real users. It later grew a local edition: reads your logged-in job-site data and runs a tool-use chat agent as a "job-search commander" — but the agent never applies on your behalf.
Azure Data Factory failure triage: read-only against ADF, detects failures every 5 minutes → de-duplicates into incidents → rules first, LLM as fallback → a Teams card tells the on-call engineer the conclusion, what to do now and what to check first
Python
Azure Data Factory
Azure OpenAI
Claude Opus
Teams
Streamlit
12% → 80%action accuracy
25% → 92%act / don't act
208tests
140incidents
Rejected a model upgrade with data: on 65 eval cases Opus looked far ahead, but with duplicates removed it tied with gpt-mini — the bottleneck was the actions the rules suggested, not the model. So I built human-precedent override instead. The learning agent is proposal-only: a human clicks apply, pytest reverts failures, passing changes commit; zero shell, zero Azure permissions. Designed and built solo in about five weeks.
Text-to-SQL
Natural-language queries over 920M transaction rows: understand → code-side guards → option-based clarification → generate SQL → validation and an EXPLAIN gate → code computes statistics, the LLM only interprets
FastAPI
sqlglot
Azure Synapse
Claude
Azure OpenAI
DuckDB
10/10gold SQL
23/23behavior tests
0fabricated insights
650s → 338sdata profiling
From PoC to a production service: sqlglot dialect packs for both T-SQL and PostgreSQL, a semantic model where every fact carries confidence and evidence, 10 ADRs. Guard rule: any condition that cannot become SQL is asked back, never silently dropped. Once other systems asked to onboard, the positioning became "the execution engine plus a 13-step onboarding process is the product".
menmap (麵咩撲)
Taipei ramen map: daily Google Maps harvesting → open-now / metro / style filters → a "where today" dice → ramen diary and friends
Python
React
MapLibre
Hono
Cloudflare D1
Claude
Day 1live
130commits / 15 days
500+ramen shops
$0per month
Fourteen minutes from pricing Google Places API to dropping it: the scraper runs at home and the cloud only reads. Tests showed datacenter IPs get degraded, stripped-down pages, so the collector stays home. LLM classification of 491 shops cost US$2.5. Worker-rendered SEO pages, self-written Google OAuth, $0 a month.
Japanese typing trainer: romaji input judged key by key into kana, from kana charts to N1 vocabulary, timed leaderboards, and your own lyrics synced to YouTube
SvelteKit
Svelte 5
TypeScript
Cloudflare D1
kuromoji
3working days
470tests
26Klines
7parallel agents
Seven worktree subagents built it in parallel and merged the same day. The server recomputes every score from the client's key log and applies six anticheat rules — it never trusts client numbers. Lyrics copyright was researched (JASRAC, Taiwan copyright law) before design: shared timelines store only hashes, notice-and-takedown, three strikes.
Housing decision tool: enter an address → commute times (bus/metro + scooter/car road graph) → rent and sale price benchmarks → mortgage and monthly cost → hazards, crime, amenities → favorites and comparison
React 19
TanStack
Hono
Cloudflare D1
Drizzle
OpenStreetMap
10dev days
138commits
23Klines of TS
The first plan was to scrape listing sites. After reviewing fair-trade rulings I judged the legal risk too high: users bring their own listings and the product sells only the analysis layer built on commercially usable open data. Commute times run my own Dijkstra on the OSM road graph; Zod schemas are shared across client and server, and Vitest runs in both workerd and Node.
Wraps internal enterprise APIs as MCP tools so any AI coding agent reaches them safely through one entry point
Python
MCP SDK
Starlette
SQLAlchemy
pytest
3 daysto v1
20+test files
8AI clients
Design focus: per-client auth, SSRF protection, encrypted upstream credentials, audit logs with sensitive-parameter masking — both input and output are recorded. Tool catalog lives in a DB; approved tools go live without code changes or restarts. One admin page generates connection configs for eight AI clients.
Delivered solo with AI collaboration at a retail group's IT subsidiary: a 2.5-month allocation platform (FastAPI + React 19); ADF polling replaced by a queue, then by a single-table scheduler, with the production cutover led by me; three measurement-first performance root-causes with zero builder changes; LightGBM/CatBoost allocation models; Bicep IaC reconciled with portal drift.