惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
B
Blog
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
U
Unit 42
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Register - Security
The Register - Security
Recorded Future
Recorded Future
C
Check Point Blog
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
F
Full Disclosure
小众软件
小众软件
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
P
Proofpoint News Feed
罗磊的独立博客
量子位
D
Docker
博客园_首页
D
DataBreaches.Net
Project Zero
Project Zero
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - Franky
Security Latest
Security Latest
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
大猫的无限游戏
大猫的无限游戏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
I audited the world's biggest hotel platform. Here is what the AI travel agents are being trained to inherit.
Bokang Sibolla · 2026-06-01 · via DEV Community

I run Sola, a travel app for people who move differently from the traveller the industry was built for. While building it, I kept hitting the same wall. The data I wanted to query did not exist. Not because nobody collected it, but because the schema underneath the whole industry never had a field for it.

So on 27 May 2026 I sat down and audited Booking.com. The homepage form, the currency selector, a Bangkok search results page. I wrote down what it accepts and what it refuses. Then I looked at the new AI travel agents shipping on top of it.

Here is what I found, and why it matters to anyone building in this space right now.

The form is the spec

Booking.com's homepage search bar accepts exactly four inputs:

  • A destination, as a single text field
  • A check-in date and check-out date, as one range
  • An occupancy counter, defaulting to "2 adults · 0 children · 1 room"
  • A search button

That is the spec. An online travel agency (OTA) is a CRUD app over this spec, and Expedia, Agoda, and Hotels.com run the same four fields. Airbnb lets you skip the dates. The destination stays a single field everywhere.

Think about what a spec encodes. The default occupancy is a couple. Not a solo traveller, not a parent with one child, not three generations, not seven people eating from one host's kitchen. The form cannot accept a circuit ("Bangkok, then Hanoi, then Jakarta" forces three separate searches). It cannot accept an open date ("October, not sure which week"). It has no field for the part of a trip where you sleep at family but spend money in restaurants.

When you fill that form, you have not searched. You have submitted to a schema. Most of the world's travellers fail the schema before they fail the search.

The data receipts

I am a builder, so I went for counts, not adjectives. Everything below rendered on the platform on 27 May 2026.

Currencies: 52 offered, about 180 in circulation.

Eight currencies sit featured at the top of the dropdown. On the day I ran it the order was EUR, USD, GBP, AED, SGD, AUD, JPY, PHP. The eighth slot is geo-personalised, and the test IP resolved to the Philippines, which bumped PHP up. The other 44 fall alphabetically below: BRL at position 12, EGP at 19, INR at 25, IDR at 26, MXN at 33, ZAR at 45, KRW at 46, THB at 49.

Now the absences. Currencies for these five economies are not in the dropdown at all:

  • Nigerian naira (220 million people)
  • Bangladeshi taka (170 million people)
  • Vietnamese dong (100 million people)
  • Kenyan shilling (55 million people)
  • Ghanaian cedi (33 million people)

That is around 580 million people from five countries alone. Add the unverified gaps across the rest of Africa and Southeast Asia and you clear 600 million people who cannot see a hotel price in their own money. They convert in their heads on every search and pay their bank to settle in a currency the platform never asked about.

Filters: 115 items across 22 groups, and the gaps are the story.

A Bangkok search hands you a wall of filters. You can narrow by price per night, property type (hotel, hostel, ryokan, capsule, villa, motel, boat, and more), bedrooms, bathrooms, review score, free cancellation, breakfast, pool, parking, wifi, airport shuttle, star rating, neighbourhood, distance from centre, hotel chain, bed preference, sauna, massage, happy hour, pets allowed, adults only.

You cannot filter for any of this:

  • Visa requirement
  • Halal food or hotel certification
  • Kosher, jain, vegetarian dietary needs
  • Prayer room or qibla direction
  • Community-owned or locally-owned property
  • Women-only floors or women-safe at night
  • Walking distance to a mosque, temple, synagogue, or church
  • Public transit access for travellers who do not drive
  • A family group larger than six

The words "visa," "halal," "kosher," and "prayer" appear zero times anywhere on the audited page. The filter group named "Travel group" exists. Its two options are "Pets allowed" and "Adults only." The category itself tells you what the platform thinks a travel group is.

The default sort is a paid position.

The default sort is labelled "Our top picks." It reads like a recommendation. In mechanism it is an auction. Booking.com charges hotels a base commission of roughly 10 to 25 percent of the room rate, and Genius and Preferred Partner programs add roughly 3 to 5 percent more in exchange for placement. Partner-facing material confirms that visibility tier, commission rate, and conversion data feed the default sort. The top result is the property that pays most and that the platform has the most data on.

Why the schema never gets fixed

This is the part that matters for builders, because it is an architecture problem, not a UX oversight.

An OTA can only offer a filter the underlying data contains. Below Booking sits the Global Distribution System (GDS) layer: Sabre (operational across American Airlines by 1964), Amadeus (founded 1987 by four European airlines), and Travelport. These were built for airlines and travel agents decades before the consumer internet, and they set the data schema for inventory. Visa status is not in the GDS. Halal-friendliness is not in the GDS. Community ownership is not in the GDS.

Then commission economics locks it. To make 10 to 25 percent per booking work, you need volume, and volume needs standardisation. Adding a "community-owned" filter means a two-room guesthouse in Lagos or Jakarta has to enter custom structured data, and it will not do that without payment, and the margin model has no room to pay. The team in Amsterdam can see exactly what is missing. The business model does not let them fix it.

There are only two real exits. Hotels publish richer structured data, which needs a state mandate or platform leverage. Or the platform infers the missing dimensions from unstructured signals: reviews, photos, web mentions, third-party datasets. Booking can build the second one. They have not.

What the agents inherit

On 6 October 2025, OpenAI announced its Apps SDK at DevDay, letting third-party services run inside ChatGPT. Booking.com was a launch partner. The same four fields, now reachable through a chat box.

The agent layer is the next top of the funnel, and here is the trap. The training data is the previous layer's product. The web that large language models read for travel is the Booking, Expedia, Airbnb, TripAdvisor, and Google Travel corpus, in English, with those platforms' defaults baked in. Ship an agent on that dataset and you ship the dataset's defaults. The schema reproduces itself through the training data.

I watched this happen in miniature. Booking added a "Smart filters" panel that takes natural language ("What are you looking for?"). Ask it for a halal-friendly hotel near a mosque and it returns the closest approximation it can express, which is nothing. The AI layer helps you navigate the 115 filters that exist. It cannot surface a filter that does not exist. The model on top is only as good as the schema underneath.

The break is also visible, which is the hopeful part. Agents can infer structured data from unstructured signals in a way an OTA's margin model never could. An agent can read a forum thread, a travel writer's caption, a comment about a women-friendly hostel, and synthesise an answer the filter set could never produce. Whether the next travel layer breaks the schema or repeats it comes down to who builds it, what they train it on, and which traveller they design for.

The builder takeaway

If you are building anything agentic on top of travel data, three things to sit with:

  • Audit your inputs as a schema, not a feature list. The absences encode who the product was built for. Count what is missing, not what is offered.
  • Do not let the training corpus pick your defaults for you. Inherited data ships inherited assumptions. The default sort, the currency list, the occupancy counter: someone chose those, and the choice is now in your weights unless you intervene.
  • The structural opportunity is inference. The whole reason OTAs cannot serve 600 million people is that the data model has no field for them. Agents can build that field from signals the OTA threw away. That is the actual product.

The traveller Booking.com was built for has been served for thirty years. The next default is being designed right now, in the training runs and the system prompts. The four fields were never neutral. Neither is whatever you build on top of them.


Method: findings come from a live walk-through of Booking.com on 27 May 2026, covering the homepage form, currency selector, and a Bangkok results page. Counts and label wording are taken directly from the platform as it rendered that day. Platforms iterate, so specific positions may have shifted. The structural argument does not depend on any single number. I write more on this at the link in my bio, and I run Sola, which is my attempt to build the field the schema is missing.