---
name: 'Cue: On-Demand Resource Booking'
description: 'An on-demand resource booking system built for an arcade/pool venue'
tags: ['python', 'typescript', 'svelte', 'postgresql']
image: '../../../public/static/cue.webp'
order: 3
startDate: '2025-09-23'
---

<div class="flex flex-wrap gap-2 my-0! [&>img]:my-0! [&>img]:mt-2!" >
  <img src="https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python" />
  <img src="https://img.shields.io/badge/PostgreSQL-336791?style=for-the-badge&logo=postgresql&logoColor=white" alt="PostgreSQL" />
  <img src="https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript" />
  <img src="https://img.shields.io/badge/Svelte-FF3E00?style=for-the-badge&logo=svelte&logoColor=white" alt="Svelte" />
  <img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker" />
</div>


Cue is an on-demand resource booking system built for an arcade and pool venue. The UI was designed to run on a terminal-like POS touchscreen.

<video autoplay loop muted playsinline preload="auto" data-astro-reload>
  <source src="/static/cue.webm" type="video/webm" />
</video>

## The Problem

The venue's existing workflow had several pain points:

- **Unreliable alerts** — Employees set phone alarms to track booking end times, which was error-prone and easy to miss
- **Cost overruns** — The machine tracking running costs would often exceed the pre-paid amount, since payment happens at booking time, not at the end
- **End-of-shift reconciliation** — Staff had to manually recalculate totals to verify the day's earnings matched expectations

Cue eliminates these issues by centralizing booking management with real-time tracking and automatic cost calculation.

## Features

- Book arbitrary resource types (pool tables, arcade machines, etc.)
- Admins configure pricing and valid booking durations per resource
- Real-time updates via REST API and Server-Sent Events (SSE)
- Maintenance windows to mark resources as unavailable
- Move bookings between resources of the same type
- Cancel or extend active bookings
- Admins configure which operations require employee authentication

## Tech Stack

- **Frontend**: TypeScript, Svelte
- **Backend**: Python, PostgreSQL
- **Communication**: REST API, SSE for real-time updates


