Skip to content
Jan HřebíčekEnaro
Case studies

Modernization + automation

Chata Roklinka: Modernising and automating the reservation system

I took the project over when its original developer had stopped maintaining it. The Next.js app was well architected, but it carried technical debt and an outdated stack — and, above all, most reservations were handled manually. Step by step it became an automated reservation system with online payments that saves the client time instead of taking it.

Manual → auto
bookings without daily intervention
Online payments
checkout without extra contact
RoleTakeover, modernisation & automationStackNext.js · MongoDB · Resend

The challenge

The main problem wasn't only the technology — it was how reservations were handled. The system existed, but the processes were manual and every reservation meant extra work. The owners had to:

  • manually check new reservations
  • manually confirm date availability
  • manually communicate with customers by email
  • manually block booked dates
  • manually release dates on cancellation
  • manually keep a record of each reservation

Instead of saving time, the system created more admin. At the same time, the outdated Next.js version, optimisation and security all needed addressing.

Stabilisation and modernisation

The app ran on an outdated version of Next.js and related tooling, which complicated both deployment and further work. So instead of adding features, I first refactored the key parts:

  • updating the technology stack
  • reworking the build process
  • removing deployment issues
  • optimising image handling
  • fixing dependent code
  • improving performance

Security was part of it too — auditing dependencies and removing risks from outdated versions. The aim wasn't just to fix the current issues, but to create a stable base free of unnecessary technical debt.

Automating the reservation process

After stabilisation came the biggest business problem — manual reservation management. The goal was a system that runs on its own and doesn't need daily intervention. I gradually implemented automations that provided:

  • automatic reservation confirmation
  • automatic customer communication
  • automatic blocking of booked dates
  • automatic release of dates on cancellation
  • automation of the whole reservation workflow
  • fewer manual interventions by the operator

At this stage I kept the mail layer as it was and only folded it into the newly automated processes — new features could be added quickly without rebuilding the infrastructure. The result was a marked drop in admin work.

Payment-gateway integration

I integrated a payment gateway into the reservation process, letting visitors complete a booking comfortably online without further communication with the operator.

  • a simpler booking process
  • more comfort for customers
  • faster reservation processing
  • less manual admin
  • a better overview of incoming payments

Frontend and optimisation

The project also included user-interface and experience improvements:

  • better usability of the reservation process
  • adjustments to selected parts of the site
  • better behaviour on mobile devices
  • optimised loading of content and images
  • higher site speed

These changes made it easier for visitors to complete a booking and improved the overall usability of the app.

A long-term partnership

After the main work, the collaboration continues as technical support and ongoing maintenance. Thanks to the modernised stack, automated reservations and improved stability, the client now has a solution that genuinely helps run the accommodation instead of creating more work.

The project also shows that custom development doesn't always mean building a new system from scratch. In many cases the greatest value comes from taking over an existing project, modernising it and removing the processes that needlessly slow a business down.

Cancellations and refunds

The most recent phase tackled what had until then been handled over the phone — cancelling bookings and returning money. The goal was for the guest to see up front how much they get back, and for the operator to never recalculate anything by hand.

  • a refund preview before the cancellation is confirmed — the guest sees the actual amount
  • a confirmation step stating clearly what will be returned
  • one single definition of the refund calculation for the whole app (it previously existed in four copies)
  • protection against double cancellation — two parallel requests no longer create two refunds
  • an unpaid booking is never promised a refund

The phase also brought a security fix to the endpoint that cancels via an emailed link, and a clean-up of the mail layer: the transport that in practice delivered nothing was removed, so all mail now travels one verified path. The operator additionally gained an overview of sold half-days in the admin, range deletion in two clicks, and a safeguard that stops the calendar from ever overwriting an already paid slot.

Tech used

  • Next.js
  • JavaScript
  • MongoDB 7
  • Resend
  • Payment gateway
  • Cloud hosting
  • Automated reservation workflow

Outcome

  • taking over and stabilising an existing project
  • modernising an outdated Next.js solution
  • improving application security
  • removing technical debt
  • automating reservations and email communication
  • automatic blocking and releasing of dates
  • payment-gateway integration
  • booking cancellation with a refund preview
  • the refund calculation in one place instead of four copies
  • protection against a double refund on parallel requests
  • the mail layer unified onto a single verified transport
  • a better user experience
  • a lower admin burden for the operator