Stack. The tools I build with.
Drag to spinScroll
Core
What I reach for by default. Next.js, TypeScript always, Postgres underneath with Supabase around it, Tailwind on top, Vercel to ship. Astro when a site is mostly words.
Next.jsThe default. App Router, one codebase for the whole product.
ReactWhere most of my hours have gone.
TypeScriptAlways on. The types catch what I'd otherwise catch in production.
AstroFor sites that are mostly words.
TanStackQuery for server state, Table when a grid gets serious.
SupabasePostgres, auth, realtime and storage in one place. My default backend.
PostgreSQLHas handled everything I've thrown at it so far.
Tailwind CSSLets me iterate on feel without leaving the file.
VercelPush to main and it's live. This site included.
StripeBehind every product I've charged money for.
Frontend
I care a lot about how things feel, not just whether they work. Shadcn and Radix for the parts nobody should build twice, Framer Motion and GSAP for the parts that move.
Shadcn UICopy the component in, then make it mine.
Radix UIUnder shadcn. Handles the accessibility I'd get wrong.
Framer MotionMicro-interactions and page transitions.
GSAPFor the scroll-driven stuff Framer can't do.
ZustandThe only state library I haven't regretted.
RechartsCharts, when a product grows a dashboard.
Backend
Postgres is the backbone, always has been. Neon when a project needs its own database, Inngest for anything that has to outlive a request. GraphQL I've met, not married.
Node.jsRoute handlers and the odd script.
NeonServerless Postgres when a project needs its own database.
pgvectorEmbeddings live next to the rows they describe.
ZodEvery input gets a schema. Every API too.
InngestBackground jobs and scraping pipelines that survive a deploy.
ResendTransactional email, templates written in React Email.
Payload CMSWhen a client needs an admin panel and I don't want to build one.
AI
AI in products that actually ship, not demos. OpenAI and Claude for generation and reasoning, Gladia for speech at trale.ai, Playwright and Exa for finding things. This is where the data science degree earns its keep.
OpenAI APIGeneration, embeddings, structured output.
Anthropic APIClaude, for the reasoning-heavy parts.
Vercel AI SDKStreaming and tool use without the boilerplate.
Gladia APISpeech to text at trale.ai. Every meeting goes through it.
Exa APISearch and competitor discovery.
PlaywrightScraping, page extraction, and the screenshots for this site.
Chrome Extension APIsThe trale.ai and Dokio extensions.
Tooling
Ship fast, find out fast. Vercel deploys, GitHub Actions checks, Sentry catches, PostHog counts. Bun because I don't like waiting.
GitHubVersion control, Actions for CI.
DockerVia OrbStack. Mostly for a local Postgres.
CloudflareDNS, CDN, and R2 for files.
PostHogProduct analytics and feature flags.
SentryTells me before the users do.
BunFaster installs, faster runtime, less waiting.
Data Science
Bachelor's in Data Science from Noroff, on the side. The stats get used: retention analysis at trale.ai, not just assignments.
PythonThe language for anything with a dataset.
JupyterWhere the analysis happens before it becomes a feature.
pandasEvery dataset goes through a DataFrame first.
scikit-learnClassical ML. Regression before anything fancy.
SQLWritten by hand. I like to see the query.
Design & Media
I make my own assets, recordings and videos. Good enough that nobody asks who made them.
Premiere ProProduct videos and launch clips.
Screen StudioScreen recordings that don't look like screen recordings.
CanvaQuick assets when Figma is overkill.
Next up
Two languages I want to ship something real in. They're not on the CV until I have.
GoSmall, fast services. The next thing I ship in.
RustSlowly. Mostly for the discipline.
Missing the one you need? Most of this list was learned on the job. The next one will be too.