Skip to main content

Contact

What are you interested in?

Platform, Design, SEO & GEO2026Live

CityHero.

A Swiss directory for local businesses, taken from idea to operation. Rankings by city and category with an openly explained scoring, price comparisons for dishes and services from real menus and price lists, and an inquiry assistant that sends a reservation or quote request to up to two businesses.

  • Website
  • Web app
  • SEO
  • GEO
Scope
Website · Web app · SEO · GEO
Year
2026
Services & technology
  • Platform Development
  • UX/UI Design
  • Price Comparison
  • Inquiry Assistant
  • SEO
  • GEO / AI SEO
  • MCP Server
  • Multilingual

Case study

What CityHero needed and what we built

The challenge

Anyone in Switzerland looking for a hairdresser, restaurant or tradesperson jumps between map service, review portal and websites. Prices are rarely visible, and a reservation or quote means writing to several businesses one by one. CityHero was meant to bundle this: find, compare and contact directly. The difficulty was scale. Google only accepts thousands of pages by city, category, dish and service if each one has real data and its own text; otherwise they count as thin content.

Our solution

We built CityHero as a Next.js platform with its own database. Business data from several sources, Michelin lists, and menus and price lists are imported, cleaned and stored as a price time series. This feeds rankings by city and category, sorted by the Hero Score: four openly documented ingredients from rating, number of ratings, inquiry activity and profile quality. The price comparison shows median, range and a fair-price indicator for a dish or service, and pages with too few prices stay out of the index. The inquiry assistant builds the form per category from the database, only offers times within opening hours and sends the request to up to two businesses. They reply via a link without login. Businesses list for free or request a Pro profile. On top come a glossary, guides, English with translated URLs and an own MCP server through which AI assistants can search businesses and submit inquiries.

Architecture

How it fits together

The building blocks behind CityHero and how data flows between them.

UserFrontendAdminServer / APIDatabaseExternal service
Connections: Data sources → Import & price snapshots (Businesses, menus, price lists); Import & price snapshots → PostgreSQL + Redis cache (cleaned, median per city); PostgreSQL + Redis cache → Website DE/EN (Rankings, profiles, price pages); Visitor → Website DE/EN; Website DE/EN → Inquiry API (Request to up to 2 businesses); ChatGPT / Claude (MCP) → Inquiry API (same lead path); Inquiry API → Mail outbox (Confirmation, request, reply); Mail outbox → Business (reply link); Inquiry API → Admin & portal (Inbox with delivery status)

Site structure

How the website is structured

cityhero.ch9 sections · 4 subpages
  • 94Cities
    • 478Rankings city × category
    • 94All businesses per city
  • 7841Business profiles
  • 92Categories
  • 126Dish price comparison
    • 258Dish per city
  • 42Service prices
    • 105Service per city
  • 26«Near me»
  • 172Glossary
  • 26Guides
  • 1195English pages
Simplified view of the site structure. Page counts from a live check (sitemap) on 12 October 2026.

Flow

Who does what, step by step

  • Customer
  • Business
  • System
  1. Customer

    Search or land

    Via search or straight from Google onto a ranking or price page.

  2. Customer

    Compare

    By Hero Score, opening status or price, with a fair-price indicator per dish or service.

  3. Customer

    Send a request

    Enter date, available time, party size and wishes, optionally adding a second business.

  4. System

    Deliver

    Confirmation to the customer, request with reply link to the business, entry in the admin inbox.

  5. Business

    Business replies

    Accept, decline or suggest another time without login; the customer is informed by email.

  6. Business

    Maintain the profile

    Add opening hours, prices and photos in the portal; profile quality counts towards the Hero Score.

Step by step

How it works in practice

Real screenshots along the flow.

Search, compare, request

A visitor's path on cityhero.ch, captured on 12 October 2026 using hairdressers in Zurich as the example. Filled in with sample values; nothing was submitted.

Views with customer data show sample data or are redacted.

  1. 01Step 1 / 6
    CityHero – Step 1: Search with suggestions

    Search with suggestions

    While typing, the search suggests matching categories and businesses in the selected city. A hit leads straight to the ranking or profile.

  2. 02Step 2 / 6
    CityHero – Step 2: Ranking with podium and map

    Ranking with podium and map

    The ranking is sorted by the Hero Score, with the top three on a podium. Filter chips and a map alongside help narrow it down.

  3. 03Step 3 / 6
    CityHero – Step 3: Business profile

    Business profile

    Opening status, address, phone, directions and the «Request appointment» button sit at the top. Description, services and opening hours follow below.

  4. 04Step 4 / 6
    CityHero – Step 4: Price list in the profile

    Price list in the profile

    The business's price list sits right in the profile, and a coloured dot places a price relative to the median of comparable offers in the city.

  5. 05Step 5 / 6
    CityHero – Step 5: Request, step 1

    Request, step 1

    Service, preferred date and time as chips. Only times within opening hours are offered.

  6. 06Step 6 / 6Sample data
    CityHero – Step 6: Request, step 2: one form, two replies

    Request, step 2: one form, two replies

    Optionally the same request goes to a second business; more than two are deliberately not possible. Filled with sample data up to «Send request».

Swipe sideways for the next step.

Features

What the solution does

  • Rankings with Hero Score

    Every list by city and category is sorted by an openly explained formula. The top three get a badge automatically; paid placements are labelled as ads and sit outside the ranking.

  • Profiles with opening status

    Price list or menu, opening hours with an open-now indicator, map, call and directions buttons, a fact box with source and data date, and an FAQ generated from the business's real data.

  • Dish price comparison

    Compare the same dish across all restaurants in a city, as a list or map, with median and a fair-price indicator from cleaned quartiles.

  • Service prices

    Prices per service such as men's haircut or massage per city with histogram, price barometer and city comparison. Pages are only indexed when enough real prices exist.

  • Search and «near me»

    Free-text search that resolves to city, category or business, plus near-me pages per category, dish or attribute such as vegan.

  • Inquiry assistant for two businesses

    Three steps with date chips, times only within opening hours and preferences. The request goes to up to two businesses without registration, and they accept, decline or suggest another time via a link.

  • Listing and business portal

    Businesses list themselves for free in a wizard or claim an existing listing. In the portal, with login via email code, they see inquiries, visits and a profile checklist.

  • Admin with lead inbox

    All inquiries with delivery status per business, resend, CSV export, a category studio for the forms and an outbox for all emails with a daily report.

  • MCP server for AI assistants

    Through its own MCP server, ChatGPT and Claude can search businesses, fetch details and submit an inquiry. It runs through the same path as on the website, and the source is stored.

  • German and English, glossary, guides

    English with translated URLs and hreflang, a glossary with a page per term, cost guides, plus llms.txt, ai.txt and webmcp.json.

Mobile

On the smartphone

  • CityHero – Home page on mobile
    Home page on mobile
  • CityHero – Inquiry assistant, step 1 of 3: dates as chips, times based on opening hours
    Inquiry assistant, step 1 of 3: dates as chips, times based on opening hours
  • CityHero – Business profile with opening status, address and call button
    Business profile with opening status, address and call button
  • CityHero – Request to two businesses, with sample data (nothing submitted)
    Sample data
    Request to two businesses, with sample data (nothing submitted)

Swipe sideways for more views.

Screens

What it looks like

  • Home page with search by business, dish or service and city
  • Hairdressers in Zurich ranking with filter bar, podium and map
  • Pizza Margherita price comparison in Zurich with median and fair-price indicator
  • Men's haircut prices in Zurich, with range and lowest-priced providers

FAQ

Frequently asked questions

What does it take for thousands of directory pages to hold up on Google?

Real data and its own text on every page. At CityHero, the title, description and FAQ of each ranking, profile and price page are generated from that page's own data. Pages with too few real prices or listings are not indexed. On top come structured data, a sitemap with language variants and an IndexNow ping for changed pages.

How does the ranking work, and can it be bought?

The Hero Score combines four ingredients: rating, number of ratings, inquiry activity and profile quality. The weighting is published on the «How we rank» methodology page. According to the platform, the ranking cannot be bought; paid «Recommended» slots are labelled as ads and sit outside the ranking.

Why does a request go to two businesses at most?

So businesses don't receive mass requests and response rates stay high. The customer chooses a favourite and optionally a second business; with two businesses, the assistant only offers times when both are open. Each business replies via its own link, without login.

Can AI assistants send requests through CityHero?

Yes, technically. CityHero runs its own MCP server through which ChatGPT or Claude can search businesses, fetch details and submit a request. The request follows the same path as on the website. Connecting works via developer mode or as a connector; CityHero is not yet listed in ChatGPT's app directory.

Solutions

Solutions from this project

Work

Similar projects

Your project

A project like this for your business?

Websites from CHF 3,000 to CHF 25,000, web apps from CHF 10,000. We deliver a website within 2 weeks once all materials are in.