Morgan
Then
I came to development through an unconventional path and I think that shows in how I approach problems. Commerce graduate, ARIA-awarded music producer, and now a full-stack developer with three live projects and a genuine love for building things.
JavaScript (ES6+)
HTML5 · CSS3
Next.js (App Router)
Server Actions
Tailwind CSS · shadcn/ui
MongoDB
PostgreSQL · Raw SQL
Supabase Auth
Node.js · Express
Vercel (CI/CD)
Zod · React Hook Form
Prisma ORM
Remit
Invoicing web app
- Full-stack invoicing app built with Next.js, TypeScript, Supabase (auth + PostgreSQL), shadcn/ui and Tailwind. Client and invoice management with validated forms powered by Zod and React Hook Form.
- Each invoice carries a status — draft, sent, unpaid, paid, overdue and void, which conditionally renders an action menu, keeping the UI practical about what actions actually make sense.
- Shareable via a unique public URL, a pre-filled mailto action, and a browser-native Save to PDF flow. Chose void-over-delete after researching how professional invoicing tools handle financial records — invoices are immutable by design for better tax auditing trails.
decisiv
AI-prioritised task manager
- Next.js, TypeScript, Supabase, shadcn/ui with dark/light mode. Integrates Meta's Llama 4 Maverick via a third-party LLM API — calls run server-side through Server Actions to keep credentials off the client. Prompt-engineered the model to return structured JSON scoring each task; parsing and rendering that reliably was the core technical challenge.
- Built-in Pomodoro timer using useEffect and setInterval. Learned first-hand why the cleanup function and dependency array matter when managing a ticking interval without stale closures or memory leaks. Deep work duration is tracked and persisted per session, with the data layer already in place for a future focus stats section.
- Users add personal context in a settings page so the model ranks tasks relative to their actual situation. Includes full account deletion and auth lifecycle management via Supabase.
Droptop
Bookmark manager
- Built twice on purpose. V1 used Node.js and Express with MongoDB and a separate Vite frontend — the full split-repo setup, CORS config and all. V2 is the same app rebuilt in Next.js with PostgreSQL and Prisma. Doing it the long way first meant Next.js API routes stopped feeling like magic and started making sense as a layer over the same request/response pattern.
- Automatically fetches page title, description and cover image via Open Graph scraping on URL blur — the same mechanic Pinterest uses when you save a pin. Database is PostgreSQL managed directly through Prisma 7, which has significant breaking changes from v6: the connection URL moved to a separate prisma.config.ts file and a new driver adapter is required. Most online tutorials were written for v6, so the official docs did the heavy lifting.
- Auth is JWT and bcrypt, rolled by hand. Having implemented it in Express first, doing it again in Next.js was about reinforcing the mental model rather than learning something new. The main difference is exporting named GET/POST/DELETE functions that return Response objects instead of calling res.send().
Built to figure it out
I came to development after a decade music production, audio engineering and touring internationally. Over the years, I've learned how to manage complex projects, meet tight deadlines, and communicate clearly with non-technical stakeholders.
I am fluent in English, Mandarin (and it's various dialects) and Bahasa Malaysia and I hold a triple major Bachelor of Commerce from the University of Western Australia in Managerial Accounting, Finance and Business Economics. I approach code the same way I approached music and finance: understand the system, know what it's trying to do, then build something that actually works for the people using it.
I've been building seriously for just over a year and have three full-stack TypeScript projects live in production. I'm looking for a team where I can keep growing fast.
Let's build
something good
I'm open to junior positions and internships with teams who build things they're proud of. If that sounds like you, I'd love to chat.


