Stack & tools ·
what I actually use.
No affiliate links, no paid mentions. This is the actual daily stack. When something gets replaced, it gets replaced here — and an honest note about what broke.
Hardware
- Mac mini M4
Desk driver. Silent, idles cool, runs Docker + LLM inference + four browser windows + two language servers without thinking about it. The price-to-performance Apple Silicon hit a sweet spot here.
- MacBook Pro 16" M3 Max (48GB)
Road driver. Same workload as the desk machine when I'm on a plane or at a client. 48GB so I never have to think about RAM ceilings during long agent sessions.
- ViewSonic 27" 4K
Factory-calibrated IPS panel, sharp at retina 1.5x scaling. Real estate for code + design side-by-side without eye strain.
- Apple Magic Keyboard
Low-travel scissor keys, full-size with numeric pad. Pairs cleanly across the Mac mini and the MacBook over Bluetooth.
- Logitech MX Master 3S
Only mouse that's ever mattered. Silent click, deep scroll, horizontal wheel for Figma.
- iPad Pro 12.9"
Review + light editing on the road. Sidecar as 2nd screen when I'm visiting clients.
- Sony WH-1000XM5
Cross-continent focus. Noise cancelling on transatlantic flights.
- Edifier R1855DB
2.0 desk speakers. Bluetooth + optical + RCA, balanced for spoken-word podcasts and the kind of music that doesn't need a subwoofer.
Editor & terminal
- Cursorcursor.com ↗
Primary editor since late 2024. AI-pair-coding native — the 20% improvement over VS Code justifies the switch for production work.
- Claude Code (CLI)claude.com ↗
Long-running agentic coding sessions. This site was largely built in Claude Code.
- Cowork (Anthropic)
Planning, docs, prototyping. Two-tier workflow: Cowork plans, Claude Code ships.
- iTerm2 + zsh + starship
For when terminal is cleaner than IDE. Mostly for git and pnpm.
- GitHub Copilot
Autocomplete layer. Lower friction than opening a chat for single-line completions.
Development
- Next.js 16
Default framework for new web work. App Router, Server Components, edge runtime. Best hiring pool in 2026.
- TypeScript 5
Default language for new builds. Strict mode on, no any without a comment explaining why.
- Tailwind v4
Layout utility, scoped CSS Modules for brand/editorial. @theme block for tokens.
- Postgres (Vercel / Neon)
Default DB. Drizzle ORM for new builds, Prisma for legacy ones that already use it.
- Laravel 11 + Filament
Default for ops-heavy + admin-heavy client work. Filament saves months of admin-UI reinvention.
- GSAP 3
Scroll-linked animations where GSAP's ergonomics beat Framer Motion (marquee yoyo loops, ScrollTrigger choreography).
- Playwright
E2E tests for brief form + subscribe flow + admin login. Flaky less than Cypress.
Design
- Figmawww.figma.com ↗
Primary canvas: auto-layout, variables, component sets, dev mode for measurements. Explorations + component specs — then I rebuild the real UI in Next.js so the browser is the source of truth.
- FigJamwww.figma.com ↗
Workshops, rough IA, journey strips, sticky-note dumps with clients. Faster than forcing structure into high-fidelity frames before we're aligned.
- Tokens Studiotokens.studio ↗
When a system outgrows ad-hoc variables — export token JSON, sync naming with Tailwind @theme / CSS custom properties, fewer "which hex is canonical?" arguments.
- Adobe Illustrator
Precision vectors: logo construction, icon geometry, SVG that needs clean joins before it lands in React. Figma covers 90%; Illustrator wins when Beziers need surgery.
- Adobe Photoshop
Raster lane — photo treatment, texture passes, asset crops for OG images and case-study shots. Nothing ships from PSD; it's prep, then code.
- Lucide + Iconifyiconify.design ↗
Icon vocabulary before custom marks. Browse sets, copy stroke philosophy, then inline SVG in components so tree-shaking and colour tokens stay honest.
Run exports through Jake Archibald's optimiser — strip editor cruft, tighten paths, keep files small enough to commit without guilt.
- Realtime Colors + OKLCH toolsrealtimecolors.com ↗
Perceptual palettes and contrast checks before tokens freeze. OKLCH matches how modern CSS thinks; fewer surprises when `--fg` meets `--bg` in production.
- Coolorscoolors.co ↗
Fast directional palettes in discovery calls — generate, lock an anchor colour, iterate live. Never the final system by itself; it's a conversation starter.
- Syne · Outfit · Instrument Serif · Monaspace Neon
The four-font stack on shipped sites: Syne for display punch, Outfit for body (weight capped at 500), Instrument Serif for italic accents, Monaspace Neon for every meta / terminal surface — GitHub Next's variable-axis mono with texture healing, self-hosted .woff2, SIL OFL licensed.
- Stark (Figma)www.getstark.co ↗
Contrast + vision simulation on frames before handoff. Catches the obvious WCAG misses so we're not debugging grey-on-grey in the browser at 11pm.
Deployment
- Vercelvercel.com ↗
Default production home for Next.js: App Router + Node runtime + edge where it earns its keep. Every PR gets a preview URL; `main` maps to the live domain. Env vars + Cron + image optimisation live here — fewer moving parts than wiring EC2 by hand.
- Neon (via Vercel Postgres)neon.tech ↗
Serverless Postgres wired through Vercel's storage integration (Neon under the hood). Branches when I need an isolated migration experiment, scale-to-zero when traffic sleeps. Drizzle talks to it like any Postgres — no bespoke ORM layer.
- GitHub + GitHub Actionsgithub.com ↗
Repos for everything — private client trees, public OSS, this site. Actions runs lint, type-check, and tests on every push; green CI is the gate before merge. Vercel still owns the actual deploy, but CI catches regressions early.
- Docker + Docker Composewww.docker.com ↗
When the stack isn't "just Vercel" — Laravel services, workers, local Postgres/Redis mirrors, multi-container client setups. Compose files checked in so onboarding isn't "works on my Mac mini" folklore.
- Cloudflarewww.cloudflare.com ↗
DNS for every domain I touch, Turnstile on public forms, CDN/cache where it helps. Workers only when Vercel edge can't — most projects never need the second runtime.
- Railwayrailway.app ↗
Non-default lane when the shape isn't "Next app + serverless DB" — companion APIs, worker-heavy queues, or inheriting a repo that's already deployed there. Greenfield Next.js still ships on Vercel first.
Productivity
- Cowork (Anthropic)
AI-native task + planning. This site's P0 lives here.
- Linear
Client project management when required. Faster than Jira, less chaotic than GitHub Projects.
- Notion Calendar (ex-Cron)
Calendar. Scheduling + focus blocks.
- Websupport
Mail hosting for mail@nkovalcin.com. EU-hosted, GDPR-aligned, works with nodemailer cleanly.
- Notion
Long-form notes + wiki. Separate from the code — Notion is for thinking, repo is for shipping.
AI workflow
- Claude (Anthropic)
Primary LLM. Used daily via Cowork + Claude Code + direct API for MCP servers + AI-automation client work.
- Cursor
Editor-embedded LLM. Mostly Claude via Cursor's MAX mode for deep edits.
- ChatGPT
Occasional comparison check for prompts + when OpenAI-specific features (Structured Outputs) matter.
Services
- Conseto (own)
Analytics + consent + security + marketing + intelligence on this site + Faborino. Eating my own dog food.
- GitHub
Code home for every project — public, private, archived. GitHub Actions runs CI on every PR (lint, type-check, tests, preview deploys).
- Cloudflare
DNS, DDoS shield, and edge cache for every domain I own. Free tier covers everything I need; paid only when a client needs WAF rules.
- Anthropic Claude API
Production LLM inference for client integrations + my own MCP servers. Prompt caching pays for itself within a week of real traffic.
- Stripe
Payments for EU + US + UK clients. Mollie as alternative for EU-only setups.
- Revolut Business
Invoicing + multi-currency banking. Solo-studio cashflow without the legacy bank friction.
- Sentry
Error tracking in production. Free tier handles most client projects.
- Websupport SMTP + nodemailer
Self-hosted transactional email for this site + clients without Mailchimp or Resend lock-in. EU infrastructure, no third-party data sharing.
Same stack, your product.
Discovery first — book a call or send a brief
if this stack fits what you need built.