ToneDeck: Training the One Skill Most Mandarin Apps Skip
I built a Mandarin app built around the four tones. Minimal-pair tone drills, pronunciation scoring, 5,500+ HSK words and a guided beginner course. Free to start, on iPhone.
Thoughts on development, building products, and lessons learned along the way.
I built a Mandarin app built around the four tones. Minimal-pair tone drills, pronunciation scoring, 5,500+ HSK words and a guided beginner course. Free to start, on iPhone.
I built a site that generates printable primary-school worksheets across maths, reading, science and more, organised by topic and grade. The maths answer keys are computed, not written by an AI, so they are never wrong. Generous freemium, with premium options for teachers.
I built my whole portfolio on Laravel for years. Then I moved every project to Next.js: Better Auth, Prisma, Stripe, Cloudflare. Here are the technical reasons, the honest personal one, and what I'd tell a developer weighing the same migration.
I rebuilt fraghub.gg, a data-heavy PUBG stats site, from Laravel to Next.js with React Server Components. Here is what actually changed: content rendered on the server, less JavaScript, simpler data fetching, and the parts that tripped me up.
A sound-first reading game for young kids, built with my friend Gaz. A letter appears, a picture of something that starts with its sound grows in, and the earlier you call the sound the more you score. It already covers letters, blending, sight words, numbers and more. Free, no sign-up, works offline. Early release.
I built a free AI chess coach that reviews your chess.com and Lichess games with a real engine, then explains every blunder in plain English. The engine decides what went wrong, the AI just says it the way a patient human would.
I built a baby-name app where you swipe through names like a dating app and match with your partner in real time. When you both like the same name, it lights up. Free in early release on the web and iPhone.
I built a real-time fuel price comparison app for Australia. Live petrol, diesel and LPG prices on a colour-coded map so the cheapest station is obvious at a glance. Free for now while in early release, no sign-up, on iPhone, Android and the web.
I rebuilt my personal site from Statamic SSG to Astro 6 with React islands. Here's what changed, what I added, and why static pages should ship zero JavaScript.
I benchmarked my Ryzen 9950X3D against my M1 MacBook for real Laravel + Claude Code work. The results were not what I expected.
A PUBG stats and match replay tool. Search any player across Steam, Xbox, or PlayStation, then watch a full 2D replay with movement trails, zone shrink, and live kill feed.
A free PWA for scanning and generating barcodes in 27+ formats, including EAN-13, UPC-A, Code 128, and QR. Works offline, installs to your phone, validates check digits.
A no-signup poker blind timer for home games. No ads, no accounts, just open it and go. Source is on GitHub.
A friend told me to get a traditional job and build apps on the side. I thought it through and picked the opposite path. Here's why building my own apps is the right move for me right now.
KPIs are useful, but they aren't the goal. Take care of your people and your customers and the numbers take care of themselves. A case for people-first metrics with a lesson from Trek Bicycle.
Add a three-state dark mode toggle (light, dark, system) to your Tailwind CSS app with Alpine.js. Copy-paste code that saves the choice, follows the OS setting, and prevents the flash of the wrong theme on load.
Every queued job needs eight things the Laravel scaffold doesn't give you. 23 findings verified against Laravel 13.4.0 with links to real GitHub issues spanning 2015 to 2026.
Laravel's maxExceptions feature doesn't work when the failure mode is OOM. The exception counter lives in the catch block, which never executes during a fatal error. End-to-end proof on Laravel 13.4.0.
A blameless post-mortem on a reverted Laravel framework PR. What happened, what we learned, and the path forward.
Another round of contributions: 14 PRs merged across 5 Laravel repos, with a deep dive into serializable-closure bug fixes.
A reflection on contributing 20 merged pull requests across 12 Laravel repositories in under two weeks.
I was unblocked from the Laravel GitHub org yesterday. Here's the full list of 91 PRs across 27 repos, confidence percentages, and what still needs review.
19 bugs fixed across the Laravel ecosystem: 10 Windows-specific, 9 cross-platform. Every fix verified on Windows 11 and macOS with reproductions and full test runs. Patches linked.
An updated take on sharing data between Laravel and React: PHP 8.1 enums give you type safety, cleaner syntax, and encapsulated behaviour that class constants cannot.
Pass PHP class constants from Laravel to your React frontend through Inertia shared data to create one source of truth for dropdowns, form options, and validation rules, with no extra API call.