← Back to the portfolio

01 / React · Next.js · TypeScript

Interfaces that feel right.

From the first screen to complex workflows: I build interfaces with reusable components, clear states and care for people using touch, mouse or keyboard.

01

Components and state

React and TypeScript to organise interfaces, data and interactions. Runebog combines Next.js pages with an interactive map and encounter editor.

02

Navigation and content

Next.js for dedicated URLs and server-rendered content. Vagabondando serves bilingual travel stories from Sanity, with static pages regenerated within a minute.

03

Interaction quality

Responsive layouts and automated checks. Matchday includes Vitest and React Testing Library tests, plus Cypress browser flows.

Where I put it into practice

Runebog GM

An app for organising tabletop RPG campaigns: navigable maps, D&D monster stat blocks, dungeon generation and encounter management. Includes cloud saves, a table view that can be shared with players, offline use as a PWA and a portable Windows app.

Read the case study ↗

Matchday

A simulated sports betting platform with real fixtures from Europe’s top five leagues, odds generated by the app and fictitious credits. A TypeScript monorepo with a React site, an Express API on PostgreSQL and an Angular back-office, tested with Vitest and Cypress and deployed on Vercel.

Read the case study ↗

Vagabondando

A bilingual travel-journal site for a trekking guide, live at vagabondando.site. The client writes her stories in Sanity Studio and pages update within a minute; the contact form is protected by BotID, a honeypot and a Redis rate limit. The first version handled bookings with Stripe and PostgreSQL.

Read the case study ↗

Something similar in mind?

Tell me about it ↗