Short, because the tools are the least interesting part. The method section is the one that actually changes the output.
Build
- Next.js — App Router
- Server components by default. Client components only where an interaction requires one.
- TypeScript, strict
- Content is typed data, not markdown. The type system is the content schema.
- Tailwind CSS v4
- Tokens defined once in a theme layer. No arbitrary values in components.
- GSAP + ScrollTrigger
- One animation library. Everything gated behind matchMedia so reduced motion is a real code path, not a class.
- Vercel
- Static generation wherever the content permits it, which is nearly everywhere.
Design
- Figma
- For systems and specification. Not for pretending a static frame is an interface.
- Adobe Illustrator
- Marks, wordmarks, and anything that has to survive being printed badly on a truck door.
- A camera
- Real photography of the real thing beats a stock approximation every time, and it is usually cheaper than the license.
Method
- Positioning before pixels
- Most design problems are positioning problems wearing a design problem’s clothes.
- Write the copy first
- If the sentence is not true and short, no layout will rescue it.
- Ship the defect list
- Every project ends with what is still wrong, sent to the client, in writing.