Skip to content

The data room

Our standards are commitments; this page is the measurements. Every number below is read live from the production database: nothing hand-entered. Scores are never influenced by sponsorship.

The corpus

Cities launched
104
Published pages
4602
Curated lists
714
Upcoming events
101992
Tour products mirrored
497669
counted 2026-08-30 by the catalog ingest
… of which bookable now
462901

Live data, and how fresh it is

594 live facts are on the site right now, each stamped with when it was last verified against its source.

Stream Cities covered Newest verification Oldest verification
Air quality 142
Exchange rates 106
events_this_week 62
Sunrise & sunset 142
Current weather 142

Where the content comes from

4602 of 4602 published pages carry a named reviewer attribution: the publish transaction refuses the rest.

Method Published pages
Generated from verified data, gate-audited 4602

Quality gates

Every draft passes an audit of structural, factual, and voice gates before it can publish. 6982 of 7388 audit verdicts on record are passes (94.5%): the failures are the system working: those drafts were regenerated or rejected, never published as-is. Most recent audit: .

Caught: defects our own checks found

Trust that can't survive a defect log isn't trust. These are real problems in our own data and pages, caught by our own checks, and what now prevents each from recurring.

  1. A partner feed silently omitted six products

    Caught: Six tour products existed in a partner's catalog but were never delivered by its ingestion feed in any status.

    How: A full independent re-enumeration of the feed (464,029 product codes, kept as raw evidence) diffed against our mirror, then confirmed by fetching the six codes directly.

    Now prevented by: The mirror now reconciles known gaps through a sanctioned bulk endpoint, and the ingestion ledger is re-verified against fresh enumerations after partner-side anomalies.

  2. A ranking headline misrepresented a tie

    Caught: The family-friendliness index had two cities sharing first place, but every headline surface said one city “leads” while the table beside it honestly showed “=1”.

    How: An adversarial read of the leader phrasing against the live edition data during a routine review pass.

    Now prevented by: All leader phrasing routes through one rank-group helper that renders ties as ties; exact-value tests pin the tied and untied wordings on every surface.

  3. 22 monthly guides silently hid two sections

    Caught: Monthly guides generated before two schema fields existed shipped with empty packing checklists and insider tips — the components self-hide on empty data, so no error was visible anywhere.

    How: A corpus-wide audit query counting published monthly pages with both fields empty.

    Now prevented by: A production-data invariant keeps that count at zero (with a floor guard so an empty sweep can never pass vacuously); all 22 pages were regenerated through the audited pipeline.

  4. A partner API renamed a field; half a million rows aged silently

    Caught: The tour-catalog ingestion read lastUpdatedDate where the wire sends lastUpdatedAt, so 467k mirrored products carried no modification timestamp.

    How: A completeness investigation diffing the mirror against a fresh full enumeration noticed every row had a NULL timestamp.

    Now prevented by: A fixture test pins the exact wire keys; 463,747 rows were backfilled from raw feed archives.

  5. 173 pages carried internally contradictory scores

    Caught: Published pages whose prose named a score different from the database's ground-truth value for the same city.

    How: A corpus-wide consistency gate comparing every numeric claim in published prose against the scores table.

    Now prevented by: The gate runs on every draft before publish, a production-data invariant keeps the published corpus at zero contradictions, and all 173 pages were regenerated.

  6. The content judge punished complete articles

    Caught: Quality judges scored well-formed articles as broken because the sample sent to them was byte-truncated mid-word, making endings look mangled.

    How: Root-cause analysis of judge verdicts that disagreed with human reads of the same pages.

    Now prevented by: Samples truncate at sentence boundaries; a regression test pins the boundary behavior.

The pledge

Rankings are never sold: the code that ranks never sees who pays us (how that's enforced). Research index data is published for reuse under CC BY-SA 4.0 at /research/, and the measured tables behind our surfaces are downloadable as CSV/JSON with citation lines at /data/downloads/. Found a number that looks wrong? We treat corrections as contributions: the corrections process is on the standards page.