How this section was built
Hero
Plan Task 3, with
the Hire button writes to developer@bonsung.menamed firstBuilt and reviewed The review found a contrast test that checked an empty list, so it could never fail. The list and the test were removed.
Judgement call The icon is built once with the site, since the static export refuses an icon made on request.
Checks and merge Pull request #2, five checks passed, merged by me.
Final review It found no name on the first screen. The name now sits above the role line.
Lesson Tests that could not fail
Introduction
Plan Task 4, with
the introduction is the CV summarynamed firstBuilt and reviewed The review found a shortened introduction would still pass. Its length is now checked against the PDF.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 4 described a rule, not a decision. It now says None needed.
Introduction
A Senior Software Engineer building software professionally since 2016, from an international reference implementation of an image standard to an app used by 300,000 people across 15 countries. I was a lead engineer for three years, and more recently I have engineered a full web product, from its React front end to its .NET backend on Azure. I now develop with coding agents, in an environment I built for them.
How this section was built
Introduction
Plan Task 4, with
the introduction is the CV summarynamed firstBuilt and reviewed The review found a shortened introduction would still pass. Its length is now checked against the PDF.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 4 described a rule, not a decision. It now says None needed.
Key Strengths & Achievements
Spec “the CV's five strengths, which hold the claims about agent-driven work”
Plan Task 4, with
every key strength is the CV's textnamed firstBuilt and reviewed The review found the last strength could be cut short and still pass. Each section's length now has to match the PDF.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 4 described a decision that was never made. It now says None needed.
Key Strengths & Achievements
- Agentic AI Engineering: Built the environment our coding agents develop in, where each repository carries its own instructions for them and work starts from a written specification rather than a prompt. Production work ships through it every day, and Sentinel extends the same approach. Tools include Claude Code, Codex and GitHub Copilot.
- Validating Agent-Written Code: Tests, the build and lint decide which code ships, whoever wrote it, and agents read current documentation through MCP servers so their code matches the versions in use.
- Web, .NET and Integrations: React and TypeScript, a C# .NET REST API on Azure SQL, and integrations with Azure OpenAI, Stripe payments and GitHub App webhooks.
- Delivery & Testing: A company's first CI/CD pipeline, cutting release time from 2 hours to 20 minutes, and its first automated testing strategy, taking coverage from 0% to 30%.
- Ownership & Leadership: Working closely with the CEO and CTO on a full product today, turning their requirements into features, and before that leading three software engineers and developing a junior engineer who reached intermediate within two years.
How this section was built
Key Strengths & Achievements
Spec “the CV's five strengths, which hold the claims about agent-driven work”
Plan Task 4, with
every key strength is the CV's textnamed firstBuilt and reviewed The review found the last strength could be cut short and still pass. Each section's length now has to match the PDF.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 4 described a decision that was never made. It now says None needed.
Work Experience
Spec “airie, Shopl and Company, PJ FACTORY, with the CV's job titles and dates”
Plan Task 4, with
every experience line is the CV's textnamed firstBuilt and reviewed The review found a bullet cut in half would still pass. The check now also measures each section against the PDF.
Judgement call The PDF lists some job headings after Education, so Work Experience, Selected Projects and Education are measured together.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It added an unmarked sentence here and every test still passed. Each section's whole text is now compared with the PDF.
Work Experience
airie | Wellington, New Zealand
Senior Software Engineer | July 2025 - Present (part-time to December 2025, full-time since)
- Engineered a customer-facing web platform for immigrants with React, TypeScript and Vite, then took on its .NET backend and built its design system and the Figma workflow around it.
- Built the agent-operated development environment that production work ships through every day, with per-repository agent instructions, a specification-first workflow, and a categorised knowledge base that makes previously solved problems retrievable.
- Moved Azure OpenAI access from API keys to Entra ID managed identities, and rebuilt Supabase's row-level permissions as role-based access control in the API.
- Designed and executed a multi-phase migration of the entire product onto Azure, retiring its Supabase data layer, API and front-end integration in staged releases while the product stayed live.
- Set up unit, component and integration tests, including end-to-end tests that run against a real database and API, with Vitest, React Testing Library, Playwright and xUnit.
- Defined the Azure infrastructure for a background notification service as code in Bicep, and deploy the product through GitHub Actions to separate development, staging and production environments.
- Mentored an intern developer through an 8-week programme that ended with a production-ready feature they shipped themselves.
Shopl and Company | Seoul, South Korea
Lead & Senior iOS Engineer | August 2021 - June 2024
- Engineered and scaled a native iOS app (Shopl) for shift and task management, serving 300,000+ employees in 60,000 workplaces across 15 countries.
- Introduced Modular and Clean Architecture to the codebase, making builds 7.5 times faster, and led the migration of a critical legacy system everyone considered untouchable, retiring it completely.
- Built client-specific features sold under their own contracts, including the roster changes a new labour law required, live before the law took effect.
- Built the company's first CI/CD pipeline with GitHub Actions and its first automated test suite, moving QA from monthly to weekly cycles.
- Built and led a team of three software engineers in two-week Agile sprints, ran code reviews with them, mentored two engineers, and co-authored the team's iOS coding standards.
- Represented engineering in weekly leadership meetings, showing the expected outcomes of technical improvements with data so non-technical stakeholders could weigh the trade-offs.
PJ FACTORY | Seoul, South Korea
Intermediate iOS Engineer (October 2018 - June 2021)
Junior iOS Engineer (October 2016 - September 2018)
- Developed an iOS app (Detail) to create and manipulate images in the new DTL (JLINK / JPEG Systems Part 7) format, serving as the official reference software for the standard.
How this section was built
Work Experience
Spec “airie, Shopl and Company, PJ FACTORY, with the CV's job titles and dates”
Plan Task 4, with
every experience line is the CV's textnamed firstBuilt and reviewed The review found a bullet cut in half would still pass. The check now also measures each section against the PDF.
Judgement call The PDF lists some job headings after Education, so Work Experience, Selected Projects and Education are measured together.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It added an unmarked sentence here and every test still passed. Each section's whole text is now compared with the PDF.
Selected Projects
Plan Task 4, with
every project line is the CV's textandevery external link is on the allowed listBuilt and reviewed The review noted its links are checked against the allowed list, not against their link text.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 3 made the review sound fuller than it was. It now says what the review noted.
Selected Projects
Sentinel | usesentinel.tools | npmjs.com/package/sentinel-mcp
AI-powered GitHub issue fixer, issues in and pull requests out (2026)
- Designed and built the whole system solo in TypeScript. A Cloudflare Worker receives GitHub App webhooks and relays them through a Durable Object to a local MCP server running inside Claude Code, which spawns headless Claude sessions to investigate issues, implement fixes and open pull requests.
- Built to run unattended, which meant scoping each task narrowly enough for a session to finish it without supervision, and handling the failures rather than watching for them.
- Test-driven by rule, with no production code written before a failing test and every bug fix shipping alongside the regression test that catches it.
How this section was built
Selected Projects
Plan Task 4, with
every project line is the CV's textandevery external link is on the allowed listBuilt and reviewed The review noted its links are checked against the allowed list, not against their link text.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review It found step 3 made the review sound fuller than it was. It now says what the review noted.
Education
Plan Task 4, with
every education line is the CV's textnamed firstBuilt and reviewed The review found a dropped entry would still pass. The number of lines is now counted too.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review Nothing for this section.
Education
Master of Information Technology
Whitireia and WelTec, Wellington, New Zealand | July 2024 - October 2025
Bachelor of Engineering in Computer Science
University of Suwon, South Korea | March 2006 - February 2015
How this section was built
Education
Plan Task 4, with
every education line is the CV's textnamed firstBuilt and reviewed The review found a dropped entry would still pass. The number of lines is now counted too.
Judgement call None needed.
Checks and merge Pull request #3, five checks passed, merged by me.
Final review Nothing for this section.
How this page was built
How I work with coding agents, shown on the page you are reading.
Before every session
Keep the rules in the repository.
Hooks stop the agents committing or pushing to main, and merging.
“Agents never merge pull requests. Bonsung merges.”
Agree the spec first.
I talk each change through with the agent until we agree a written spec.
From AGENTS.md “A change to what the page does starts as a change to
docs/spec.md.”Plan small tasks, with their tests.
Each task names its tests before any code exists, and Context7 keeps the plan on current library documentation.
From the plan “every experience line is the CV's text”
One agent builds, another reviews.
A fresh agent checks each task against the spec.
From a review A review found the CV check would still pass a bullet cut in half. Each section is now also checked against the PDF's length, and deliberate cuts fail.
Write down judgement calls.
Each one records what was decided, why, and what it costs if wrong.
From the decision log White on teal reaches about 5.5 to 1, so every colour pair meets the stricter contrast rule and no exception for large text was kept.
Checks decide, and I merge.
Every pull request passes checks that give the same answer every time, and only I merge into
main.On every pull request Build, test, lint, typecheck, history
Review the whole at the end.
A more capable model reviews the finished site at once.
From the final review It found a card describing a judgement call that was never made. That step now says None needed.
Write down what was learnt.
Compound Engineering writes the lessons from solved problems into
docs/solutions/, where the agents look when they plan.From docs/solutions Tests that could not fail