---
title: "Stijn Van Hulle | Front-end engineer"
description: "Front-end engineer from Belgium. Creator of Kubb, an open-source TypeScript tool for generating code from OpenAPI specs."
canonical_url: "https://stijnvanhulle.be/"
meta:
  author: "Stijn Van Hulle"
  "og:description": "Front-end engineer from Belgium. Creator of Kubb, an open-source TypeScript tool for generating code from OpenAPI specs."
  "og:image": "https://stijnvanhulle.be/_og/s/o_0ded7677ab897a42.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "Stijn Van Hulle | Front-end engineer"
  "twitter:image": "https://stijnvanhulle.be/_og/s/o_0ded7677ab897a42.png"
---

> Index of every page on this site: [llms.txt](https://stijnvanhulle.be/llms.txt)

![Portrait of Stijn Van Hulle](https://stijnvanhulle.be/_ipx/f_png&q_80&s_192x192/avatar.png)

# **Stijn Van Hulle **

$ Front-end engineerFront-end engineer

Senior Front-end engineer @ [Whale](https://usewhale.io)

Creator of [Kubb](https://www.kubb.dev)

[Belgium](https://www.google.com/maps/search/?api=1&query=Belgium)

[stijn@stijnvanhulle.be](mailto:stijn@stijnvanhulle.be)

[stijnvanhulle.be](https://stijnvanhulle.be)

[Github](https://github.com/stijnvanhulle) [Kubb Labs](https://github.com/kubb-labs) [LinkedIn](https://www.linkedin.com/in/stijnvanhulle) [Curriculum Vitae](https://stijnvanhulle.be/cv) [Instagram](https://www.instagram.com/stijnvanhulle)

## **Curriculum vitae**

Experience, skills and education · A4 PDF

[**Download PDF**](https://stijnvanhulle.be/cv.pdf) [**View online**](https://stijnvanhulle.be/cv)

**\#**

## **Hello**

Hi, I'm Stijn, a front-end engineer based in Belgium. I spend most of my time building product front ends with TypeScript, React, Next.js, Vue, and Nuxt.

I'm also the creator of Kubb, an open-source code generator for OpenAPI. I started it to avoid writing the same typed API clients by hand. It now takes up most of my open-source time. I also write about front-end work and the tools I'm using.

When I'm not coding, I travel with a camera in my bag. I enjoy seeing new places, learning about other cultures, and meeting people along the way.

![Kubb logo](https://stijnvanhulle.be/_ipx/f_png&q_80&s_48x48/kubb.png)

### **Kubb**

** Open source **

Kubb is where most of my spare coding time goes. Point it at a Swagger or OpenAPI spec and it writes the TypeScript types, clients, and hooks, so your front end and back end stay in step.

*Kubb turns this OpenAPI schema into a TypeScript type and a Zod schema.*

openapi.yaml

```
components:  schemas:    Pet:      type: object      required: [id, name]      properties:        id: { type: integer }        name: { type: string }
```

gen/pet.ts

```
export type Pet = {  id: number  name: string}export const petSchema = z.object({  id: z.number().int(),  name: z.string(),})
```

[**kubb.dev **](https://www.kubb.dev)

**\#**

## **Contributions**

[@stijnvanhulle →](https://github.com/stijnvanhulle)

11,297 contributions in the last year

NovDecJanFebMarAprMayJunJulAugSepOctNov

Less

More

**\#**

## **Projects**

[View all →](https://stijnvanhulle.be/projects)

[<h3>**LED desk display**</h3>A Raspberry Pi drives a 64×16 Bluetooth LED panel on my desk, with a control page, a busy light from my work calendar, and an MCP endpoint so Claude can write to it.**#raspberry-pi**** #python**** #bluetooth**** #nuxt**** #vue**** #mcp**** #claude**](https://stijnvanhulle.be/projects/led) [<h3>**openapi-import**</h3>Import an OpenAPI spec in TypeScript like any other file, with types, autocomplete, and errors from the spec and no generated files.**#typescript**** #openapi**** #kubb**** #content-mapper**](https://stijnvanhulle.be/projects/openapi-import) [<h3>**Scrum poker**</h3>Planning poker cards for your phone, with rooms that put every vote, the story, and the team's questions on one shared screen.**#vue**** #nuxt**** #pwa**** #scrum**** #webrtc**](https://stijnvanhulle.be/projects/scrum-poker) [<h3>**Agents**</h3>Shared skills, rules, commands, subagents, and output styles for Claude Code, Cursor, and Codex, installable as a plugin.**#agents**** #claude**** #cursor**** #codex**** #skills**** #typescript**](https://stijnvanhulle.be/projects/agents) [<h3>**Kubb**</h3>Define your API once and Kubb generates TypeScript types, clients, hooks, validators, and mocks from an OpenAPI specification.**#typescript**** #openapi**** #codegen**** #react-query**** #vue-query**** #zod**** #plugins**** #mcp**** #swr**** #axios**](https://stijnvanhulle.be/projects/kubb)

**\#**

## **What I work with**

A short list of the languages, frameworks, and tools I use most.

[TypeScript](https://www.typescriptlang.org) [ JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) [ HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) [ CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) [ Sass](https://sass-lang.com) [ SQL](https://en.wikipedia.org/wiki/SQL) [ React](https://react.dev) [ Vue](https://vuejs.org) [ Nuxt](https://nuxt.com) [ Next.js](https://nextjs.org) [ Node.js](https://nodejs.org) [ Redux](https://redux.js.org) [ Zustand](https://github.com/pmndrs/zustand) [ Zod](https://zod.dev) [ GraphQL](https://graphql.org) [ Tailwind CSS](https://tailwindcss.com) [ Styled Components](https://styled-components.com) [ jQuery](https://jquery.com) [ Meteor](https://www.meteor.com) [ Git](https://git-scm.com) [ Docker](https://www.docker.com) [ AWS](https://aws.amazon.com) [ GitLab](https://gitlab.com) [ Bitbucket](https://bitbucket.org) [ Jenkins](https://www.jenkins.io) [ OpenAPI](https://www.openapis.org) [ Swagger](https://swagger.io) [ Claude](https://www.anthropic.com/claude) [ Cursor](https://cursor.com)

**\#**

## **Experience**

### **Senior Front-end Engineer ****Belgium (Gent)**

![Whale logo](https://stijnvanhulle.be/_ipx/q_80&s_40x40/brands/whale.png)

Whale

Aug 2026 – present

At Whale, I work on the front end of an AI platform for documenting processes and training teams. Whale is a Ghent-based SaaS company for small and medium-sized teams, where important process knowledge often lives with one person until they leave.

[**usewhale.io **](https://usewhale.io)

### **Senior Front-end Engineer ****Belgium (Gent)**

![Robovision logo](https://stijnvanhulle.be/_ipx/q_80&s_40x40/brands/robovision.png)

Robovision

Nov 2025 – Aug 2026

As a front-end developer on Robovision's product team, I worked on the technical direction and feature delivery of its product suite with Vue.js. I used my previous experience to update the front-end architecture with tools such as Nx and TypeScript.

I also helped the team evaluate and integrate AI tools into its work.

[**www.robovision.ai **](https://www.robovision.ai)

**#typescript**** #vue**** #zod**** #sass**** #git**** #ai**** #gitlab**** #claude**** #cursor**** #llm**** #scrum**** #agile**

### **Creator ****Belgium (Watervliet)**

![Kubb logo](https://stijnvanhulle.be/_ipx/q_80&s_40x40/kubb.png)

Kubb

Dec 2022 – present

Kubb is an open-source framework for code generation and the project I spend most of my open-source time on. Point it at a Swagger or OpenAPI spec and it generates TypeScript types, clients, and hooks, so the front end and back end stay in sync. As its creator and maintainer, I guide the architecture, build and review plugins, write the documentation, and support its contributors and users.

[**www.kubb.dev **](https://www.kubb.dev)

**#typescript**** #openapi**** #swagger**** #code-generation**** #react**** #vue**** #zod**** #open-source**

### **Front-end Lead ****Belgium (Brussels)**

![Mediagenix logo](https://stijnvanhulle.be/_ipx/q_80&s_40x40/brands/mediagenix.jpg)

Mediagenix

Dec 2021 – Nov 2025

After a year as a front-end developer on the product/hive team, I became front-end lead. I helped the team deliver projects on time and to a high standard, mentored team members through technical decisions, and reviewed their code.

I worked with stakeholders to discuss product direction and progress, decide what mattered most, and turn those decisions into work for the team.

Alongside managing the team, I kept our front-end practices current through industry events, training, and regular research. I documented our decisions and the reasoning behind our front-end architecture so the team could use them as a reference.

I also updated the stack with React, Jest, TypeScript, Ant Design, a monorepo structure, generated API clients, Zustand, and Zod. The changes gave the team a more consistent foundation as the products grew.

[**www.mediagenix.tv **](https://www.mediagenix.tv)

**#typescript**** #react**** #zod**** #zustand**** #sass**** #aws**** #git**** #docker**** #jenkins**** #scrum**** #agile**

**\#**

## **Blog**

[View all →](https://stijnvanhulle.be/blog)

[![Cover image for Import an OpenAPI spec in TypeScript](https://stijnvanhulle.be/images/blog/import-openapi-specs-in-typescript.svg)<h3>**Import an OpenAPI spec in TypeScript**</h3>**New ** Published on 23.10.2026](https://stijnvanhulle.be/blog/import-openapi-specs-in-typescript) [![Cover image for Node version numbers now match the calendar year](https://stijnvanhulle.be/images/blog/node-release-schedule-change.svg)<h3>**Node version numbers now match the calendar year**</h3>Published on 24.06.2026](https://stijnvanhulle.be/blog/node-release-schedule-change) [![Cover image for Preventing npm supply chain attacks](https://stijnvanhulle.be/images/blog/preventing-npm-supply-chain-attacks.svg)<h3>**Preventing npm supply chain attacks**</h3>Published on 08.06.2026](https://stijnvanhulle.be/blog/preventing-npm-supply-chain-attacks) [![Cover image for Rules, skills, commands, subagents, MCP](https://stijnvanhulle.be/images/blog/rules-skills-commands-subagents.svg)<h3>**Rules, skills, commands, subagents, MCP**</h3>Published on 05.06.2026](https://stijnvanhulle.be/blog/rules-skills-commands-subagents) [![Cover image for Mapping data with Zod](https://stijnvanhulle.be/images/blog/mapping-of-data-with-zod.svg)<h3>**Mapping data with Zod**</h3>Published on 01.09.2024](https://stijnvanhulle.be/blog/mapping-of-data-with-zod)

**\#**

## **Sponsors**

[View all →](https://stijnvanhulle.be/sponsors)

Thanks to everyone who supports my open-source work. [Become a sponsor](https://github.com/sponsors/stijnvanhulle).

- [![CodeRabbit logo](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/132028505%3Fv=4)**CodeRabbit** $100/mo](https://github.com/coderabbitai)
- [![Claude logo](https://github.com/anthropics.png)**Claude** $100/mo](https://claude.com)
- [![Zendr logo](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/88317384%3Fv=4)**Zendr** $10/mo](https://github.com/MKM-Group-AB)
- [![Matt Sutkowski avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/784953%3Fu=6852558d80a14df3a55d6e722fd373e55f9349a1%26v=4)**Matt Sutkowski** $10/mo](https://github.com/msutkowski)
- [![Volodymyr Kushnir avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/10290626%3Fu=c5bb6bc6f6c4bf82e4505001111e579678155806%26v=4)**Volodymyr Kushnir** $10/mo](https://github.com/volodymyr-kushnir)
- [![Éric Le Maître avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/19361503%3Fu=6f4c3621b32902246377fbd6cb93dbb367ac503f%26v=4)**Éric Le Maître** $5/mo](https://github.com/Ericlm)
- [![Denis Davydenko avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/72747890%3Fu=13cabb34eabd2199767f98bd821d368adc3d948c%26v=4)**Denis Davydenko** $5/mo](https://github.com/denisdavydenko)
- [![Vanhoecke Vinnie avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/8697647%3Fv=4)**Vanhoecke Vinnie** $5/mo](https://github.com/VinnieV)
- [![Colton Eakins avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/16803020%3Fu=b69c87fa06f116306a693fbf41c4c3887e439668%26v=4)**Colton Eakins** $5/mo](https://github.com/coltoneakins)
- [![Cipher avatar](https://stijnvanhulle.be/_ipx/q_80&s_80x80/https://avatars.githubusercontent.com/u/50848437%3Fu=06b8503633d903bd775c037e145cf3607fcc5244%26v=4)**Cipher** $1/mo](https://github.com/thefoxbun)

**\#**

## **Connect**

Feel free to contact me at [stijn@stijnvanhulle.be](mailto:stijn@stijnvanhulle.be)

[Github](https://github.com/stijnvanhulle) [Kubb Labs](https://github.com/kubb-labs) [LinkedIn](https://www.linkedin.com/in/stijnvanhulle) [Curriculum Vitae](https://stijnvanhulle.be/cv) [Instagram](https://www.instagram.com/stijnvanhulle)

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://stijnvanhulle.be/#website","@type":"WebSite","description":"Front-end engineer from Belgium and creator of Kubb, an open-source TypeScript tool for OpenAPI code generation.","inLanguage":"en","name":"Stijn Van Hulle","url":"https://stijnvanhulle.be/","publisher":{"@id":"https://stijnvanhulle.be/#identity"}},{"@id":"https://stijnvanhulle.be/#webpage","description":"Front-end engineer from Belgium. Creator of Kubb, an open-source TypeScript tool for generating code from OpenAPI specs.","name":"Stijn Van Hulle","url":"https://stijnvanhulle.be/","@type":["WebPage","ProfilePage"],"about":{"@id":"https://stijnvanhulle.be/#identity"},"isPartOf":{"@id":"https://stijnvanhulle.be/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://stijnvanhulle.be/"]}]},{"@id":"https://stijnvanhulle.be/#identity","@type":"Person","description":"Stijn Van Hulle is a front-end engineer from Belgium and the creator of Kubb, an open-source TypeScript tool for generating code from OpenAPI specs. He builds product front ends with React, Vue, and Nuxt.","jobTitle":"Senior Front-end Engineer","name":"Stijn Van Hulle","url":"https://stijnvanhulle.be","address":{"@type":"PostalAddress","addressCountry":"BE"},"image":{"@id":"https://stijnvanhulle.be/#/schema/image/1"},"knowsAbout":["TypeScript","JavaScript","React","Next.js","Vue","Nuxt","Node.js","Redux","Zustand","GraphQL","Zod","Sass","OpenAPI","Swagger","Code generation","REST APIs","Front-end architecture","Web development","Docker","AWS","Git","CI/CD","Open source","AI tooling","Large language models","Agile","Scrum"],"sameAs":["https://github.com/stijnvanhulle","https://www.linkedin.com/in/stijnvanhulle","https://x.com/stijnvanhulle","https://instagram.com/stijnvanhulle","https://www.kubb.dev"],"worksFor":[{"@type":"Organization","name":"Whale","url":"https://usewhale.io","logo":"https://stijnvanhulle.be/brands/whale.png","description":"SaaS company in Ghent building an AI platform for documenting processes, sharing knowledge, and training teams.","address":{"@type":"PostalAddress","addressLocality":"Ghent","addressCountry":"BE"},"sameAs":["https://usewhale.io","https://www.linkedin.com/company/usewhale/"]},{"@type":"Organization","name":"Kubb","url":"https://www.kubb.dev","logo":"https://kubb.dev/logo.png","email":"kubb@kubb.dev","description":"Generate types, clients, hooks, validators, and mocks from one OpenAPI specification.","sameAs":["https://github.com/kubb-labs/kubb","https://discord.gg/shfBFeczrm","https://www.linkedin.com/company/kubb-labs"]}]},{"@id":"https://stijnvanhulle.be/#/schema/image/1","@type":"ImageObject","contentUrl":"https://stijnvanhulle.be/avatar.png","inLanguage":"en","url":"https://stijnvanhulle.be/avatar.png"}]}
```

## Sitemap

See the full [sitemap](https://stijnvanhulle.be/sitemap.md) for all pages.
