Independent Developer · Taichung

Five apps on the App Store.

And fifteen more sites and services still running today.

Third-year Photonics student at Feng Chia University, not a CS major. Here is what I actually finished and handed over — including one product I shut down myself.

iOS apps shipped
5
sites and services running
15
security defects fixed in production
2

What I've Built

The five apps ship under my own company account, Gomiigo Games (legal entity: Tuthome Co., Ltd.); I built each of them end to end. Every site and service below runs on a single Linux server I administer myself.

Ongoing

Education Platform Audit & Fixes

Worked inside a live Next.js + Supabase platform as a contractor; found and fixed two security defects.

Not a greenfield build — this meant working inside someone else's codebase with real users already on it. The two defects were a privilege-escalation path in the multi-role permission model, and a cross-tenant data exposure. Everything shipped as reviewed pull requests against a Postgres schema governed by row-level security policies. The client is not named here by agreement.

security defects fixed
2
commits delivered
54
database migrations
44
  • TypeScript
  • Next.js
  • React
  • Supabase
  • PostgreSQL
  • RLS
Ongoing

Development System

A set of working rules I wrote for myself: how work gets dispatched, how it gets verified, and how each mistake becomes a rule.

The core rule is one line: whoever produces the work never verifies it. When something is finished, I open a fresh session with no memory of how it was done, and it can return only three answers — pass, fail with evidence, or cannot verify. Alongside it sits a 34-entry log of things that went wrong over ten months, each rewritten as a rule that applies to later work.

reusable skills
126
postmortem entries
34
of cost sat in the main session, across 170 measured
88%
  • Claude Code
  • Markdown
  • Shell
  • Node.js
  • Python
Delivered

Move On Australia

A moving company's CRM in Australia, where I built three pieces of automation: AI crew scheduling, order extraction from email, and route optimisation.

The client already had a Base44 low-code CRM; my job was to make it run itself. AI scheduling assigns crews by availability and location, email parsing turns incoming enquiries into structured orders, and route optimisation works out the cheapest way to drive the day. The AI calls go through serverless functions with the model named explicitly in code. Delivered and closed out, with all three payment milestones released.

lines of code
30,005
automation functions
32
data entities
15
  • Base44
  • Serverless Functions
  • Claude API

Other Apps on the App Store

CamMenu

CamMenu

Shipped

Photograph a menu you can't read, and get back phrases you can point at to order.

  • 16,229 lines of Dart
  • 5 languages

Sites & Services

All of these are still running and you can open them directly. The ones marked "login required" have account systems — you'll reach a sign-in page rather than the product itself.

Idea Manager

Idea Manager

Live

Sketch ideas onto a canvas and let AI expand them along the links between nodes.

  • 7,064 lines of code
  • 20 API routes
  • Next.js
  • TypeScript
  • Prisma
One-Person Shop

One-Person Shop

Ended

An order system for micro-businesses. I pitched eight shops by direct message; on the date I'd set to judge it: zero sales. I shut it down.

The idea was one config file per shop — a white-label order page that could be restyled for a new store in an hour. I wrote the pass/fail rule and the exit clause before starting, then settled up on the date I'd set. All three conditions failed. The site is still up, because it says more about how I decide than any of the successes: define what failure looks like first, then actually call it.

  • 8 shops pitched
  • 0 sales
  • Web
Zhi Jian Studio

Zhi Jian Studio

Live

The site for my own contracting studio: keep your tools, automate the workflow.

  • 6,354 lines of code
  • 4.5 months maintained
  • Web
ChatCal

ChatCal

Live

Keep a calendar by chatting with it instead of filling in forms.

  • 2,015 lines of code
  • 26 routes
  • Web
Threads Filter

Threads Filter

Live

Classifies and filters Threads posts so only what I want to read gets through.

  • 2,505 lines of code
  • 4 database tables
  • Node.js
Survival Wallet

Survival Wallet

Live

An expense tracker whose data stays in your own browser and is never uploaded.

  • 2,696 lines of code
  • 17 tests
  • PWA
  • sql.js
  • vitest
MathBox

MathBox

Live

A maths toolbox that keeps the common calculations and plots in one place.

  • 4,420 lines of code
  • Node.js
  • Express

Mentora

Login required

An AI study companion; one question chains five or six analysis passes before it answers.

  • 7,038 lines of code
  • 12 AI routes
  • Next.js 16
  • Clerk
  • Supabase
  • gRPC

AgentHub

Login required

A personal AI assistant platform; answers stream in as they are generated.

  • 4,974 lines of code
  • 13 routes
  • Next.js
  • SSE

SocialAgents

Live

Puts AI assistants on LINE and Telegram; one workspace manages several personas and their contacts.

  • 2,119 lines of code
  • 7 database tables
  • Next.js 16
  • Drizzle
  • PostgreSQL 18
  • LINE
  • Telegram

Homework Solver

Live

Photograph or type a problem and get a step-by-step walkthrough; the AI layer has six levels of fallback.

  • 4,428 lines of code
  • 29 endpoints
  • Bun
  • Web

KeyStorage

Live

Stores keys encrypted in the browser using the built-in Web Crypto API.

  • 1,159 lines of code
  • Web Crypto API

Worklog

Live

One line a day for what got done. Runs on the NAS at home.

  • 971 lines of code
  • Bun

Developer Tools & Backends

Things I wrote to solve my own problems. Most have no public interface.

DingDong

Ongoing

The earliest project here: a LINE bot with a full backend behind it — scheduling, task queues, and data models all built from scratch.

This was my first real backend: a LINE bot at the front, and behind it FastAPI serving 44 endpoints across 18 data models, Celery running scheduled and async jobs, MySQL for storage and Redis for caching — all in Docker, next to a Gitea instance I host myself. There is no AI anywhere in it; I hadn't started with that yet.

  • 12,618 lines of Python
  • 44 API endpoints
  • 18 data models
  • Python
  • FastAPI
  • Celery
  • MySQL
  • Redis
  • Docker
  • LINE API

Job Screening System

Login required

Built to solve my own problem: scrape job listings, screen them through a tiered AI filter, and track what I applied to.

  • 195 commits
  • 82 API endpoints
  • 11 database tables
  • Node.js
  • SQLite
  • Playwright
  • nginx
  • systemd

SkillsHub

Prototype

A Model Context Protocol server that lets an AI read my own skills library directly.

Model Context Protocol lets an AI read external data directly. I wrote an MCP server in Next.js so an AI can query my own skills library instead of me pasting it in a chunk at a time. Drizzle and SQLite underneath, plus the GitHub API for repository data.

  • 3,755 lines of code
  • 4 database tables
  • Next.js 15
  • Drizzle
  • SQLite
  • MCP SDK
  • Docker

FocusMask

Prototype

A Chrome extension that masks the parts of a page I find distracting.

A Chrome extension on Manifest V3. It does one thing: mask the parts of a page I can't stop looking at — the sidebar recommendations, the related videos below, the social feed. Rules live in the browser; no account, nothing uploaded.

  • 960 lines of code
  • Chrome Extension MV3

Not Public Yet

FirstFrame

In testing

A photography assistant built on the Vision framework, in eight languages. Currently on TestFlight.

Real-time frame analysis with Apple's Vision framework, with AVFoundation driving the camera, so it tells you what's wrong with the composition before you press the shutter. Eight locales, 114 commits, currently on TestFlight and not yet submitted to the App Store.

  • 10,955 lines of Swift
  • 114 commits
  • 8 languages
  • Swift
  • SwiftUI
  • Vision
  • AVFoundation
  • fastlane

Bloopz

Submitted

A small game app taken from concept to App Store submission in three days.

The point wasn't complexity — I wanted to know how long it takes me to push an idea all the way to submission. Three days, including artwork, IAP setup, and store assets.

  • 3,659 lines of code
  • 3 days, concept to submission
  • Swift
  • SwiftUI

ERP Prototype

Prototype

An inventory-management prototype — the only project here written in Vue.

An inventory-management prototype: nine tables covering products, stock, inbound, outbound, and customers. It's the only project here written in Vue, chosen deliberately so I'd know where Vue and React actually differ on real work.

  • 3,086 lines of code
  • 9 database tables
  • Vue 3

How I Work

Whoever produces it doesn't verify it

Most people use AI as an answer machine: ask, accept, move on. The habit that changed my results was separating producing from checking. I never let the session that just finished something be the one that judges it. A session that just wrote something will defend it. A session that has never seen it won't.

Measure before trusting your own assumptions

I used to be sure that delegating work across multiple AI agents was what made things expensive, so I kept everything in one conversation. Then I measured it across 170 of my own sessions: the main conversation accounted for roughly 88% of the cost, and every delegated agent combined accounted for about 12%. I had the causality backwards. What stuck with me wasn't the number — it was that I'd held a confident opinion for months without once checking it, and checking it took about an hour.

The judgment stays mine

Most of my work is AI-assisted, and I don't hide that. But the split is clear: the AI covers the volume, the judgment stays mine. What to build, what counts as done, and where not to compromise — those don't get delegated.

About

I'm Po-Han Hua, a third-year Photonics student at Feng Chia University in Taichung, graduating in spring 2028.

I didn't come from a computer science background — I learned to build software by building things I wanted to exist. I think a lot of students outside CS could build real things this way. So could the person sitting next to me in optics lab; most of them have just never been told that.

Get in Touch

Open to contract work and collaboration — or just tell me what you're building.