Client Snapshot
- Industry: Travel (agencies and DMCs)
- Client: Quotin
- Headquarters: Monterrey, Mexico
- Timeline: October 2025 to launch in September 2026
- Team: 1 AI Architect · 2 Backend Engineers · 1 Frontend Engineer · 1 DevOps Engineer · 1 Project Manager
- Services: AI Solutions · Platform Development · Travel Integrations · Cloud/DevOps
- Stack: Claude (Anthropic) · Ruby on Rails 8 · Python/FastAPI · PostgreSQL + pgvector · React · Next.js · Sabre GDS · Amadeus · Terraform · AWS
- Traction: About 320 quotes from 6 active agencies in the 90 days to October 2026
The Problem
Every quote meant copying rates from supplier PDFs and spreadsheets, checking availability in another system and converting currencies by hand.
The hard part wasn't finding a hotel. It was turning scattered supplier data into a quote a client says yes to.
- Supplier data in every format: rate sheets and brochures in PDF, Excel, Word and images, no two alike.
- Inventory in separate systems: hotels and flights in Sabre, tours and activities in Amadeus, local suppliers in their own files.
- Duplicate products: the same hotel or tour comes from several suppliers under different names and prices.
- Multi-currency selling: clients pay in MXN, USD or EUR, and exchange rates move every day.
- The quote is the sales pitch: it has to look like the agency, not like a spreadsheet.
The Solution
We treated Quotin as a data problem first: get every supplier's catalog into one clean structure, then let AI and live inventory build the quote on top.
AI-First Architecture
- Tiered model routing: Claude Haiku 4.5 runs extraction and tool calls; Claude Sonnet 4.6 writes the final answer. Cost is tracked per model.
- Vision extraction: Claude reads rate sheets and brochures straight from PDFs and images, so nobody retypes prices.
- Ingestion pipeline: infers each file's structure, extracts with the LLM, maps it to a proprietary product ontology, removes duplicates and keeps one canonical product with its variations.
- Semantic search: pgvector over the catalog with OpenAI embeddings, so agents search the way they talk.
- AI agent with tool calling: a conversational itinerary assistant and an AI itinerary planner work on top of the catalog and live inventory.
Platform Development
- Core API: Rails 8 in API mode with role-based access for agency admins, agents, operators and clients, documented in OpenAPI.
- Separate AI service: Python and FastAPI for AI and ingestion, deployed and scaled on its own.
- Two interfaces: a React dashboard for agents and operators, and a Next.js admin panel for the catalog.
Travel Integrations
- Sabre GDS: hotel search, availability, rates, media, booking, status checks and cancellation, plus flights and Virtuoso amenities.
- Amadeus: tours and activities with live pricing.
- Pluggable OTA adapters: a registry ready for Viator and GetYourGuide.
- Quote delivery: live exchange rates with a stored fallback, branded PDF quotes and itineraries, transactional email.
AI Core
Rate sheet reader
Claude vision reads supplier PDFs and images and turns them into structured products, ready to quote.
Itinerary assistant
A conversational agent with tool calling that plans itineraries from the catalog and live inventory.
Product ontology
One canonical record per product, with anchors and variations, however many suppliers sell it.
______
Infrastructure
Infrastructure as code
Terraform modules, one AWS account per environment, and keyless OIDC deploys from Bitbucket.
Live travel connections
Sabre GDS and Amadeus behind one adapter layer, ready for new OTAs.
______
Product
Branded quotes
Quotes and itineraries in the agency's brand, in MXN, USD or EUR.
Results
- Supplier catalogs, structured: rate sheets become searchable, quotable products without retyping.
- Live inventory in every quote: Sabre hotels and Amadeus tours priced at the moment of quoting.
- Quotes that sell: branded PDF quotes and itineraries in three currencies.
- AI cost under control: simple work goes to the smaller model, and spend is tracked per model.
- Built to grow: new OTAs plug in as adapters; Viator and GetYourGuide are ready to connect.
- In use: about 320 quotes from 6 agencies in the 90 days to October 2026.
KPIs
2 Claude models — Haiku for extraction and tool calls, Sonnet for the final answer, with cost tracked per model
~320 quotes — Generated by 6 agencies in the 90 days to October 2026
2 live inventories — Sabre GDS for hotels and flights, Amadeus for tours and activities
Tech Stack
- AI: Claude Sonnet 4.6 and Claude Haiku 4.5 via OpenRouter, Claude vision, OpenAI text-embedding-3-small, pgvector
- Backend: Ruby 3.3, Rails 8 (API), PostgreSQL 16, Solid Queue; Python 3.12, FastAPI, SQLAlchemy 2
- Frontend: React 18, TypeScript, Vite; Next.js 14 admin with Tailwind CSS and Radix UI
- Integrations: Sabre GDS, Amadeus, Google Places, OpenStreetMap, PDFMonkey, SendGrid
- Cloud: AWS (EC2, RDS, S3, CloudFront, ACM), one account per environment
- DevOps: Terraform, Docker, Bitbucket Pipelines with keyless OIDC to AWS, SSM deploys, Sentry
- Quality: RSpec, Vitest, Testing Library, Playwright, Brakeman, RuboCop
Team & Delivery Model
A six-person senior squad:
AI Architect / Tech Lead
Model routing, ingestion pipeline and overall AI system design.
Backend Engineers (×2)
Rails API, travel integrations and the FastAPI AI service.
Frontend Engineer
Agent dashboard and admin panel.
DevOps Engineer
Terraform, AWS accounts, CI/CD and monitoring.
Project Manager
Scope, milestones and client communication.
Operating Model
Agile, milestone-driven delivery with iterative releases.
Claude Partner Network · Anthropic Services Partner Directory · Claude Certified Architect. Built on Claude by a Claude Partner Network team.