Personal Project List

Every app, automation and custom AI skill in my personal GitHub — and what each one actually does.

Beyond the work-focused analytics platform on the main projects page, I build tools that solve real problems in my own life — from invoice automation for a family business, to a crawler that watches kindergarten application dates, to custom Claude Code skills that reconcile household receipts. This page lists all of them.

Apps & Automations

Standalone applications and scheduled automations. Public repos link to GitHub; the rest run privately.

Private · In production

Auto-Invoice System (streamlit-auto-invoice)

A full invoice-management web app for a small agency: customers, invoices, expenses and freelance time-tracking on a Supabase cloud database. A GitHub Actions cron job sends invoices and unpaid-payment reminders by email every morning via the Microsoft Graph API, and an "Import by Image" feature uses the Claude vision API to OCR receipt photos straight into pre-filled expense forms.

  • Python
  • Streamlit
  • Supabase
  • Claude Vision API
  • Microsoft Graph API
  • reportlab PDF
  • GitHub Actions
Running weekly

K1 School Date Checker (zoe-school-checker)

A weekly crawler that checks 16 Hong Kong school websites for new K1 application and open-day dates. It extracts dates near key admission phrases, diffs the results against the previous run, and when something new appears it pushes a report branch to this site's repo so the school tracker page can be updated with a one-click pull request.

  • Python
  • BeautifulSoup
  • Regex date parsing
  • Git automation
  • Task Scheduler
Live

Zoe's K1 School Tracker (zoe-school)

A standalone Chinese-language page on this site tracking Hong Kong kindergarten open-day and application dates for the 2027/28 intake — colour-coded by region (HK Island / Kowloon / New Territories) with confirmed, pending and warning statuses, all driven from a single JSON data file that the checker above keeps fresh.

  • HTML / CSS / JS
  • JSON data-driven
  • GitHub Pages
Proof of concept

AI School-Tracker Agent (zoe-ai-poc)

Experiments in making the school tracker fully self-updating with the Claude Agent SDK. The key finding: free-form AI extraction reads dates well but won't emit strict JSON, so the working prototype forces the agent through a schema-validated tool call to get structured, machine-checkable output — designed to run weekly and email newly discovered dates.

  • Python
  • Claude Agent SDK
  • JSON Schema tools
  • GitHub Actions
Private · Running daily

Job Application Tracker (JobTracker)

An automation that reads job-application emails from an Outlook 365 mailbox through the Microsoft Graph API, classifies each one (application submitted, rejection, or employer-viewed notification), and updates a job-applications spreadsheet on OneDrive — adding new rows or marking statuses like "Rejected" and "Reviewing" without any manual bookkeeping.

  • Python
  • Microsoft Graph API
  • MSAL
  • openpyxl
  • Task Scheduler
Private · CLI tool

Inbox Reader (inbox-reader)

A command-line Microsoft 365 inbox reader with app-only Graph API authentication. Subcommands to search mail, show a message, list recent items and download attachments across multiple mailboxes, with JSON output for machine consumption — it doubles as the backend for the inbox Claude Code skill below.

  • Python
  • Microsoft Graph API
  • argparse CLI
  • JSON output
Private · Hosted on Render

GitHub Image Updater (github-image-updater)

A small Express web service that lets a non-technical user swap a website image without touching code: upload a JPG through a simple web page, and the service commits it to the right path in a GitHub Pages repo, where it goes live on the client site automatically.

  • Node.js
  • Express
  • Octokit (GitHub API)
  • Render
In design

Helper Receipt App (parent-app)

A mobile app concept for Hong Kong households employing a domestic helper: reconcile the helper's shopping receipts against real Octopus and credit-card charges and track the cash shopping-float. Designed local-first — no financial data leaves the phone — with on-device OCR and an encrypted local database. The reconciliation engine already works today as the maid Claude Code skill below.

  • React Native
  • TypeScript
  • ML Kit OCR
  • SQLCipher
  • Product Design
Live · This site

Portfolio Website (kendi-ng-dev)

This website: a hand-built static portfolio on GitHub Pages with a custom domain — no framework, no build step, just semantic HTML, one CSS file and vanilla JavaScript. The repo also hosts the school-tracker page and two GitHub Actions workflows that run the AI school-checking experiments in the cloud.

  • HTML / CSS / JS
  • GitHub Pages
  • GitHub Actions

Custom Claude Code Skills

Reusable AI skills I built for Claude Code — each packages a real workflow (scripts, prompts and rules) into a single command. See the full skill catalogue → · See the task-to-model routing map →

In monthly use

/maid — Receipt Reconciliation

Monthly household receipt matching in one command. It OCRs receipt scans dropped into OneDrive into a spreadsheet, classifies each receipt by payment method (Octopus, credit card, or cash), then reconciles them against the actual card statement and Octopus app screenshots — producing per-receipt match results and statement-side matching sheets. This working engine is the blueprint for the Helper Receipt App above.

  • Claude Code Skill
  • Python
  • OCR
  • Excel automation
  • Reconciliation logic
In daily use

inbox — Email Lookup

Lets Claude Code look up an email by subject keyword across Microsoft 365 mailboxes and load its full content into the current conversation — so tasks like "check what the supplier quoted" or "reconcile against the invoice email" happen without leaving the terminal. Backed by the Inbox Reader CLI above.

  • Claude Code Skill
  • Python CLI
  • Microsoft Graph API