Les Halles de Lyon Paul Bocuse
Sixty traders, one venue: the site had to be a directory as much as a showcase.
- Year
- 2026
- Design & build
- 5 weeks
- Stack
- Next.js · React · Tailwind · Vercel
- Information architecture
- Design
- Development
- SEO
Demo version put online by Kayzen Web at a Vercel address; the final domain belongs to the client.

- traders listed
- 60
- Lighthouse accessibility
- 97/100
- Lighthouse performanceBelow our target of 90: a directory of sixty traders with photos is heavy by nature; reducing that weight (deferred loading, more compact formats) is the priority job for the next iteration.
- 76/100
What needed solving.
The background
Les Halles de Lyon Paul Bocuse bring together some sixty food businesses — butchers, cheesemongers, oyster sellers, pastry chefs, several of them Meilleurs Ouvriers de France (France's highest craft distinction). Food & Wine ranked the market the third best in the world.
The constraint
A website for a shared venue is pulled in two directions: if it only talks about the place, it helps no one find a specific trader; if it is only a directory, it loses everything that makes people want to come. It had to serve both the visitor discovering the place and the one searching for “the cheesemonger at Les Halles”.
The response
Two layers, one on top of the other. A narrative layer — history, photography, atmosphere — to make people want to come. A directory layer — 60 listings, filterable by trade, with location and opening hours — to be useful. The first brings people in; the second keeps them.
The scores recorded at delivery.
Lighthouse scores for the live site. We publish them as they are: when one is low, its cause and the plan to fix it are set out below rather than glossed over.
Every design choice, and the reason for it.
One listing per trader
Trade, specialities, location within the market hall, opening hours. This information is almost always missing, and visitors end up wandering the aisles looking for it.
Filtering by trade
Butcher, cheesemonger, oyster seller, greengrocer, wine merchant, caterer. Visitors are not looking for a name but for a need; the filter follows the way people think about a market.
Full-frame photography, in moderation
Heritage deserves to be shown. The images are large and polished, but loaded progressively: the gallery does not slow down the cheesemonger listing you came for.
Project palette
Market red
#9B2C2C
Identity
Tile white
#FAFAF8
Background
Slate
#2B2E33
Text
Brass
#B99247
Rules and MOF medals
Type system
Display
Playfair Display
Body text
Inter 400
The heritage register calls for a serif; the directory calls for a dense sans-serif. The two coexist by zone, never within the same block.
What's under the bonnet.
- Next.js
- React
- Tailwind
- Vercel
A directory in structured data
The 60 traders live in a typed dataset, the single source for the list, the filters, the map and the markup. A change of opening hours is made in one place only.
Performance at 76: a trade-off we own
The score is below our standards, and we document it rather than keep quiet about it: the heritage gallery is heavy. It is the first optimisation job identified — switching to AVIF and splitting the gallery more finely.
How the site makes itself findable.
One page per trade
“Fromager Halles Paul Bocuse” (cheesemonger), “écailler Lyon” (oyster seller): each trade has its own hub page, capturing a search the home page cannot target.
Markup for the venue and its traders
The venue carries a Place node, each trader a linked LocalBusiness node. The hierarchy is explicit for search engines and AI assistants alike.
Usable by everyone.
Since June 2025, the European Accessibility Act has required digital accessibility from a large share of online services. We build it in at the design stage rather than retrofitting it.
Filters and results announced
Changing a filter updates a results counter in a live region. Without it, a blind user does not know the list has changed.
What was delivered.
- Home — the venue
- The 60 traders — filterable directory
- Pages by trade
- History and heritage
- Directions, opening hours, map
How the project unfolded.
Inventory
The 60 traders, their trades, locations and opening hours.
Architecture
Narrative layer and directory layer, filters by trade.
Design
Heritage register, gallery, listings.
SEO
Trade pages, Place and LocalBusiness markup.
What we are often asked.
More of our work
GDPR compliance & SaaSKonsent by Kayzen
A banner vendor that audits banners is both judge and party: independence was the product.
Offensive cybersecurity & SaaSSentinel by Kayzen
Selling a security product to engineers: every claim had to be demonstrable.
Data & weather serviceMétéo Climat France
358 indexable pages, a map animated over 72 time steps — and not a single line of framework.
The same high standards, for your website.
A free audit of your current site, a quote within 24 hours and written reasoning — like the case study you have just read. Pay in three interest-free instalments; local funding schemes checked before you sign.