Stack
What I build with, and where I have used it
Grouped by where each one sits in a build, with the context it was used in. No self-assigned percentages: a score I award myself would not be evidence.
Front end
- React
- Component architecture for dashboards and marketing sites
- Next.js
- App Router, server components, and static generation
- TypeScript
- Strict mode across every project, no implicit any
- JavaScript
- The runtime underneath, including the parts TypeScript hides
- Tailwind CSS
- Token-driven design systems rather than ad hoc utilities
- shadcn/ui
- Radix primitives retuned to a project's own palette
- React Hook Form
- Form state with validation shared client and server
- Accessibility
- WCAG AA audits, keyboard passes, and screen reader testing
Back end
- Node.js
- REST APIs and background jobs behind React front ends
- Express.js
- Routing, middleware, and error handling for JSON APIs
- REST APIs
- Versioned endpoints with validation at every boundary
- Server Actions
- Form handling without a separate API layer
- Zod
- One schema validating a payload on both sides of the wire
- Authentication
- Session handling and role-based access control
Data
- PostgreSQL
- Schema design, indexing, and migrations for relational domains
- MongoDB
- Document modelling where the shape genuinely varies
- Supabase
- Postgres with auth and row level security already wired
- Neon
- Serverless Postgres with branching for preview environments
- Prisma
- Typed queries and migration history on relational schemas
- Drizzle
- SQL-first typed queries where the generated client is too much
- Audit logging
- Append-only trails for products that must show who did what
Tooling
- Git
- Small reviewable pull requests, linear history
- Docker
- Reproducible local environments and parity with deployment
- GitHub Actions
- Typecheck, test, and build on every pull request
- Vitest
- Unit coverage on logic where a wrong answer is possible
- Playwright
- Browser verification of real user flows
- Vercel
- Preview deployments per branch, production on merge
Practices
- Performance budgets
- Core Web Vitals treated as a build gate, not a goal
- Design fidelity
- Side-by-side review against the source file before handover
- Written handover
- Architecture notes and setup steps the next developer can follow