Case Study · Tourism Platform Modernisation

A decade-old Kyoto tour platform rebuilt with Next.js

We developed the original Kyoto Daily Tours platform in CodeIgniter in 2015 and extended it as the business evolved. We have now rebuilt our long-running system in Next.js, carried forward its existing SQL data and connected the public journey, administration and guide workflows in one bilingual platform. The completed platform is in client content entry before launch.

Product
Kyoto Daily Tours
Sector
Private tours & travel operations
Our role
Legacy modernisation, data migration and full-stack development
Status
Platform complete; launch planned for 2027 after the tourism season
  • 2015Original CodeIgniter platform designed, developed and launched by C-Tech Solutions
  • 2Languages, with English source content automatically translated to editable Spanish
  • 57Connected Prisma models covering content, commerce and operations
  • 32Permission-controlled administration modules managed from one system

Explore the completed pre-launch platform

Review the new customer experience while the client adds the remaining content and prepares for launch after the current season.

Visit Kyoto Daily Tours

Opens in a new tab

Planning a legacy rebuild?

We can walk through the migration strategy, operational model and staged path from an established system to a new platform.

Book a walkthrough

About 30 minutes, no obligation

A long-running product, not a blank-slate rewrite

We designed and developed the original CodeIgniter application for Kyoto Daily Tours in 2015, then added features as the business evolved. Its value is not only in the interface: years of tour definitions, booking history, customer communication, content and operating rules sit behind it.

The replacement therefore had to preserve business continuity while changing the technical foundation. We mapped the existing SQL records into a relational Prisma model, rebuilt the public pages in Next.js and reshaped the private workflows around how administrators and guides actually use the system. Development is complete, and the client is now adding content around its day-to-day workload. Launch is planned for 2027 after the tourism season, when the client team is no longer occupied with its busiest operating period.

A bilingual introduction to the business

The team adds source content in English and the system automatically creates the Spanish version through the Google Cloud Translation API. Both languages share one visual and data model, and administrators can still review and edit the generated Spanish content whenever local nuance or a business-specific phrase needs refinement.

From tour discovery to a confirmed reservation

Structured tour data flows from browse and detail pages into a reservation-fee journey, so the public experience and back-office record describe the same product.

Planning help and durable travel content

Visitors who are not ready to select a packaged tour can request a tailored itinerary, read local guidance and resolve common questions without leaving the platform.

Migration means preserving relationships, not copying tables

The new data layer models the business behind each page: tours connect to languages, cities, types, places, itineraries, pricing, media and add-ons; bookings connect customers, payments, notes, promotions and guide assignments; publishing connects pages, navigation, FAQs, reviews, awards and articles.

That structure allows existing SQL data to move forward without flattening the relationships that make it useful. Migration tooling can reconcile old identifiers, normalise records and verify counts while the application presents a cleaner operational model to the team.

The operations product behind the public website

The custom administration system makes the entire business manageable from one place. Its 32 permission-controlled modules cover tours, prices and itineraries; bookings, payments and guides; promotions and business rules; reporting and traffic; website pages, navigation and editorial content; customer communication; on-site SEO and generated JSON-LD structured data. The dashboard then surfaces revenue, balances, new bookings, enquiries, expiring promotions and work requiring attention instead of reducing the back office to a list of database records.

The tour catalogue as structured operational data

Tours are not treated as decorative pages. The CMS connects bilingual copy to cities, places, itineraries, add-ons, prices, imagery and the records used during booking.

Bookings, calendars and guide coordination

A reservation becomes operational work. The back office provides table, calendar and detail views, then connects the booking with the guide responsible for delivery.

Commercial controls and reporting

Promotion management and business reporting sit beside bookings, giving operators a clearer view of revenue, demand and tour performance.

Governance for a system used by a team

Module permissions, account administration and activity records make responsibility visible as more people work inside the platform.

Publishing and site configuration in one place

The custom CMS also manages editorial content, navigation, reusable pages, email templates and site-wide settings, reducing reliance on code changes for everyday publishing.

A focused workspace for guides

Guides receive a smaller, role-appropriate portal that surfaces their own assignments without exposing the full administration system.

The screenshots show the development environment and are included to demonstrate platform structure and workflow.

Engineering decisions worth explaining

Migrate the business graph

Legacy identifiers and connected records are preserved across tours, bookings, guides, customers, prices and content so the new system inherits operational meaning, not just raw rows.

Translate automatically without removing editorial control

Administrators enter content in English, and Google Cloud Translation automatically prepares the Spanish fields. The generated translation remains editable in the CMS, keeping the workflow fast without preventing human refinement.

Treat payments as server-verified events

PayPal and Square flows verify transaction state on the server and use stable booking references so a repeated callback cannot create duplicate financial effects.

Separate responsibility by role

Module permissions constrain the administration interface, while guides receive a focused portal for their own bookings, calendar and assignment details.

Cache public content deliberately

Tagged caching, incremental regeneration and sitemap warming keep public pages responsive while allowing changed tours and content to be refreshed precisely.

Build accountability into operations

Audit records, traffic monitoring, session controls and dashboard warnings give administrators evidence when they need to understand a change or follow up on risk.

Built with

Application

  • Next.js App Router
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • Server Components
  • Incremental Static Regeneration

Data & migration

  • Prisma ORM
  • MySQL / MariaDB
  • CodeIgniter data migration
  • Relational tour and booking model
  • Migration reconciliation tooling

Operations & integrations

  • next-intl
  • Google Cloud Translation API
  • FullCalendar
  • TipTap
  • PayPal
  • Square
  • Nodemailer
  • Sharp image processing

Related services: Application Modernisation, Custom Web Applications, Business Websites, Technical Support & Maintenance.

Need to modernise a platform the business already depends on?

We can map the existing workflows, migrate the data and replace the technology in stages without treating years of operational knowledge as disposable.

Screenshot preview

Open image in a new tab