Skip to content
Tripnorm
How we chooseSavedMy tripsHelp
Meny
How we chooseHelp
Tripnorm / Help and trust

Changelog

Taken from the real development history, rewritten in plain language, not a marketing summary created afterwards.

13 September 2026

Decision logic: unknown stays unknown and explicit requirements can rule options out

  • Engine version 2026.09.13. Missing attributes on live hotels (quiet, for example) were counted as partial matches and lowered the score. They are now treated as unknown and left out of the assessment, never as an invented partial score.
  • An explicit request for quiet (or calm as a requirement) is now a real requirement that can rule out a hotel: a hotel known to be lively can no longer become Safest or Best value. If the source cannot say anything about quiet, the answer remains unknown, never an invented no.
  • An expensive candidate excluded for another hard reason (over budget, cancelled, on the avoid list, too few stars/rating) can no longer rule out roles for the rest of the selection. The pool assumptions count only candidates that can actually be chosen.
  • When you request cancellable booking, a confirmed non-cancellable price can no longer become Best value or Hidden gem (previously only Safest was ruled out). An unknown cancellation condition is still not a no and can still be selected, with the uncertainty visible.

13 September 2026

Truth first: deadlines at the right time, status without a hierarchy, and no invented amounts

  • Engine version 2026.09.13. A cancellation deadline that has already passed is now counted as a known no in the risk assessment. Previously, a price whose free cancellation period had expired could become Safest with the text 'preparing booking'. The deadline's time is preserved in the calendar file (previously a full day with an 09:00 alarm), and when the source specifies a time zone, the time is shown in Swedish time, never with an invented '(GMT)'.
  • The source and cancellation email now say 'completed at Tripnorm' rather than 'cancelled': no cancellation is made with the hotel or partner, and the text now explicitly says that a completed booking is cancelled where it was made.
  • 'Confirmed' now requires a supplier reference. A partner booking that the guest has personally acknowledged is shown as 'Booked according to your details' in My trips, the booking confirmation and the calendar file.
  • The confirmation can no longer contain the wrong amount: the price-lock response is mandatory in the booking request, so a missing amount is rejected instead of being saved as 0 SEK. 'Last checked' and status labels follow the same rule: unknown stays unknown.

10 September 2026

My trips and email templates: the whole trip after booking

  • New area /trips (with an empty state on /trips/find): a booking can be found with a reference and email, and /trips/[ref] brings together Booking confirmation (print and calendar file), Before arrival, Change stay, Cancel and Payment details (only for direct bookings). Bookings are stored locally in the browser without an account; status is always fetched fresh from the server, never from what the browser remembers.
  • New protected APIs: POST /api/bookings/find responds neutrally regardless of what went wrong, and GET /api/bookings/status requires an ownership token. A booking that has already been confirmed can now also be cancelled, rather than only an unused source record.
  • The email templates (booking confirmation, cancellation, pre-arrival and price-drop email) have been rebuilt around a shared layout, and the cancellation email is sent automatically after a completed cancellation. /dev/epost previews all templates with example data.
  • Deliberately not built: a change API, real refund status and a hotel contact channel are not part of the data model, so none of it is fabricated.

10 September 2026

Help, trust and saved hotels in the same template

  • New help centre (/help with change/cancel, contact and ongoing trip), accessibility page, About page, feedback, maintenance/offline mode and a rewritten 404, all using the same NattPage template. Trust and legal pages (how we choose, honesty, independence, changelog, terms, privacy policy, cookies, about the company) moved to the same template without changing their content.
  • The footer's 'Cookie choices' and 'Swedish · SEK' now open real dialogs instead of being text only, and the contact form shows confirmation only when the email really was sent, never when the provider is missing.
  • Hotels and decisions: the results area gained a summary row with 'Change search' and link rows (side-by-side comparison, map with an honest list fallback, 'Why these three?' from the actual hard rules), a hotel view with tabs and deep links (?val=), saved hotels with a heart and their own page, plus a share dialog for the whole selection or one choice.
  • Several mock-up views (including room disputes, gallery and terms as separate views) are deliberately not built and are not presented as if they existed.

10 September 2026

The payment flow in four steps, and the double-click protection that kept guests apart

  • The direct-booking guide has four steps (Your way · Your details · Check · Pay) on top of exactly the same request as before: the cancellation condition is checked before payment, and each prebook/create error can have its own honest status. A custom request to the hotel (C03) was deliberately not built: no part of the chain can carry free text.
  • C15: a guest response ('I have a confirmation') is always labelled 'Information from you'. A partner booking is never system-verified based on what the guest says.
  • Critical double-click protection: two independent guests who chose the same room, dates and party could be merged into one booking, and both received its ownership token. Deduplication now uses the client's attempt ID (one per tab and attempt), never the trip details; without an attempt ID, no merging happens at all.

8 September 2026

The booking partner takes payment: no cash register at Tripnorm

  • The payment model belongs to the partner: the booking partner is the merchant of record, charges the guest directly and pays Tripnorm's commission weekly. Tripnorm does not advance the room rate and has no cash register.
  • The commission is the same percentage for every hotel and all three roles, so compensation can never differ between the choices; independence holds in the payment flow too.
  • The partner's payment fields (Stripe-based, in the partner's own box) are mounted in the booking sheet after the guest details; prebook verifies price and room before payment opens, and the booking is completed when the guest returns from the payment window. Card details go to the partner, never to Tripnorm.
  • The entire chain runs live in end-to-end tests against the sandbox: a test card in the partner's payment window all the way to confirmation with a booking number.

7 September 2026

Write the city in English: Rome, Vienna, Crete, Umeå and 120 more destinations

  • Engine version 2026.09.07. The service previously recognised twelve cities; everything else became 'we do not cover that city'. It now understands English names for around 130 destinations (Rome, Vienna, Copenhagen, Helsinki, Crete, Mallorca, Tenerife, New York, Bangkok, etc.) and Swedish places from Uppsala to Kiruna. Each city carries the name and country code the booking supplier needs, so the Swedish spelling of Gothenburg is searched as Gothenburg, which returned 279 hotels instead of 2.
  • Misspellings are corrected when the correction is unambiguous: a misspelling of Copenhagen is understood as Copenhagen and the correction is shown. Short words are never corrected: 'room' does not become Rome.
  • A city in the catalogue without curated hotels gives an honest empty result until live prices are connected, never Stockholm hotels in disguise. A city that is not mentioned in the question is still not treated as Stockholm, but is now marked as an assumption.
  • The booking path is being prepared for LiteAPI: price and room are verified in a separate step before booking, and price changes stop the booking instead of silently charging a different amount. Card details never pass through Tripnorm on this path.
  • Live prices for the whole city's selection: search now runs in two stages against the booking partner: first all the city's hotels (534 in Stockholm, more than 1,000 in Rome), with filtering for your hard requirements, rating and review volume, then real prices for your dates for the best 60. Every card carries the hotel's own image, stars, rating, reviews, amenities, cancellation terms for that exact price and distance from the centre. A known distance contributes to the location score; without geodata, the location is treated as unknown. The funnel says how many hotels the city had, how many were asked for prices and how many had a price.
  • More criteria, read from your text: 'near Central Station' is now measured in metres against a geocoded point (0.4 km as the crow flies), 'at least 4 stars' and 'rating at least 8' rule out hotels with a known lower value, never unknown ones, 'ideally with a sauna' counts as a preference without ruling anything out, and 'without breakfast' or 'does not want a spa' become exclusion requirements. Nineteen new amenities are understood: restaurant, bar, room service, late check-in, lift, sauna, EV charger, non-smoking, conference room, washing machine, roof terrace, children's pool, playroom, bicycle rental, ski storage, apartment with kitchen, family room and pay at hotel. All of it is shown in 'How we understood your trip' with the weight the engine gave it.
  • Payment takes place with the booking partner. The guest enters their details, the price is locked and the payment field opens directly in the booking sheet. Card details go to the partner, never to Tripnorm, which neither advances the room cost nor has a cash register. When payment is complete, the room is booked and the confirmation arrives by email. The price shown in the search is the price you pay; Tripnorm's compensation is included in it and is the same whichever of the three choices you book.
  • No city is ever Stockholm. A misspelled place name previously produced three Stockholm hotels because the word was not recognised as a city. Every word is now tested against the spelling correction (a misspelling of Borlange becomes Borlange), and a search without any city asks 'Where are you going?' instead of showing an example. 25 more places in Sweden, from Borlange to Piteå. The copy on the results page has been rewritten in plain language: 'Three choices for Rome', 'How we read your search', 'Hard rules', 'The selection', 'Show more', 'A close match to …', and Hidden gem says 'The most personal choice' instead of 'best remaining option'.
  • The booking flow follows the order of decisions: the booking sheet opens directly under the three choices, not at the bottom of the page. First what you book (cancellation, price, dates, room, payment), then guest details, finally the amount button, which says 'Locking price…' and 'Booking at the hotel…' while it happens. The card's button says 'Book this' when the booking can be completed directly. The confirmation shows the booking number largest, the cancellation deadline as '66 days left to cancel for free, until 12 November at 10:00', and after booking 'Search for a new trip' instead of 'Change hotel'. The side panel explains the three steps before booking and the next step afterwards.
  • Confirmation email: once the booking is confirmed, the guest receives an email with the booking number, the hotel's confirmation code, hotel and address, dates, guests, room, price, cancellation terms and a calendar file, exactly the same details shown in the booking sheet. Without an email provider, the email is still built and ends up in the operations outbox, and the booking sheet says so instead of pretending it was sent.
  • The booking works end to end: with live prices, the booking form appears directly in the sheet: name, email and phone, no card fields. The price is locked with the booking partner before anything is booked; if the hotel changed it, you receive a message and a button that searches again with current prices. The confirmation shows the booking number, the hotel's confirmation code and free cancellation until the exact time. The sheet shows the locked dates (assumed dates are marked as assumptions), the room type from the price and the exact price without 'approximately'. The terms, privacy policy, cookies, truth promise and independence declaration (v2.1) have been rewritten for the booking partner handling payment.
  • The interpretation can be changed with one click: in 'How we understood your trip', every requirement, preference and exclusion is a button. A requirement can be released, a preference can become a requirement or be removed, an exclusion can be allowed again, and location, star-rating and rating requirements have a check box. Each click visibly rewrites the question text and runs it again. Nothing is hidden.
  • Words we did not understand: every search leaves a list of words that no part of the interpretation recognised. Only the words are logged, never the whole question, and email addresses and phone numbers are removed first. The operations panel counts them, so the vocabulary grows from real users' language instead of guesses.
  • The trio: the three choices now stand side by side at the top of the results: role, hotel, price and where the candidate landed on the scale, with the second-place tie marked. Previously the cards were a list where one entry was selected at a time; now the answer reads as a trio and the cards below are the evidence. The rulers fill when the answer arrives and the marker settles as it comes to rest; with reduced motion, the final state is shown immediately. The kicker above the heading was removed. The promise is already in the heading.

2 September 2026

Ready for the market: the engine, the card, the booking sheet, the watches and the design

  • Engine version 2026.09.02. Best value is now compared with the entire source's price level when no budget is given (previously alphabetical order won), 'free cancellation' affects only the cancellation score and no longer overrides the budget limit, and a hotel missing an explicit requirement (a pool, for example) cannot become Safest or Best value. This is shown as 'Missing: …' with a 'Release requirement' chip. Approximate budgets ('around 2,000') and totals ('9,000 total') are understood as such.
  • The card is a decision argument: the role's short explanation, what the hotel is, a trip-specific sentence explaining why, facts in a 2×2 (price, rating, cancellation, fees), 'The catch' and 'Compared with <hotel>, difference: …'. Unknown information is one row per card, with a shared row when all three have it.
  • First screen: an empty search field, the button directly below it, examples in a group, and an empty state with three card skeletons. In results mode the heading collapses and the cards come first; the funnel, version and tools are below. On mobile there is a menu, 44 px hit areas and the cards directly after the field.
  • Booking sheet instead of 'booking': 'Book with the partner' opens Booking.com with the hotel, dates and guests filled in (no affiliate ID); the checklist starts with cancellation; 'Did you book?' comes after the partner click and the calendar only after yes; changing hotel cancels the old sheet. Price watching is only offered when a live price can be observed again. For reference prices we say so plainly and do not collect an email.
  • The price watch is now called Cancellation deadline and does exactly that: it counts down to free cancellation, adds the deadline to the calendar, with Swedish errors under the correct field and Swedish number formatting. Flight Watch: the scope of EU261 and the 14-day rule, a date floor of 2005, a claim letter with company and dates filled in, and 'Open in email'. The watches are linked from the footer and the booking sheet, not the main navigation.
  • Design: one type scale, one spacing grid, five radii and one shadow, locked by a test. Petrol is used only where something is measured; Best value got its own colour. The ruler is the same component in the card, funnel, loading state, empty state and weights. Dark mode has its own vertical scale.
  • Guardrails: booking and price watching are rate-limited, owner tokens have negative security tests, end-to-end tests run in CI, readiness tells the truth about the event log, cache responses show their age, and legal pages have no developer notes.

26 August 2026

Per-passenger compensation in Flight Watch and the changelog as RSS

  • Flight Watch only showed compensation per passenger. A family of four had to calculate the total themselves. A new field (local to the browser only, never sent to the server or saved) now shows the total for the whole party when the amount is known.
  • The changelog, "the product's strongest proof of trust," could only be read by remembering to open the page again. It is now available as an RSS feed (/changelog/feed.xml), with autodiscovery and a link in the footer.

26 August 2026

Three more launch improvements: sharing, history and booking goals

  • History and Overview previously sat above the search field on an entirely empty home page, visible before there was any data to show. They were moved below the results, where they actually have something to point to.
  • The 'Open booking search' button did not say where it actually led. It is now 'Open on Google Travel', matching what the link really is (bookingHandoff.ts). A real deep link to the specific hotel would require a product ID we do not have in the source data. Inventing one would have been dishonest.
  • You could copy the link to the whole search but not an individual choice, exactly what you want to send to a colleague. Every role card now has 'Share this choice', which copies a readable text summary (role, hotel, price and reasoning).

26 August 2026

Fourteen of forty launch improvements

  • The header got a primary action ('Search hotels') and the navigation no longer wrapped over three rows on mobile. It scrolls horizontally instead.
  • 'Not selected' was displayed as 'Not Selected' when no destination had been interpreted yet. A pure CSS bug, not a spelling error in the source text.
  • The home page and search field used three different currency formats on the same page ('4000 SEK', '3 700 SEK total', '4 000 kr'). This was normalised to one consistent format, matching what is actually shown in each final choice.
  • The introduction promised that Tripnorm "reviews the entire selection". It does not; the source has eight curated hotels per city. It was rewritten to say exactly that on both the home page and the 'How we choose' walkthrough.
  • Ratings and reviews were shown without the same 'curated, not live' label already used for prices. This was fixed on both decision cards.
  • Flight Watch previously let you monitor a flight in 2035, a watch that could never receive a real answer. The forward window is now limited to twelve months; the past is deliberately unlimited because an EU261 claim can apply several years back.
  • ARN was mentioned only by name in Flight Watch. It now explains what it actually is (a government authority, free of charge) and links to arn.se.
  • The contact route existed only on /company-details, three clicks away. The same address is now directly in the footer on every page.
  • The independence declaration was not linked from Flight Watch or the external Cancellation deadline, exactly where "what does Tripnorm earn from this?" arises for the reader. It is now linked from both.
  • Every subpage shared the same social-image title ('Tripnorm') and lacked its own canonical URL. A link shared in Slack or iMessage always showed the same generic preview regardless of which page was shared. All twelve pages now have their own title, description, OG-image text and canonical URL, from one source.
  • robots.txt only said 'Allow: /'. There was no sitemap line, and nothing keeping history/overview/admin (pages containing only your own local data, or an internal operations tool) out of search results. Replaced with a dynamic route that points to the sitemap and excludes those three pages.

26 August 2026

Launch review: five blockers fixed

  • An unknown city (such as 'Rome') previously silently returned three genuine Stockholm hotels without the slightest warning. This was discovered by actually testing the product, not by trusting earlier claims about what had been built. There is now a separate, honest state: 'We cover twelve cities today: X is not one of them', with the option to vote for the next city. Every missed city is logged as free expansion data.
  • 'Want to be able to cancel'/'free cancellation' previously made the Safest role impossible to award in 100% of cases, because the curated source never has a confirmed cancellation condition. A confirmed no still always disqualifies a candidate, but an honestly unknown condition no longer switches off an entire product function when no alternative can be confirmed better; the uncertainty remains visible, clearly marked, on the card that still wins the role.
  • 36 of 96 curated hotel images turned out to be shared between two different hotels (even if never within the same city). Every hotel image is now clearly marked 'Stock image': a curated stock image, never a claimed confirmed photo of that specific hotel.
  • Added a generated OG image (no external image fetching), metadataBase and canonical URL, plus four pages that were missing from the sitemap entirely (Cancellation deadline, Flight Watch, Independence and Changelog).
  • /honesty was updated so it no longer claims anything that became untrue because of the Safest fix above, and received a new promise about the stock status of images.
  • Flight Watch and the external Cancellation deadline switched to real shared storage (the same Supabase-with-memory-reserve pattern already used by the rest of the app) and each got a scheduled check once per day. Until this, a watch only found its real answer when the user happened to open the page again, absurdly often if they never did.

25 August 2026

Cancellation deadline for every booking, two paths in Flight Watch and /independence

  • Cancellation deadline now watches bookings made ANYWHERE (/cancellation-deadline): enter the details from your confirmation and we count down to the cancellation deadline. After the deadline, monitoring ends honestly, because a price drop can no longer be acted on. Price alerts will still only come from real observations with a source; until the price data source is connected, we say so plainly.
  • Flight Watch got its two paths: do-it-yourself remains free forever (you keep 100%), and a handle-everything path is being prepared: 25% of paid compensation, no compensation means no fee, against the 30–50% on the claims market. The path only activates once the company terms are legally in place.
  • New page /independence: the independence declaration as a versioned, verifiable document: ranking independence, determinism, the watches' channel neutrality and the future revenue clause, with a change history.

25 August 2026

Flight Watch: monitor the flight, get the claim for free

  • New area: /flight-watch monitors your flight number and tells you when EU261's objective conditions are met (at least a three-hour delay on arrival under the Sturgeon judgment, or a cancelled flight), and then generates the complete compensation claim for you to send yourself. Tripnorm takes 0% of the compensation; claims companies take 30–50%.
  • The truth rules are the same as everywhere else in Tripnorm: the result always carries the reservation for extraordinary circumstances (Article 5.3). We never promise money, we show the conditions. An unknown route gives the amount table, never a guessed amount. The observation's source is always shown.
  • Seven golden tests lock down the Article 7 amount ladder exactly at the distance boundaries, the 180-minute threshold, the long-distance half rule (Article 7.2) and the letter's 0% rule; the whole journey is also covered by a smoke test.
  • The decision to build exactly this, and NOT to build flight search, rests on market research from 2026-08-25: the EU reform kept the thresholds, the claims market takes 30–50%, and only a few percent of eligible people search at all.

25 August 2026

New look and three pieces of transparency evidence

  • The whole app now uses the editorial design language (direction 'The Editorial'): warm paper, serif headings, garnet as a continuous accent, role-coloured card bands, and a dark mode in the same warm family. Every colour pair is contrast-tested against WCAG.
  • The engine version is now visible on every result and on the decision sheet, with a link here, and a new test runs the same question twice through the engine and requires a bit-identical answer, so the determinism promise is executed, not merely claimed.
  • 'How we ruled it out' now always appears below the cards: how many were considered, how many failed on hard rules and how many passed without winning a role, with the full hotel-by-hotel table one click away.
  • The total price now leads each card (the nightly price is secondary) and the fee status, known or unknown, appears on the front of the card instead of only in the detail panel.

19 August 2026

Amadeus: the key is now all that is required

  • We found and closed two silent gaps between 'the code exists' and 'it works': the live Amadeus path used a simpler engine than the seed path (no 'Expand the selection', no margins, empty selection table). Both paths now share exactly the same engine and word-for-word identical code.
  • A second, undocumented flag (FF_LIVE_HOTEL_PROVIDER) previously blocked the way even with valid keys. It now defaults to on in all environments, so the keys themselves decide, not a flag nobody knew existed.
  • The search message explaining why seed data was used now reads the actual Amadeus attempt instead of showing the same static text regardless of state.
  • Three new source guards specifically prevent the gaps above from returning.

19 August 2026

Expand the selection, adjust the trip and 96 hotels

  • 'Expand the selection': below the three choices you can now open the runners-up: every candidate that passed the rules but did not win a role, three at a time, in exact score order, with the same score evidence and match rows as the role cards plus a separate row saying which role each came closest to winning and by how much.
  • 'Adjust the trip': chips below the results change one interpreted parameter at a time (budget, nights, remove a requirement, switch quiet/lively). Each chip builds a new, visible question from exactly what the interpretation understood and runs it as a normal search. What is shown is what runs, and that rebuilt questions mean the same thing is mechanically proven against the entire test corpus.
  • Every role card now shows the margin to the role's nearest competitor: 'close match' when second place is close, instead of making every win look equally self-evident.
  • 96 curated hotels (8 per city) instead of 60, so both the runners-up and the matching profile have real breadth to work with.
  • The 'All choices' table now marks the runners-up with their positions, so the table and the Expand section always tell the same story.
  • Two new end-to-end flows and two new golden-test blocks protect everything above.

12 August 2026

Enter submits the search

  • A real bug found by testing against a built server in a real browser, not just reading the code: the search field did not submit the search when you pressed Enter. Only the browser's usual line break happened. Fixed: Enter submits, Shift+Enter breaks the line, just like other text-based search fields.
  • A new, quiet hint below the field makes this discoverable.
  • A new end-to-end test protects against the behaviour silently disappearing again.
  • The whole flow was reviewed on mobile (390px) and in dark mode after the fix. Nothing else was found.

12 August 2026

A larger search engine and smarter matching

  • 12 cities instead of 5 (Gothenburg, Malmö, Oslo, London, Berlin, Amsterdam and Paris are new) and 60 curated hotels instead of 16.
  • Search understands length of stay ('one week'), month ('in July' gives seasonally adjusted reference prices, openly reported), party, total budget and more requirements: pool, spa, gym, breakfast, pets, accessibility and more.
  • Matching profile: every explicit preference (quiet/lively, family, work peace, central, style, requirements, exclusions) is graded against the hotel's attributes, and every card openly shows 'Matches N of M parameters' with the result per row. Unknown data is never counted.
  • At zero results, the engine calculates real trial suggestions ('raise the budget to X → N choices'). Every number is a real rerun, never an estimate.
  • 'All choices': every reviewed candidate is shown with its score, role or exact reason for exclusion. Share searches via link, run again from history, comparison table and printable decision sheet with reference fields.
  • Accessibility: screen-reader support in the results flow, reduced motion is respected, skip link and mobile pass.

2 August 2026

Design review: new areas, history and two dark-mode bugs

  • Colours, typefaces and marks updated after an independent design review.
  • History, Overview and this changelog added. History/overview is stored locally in your browser, not in an account.
  • Left rail on search results: 'How we understood your trip' and 'Rules that ruled out', plus a filter row that shows the full selection, not just the results.
  • A clearer in-progress state during search and a more honest zero-results view when no hotel meets the requirements.
  • A clear finding from reviewing screen dumps: example mode in history/overview was marked only in a button label, invisible as soon as you scrolled past. Fixed with a sticky banner above the list itself.
  • 5 contrast bugs (text that failed WCAG AA) and 4 separate dark-mode bugs found and fixed, verified with an automated contrast script.

1 August 2026

Major review: open ranking, truth promise, security

  • /how-we-choose: the weights and disqualifiers that actually drive the ranking, imported directly from the code, not a simplified description of them.
  • Decision contract: the time from question to completed decision is measured on real decisions and shown publicly, never invented.
  • Scenario pages for common types of trip, with a real search function embedded instead of a static marketing page.
  • The old search flow, admin login without password protection and duplicate copy were cleaned up.
  • A contrast bug where body text (--muted) fell below WCAG AA (2.64:1 against a required 4.5:1) was found and fixed.
  • Hardening: CI pipeline, regression tests, a global error boundary and security headers.
  • A bug where a price-watch email could get stuck, plus two security holes (rate-limit header spoofing and filter injection) fixed.
  • Real result UI: score evidence, cancellation status and price freshness per card, not just running text.
  • Supabase persistence, price watching on a cron job and real confirmation emails via Resend.
  • Rate limiting, footer and template-level legal pages (terms, privacy policy, cookies).

31 July 2026

The decision engine becomes real

  • The actual scoring engine was built: six risk-adjusted factors, hard disqualifiers and three roles (Safest/Best price/Hidden gem) instead of a simple heuristic.
  • A real text parser for the trip question: dates, budget, purpose, must-haves ('want to be able to cancel') and things to avoid are read from free text.
  • A first Amadeus connection for hotel search (code in place, no production keys yet).
How we chooseThe truth promiseRSS feed
SearchSavedMy trips
Tripnorm

The important things, together.

HelpTermsPrivacy
Tripnorm

Tripnorm

One choice at a time.

Tre genomtänkta val.

Settings

Your cookie choices

It should be as easy to say no as yes. Tripnorm does not set cookies today. This choice only controls whether optional usage analytics may be enabled when that exists.

Necessary function

Session management and choices required for the service to work.

Always active

Allow optional usage analytics

No such analytics is enabled today. This only saves your choice for the day it exists.

Read more about cookies and storage

AccessibilitySwedish
© 2026 TripnormContactAbout TripnormCompany detailsChangelog