26 University of Melbourne coursework projects and practice tasks from 2019 to 2024, rebuilt in 2026 as live demos you can try in the browser.
■ — Coursework timeline
Each cell is a lab. Hover to read, click to jump.
26 labs revived
2019 to 2024 · undergraduate and master's
Level
Undergraduate
Master's
2019 S2
2020 S1
2020 S2
2021 S1
2021 S2
2022 S1
2023 S1
2023 Winter
2023 S2
2024 S1
01What revived means
Each project began as an assignment I submitted at the University of Melbourne, apart from one practice task on a past brief, which is labelled as such. In 2026 I brought them back in three steps, kept separate so it is always clear what is original and what is new. Where the original code was lost, the card says so.
01
Faithful port
The original code is ported to TypeScript and checked against the original Python, C, R or JavaScript with parity tests. Known bugs are kept as submitted and documented, with a corrected mode where it helps.
02
Statistical re-checks
Results are re-checked with confidence intervals, paired tests and simulation, and the notes record where the original conclusions do not hold.
03
Optional BYOK AI
Most labs add an optional AI feature that runs on the visitor's own API key. Its output is checked against the data or scored against simple baselines, and many keep a local log of every call.
Every revival is built withNext.js 16 · React 19 · TypeScript · Tailwind CSS 4 · shadcn/ui
Dates are the final deadline or submission month, shown only as precisely as the records allow.
Team projects name every teammate. Every project links its live demo, plus its guided tour of captioned walkthrough videos where there is one. Source code is linked once its public repository holds the 2026 revival.
02Timeline
Filter projects
Area
Level
Showing 26 of 26 projects
Undergraduate: Bachelor of Science, Data Science, Jul 2019 – Jul 2022
2019
2019, Semester 2
COMP10001Foundations of Computing
Date:
Live
COMP10001 Playground
My first three programming projects in one interactive site: count an election three ways, guide Falca past a dragon to the treasure with BFS and uniform-cost search, and find the best way to group a hand of cards.
My role
Individual projects. I wrote the originals on Grok Learning and built the 2026 revival.
Highlights
·The cave project is a line-by-line port of my surviving 2019 file, bugs included, beside a spec-correct mode. The two lost projects were rebuilt from the task and are labelled as rebuilt.
·Parity tests check the TypeScript against the Python on 230 seeded caves, and property-based tests check invariants against independent oracles.
·A bring-your-own-key evaluation asks whether an LLM can find the best card grouping, scored by the same rules engine against an exact solver and a greedy baseline, with Wilson intervals.
·A coverage simulation showed the bootstrap intervals run narrow on small samples, so the default became 30 hands and those intervals are labelled nominal.
My INFO20003 entity-relationship design for a Louvre ticketing and visitor database, revived as an interactive ERD with the 2020 Workbench model side by side. A SQL playground runs on a synthetic five-year museum database, the brief's ten business questions are answered in SQL, and a refined schema shows what changed and why.
My role
Individual assignment: I drew the Chen and Crow's-foot models in MySQL Workbench and wrote the design assumptions. I built the 2026 revival.
Highlights
·Parsed the original Workbench file and forward-engineered it to MySQL: 13 of the 16 tables on the diagram are created, and a design review explains the other three with twelve findings and their fixes.
·Replayed five years of synthetic activity into the 2020 tables to see what the design could hold: the Wings table, keyed by the wing's name, keeps 3 of 19,545 wing visits. The 2020 design answers six of the brief's ten business questions in full and two in part; the refined schema (19 tables, 2 views, triggers for capacity, re-entry and payment rules) answers all ten.
·Index experiments time seven queries with and without the refined schema's indexes in interleaved rounds, and report medians, bootstrap intervals and query plans. They can be re-run in the browser.
·Optional bring-your-own-key text-to-SQL: the model sees only the schema, a validator allows a single read-only SELECT, and the query runs in a read-only sandbox in the browser. A 22-question evaluation set with hand-written gold SQL measures execution accuracy with Wilson intervals and paired comparisons between runs, and every call is kept in a local audit log. No accuracy figures are published.
My first C assignment, a five-stage cleanser that strips noise from comma-tokenised messages and keeps only known emoticons, revived as a stage-by-stage visualiser running a faithful TypeScript port.
My role
Individual assignment, written on a skeleton from the teaching staff. I wrote the solution and built the 2026 revival.
Highlights
·Recovered the complete 2020 solution from a Notability note and confirmed it reproduces both official sample outputs byte for byte.
·Differential testing on 500 seeded inputs against the compiled C program: all 481 completed runs match byte for byte, and the 19 runs where the C binary crashes are flagged by the port instead.
·A Rules vs LLM harness tests whether a language model can follow the cleansing procedure, scored against the rule engine with Wilson intervals and paired tests. No LLM results are published.
·Bring-your-own-key calls go straight from the browser, are restricted by a Content Security Policy and are recorded in a local audit log.
My COMP20003 2-d tree that finds the nearest of 19,117 City of Melbourne businesses without checking them all. The original C code is lost, so this is a 2026 rebuild from the surviving test files. Click anywhere in Melbourne to watch every comparison and every skipped block, or see how insertion order shapes the tree.
Complete·updated Oct 2026
Revived (done)
Upgraded (done)
Guided tour (done)
Merged (done)
My role
Individual assignment. The 2020 C source and the specification were lost, so in 2026 I rebuilt the program from the test files and my own experiment numbers that survived, and built the site.
Highlights
·The C source is gone, so the 2026 rebuild was written from what survived: one saved Stage 1 output, the five insertion-order files and my recorded comparison counts. A C99 rebuild and a line-by-line TypeScript port both regenerate that output byte for byte.
·The explorer animates the nearest-business search (Stage 1) and the radius search (Stage 2) on a map of the city, with every comparison and every pruned region shown.
·An insertion-order experiment builds the same 4,181 locations five ways. Median-first gives a balanced 13-level tree and west to east gives a 66-level one, and near-business queries cost 18.2 against 77.5 comparisons on average.
·Only one 2020 finding carries over, that sorting by x was the most expensive order. The 2020 counting rule could not be recovered, so the site shows the 2020 numbers beside the rebuild's instead of replacing them.
Original
C · gcc · make · Valgrind · Python · pandas · Matplotlib
My two Elements of Data Processing projects as one interactive lab: replay a breadth-first crawl of rugby match reports, tune an Abt-Buy product matcher and its blocking keys, and train k-NN and decision tree classifiers on World Bank indicators.
My role
Individual projects. I wrote the original code and reports and built the 2026 revival.
Highlights
·Every 2020 figure is reproduced exactly, down to each decision tree node, through ports of NumPy's random generator and scikit-learn's tree builder.
·Repeated 10 × 5-fold cross-validation showed the report's preferred decision tree is not reliably better than 3-NN (95% interval for the gap: -4.4 to +10.2 points).
·Re-running the originals surfaced three differences the reports did not mention, such as two score rules and an unseeded k-means, and the lab lets you switch between them.
·An optional LLM-as-a-judge harness compares a model with the 2020 matcher on a seeded, stratified sample of candidate pairs, run on the visitor's own key and logged locally.
Five interactive chapters built from my own three MAST20005 assignments in R: estimators, fitting a distribution, confidence intervals, hypothesis tests and simple linear regression. Every computation is ported to TypeScript and checked against R, and seeded simulations replay R's own random draws.
My role
Individual assignments. I wrote the original R notebooks and derivations in 2020 and built the 2026 revival from them.
Highlights
·All 34 numbers R printed in the 2020 submission are reproduced character for character, and the six hand calculations agree to their rounding. A parity ledger shows each 2020 value beside its recomputation.
·A port of R's default random generator replays set.seed draw for draw, so the 2020 simulation comparing the midrange with the sample mean comes out as it did then.
·The regression chapter recreates R's summary(lm) printout with R's own formatting rules, plus confidence and prediction bands and the four diagnostic plots.
·Labs that used university datasets start from simulated samples of the same shape, and the Victorian COVID-19 case counts behind the sign and Wilcoxon tests are public figures used as they are.
Original
R · R Markdown · RStudio · MASS
2026 revival
Shared stack + KaTeX · Web Workers · Vitest
Skills
Method of moments and maximum likelihood estimators
Bias, variance and MSE by simulation
t, z, chi-squared and F intervals with a coverage simulator
Sign, Wilcoxon rank-sum and likelihood-ratio tests
Simple linear regression with R's summary output and diagnostics
A COMP30027 pair project from 2021 that classifies recipes by cooking time (quick, medium, slow) using text from Food.com. Rebuilt from the report: paste a recipe and see the predictions, then compare the original models side by side.
My role
Pair project. The partner's name was not recorded. I rebuilt the models from the 2021 report in 2026.
Highlights
·Rebuilt three models from the 2021 report: Doc2Vec with logistic regression, TF-IDF with random forest, and a stacking ensemble combining both feature sets.
·The interactive lab lets you paste any recipe and watch all three models classify it, then explains what each model saw and how confident it was.
·A side-by-side comparison shows how the models differ on the same input, with feature importance and decision boundaries visualised.
A two-portal ordering app for roving snack vans from our INFO30005 group project. Customers find the nearest open vans on a map and order ahead, and vendors run a live order board. Rebuilt as one Next.js app with demo accounts, operations analytics and an A/B test designer.
My role
In Group 4399 I designed the vendor app and built customer ordering, the outstanding-orders list, customer and vendor login, and the optional map and blog features. I rebuilt it in 2026.
Team
Bin Liang, Declan Gannon, Khin Liew and Wei Zhao
Highlights
·Ported the 2021 business rules (nearest vans, order states, change window, pricing) to TypeScript, with parity tests that run the original JavaScript side by side.
·Operations analytics include a Kaplan-Meier time-to-fulfil curve and late-discount rates by van, each shown with its uncertainty and sample size.
·An A/B test designer for the late-discount rule covers sample size, a seeded simulation with a known injected effect, and a peeking warning backed by 10,000 A/A runs.
·Adds an append-only audit trail and an optional bring-your-own-key shift summary that never sees personal data.
·Production now runs on a shared Turso database, so a customer's order reaches the vendor board and the audit tables persist. Decision records explain the earlier per-instance demo storage and why it was replaced.
Original
Node.js · Express · Handlebars · MongoDB Atlas · Mongoose · Passport · Google Maps JS API · Jest · Heroku
My analysis of every 2019 New York yellow-cab trip, revived as an interactive site: the same cleaning rules re-run on more than 84 million records, joined to weather, permitted events and collisions, with zone maps, route lines and the 2021 regression estimating trip times in the browser.
My role
Individual project. I wrote the original PySpark notebook and built the 2026 revival.
Highlights
·Re-ran the 2021 cleaning rules as DuckDB SQL on TLC's current 2019 files. Apart from the raw files, which TLC has since re-issued, every row count lands within 0.003% of the notebook's and is logged beside it.
·The 2021 regression runs in the browser with every term behind a prediction shown, and the 2026 evaluation adds a temporal hold-out, robust standard errors, residual diagnostics and conformal intervals, where a simple lookup table turns out to beat it.
·Zone maps, busiest routes and day-by-day weather, events and collisions for all 263 taxi zones, served from a 15 MB read-only SQLite file holding aggregates only, with no trip-level records.
·An optional bring-your-own-key 'Ask the data' page turns plain-English questions into SQL that the visitor reviews before it runs, with every call labelled and logged.
My Applied Data Science assignment on recovering hidden sources from a synthetic fMRI-style dataset, rebuilt as an interactive lab. Generate the data, then recover the time courses and spatial maps with least squares, ridge, lasso and principal component regression, all recomputed in the browser.
My role
Individual assignment. I wrote the original analysis, notebook and report, and built the 2026 revival.
Highlights
·A bit-for-bit port of NumPy's legacy random generator regenerates the 2021 noise, so every reported number is recomputed exactly in the browser.
·Re-examined the lasso penalty in a paired design on 50 seeded datasets against a comparator fixed in advance: the submitted ρ = 0.625 gives about 10% higher MSE than ρ = 0.60 and is worse on all 50.
·Added a bias-variance decomposition, per-source recovery intervals and paired re-tests of the 2021 claims, with decision records that say where the original reasoning does not hold.
·An optional 'Explain this figure' feature runs on the visitor's own API key, checks each number in the answer against the figure's summary and logs every call locally.
Our MAST30034 industry capstone with CSL on HPLC lab data, rebuilt to run in the browser on synthetic data only. Parse a messy lab-result workbook with a rule cascade, read control charts with run rules, and look for odd runs with PCA, t-SNE, UMAP, K-Means and DBSCAN. No CSL data, code or documents are used.
My role
Group 07 (Team 4399) with Yuchen (Cynthia) Cai, Rongshun Li, Zhiliang (Tommy) Tang and Quzihan (Martin) Wu. The five of us wrote the lab-results parser, the control-chart function and the clustering notebooks together, and I was the team's Scrum Master. I built the 2026 revival.
·In 2021 one ordered set of pattern rules per process stream turned about 99.7% of lab-result records into tidy batch, step and sample fields. The revival sends every leftover row to an 'other' table with a reason, so nothing drops out unnoticed.
·The team's parser, control-chart function and clustering steps are ported to TypeScript and tested against the original 2021 Python on the same synthetic inputs, including all 43 assay, control and measurement charts.
·Monte Carlo studies, each with a 95% interval and a fixed seed, show how far the methods can be trusted: extra run rules raise many more false alarms, limits set from every point can hide a sustained shift, and DBSCAN outliers barely agree with control-chart signals, so clustering stays a review aid.
·Every sheet, chart and cluster comes from a seeded generator that mimics the shape of HPLC exports and plants faults on purpose. An optional bring-your-own-key 'Explain this chart' sees only the chart's numbers, is checked for invented figures and is kept in a local audit log.
A mobile-first personal CRM from our COMP30022 IT Project: keep track of contacts, log geo-tagged meetings, view them on a map and calendar, and swap contacts by QR code. Rebuilt as a single Next.js app with a 'Try as guest' sandbox, an Insights page and an optional AI assistant.
My role
Scrum Master for Team 4399 (Group 49) and a front-end developer on contacts, meeting records and the map. I rebuilt it in 2026.
Team
Bin Liang, Hongji (Harrison) Huang, Wei Zhao and Yixiao Tian
Highlights
·Ported the original search, sort, validation and contact-sync logic, with parity tests that load the 2021 functions straight from the coursework folder.
·Closed security gaps found during the port: queries are scoped to the signed-in owner, a constant reset bypass is gone and sessions use httpOnly cookies.
·An optional bring-your-own-key meeting-note assistant removes names, e-mails, phone numbers and addresses in the browser before any call, and a 32-note harness compares its follow-ups with a rule-based baseline note by note (paired bootstrap, exact sign test).
·Replaced the 2021 services: MapLibre with OpenFreeMap tiles and Photon geocoding instead of Google Maps, an on-screen demo inbox instead of Gmail, and a shared Turso database instead of MongoDB Atlas.
·'Try as guest' creates a private 24-hour sandbox with 25 contacts and 40 meetings. The Insights page shows meetings per week with a seeded bootstrap interval, and every account can export or delete everything stored about it.
Original
React 16 · Material UI · Express · MongoDB · Mongoose · Passport (JWT) · Google Maps API · Jest · Heroku
An ungraded practice task: a 300 MW, 580 MWh grid battery on Victoria's spot market, scheduled by an exact optimiser on eight years of public AEMO prices. It answers the MAST30034 2021 grid-battery brief, which Martin and I picked up for practice in May 2022. Our practice repository never got past a folder scaffold.
My role
Self-run practice with Quzihan (Martin) Wu, separate from our assessed capstone. Our 2022 practice repository held only a folder scaffold, so I built the 2026 lab from the brief.
Team
Quzihan (Martin) Wu
Highlights
·Nothing here was submitted for assessment, the brief is paraphrased, and the course's own data file is not redistributed.
·A Python reference model (a mixed-integer program solved with HiGHS) produces every precomputed number, and a TypeScript optimiser in the browser matches its revenue to the cent on ten days and three battery designs.
·On the brief's six-week test window, perfect foresight earns about $5.93 million, and the best practical policy, a time-of-day schedule, earns 63% of that. Rolling and day-ahead persistence earn about 40%.
·The public AEMO prices match the course's own extract on all 63,456 overlapping half-hours, and the Dispatch Lab runs any day from 2018 to 2025 with a battery you can resize.
Our COMP30024 agent for Cachex, a Hex-like connection game with captures and a steal rule, revived as a browser arena. Play the minimax agent, watch AI vs AI, step through the A* solver, and run a seeded tournament that reports win rates with confidence intervals.
My role
Pair project with Wei Zhao as team _4399: we wrote the A* solver, the minimax agent and the Part A report together. I rebuilt it as Cachex Arena in 2026.
Team
Wei Zhao
Highlights
·Ported the Python agent and A* solver line by line to TypeScript running in Web Workers. Parity tests match the original on 184 A* runs, 40 refereed games and 179 minimax searches.
·A seeded 1,200-game round robin with Wilson and bootstrap intervals showed the dynamic-depth search rarely went past one ply, and a one-line bug stopped alpha-beta from narrowing its window. Both are documented and the agent is kept as submitted.
·A paired study on 980 random boards compared the Manhattan and Euclidean heuristics with a paired bootstrap, Wilcoxon and exact McNemar tests: Manhattan expands fewer nodes but finds a shortest path less often.
·Two optional bring-your-own-key features: an LLM Arena where the visitor's model plays the agent, with every move validated against the legal set and results compared game by game with simple baselines, and a move commentator whose claims are checked against the agent's own search. Every call is kept in a local audit log.
Master's: Master of Data Science, Feb 2023 – Jul 2024
2023
2023, Semester 1
COMP90051Statistical Machine Learning
Date:
Live
Human or Machine?
Team 27's detectors for a class Kaggle competition: decide whether a text was written by a person or a model when every word has been replaced by a number. Revived as a lab where the original weights score texts live in the browser, with a class-imbalance sandbox and a leak-free re-evaluation.
My role
Team 27 with Yifei Du and Huihui He. I worked on the MPI preprocessing and the CNN experiments, and shared the bag-of-words features with Yifei and the SMOTE and under-sampling comparison with both; Yifei built the SVM and SGD models and Huihui the logistic regression and word embeddings. I built the 2026 revival.
Team
Yifei Du and Huihui He
Highlights
·Exported the six original detectors' weights once and score them in the browser; all 6,000 test predictions (six models by 1,000 texts) match the 2023 files.
·An interactive detector blends human and machine token profiles into a specimen and shows which token ids push the score each way.
·Re-checking in 2026 found that the 2023 validation split leaked copied machine texts. Re-fitted on a clean split, the domain-1 detector still separates the classes well, but a text-length baseline comes close, and both are reported with 95% intervals.
·A class-imbalance sandbox compares SMOTE with random under-sampling and shows what the notebooks' SMOTE step actually did, and an experiment journal records the meetings, the approaches tried and every leaderboard submission.
Our pair assignment that processed 9.09 million geotagged tweets with MPI on the University's Spartan HPC, revived with the original results, the scaling story, and the same algorithm running across Web Workers in your browser.
My role
Pair assignment with Wei Zhao: we wrote the MPI program and the report together. I built the 2026 revival.
Team
Wei Zhao
Highlights
·The original split the 18.74 GB file into byte ranges per MPI rank; wall-clock time fell from 11:01 on one core to 1:41 on eight (one run per layout).
·While porting, found a chunk-boundary bug that can count a tweet twice (about 1 in 500 boundaries). The port keeps it, a test pins it and the lab explains it.
·The browser benchmark repeats each worker count in shuffled rounds and reports medians with exact order-statistic intervals and bootstrap intervals, with coverage checked by simulation.
·An optional Ask page answers only from the result tables, must cite rows and show its arithmetic, and every answer is checked automatically and logged locally. A 24-question harness, including questions the tables cannot answer, scores a model on the visitor's own key.
Team 57's cloud analytics project, which scored 2.4 million geotagged tweets and 1.7 million Mastodon toots for sentiment and compared them with official income and crime data, revived as a read-only site with maps, linked charts and a reproducible data pipeline.
My role
Built the React front end for Team 57 and worked on data processing and API tools. I built the 2026 revival.
Team
Xuan Wang, Wei Zhao, Zongchao Xie and Runqiu Fei
Highlights
·Re-ran the team's own Python on the surviving inputs with 18 parity checks against the 2023 dashboard, producing a 1.7 MB read-only SQLite database.
·Ported NLTK's tokeniser, WordNet lemmatiser and VADER to TypeScript; they match the original Python with no mismatches on 44,156 real toots.
·Added uncertainty and spatial statistics: t-based intervals per area, Moran's I with LISA cluster maps, and suppression of areas with fewer than 30 tweets. Both headline relationships are consistent with no association.
·Optional text-to-SQL on the visitor's own key: the server validates and runs one read-only query, answers must cite rows, and a 16-question harness measures execution accuracy.
My multi-armed bandit project, revived as a browser lab: successive-elimination bandits that cope with late or lost feedback, Thompson sampling and Doubly-Adaptive Thompson Sampling, evaluated in 2023 by replaying 300,000 recorded news clicks. Now they race on a seeded synthetic log whose delays you can reshape, up to seven algorithms side by side.
My role
Individual project. I wrote the original notebook and built the 2026 revival.
Highlights
·Ported the five algorithms line for line to TypeScript running in a Web Worker, with NumPy's PCG64 generator, ziggurat normals and pairwise sums reproduced exactly, so the browser prints the notebook's results to the last digit.
·Where the notebook had a single run, each algorithm now replays over 20 seeded repetitions with bootstrap bands, paired comparisons against Thompson sampling, effect sizes and delay-sensitivity heatmaps.
·Visitors can shape per-arm Pareto delays, packet loss and reward-dependent lags, then scrub through the confidence bounds, eliminations and posterior draws inside each algorithm.
·An optional bring-your-own-key experiment lets a language model choose the arms, scored against Thompson sampling and UCB1 on the same seeds, with every call written to an exportable audit log.
Three assignments on generalised linear models, revived as six interactive case studies: logistic, log-linear, multinomial, proportional-odds and GEE models refitted live in the browser and checked against the R code I submitted in 2023.
My role
Individual assignments. I wrote the original R Markdown analyses and built the 2026 revival.
Highlights
·Reimplemented glm, nnet::multinom, MASS::polr and geepack::geeglm in about 1,300 lines of dependency-free TypeScript; 49 parity checks hold them to R's output, typically within 1e-9.
·Each case study lets visitors change the inputs and recomputes estimates, intervals and tests on the spot, from beetle dose-response to a three-way table that shows Simpson's paradox.
·Added model checks the coursework did not ask for: simulated residual envelopes, influence, over-dispersion, profile-likelihood intervals, a proportional-odds test and GEE sensitivity, every simulation seeded. Slips in the 2023 write-up are shown beside the recomputed value.
·An optional bring-your-own-key reading aid explains each page from its numeric summary only, flags numbers it cannot trace and keeps an exportable audit log. The sensitive Assignment 1 survey appears only as model summaries.
Original
R · R Markdown · nnet · MASS · geepack · ggplot2
2026 revival
Shared stack + KaTeX · Vitest · zod
Skills
Logistic and binomial GLMs (dose-response, LD50)
Poisson log-linear models for contingency tables
Multinomial and proportional-odds models
GEE with robust sandwich errors
Stepwise model selection and analysis of deviance
Simulated residual envelopes and influence checks
Porting IRLS and Newton-Raphson fits to TypeScript
Our Group 40 survey of self-driving databases, rebuilt as a lab where five index advisors from 1985 to 2023 race a no-index baseline on a live SQLite database in your browser. QueryBot 5000's forecasting pipeline feeds an index tuner, and the survey becomes a filterable map of the field with two mis-attributed citations corrected.
My role
Group 40 with Xiaoyi Liu, Runqiu Fei and Qingxuan Yang. Runqiu and I wrote the index selection half of the survey, Xiaoyi and Qingxuan wrote workload-driven optimisation, and the four of us wrote the introduction, discussion and conclusion together. I built the 2026 revival.
Team
Xiaoyi Liu, Runqiu Fei and Qingxuan Yang
Highlights
·Implemented the algorithms the survey described but never ran: DROP, AutoAdmin, DB2 Advisor, CoPhy and the C²UCB bandit, each written from its paper in TypeScript and tested against brute force, exhaustive search or the paper's worked example. They tune the same SQLite database in a Web Worker, and total time counts recommendation, index builds and queries.
·A benchmark replays 10 seeded workloads per advisor, with bootstrap intervals and paired comparisons against greedy what-if search. Pooled over five sessions, the bandit beat greedy on total time for static and HTAP workloads and lost on shifting ones. On build and run time alone it was slower even on static workloads: on workloads this small, its edge is that it never pays for a what-if search.
·A database journey links two subjects: the Louvre database I designed for INFO20003 in 2020 ships byte for byte as a second dataset with a museum workload, and the lab links back to its 2020 design.
·An optional bring-your-own-key LLM index advisor proposes indexes from the schema, the first round of the workload and SQLite's query plans. The lab validates every index, builds only what a person accepts, measures it on the same seeded workloads and keeps every call in a local audit log.
Two assignments on ridge and lasso, autoregressive model selection, support vector machines and the bootstrap, ported line by line from R. Drag λ, rerun a Monte Carlo study or retrain an SVM, and the site still prints the numbers in the original PDFs.
My role
Individual assignments (Assignments 1 and 3). I wrote the original R Markdown and built the 2026 revival.
Highlights
·Ported glmnet's coordinate descent, LIBSVM's SMO solver, cv.glmnet and e1071::tune to TypeScript, with R's Mersenne-Twister seeding replayed bit for bit, so set.seed(10) draws the same folds and series as in 2023.
·Vitest holds the ports to reference outputs exported from R and to the printed PDFs, from 1e-10 relative error up to exact equality of counts.
·The 2026 upgrade adds Wilson intervals on simulated rates and error rates, paired tests wherever two methods share the same data, repeated cross-validation and coverage checks.
·A known bug in the 2023 model-selection code can be toggled on and off, and the bootstrap page corrects the submission's claim that the bias-corrected estimator is unbiased. An optional bring-your-own-key AI explainer keeps an audit log.
My Bayesian assignment fitting a logistic regression to a small dose-response trial four ways (Laplace, Metropolis-Hastings, HMC and expectation propagation), revived as an interactive explainer that replays the 2023 chains draw for draw.
My role
Individual assignment. I wrote the original R Markdown analysis and built the 2026 revival.
Highlights
·Ported R's random number generator, mvtnorm and QUADPACK integration to TypeScript, so the browser matches the original R output to about 1e-11.
·Found and documented five bugs in the 2023 data encoding and likelihood. An 'As submitted' toggle keeps the original behaviour beside the corrected analysis.
·Added a four-chain Bayesian workflow (R-hat, ESS, MCSE, posterior predictive checks, prior sensitivity), which showed the HMC and EP encoding bug passes every convergence check and is caught only by a predictive check.
·An optional 'Explain these diagnostics' feature runs on the visitor's key and flags numbers or verdicts that contradict the R-hat and ESS thresholds.
Original
R · R Markdown · knitr · mvtnorm · coda
2026 revival
Shared stack + KaTeX · Web Workers · Vitest · zod
Skills
Bayesian logistic regression
Laplace approximation
Metropolis-Hastings
Hamiltonian Monte Carlo
Expectation propagation
Convergence diagnostics (rank-normalised R-hat, bulk and tail ESS, MCSE)
Two assignments on covariance, PCA and high-dimensional classification, revived as three labs: a covariance and eigen playground, a wheat-seeds PCA explorer, and the story of how 365 days of rainfall tell northern and southern Australian weather stations apart.
My role
Individual assignments (Assignments 1 and 3). I wrote the original R Markdown and built the 2026 revival.
Highlights
·Ported a Jacobi eigen-solver, R's glm.fit with LINPACK's pivoting QR, kernel PLS and rpart's tree growing to TypeScript, checked against R in the test suite, so the browser recomputes the wheat PCA, every logistic fit and the PLS tree.
·Wherever the 2023 work had a bug, the lab offers an 'As submitted' and 'Corrected' switch, and the covariance playground corrects one of the original answers.
·Fixing the LOOCV and test-set scaling bugs in the rainfall classifiers brings the logistic regression and the classification tree down to one test error out of 41 (the random forest stays at three), and late-January rainfall turns out to be the most informative stretch of the year.
·The 2026 upgrade adds bootstrap intervals and parallel analysis to the wheat PCA, and a 10 × 5-fold cross-validation on identical folds, which shows the three rainfall classifiers cannot be told apart. An optional bring-your-own-key 'Explain this projection' feature flags any number in its reply that is not in the summary it was sent, and logs every call locally.
Original
R · R Markdown · MASS · randomForest · pls · rpart · ggplot2
2026 revival
Shared stack + KaTeX · Web Workers · Vitest · zod
Skills
Covariance matrices and eigendecomposition
Principal component analysis
Partial least squares
PCA with logistic regression and hand-written LOOCV
Random forests tuned by out-of-bag error
Classification trees (rpart)
Porting R's glm.fit, kernel PLS and rpart to TypeScript
Bootstrap intervals and parallel analysis for PCA
Repeated cross-validation with Nadeau-Bengio and Holm corrections
BYOK AI with a grounding check and a local audit log
A clean-room public-data revival of our MAST90106 and MAST90107 capstone. Do El Niño and related climate patterns help forecast next month's price of wheat, maize, rice, soybeans, palm oil and sugar? Rebuilt from scratch on World Bank, NOAA and FRED data only, with no CSIRO or team data, code or documents.
My role
Group 36 with Ritwik Giri, Jiaqi Hu, Xiangyi (Emma) He and Jihang (Jonathan) Yu, an industry capstone hosted by CSIRO across Semesters 1 and 2, 2023. I built the 2026 revival on my own from public data, so its numbers are new and are not the team's 2023 results.
Team
Ritwik Giri, Jiaqi Hu, Xiangyi (Emma) He and Jihang (Jonathan) Yu
Highlights
·A Python pipeline downloads World Bank Pink Sheet prices, NOAA climate indices and US CPI from FRED, then runs rolling one-step-ahead backtests from January 1990 for every commodity, index and lag from 1 to 12 months.
·Each climate input is chosen on the first half of the evaluation period and scored on the second half, so the comparison with the plain SARIMA baseline is made on months the models never saw.
·The answer is no: none of the eight commodities forecast significantly better with a climate input. The lag screen does find a small, steady link between El Niño and US wheat prices 6 to 14 months later, but it is far too weak to help a one-month forecast.
·In the browser you can refit a rolling climate model and scan all 144 index and lag pairs in a Web Worker, using TypeScript ports tested against the Python reference.
My two NLP assignments rebuilt as three browser demos: a hashtag segmenter, a tweet geolocator using Naive Bayes and logistic regression, and Hangman played by n-gram language models. The 2026 upgrade adds intervals, paired tests, calibration checks and an optional LLM evaluation.
My role
Individual assignments. I wrote both original notebooks and built the 2026 revival.
Highlights
·Ported NLTK's TweetTokenizer, the WordNet lemmatiser and both classifiers to TypeScript; the ports reproduce every test-set prediction from the submitted notebooks.
·Re-analysis showed the two classifiers cannot be separated on 142 test tweets (exact McNemar p = 1.00), and that Naive Bayes is badly overconfident.
·Re-ran all five Hangman guessers on one common split so they are compared pair by pair, with bootstrap intervals on each difference.
·An optional LLM Hangman harness plays a model on the same seeded words under the same scoring, counts invalid guesses, refusals and cost separately, and logs each call in the browser.
Our group's two-stage fact-checker for climate-science claims: TF-IDF retrieval over about 1.2 million Wikipedia passages, then a Transformer trained from scratch labels each claim. Revived so visitors can check a claim of their own or browse the 154 development claims, with the original pipeline re-run faithfully, weak results included.
My role
Group project with Wei Zhao and Xuan Wang. I worked on the system design, preprocessing, TF-IDF evidence retrieval, the report and the presentation. Wei built the Transformer and LSTM classifiers, and Xuan tested and debugged the retrieval, led the literature review and co-wrote the report and presentation. I built the 2026 revival.
Team
Wei Zhao and Xuan Wang
Highlights
·Ported every step of the 2024 notebook to TypeScript and checked it against the original Python, down to NLTK's Porter stemmer and the order in which NumPy breaks ties. Re-running the retrieval rule over all 1.19 million passages reproduces the reported development evidence score to every printed digit.
·Re-running the code in 2026 showed that the Transformer encoder mixed claims within a batch instead of words within a claim, so on a single claim it reduces to a per-word lookup table, which makes every prediction on the site fully explainable.
·It also showed that the committed notebook differs from the code behind the reported results, and that a stray vocabulary term padded the tags of 14% of evidence passages. All three retrieval variants are reproduced: the submitted scoring rule, the notebook's version that counts similarity twice, and its final cell that passes raw text instead of stems.
·The weak spots are stated plainly: retrieval found the right passages for only 13 of the 154 development claims, and the retrained classifier never predicts two of the four verdicts, the class-imbalance problem the report warned about.
·The results page adds Wilson and bootstrap intervals and paired tests, which show the retrained classifier is no better than always answering 'supports' (exact McNemar p = 0.22). An optional bring-your-own-key harness puts an LLM in the classifier's place on the same claims and passages, scores it with paired statistics, checks every passage id it cites and keeps each call in a local audit log.
COMP10001 Playground · Louvre Ops DB · Message Cleanser · Data Processing Lab · MAST20005 Statistics Lab · Recipe Timer Lab · Snacks in a Van · NYC Taxi 2019 · Source Separation Lab · HPLC QC Lab · 4399 CRM · Cachex Arena · Human or Machine? · Spartan Tweet Cruncher · Social Sense · Bandit Lab · Self-Driving DB Lab · CompStats Playground · Multivariate Lab · NLP Playground · Climate Claim Checker
Louvre Ops DB · Message Cleanser · Data Processing Lab · MAST20005 Statistics Lab · Snacks in a Van · Source Separation Lab · 4399 CRM · Cachex Arena · Human or Machine? · Social Sense · Bandit Lab · Self-Driving DB Lab · CompStats Playground · Multivariate Lab · Climate and the Price of Bread · NLP Playground · Climate Claim Checker
COMP10001 Playground · MAST20005 Statistics Lab · Snacks in a Van · Source Separation Lab · HPLC QC Lab · Spartan Tweet Cruncher · Bandit Lab · GLM Playground · CompStats Playground · Climate and the Price of Bread
Louvre Ops DB · K-d Tree Explorer · Recipe Timer Lab · Snacks in a Van · Battery Arbitrage Lab (practice task) · Cachex Arena · Spartan Tweet Cruncher · Bandit Lab · Self-Driving DB Lab · Climate and the Price of Bread · NLP Playground
MAST20005 Statistics Lab · NYC Taxi 2019 · Source Separation Lab · Social Sense · GLM Playground · CompStats Playground · Climate and the Price of Bread
MAST20005 Statistics Lab · Bandit Lab · Four Roads to a Posterior
Social Sense
Snacks in a Van
AI & machine learning
Data Processing Lab · Recipe Timer Lab · Human or Machine? · CompStats Playground · Multivariate Lab · NLP Playground · Climate Claim Checker
Data Processing Lab · Recipe Timer Lab · NYC Taxi 2019 · Source Separation Lab · HPLC QC Lab · Human or Machine? · Bandit Lab · GLM Playground · CompStats Playground · Four Roads to a Posterior · Multivariate Lab · Climate and the Price of Bread · NLP Playground · Climate Claim Checker
COMP10001 Playground · Message Cleanser · K-d Tree Explorer · Data Processing Lab · MAST20005 Statistics Lab · Snacks in a Van · NYC Taxi 2019 · Source Separation Lab · HPLC QC Lab · 4399 CRM · Battery Arbitrage Lab (practice task) · Cachex Arena · Human or Machine? · Spartan Tweet Cruncher · Social Sense · Bandit Lab · GLM Playground · CompStats Playground · Four Roads to a Posterior · Multivariate Lab · Climate and the Price of Bread · NLP Playground · Climate Claim Checker
COMP10001 Playground · Message Cleanser · Self-Driving DB Lab
Data Processing Lab · MAST20005 Statistics Lab · Source Separation Lab · Bandit Lab · CompStats Playground · Four Roads to a Posterior
Data engineering
Spartan Tweet Cruncher · Social Sense
Data Processing Lab · NYC Taxi 2019 · HPLC QC Lab · Battery Arbitrage Lab (practice task) · Social Sense · Climate and the Price of Bread
Data Processing Lab
Louvre Ops DB · Snacks in a Van · NYC Taxi 2019 · 4399 CRM · Battery Arbitrage Lab (practice task) · Social Sense · Self-Driving DB Lab · Climate and the Price of Bread · Climate Claim Checker
Louvre Ops DB
Louvre Ops DB · Self-Driving DB Lab
Web
Snacks in a Van · 4399 CRM · Social Sense
COMP10001 Playground · Louvre Ops DB · Message Cleanser · Snacks in a Van · 4399 CRM
K-d Tree Explorer · Snacks in a Van · NYC Taxi 2019 · 4399 CRM · Social Sense
GenAI evaluation
COMP10001 Playground · Louvre Ops DB · Message Cleanser · Data Processing Lab · 4399 CRM · Cachex Arena · Spartan Tweet Cruncher · Social Sense · Bandit Lab · Self-Driving DB Lab · NLP Playground · Climate Claim Checker
Louvre Ops DB · Snacks in a Van · Source Separation Lab · HPLC QC Lab · Cachex Arena · Spartan Tweet Cruncher · Social Sense · GLM Playground · Self-Driving DB Lab · Four Roads to a Posterior · Multivariate Lab · Climate Claim Checker
COMP10001 Playground · Louvre Ops DB · Message Cleanser · Data Processing Lab · Snacks in a Van · NYC Taxi 2019 · Source Separation Lab · HPLC QC Lab · 4399 CRM · Cachex Arena · Spartan Tweet Cruncher · Social Sense · Bandit Lab · GLM Playground · Self-Driving DB Lab · CompStats Playground · Four Roads to a Posterior · Multivariate Lab · NLP Playground · Climate Claim Checker
Skills