Software Engineer with a background in Electrical Engineering & Computer Science.
Passionate about systems programming, network algorithms, and building practical web tools.
| Project | Description | Tech | PC | Mobile |
|---|---|---|---|---|
| SocratesApp | AI-powered Socratic learning system β generates a DAG skill tree of 12 knowledge nodes, scores responses via Claude API (0β20 pts), diagnoses misconceptions, and switches to teacher mode after 3 consecutive errors | C++, Drogon, PostgreSQL, D3.js | π₯οΈ | β |
| ip-lpm | IPv4 routing engine using Binary Trie for Longest Prefix Match β validated against real BGP data from RIPE NCC | C | β | β |
| zhwiki-ir-mcqa | Unsupervised Traditional Chinese multiple-choice QA system β builds inverted index over 1.2M Wikipedia articles, scores answer options via set intersection counting with jieba noun-only POS filtering, no ML or GPU required | Python | β | β |
| path_elevator | Filesystem path-traversal tool β displays every ancestor directory at once, like riding an elevator floor by floor | C++ | β | β |
| calorie_survival | 7-day survival strategy game balancing calories, finances, exercise, and body weight across four daily phases β PWA with offline support, Zustand state persistence, and JSON-driven game balance config | React 18, TypeScript, Vite, Zustand, Tailwind CSS | π₯οΈ | π± |
| life-map | Interactive graph visualizing 10 core life dimensions (career, health, habits, finance, etc.) with influence pathways, Canvas-rendered connections, and animated node glow effects | HTML5, CSS3, JavaScript | π₯οΈ | β |
| sleep-tracker | Interactive sleep pattern visualizer with SVG timeline charts and deviation analysis between regular and actual sleep schedules | React, Vite, Tailwind CSS | π₯οΈ | β |
| parkour | Browser-based parkour game with phantom ghost trail effects β four character classes, rainbow HSL color picker, speed control, and touch/keyboard controls; 23 Vitest unit tests with GitHub Actions CI | HTML5, CSS3, JavaScript | π₯οΈ | π± |
| vision-simulator | Real-time vision condition simulator covering myopia, hyperopia, astigmatism, and presbyopia with adjustable severity and Taiwan optical prescription standards | HTML5, CSS3, JavaScript | π₯οΈ | π± |
| nutrition-calculator | Calorie and macronutrient calculator using ACSM MET standards and a 24-hour energy metabolism model β dynamically adjusts protein intake by exercise duration and covers 11 vitamins and 10 minerals per DRI standards | JavaScript | π₯οΈ | π± |
| PageScroll | TXT reader with smart paragraph/sentence-aware pagination | JavaScript | π₯οΈ | β |
| spell-english | Vocabulary flashcard app with Web Speech API pronunciation and localStorage | JavaScript | π₯οΈ | π± |
| discount-calculator | Bulk discount calculator with buyer and seller profit margin views | JavaScript | π₯οΈ | π± |
| nutrition-hunter | Daily nutrition tracker with hexagon radar chart (Canvas 2D), two-stage greedy food recommendation algorithm, Mifflin-St Jeor TDEE calculation, and a 33-item food database with localStorage persistence | JavaScript | π₯οΈ | π± |
SocratesApp β Socratic AI learning system built with C++ (Drogon) + Claude API + PostgreSQL.
I owned the full product design β learning flow, evaluation logic, and architectural decisions:
- Skill graph: Dynamic DAG of 9β12 nodes across 3 branches; each node requires 5 questions to ensure token-cost-predictable evaluation
- Scoring: Claude evaluates every response on a 0β20 continuous scale (not binary pass/fail), enabling partial-credit diagnosis; 60/100 passing threshold mirrors real academic credit standards
- Teacher mode: Triggered by 3 consecutive errors (not cumulative) β consecutive failures isolate a genuine conceptual gap within the same causal chain, whereas cumulative counting conflates unrelated mistakes
- Tech choice: C++ chosen deliberately to build and demonstrate production-level systems programming skill alongside AI integration
AI was used as a development accelerator throughout β for code generation, iteration, and refinement β while all design decisions and their rationale remained mine.
ip-lpm β High-performance IPv4 routing engine implementing Longest Prefix Match via a 32-level Binary Trie, written in C and validated against real-world BGP data.
- Why Binary Trie over Hash Table: LPM requires finding the longest matching prefix β Hash Table can only do exact match, so it would need up to 33 separate lookups (one per prefix length /0β/32) per query. Binary Trie resolves this in a single O(32) traversal, naturally recording the deepest match along the way
- Why C: Manual
malloc/freethroughout β no RAII, no abstractions β to demonstrate low-level memory management and stay conceptually close to how real router FIB implementations work - Validation: Tested against real BGP routing tables from RIPE NCC Route Collectors (Nov 2021), covering 800kβ900k prefixes across 5 regions (rrc00/01/03/04/05) β self-generated test data cannot replicate real-world prefix distribution and edge cases
zhwiki-ir-mcqa β Unsupervised Traditional Chinese multiple-choice QA system built with Python, no ML or GPU required.
- Scale: Builds an inverted index over 1.2M Wikipedia articles β no preprocessing pipeline, runs entirely on local CPU
- Answer scoring: Set intersection counting between question context and each answer option; jieba POS filtering keeps nouns only, removing stop-word noise without a curated stoplist
- Why noun-only: Nouns carry the highest semantic density in Chinese; filtering shrinks per-article term sets and sharpens intersection signal without losing topical meaning
- Why classical IR: Demonstrates that a well-built inverted index over a large enough corpus can be competitive on structured QA without any model weights or fine-tuning
Design decisions I made across AI-assisted projects β where I owned the system structure and engineering requirements, and used AI to implement them.
calorie_survival
- Four-phase daily loop: Designed morning / afternoon / evening / night as four distinct decision points, each with its own calorie, finance, and exercise trade-offs β the phase structure is the core game loop
- JSON-driven balance config: Required all numeric constants (calorie costs, weight-change rates, event weights) to live in a single config file rather than hardcoded β keeps tuning a data edit, not a code change
- PWA + offline: Specified service worker and manifest from the start so the game runs without a network connection and can be installed on a home screen
parkour
- Testing requirement: Specified 23 unit tests covering collision, scoring, and ghost trail logic, plus GitHub Actions CI on every push β deliberately held a browser game to the same engineering standard as production software
- Four character classes: Designed each class to alter speed, jump height, and trail color palette independently, so class choice has meaningful mechanical impact
- Ghost trail concept: Defined the phantom trail as a position-history replay at decreasing opacity β gave AI a clear behavioral spec to implement