Hi there
I'm Tanji. Today I'm officially launching this blog.
For a long time I wanted a place to write things in my own words on my own domain, but I never quite got around to building it. Now that I have, here are some notes on how it came together.
Why a blog, why now
- I want a searchable, persistent record of work notes and side projects
- Flow-shaped platforms like Twitter or Discord make it hard to dig things back up later
- I wanted a serious real Next.js stack to operate end to end
Those three reasons finally lined up.
Tech stack
The whole point was to really push Next.js 16 with everything turned on.
- Next.js 16 (App Router) — Server Components first
- tRPC v11 — typed API shared between RSC and the client
- Prisma 7 — the new Rust-free, WebAssembly-based ORM
- PostgreSQL (Supabase) — managed Postgres + local Docker for dev
- Clerk — JWT auth / role management
- Cloudflare R2 — media storage (public + private buckets)
- Sentry — error tracking with automatic source map upload
- Cloudflare Web Analytics + Speed Insights — metrics
- Vercel — hosting on Fluid Compute
What hurt
Migrating to Prisma 7 cost me a full day. With the legacy generator emitting into node_modules, Next.js 16's output file tracing couldn't follow Prisma 7's dynamic WASM import, so the Vercel Lambda crashed at module load and every page returned 500.
The fix was simply to follow the official guide: switch to the new generator and emit the client to the source tree. The lesson was the boring one — trust the official docs.
What you can expect here
- Next.js / TypeScript implementation notes