← All projects
SaaS D3.js React PostgreSQL

Town & Country

A React web application for hotel revenue managers to monitor and analyse competitor room pricing — custom D3 time-series charts with animated transitions, calendar and table views, competitor group management, and persistent pricing rules.

Context

Revenue management in hospitality is a daily practice: hotels constantly adjust room rates based on what competitors are charging. Town & Country gave revenue managers a single dashboard to track that data over time, visualise trends, and encode pricing rules — all without touching a spreadsheet.

What I built

I built the application — a greenfield SaaS product from database to deployed UI.

D3 chart — A custom multi-line time-series chart with four distinct series types: competitor group average, individual room rates, blended market average, and price rule target. Animated transitions on data change, interactive tooltips on hover, and a click-to-toggle legend.

Data processing layer — Processes raw price series into chart-ready data, computing room averages, market averages, summary lines, and rule lines.

Dashboard — Main app container with time-range presets, a date range picker, tabbed navigation, and API integration.

Dynamic Competitor Grouping & Pricing Rules — Full CRUD workflows for competitor room groups and pricing rules.

Additional views — Calendar and table views for different data exploration modes.

Back end — Express API with PostgreSQL using window function SQL for the latest crawled prices, hotel-room map joins, an audit endpoint, and Winston logging.

Outcome

A data-rich revenue management SaaS tool — from PostgreSQL schema through a custom D3 visualisation layer to a , multi-view React dashboard.