Portfolio

Explore My Work.

infotravelbatam-1

Marketing website for InfoTravelBatam, a private tour operator in Batam. Built to turn visitors into WhatsApp enquiries: it explains the services clearly, shows real photos from their own trips, and backs it up with real customer reviews. Features: 🧭 Service pages for private tours, private transport, company trips, ferry tickets, and hotel bookings 💬 WhatsApp-first conversion: every section ends in a one-tap WhatsApp enquiry 🌏 Bilingual site: English and Chinese 📸 Gallery of 19 real "things to do in Batam" spots from the company's own trips, no stock photography ⭐ Customer reviews pulled word for word from Google and Facebook, each linking to the original 🔎 SEO-ready with structured data (schema.org) and per-page metadata

InfoTravelBatam - Private Tour Website

2026

Next.jsReacti18n
Details
tap2apply-thumbnail

Tap2Apply takes the busywork out of job hunting. It tracks every application in one place, keeps your résumé and experience in a single profile, and saves job posts straight from the browser, so all that's left is to hit submit. Features: 📋 Application tracker: one table for every role with status, dates, salary, and notes, so you can see at a glance what needs a follow-up 📄 One profile, every résumé: store your experience once and generate a résumé and cover letter tailored to each job 🧩 Browser extension: reads the job post on any tab and adds it to your tracker in one click 📊 Analytics dashboard for your job search 🚧 Coming soon: Chrome extension

Tap2Apply - Job Application Tracker

2026

Next.jsReactSupabase
Details
zok-thumbnail

Website for ZOK Academy, a small-group Chinese tuition centre near Marsiling MRT in Singapore for Primary 1 to Secondary 4 students. Built to explain the programmes clearly to parents and turn visits into registrations and WhatsApp enquiries. Features: 📚 Programme pages by level, from P1–P2 foundations through PSLE prep to O-Level Chinese ⚖️ "Typical centre vs ZOK Academy" comparison that highlights small classes, structured progression, and MOE alignment 💬 Parent testimonials section 📝 Register Now and one-tap WhatsApp calls to action throughout 🌏 Bilingual site: English and Chinese 🔎 SEO metadata and auto-generated Open Graph preview images

veluate-thumb

Veluate is an AI-powered teacher evaluation system that links how a lesson was taught to what students got wrong, with video proof. It ingests lecture recordings, syllabi, and student exam papers, then runs a multi-agent LangGraph pipeline to answer one question: where exactly did teaching break down, and how does that map to exam mistakes? Features: 🌡️ Confusion Heatmap: timestamped moments in the lecture most likely to lose students 📐 Structure Report: analyses lesson flow, concept build-up, and narrative coherence 📊 Exam Gap Analysis: extracts weak concept clusters from student exam PDFs 🎯 Cross-Reference Report: links specific teaching moments to exam failure clusters 🎬 Video Clip Evidence: auto-generated timestamped clips of the problematic moments via VideoDB ✅ Fact-Check Agent: verifies lecture claims against live web results through the Bright Data SERP API 🔀 Pluggable LLMs: switch between Anthropic, Kimi, and OpenAI with a single env var ⚡ Live job progress: async FastAPI job API with a real-time Next.js evaluation dashboard

Veluate - AI Teacher Evaluation

2026

PythonLangGraphLangChain
Details
hx-thumbnail

Landing page and full event platform for HackXperience 2026, SIM IT Club's flagship 24-hour agentic AI hackathon (theme: AI for Living) with 100+ participants. I led the landing page and admin panel, delivered the internal tools and hackathon platforms (admin, judging, sponsor, voting, leaderboard), and guided the team's architecture and development practices for the live event. Features: 🌐 Landing page: tracks, prizes, timeline, judges, sponsors, FAQ, committee, and a past-event gallery 📤 Project submission portal with a time-gated window (countdown → open → closed) 🛠️ Admin dashboard: review submissions, manage settings, publish results, and view activity logs ⚖️ Judge portal: scoring dashboard for industry judges against the judging criteria 🤝 Sponsor portal: sponsors browse projects, view judge scores, and score submissions for sponsor awards 🗳️ Community voting with a live leaderboard and a "Community Favourites" page 📊 Excel export of results for organisers 🔐 Role-based portal logins with signed sessions for admins, judges, and sponsors

HackXperience 2026 - Hackathon Platform (SIM IT Club)

2026

Next.js 16React 19TypeScript
Details
desmond-ai-assistant thumbnial

A RAG-powered assistant that answers questions about my projects, skills, and experience. Visitors chat through a Streamlit UI; a FastAPI backend retrieves the most relevant context from a ChromaDB vector store and generates grounded replies with OpenAI. Features: 🧠 Retrieval-Augmented Generation: rewrite → retrieve → answer pipeline over a markdown knowledge base 🗂️ Vector search: knowledge is chunked by heading, embedded with OpenAI, and stored in ChromaDB 🛠️ Tool routing: an agent layer decides between answering from the knowledge base, sharing contact details, or politely refusing off-topic questions 🔄 Re-ingest endpoint: update the markdown files and rebuild the vector store with one API call 🔍 Debug endpoints for search results, raw knowledge, and chunk previews 🐳 Dockerised with Docker Compose and auto-deployed to AWS EC2 via GitHub Actions on every push to main

Desmond AI Assistant - RAG Portfolio Chatbot

2026 · 2 weeks

AWS EC2RAGDocker
Details
teamsync

TeamSync is an AI-powered client portal designed for development teams to automate project updates and streamline communication with stakeholders. By transforming pull request activity into engaging video updates, it eliminates manual reporting and keeps everyone aligned in real time. Features: 🎬 Automated Video Generation: Automatically generate polished video updates whenever a PR is merged, including AI-generated summaries, voice narration, app screenshots, and compiled visuals, along with downloadable PDF reports. 🤖 AI Assistant: Chat with a context-aware AI that understands your project, answers questions, and facilitates clearer communication between developers and reviewers. 👥 Team Collaboration: Manage team roles with role-based access, add members easily, and keep everyone updated with real-time notifications. 📊 Project Management: Track progress through dashboards, browse update history, manage documents, and monitor milestones efficiently.

TeamSync - AI-Powered Client Portal with Automation

2026 · 24 hours

Next.js 16Supabase (PostgreSQL, Auth, Storage)OpenAI GPT-4o
Details
ITP2 datavis app

An ITP2 Final Coursework (University of London) data visualisation gallery built in p5.js. A single menu loads real-world datasets as interactive sketches sharing a common lifecycle (setup/draw/preload/destroy) so the gallery can swap canvases cleanly. Included visualisations: 📊 Tech workforce diversity (race & gender) 💰 Gender pay gap by occupation (2017) and over time (1997–2017) 🌡️ Global surface temperature / climate change 🍎 UK food attitudes 🥗 Nutrients over time (1974–2016) with hover emphasis, year range, nutrient filters, rotated axis labels 🧇 Waffle chart with checkboxes, dynamic totals, and hover details 📈 Stock data viewer & simulator with mouse-wheel zoom, drag-to-pan, intervals, moving averages, multi-stock selection, animations, and pause Going beyond the spec: - Gallery abstraction that registers views so each sketch sets up and tears down cleanly - Stock viewer with a full interaction model (zoom, pan, hover, animate, pause) - Nutrients view with multi-dimensional filtering and rotated axis labels

Data Visualisation Gallery (ITP2 Final)

2026 · 4 weeks

p5.jsJavaScriptHTML5
Details
postfix-thumb

A command-line postfix (Reverse Polish Notation) calculator built in Node.js for CM2035 Algorithms and Data Structures 2 midterm (University of London). Expressions are evaluated left-to-right with a stack: literals and variables are pushed, operators pop their operands, compute, and push the result back. Features: 📚 Stack-based evaluation engine with a tokeniser backed by a hand-rolled dynamic array 🔢 Arithmetic operators: + - * / % ^ and // (integer division) 🧮 Math helpers: MIN, MAX, AVG, GCD, LCM, HYPOT, ROUND, TRUNC 📐 Unary functions: NEG, ABS, SQRT, trig and hyperbolic functions, FACT, FIB, EXP, LN, LOG10 🔤 Variables A–Z stored in a fixed-size symbol table with a 26-slot ASCII hash: assign with =, query with ?, delete with # 💻 Interactive REPL (Postfix++ >>>) built on Node readline Going beyond the spec: - Dozens of operators and math functions well past the required arithmetic set - Course-style decomposition with pseudocode for the stack, dynamic array, hash table, and handlers

Postfix++ Calculator CLI (ADS2 Midterm)

2026

Node.jsJavaScriptData Structures
Details