Localhost is enough at the beginning
Plain localhost instead of custom local domains keeps setup simple while rebuilding muscle memory.
Starting from a blank repo and rebuilding web development craft — one small project at a time.
Ninja Mountain is a personal training ground for rebuilding web development skills. I've started shaping it into a local-first development playground — a place where scattered ideas become working projects.
The structure is a monorepo: apps/web for a Next.js/TypeScript frontend, apps/api for a FastAPI backend, packages for shared types and UI, and a public folder for brand assets.
The first goal was simple: get a homepage with project cards loading from an API. That meant wiring Next.js to FastAPI, understanding how the App Router handles server components, and getting the Tailwind v4 @theme system working correctly.
Small loops matter. Edit a file, refresh the browser, see the change, commit the checkpoint.
Every project on this site is a dot. The Training Notes at the bottom of each page record what that dot connects to: which pattern it reinforces, which mental model it sharpens.
The goal isn't a portfolio. It's a visible, growing practice.
“Small builds. Sharp skills. Every project reveals a path.”
Start with one small working thing.
Understand what it touches.
Strengthen the pattern over time.
Notes compound. Review them.
What building this project taught me.
Plain localhost instead of custom local domains keeps setup simple while rebuilding muscle memory.
From the project root, npm run dev:web starts the Next.js app inside apps/web.
Edit a file, refresh the browser, see the change, commit the checkpoint.