← All work

Website with pricing and admin panel · 2026

QC Travel

A family checks the price of a trip. The office gets an enquiry with everything it needs.

Live. The owner edits offers and prices in the panel, and every enquiry is saved with its quote.

Price configurator on a QC Travel trip page: adults, children, room, insurance, meals and the total
The key screen

The configurator on the trip page: number of people, room, insurance, meals. The price updates with every change, and the enquiry goes out with the same breakdown.

The situation

A boutique operator of ski trips to Italy and Austria. The old website was static HTML files with no prices and no backend. Every form was a dummy: it said “thank you” and sent nothing. The owner wanted to show prices and take enquiries without the phone.

What the website has to do

A family picks a date, enters the children’s ages and a room, sees an indicative package price and sends an enquiry with everything the office needs. The office replies with a contract instead of follow-up questions.

Before and now

PriceBeforeA phone call to the office and a manual quote from a spreadsheet.NowThe configurator prices the package as you go, to the złoty, exactly like the spreadsheet.
EnquiryBeforeA dummy form: “thank you” and silence.NowSaved in the panel, a breakdown emailed to the office, an auto-reply to the customer in their language.
Changing an offerBeforeEditing HTML and asking a developer.NowThe owner changes prices, dates and descriptions in the panel. Live within half a minute.

What I built

  • PL/EN website: offers, who it is for, ski school, FAQ, about, contact, enquiry.
  • A configurator on the trip page: date, number of people, children’s birth dates, room, extras. The price updates as you go.
  • A pricing engine with age brackets, multipliers and rounding rules that reproduces the owner’s spreadsheet to the złoty.
  • Each enquiry is saved in the panel first, then an email with the full breakdown goes to the office and an auto-reply to the customer in their language.
  • A Payload panel with around twenty collections: offers, dates, hotels, rooms, regions, training programmes, FAQ, documents, enquiries, newsletter, media.
  • Canonical URLs, hreflang, sitemap, analytics loaded only with consent.

Three decisions

01

The owner changes rates without touching code

Rates, age brackets and seasons are data in the panel. The calculation logic lives in code and has tests, so a price change cannot break a quote.

02

Edits are live within half a minute

Front and panel are one app with one database, instead of a separate WordPress. No deploy and no middleman.

03

The enquiry is saved before the email is sent

A spam filter once silently dropped enquiries. Now every one lands in the database and suspicious ones only get a flag.

Screens

What the owner does alone

Prices and dates, hotel and room descriptions, FAQ, PDF documents, enquiry statuses, newsletter and English versions. She received a manual for the panel: seventeen pages with eighteen screenshots.

In numbers

30 s
from a change in the panel to a change on the site
100%
of enquiries saved, including those flagged as spam
91
PageSpeed mobile, Offers section
2
languages: Polish and English

PageSpeed measured on 4 September 2026. Accessibility, best practices and SEO: 100 each.

How we worked

  1. Brief and price spreadsheets

    Several rounds of questions about how the office prices packages and what an enquiry must contain.

  2. Work in batches, with acceptance

    Each batch checked against real price lists, with acceptance tests.

  3. Handover with a manual

    A manual for the panel and documentation for whoever takes over maintenance.

Technology

  • Next.js 16
  • Payload CMS
  • Supabase
  • Resend
  • Vercel