
Travel Project
Content and travel platform on Cloudflare: a Next.js public site and staff dashboard, a Hono API on Workers, a WebBeds/DOTW booking gateway, and long-term R2 backups.
Travel Project
Purpose
The Travel Project is a content-led travel platform designed to bring together editorial storytelling and hotel booking into a single, cohesive experience. It acts as both the public-facing brand and the internal system used by editorial and operational teams to manage content, users, and workflows.
What It Provides
On the public side, the platform delivers a rich editorial experience, featuring articles, reviews, films, hotels, and journal-style content, alongside supporting pages such as about, legal, and authentication flows. It is designed to present travel content in a structured, engaging, and discoverable way.
Behind the scenes, the same platform powers an internal dashboard used by teams to manage content, members, bookings, notifications, and day-to-day operations.
Underpinning this is a modular backend architecture that separates concerns across multiple services. A central API handles authentication, content management, and platform logic, while a dedicated booking service provides hotel search, availability, and booking functionality through a simplified interface. Supporting services handle caching, asynchronous workflows, and long-term archival of content and assets to ensure performance, reliability, and auditability.
What I Built
I worked across the full platform, contributing to both the user-facing application and the supporting backend services.
On the frontend, I helped build and maintain the main application, which includes both the public website and the internal dashboard. This covered content-driven pages such as articles, films, hotels, reviews, and journal entries, as well as authentication flows and editorial tooling.
On the backend, I contributed to the core API that powers the platform, including authentication, session management, content creation and management, transactional email, and system integrations. I also worked on the booking layer, helping integrate a dedicated service that abstracts third-party hotel booking APIs into a clean, reusable interface for the platform.
In addition, I supported the development of a backup and archival system that captures versioned snapshots of content and associated assets, ensuring long-term durability and auditability outside of the live application.
My Role
I worked as a full-stack developer across multiple parts of the system, contributing to the frontend application, backend API, booking integration layer, and supporting infrastructure.
My role involved both building new features and maintaining existing systems, with a focus on ensuring the different parts of the platform worked together as a cohesive whole.
How I Contributed
I contributed by connecting the frontend experience with a distributed backend architecture, ensuring that content, authentication, and booking functionality worked seamlessly across the platform.
I helped design and implement content management workflows, enabling editorial teams to create, manage, and publish a wide range of content types. I also supported the integration of hotel booking functionality through a dedicated service layer, allowing the platform to evolve without being tightly coupled to a single provider.
On the infrastructure side, I worked with a serverless, edge-based architecture, contributing to data storage, caching strategies, background processing, and long-term backup systems. This included supporting asynchronous workflows, content revalidation, and archival processes that improve reliability and resilience.
Overall, my contribution focused on building a scalable, modular platform that combines editorial publishing with travel booking, while supporting both public users and internal operational teams.
Future Enhancements
A key next step for the platform is extending the experience beyond the web by introducing a cross-platform mobile application.
The goal is to build a mobile app using a single shared codebase that can run across Android, iOS, and other supported environments. This would bring the Travel Project experience closer to users, enabling more accessible browsing of editorial content, smoother booking journeys, and improved engagement through a dedicated mobile interface.
The app would mirror core platform functionality, including content discovery, hotel browsing, and booking flows, while also opening up opportunities for mobile-specific features such as push notifications, saved content, and more personalised user experiences.
By expanding into mobile, the platform can evolve from a web-first product into a more complete, multi-platform ecosystem that better supports how users discover and interact with travel content today.
Lessons learned
Choosing the right Cloudflare primitives matters. I initially put a lot of data in KV hoping to make the site faster, but KV was the wrong fit in several places and costs rose. I addressed that by moving most data into D1 and R2: D1 holds page data as the source of truth while authors edit. R2 stores large datasets. KV is used for per-page data so each route can be read quickly without overloading the wrong store.
Users outside the primary region were seeing very long wait times when making changes or using the admin panels, so we added D1 read replicas to reduce cross-region round trips.
Performance was the hardest part of the work because speed is non-negotiable for this product. I cached build assets broadly and added image optimisation with automatic variants for mobile, tablet, and desktop so smaller viewports do not download desktop-sized artwork.
Tech used
- Cloudflare D1
- Cloudflare KV
- Cloudflare Queues
- Cloudflare R2
- Cloudflare Workers
- Cloudflare Workers AI
- Cloudflare Workflows
- ESLint
- Hono
- Next.js
- Prettier
- React
- Sentry
- Tailwind CSS
- TypeScript
- Zod
