I design and build systems that make AI useful: turning information into context, conversation into learning, and decisions into action. Here’s the thinking and engineering behind three of my projects.
Turn a stream of headlines into a connected understanding.
I built flows.news to make the context behind the news easier to find. It brings articles about the same event together, identifies connections between developments, and lets readers explore the bigger story.
THE CHALLENGE
Coverage is fragmented across sources. Similar headlines can describe the same event, a follow-up, or something unrelated. A useful news system needs to understand those differences before it can summarize anything.
WHAT I BUILT
01.1
Semantic retrieval & clustering
Article embeddings retrieve candidate events from a vector index. Similarity scores, publication timing, and an LLM check help decide whether coverage belongs to an existing event or a new one.
01.2
Structured AI reasoning
Language models classify incoming content, extract event details, and suggest relationships between events. Validated outputs keep model responses usable by the rest of the application.
01.3
Contextual summaries
Readers can summarize a selection of connected events. The system assembles their context for the model and caches the result, connecting retrieval to a practical reading experience.
MAKING IT WORK IN PRACTICE
Each article moves through a durable workflow with retries for individual steps. Live updates reach the interface over WebSockets as articles are grouped and new events are created.
Make language practice a conversation worth coming back to.
Gaolaoban connects conversation, explanations, and revision in one learning experience, with a focus on Mandarin and Cantonese. I built the AI into the learning loop: practice a phrase, understand the feedback, then revisit what needs work.
THE CHALLENGE
A learner needs more than a translated answer. They need natural language, pronunciation support, an explanation they can act on, and a way to remember it after the conversation ends.
WHAT I BUILT
02.1
Conversational AI & voice
A streaming AI tutor supports practice in the target language. Speech recognition and text-to-speech connect spoken input and audio playback to the conversation, alongside translation and message analysis.
02.2
Language-aware feedback
AI generates example sentences and explains grammar, vocabulary, structure, and tone. Prompts account for spoken Cantonese and the differences between Pinyin and Jyutping pronunciation guides.
02.3
Adaptive practice
Generated learning material connects to flashcards and grammar exercises. Spaced repetition uses review performance and difficulty ratings to schedule what the learner should revisit.
MAKING IT WORK IN PRACTICE
Model integration includes structured-output validation, streaming timeouts, and usage limits. AI generation works alongside persistent learning progress and review scheduling to support an ongoing product experience.
Build opponents that plan, trade, and respond to the board.
Qiatan Island is a browser strategy game for friends and AI opponents. I built the game logic, strategic bots, and multiplayer infrastructure, alongside a bilingual interface, custom maps, and post-game recaps.
THE CHALLENGE
A convincing opponent has to balance immediate moves with longer-term goals. At the same time, every player needs a consistent game state, with the server enforcing the rules and protecting private player information.
WHAT I BUILT
03.1
Heuristic decision-making
Bots score possible moves using resource probabilities, board position, expansion opportunities, and opponents’ progress. Their decisions cover settlement placement, building priorities, trading, and blocking rivals.
03.2
Configurable behavior
Three difficulty levels adjust planning, threat awareness, trade tolerance, and randomness. This is heuristic game AI, with explicit decision rules and scoring functions that make behavior tunable.
03.3
Stateful multiplayer
Each game runs in its own authoritative server instance. Players receive an initial snapshot followed by incremental updates; bot turns advance in scheduled steps through the game’s phases.
MAKING IT WORK IN PRACTICE
The client displays possible actions while the server decides whether a move is legal. Separate game and lobby services handle play, presence, and invites, with game archives stored for later use.
FROM PRODUCT THINKING TO WORKING SOFTWARE
Have an AI idea? Let’s make it useful.
I bring together the use case, the model, and the engineering to turn a promising idea into a practical system.