gb-coding.nl
Tech stack

A modern, opinionated stack.

Battle-tested tools, chosen for type safety, performance, and long-term maintainability.

Frontend

I default to Next.js (App Router) and React with TypeScript because they give you SSR-rendered HTML for SEO, server components for fast first paints, and a typed contract between UI and data. The strict TypeScript setup catches whole classes of bugs before they reach review — a non-negotiable for codebases that need to live for years.

Next.js
App Router, Server Components, edge-ready
React
Composable UI with type-safe props
TypeScript
Strictly typed across the stack

Backend

Kotlin on the JVM gives you Java's library ecosystem with a modern, expressive language and structured concurrency via coroutines. I pick Ktor for lightweight services and Spring Boot when you need the broader enterprise toolbox (Security, Data, Cloud) without rebuilding it from scratch.

Kotlin
Type-safe, expressive, JVM performance
Ktor
Lightweight, coroutine-native APIs
Spring Boot
Battle-tested for enterprise systems

Database

PostgreSQL is the default for nearly every project — relational, transactional, with great JSON support, Row-Level Security for multi-tenant apps, and a deep ecosystem (PostGIS, pgvector, full-text search). MongoDB and MySQL show up only when the data shape or team familiarity makes them the better fit.

PostgreSQL
Default choice — reliable and rich
MongoDB
When schemas need to flex
MySQL
When the team already knows it

Mobile & Desktop

Kotlin Multiplatform lets you share business logic, networking, and persistence across Android, iOS, and Desktop while keeping native UI where it matters. Compose Multiplatform pushes that share even further when you want one UI codebase. The result: less duplication, faster iteration, and consistent behaviour across platforms.

Kotlin Multiplatform
Android, iOS, Desktop — one codebase
Compose Multiplatform
Modern UI across platforms
FAQ

Stack questions, answered.

Why Kotlin instead of Node.js or Go for the backend?+

Kotlin gives you the JVM ecosystem, structured concurrency via coroutines, and a type system that catches more at compile time than dynamic languages. For long-lived business logic, money, and data integrity, that matters more than raw startup time. Node and Go are great fits for some workloads — I pick per project, not per dogma.

Is Postgres always the right database choice?+

No, but it's the right default. ~90% of projects benefit from a relational core, transactions, and SQL. I reach for MongoDB when the data is genuinely document-shaped or the team is already running a Mongo cluster, and for specialised stores (Redis, ClickHouse, search engines) when the workload demands them.

Do you use Tailwind / shadcn / a specific UI kit?+

Tailwind plus shadcn/ui is my default for new web projects — accessible primitives, no opinionated theme to fight, and full control over markup. For mature design systems I integrate with whatever you already use rather than impose a new one.

How do you decide between SSR, SSG, and a SPA?+

Marketing and content sites: SSR or SSG so Google and social crawlers see real HTML. Apps behind auth: client-side hydrated. Mixed sites: route-by-route. The decision is driven by who needs to read the HTML — humans, bots, or both — not by framework fashion.

Can you work in our existing stack?+

Yes. The stack here is what I default to for greenfield work. For existing projects I work in whatever you already run — Node, Python, .NET, PHP — and bring the same engineering discipline (typing, testing, CI, security) to it.

Start your project today.

Tell me about what you're building. I'll come back with a free estimate within 24 hours.