Work
Case Study Retail & Rentals

Ski & Snowboard Rental Management Platform

Delivered a serverless rental management platform on Firebase with real-time inventory control, multi-location support and a Redux-powered SPA.

Overview

Managing ski and snowboard rentals across multiple resort locations is operationally intensive. Equipment needs to be checked in and out, tracked by size and condition, allocated across locations and managed against daily rental demand that varies significantly with weather and season.

Our client operated several rental locations and was running on a mix of spreadsheets and a legacy system that couldn't support real-time visibility across sites. They needed a purpose-built web application that gave staff at each location an accurate picture of inventory and allowed central management to monitor utilisation and revenue across all locations.

What We Built

Serverless backend (Firebase Cloud Functions / Firestore)

We chose Firebase as the infrastructure layer. Cloud Functions handle business logic - rental creation, equipment allocation, return processing, pricing calculations - and Firestore provides the real-time database backing both the management portal and the location terminals.

Firestore's real-time subscription model was particularly well-suited to this use case. When a rental is created at one location, staff at every other location see the inventory update immediately without polling. This mattered for equipment that floats between locations - staff needed to know within seconds when a size became unavailable.

Cloud Functions were structured as discrete, single-purpose handlers - each rental operation (create, extend, return, transfer between locations) is an independent function with its own validation and business rule enforcement. This made testing and deployment straightforward, with no shared mutable state between operations.

SPA (React / Redux / Redux-Saga)

The frontend is a React single-page application with Redux for state management and Redux-Saga for side effect handling. Rental workflows involve several sequential async operations - validating equipment availability, processing payment, updating inventory, printing the rental receipt - and sagas provided a clean way to express these as readable, testable sequences rather than nested promise chains.

The UI has two modes: a simplified check-in/check-out view for floor staff and a management dashboard with inventory reports, utilisation rates and revenue metrics by location. Both are served from the same application with role-based access control.

Technical Decisions Worth Noting

Serverless architecture was the right choice for the usage pattern here. Rental shops are highly seasonal - the infrastructure needs to handle peak demand during winter weekends and essentially idle during the off-season. A traditional server deployment would be over-provisioned for most of the year. Cloud Functions scale to zero when not in use and handle bursts without manual capacity planning.

Redux-Saga over Redux Thunk was a deliberate call. The rental workflows have enough conditional branching - what happens if a payment fails partway through an allocation, how to handle a partial return - that the generator-based saga model made the logic significantly more readable than nested thunks would have been.

Outcome

The platform replaced the existing manual workflow across all locations. Staff onboarding time dropped - the simplified floor view was designed for quick training and new staff were productive after a single walkthrough. The central management dashboard gave the client cross-location visibility they hadn't had before, enabling equipment rebalancing decisions based on real utilisation data rather than guesswork.