Skip to content
tk
All work

Personal project2026

Crystal Ski Rental

A reservation system for a ski rental with four stores — customer booking, staff front desk and admin, built like a real client project.

Type
Personal project
Role
Solo — requirements, design, full-stack development
Period
2026 · in progress
customer, store staff, admin
3 roles
seeded reservations across 4 stores
1,000
Playwright tests on their own database
E2E

Why I built it

Most portfolio projects are todo apps. I wanted one that behaves like real client work: a written brief and requirements first, then a plan delivered as a sequence of reviewable commits, and finally an honest document listing what a real rental would still need before taking customers.

Crystal Ski Rental is a (fictional) ski rental with four stores in Slovak resorts.

What it does

Customers find skis available for their dates, see the price with a length-of-rental discount, book, cancel, and rate both the rental and the ski model.

Store staff run the front desk — pickups, returns and no-shows — and manage their store’s fleet and customer accounts. A manager can only change skis in their own store.

Admins own the catalogue, prices, stores and staff accounts.

Interesting parts

Demo data that never goes stale

The seed is a committed snapshot: 4 stores with 100 pairs of skis each, 27 models, 100 customers and 1,000 reservations from three months back to three months ahead. Nothing in it is dated — every date is an offset from the day of seeding, so the demo always looks current.

The data is also scripted: the demo customer has a rental with a locked rating, one returned today whose rating is still editable, a family booking coming up and one cancelled — so every screen has something meaningful to show.

Seed data people can read

Seed files refer to each other the way people do — stores by slug, models by “Brand Model”, accounts by e-mail — instead of opaque IDs. A generator rewrites them deterministically, and the seeder validates everything before writing a single row.

Tested like production

Unit tests run in Vitest, and Playwright end-to-end tests run against their own database, so they never collide with local development data.

Keep reading

Next project

Or browse all work

Personal2026In progress

Organizer

A task organizer used as a full development-cycle exercise — design system, typed API, database, CI/CD and cloud infrastructure.

  • React 19
  • TanStack Router
  • TanStack Query
  • Tailwind CSS
  • +10