The Orchard Bar.React website design & build for an Edinburgh restaurant

Solo: design, build & maintenance · 2020 to present

A dated WordPress site rebuilt as a fast, bespoke React site: online booking, self-updating menus, and a design that finally matches the venue.

The Orchard Bar is a neighbourhood restaurant and bar in Canonmills, Edinburgh, a few minutes from the Royal Botanic Garden. Owners Lorraine and Chris were my first client contract in 2020; I've designed, built and maintained the site since, including the 2026 React rebuild documented here.

The Orchard Bar on its corner site in Canonmills, Edinburgh: a sandstone tenement building with green and cream painted frontage and a gold ORCHARD sign above the door
The venue on Howard Place, Canonmills.
The Orchard Bar website in 2026: a full-width photograph of the bar behind the heading Welcome to The Orchard Bar, with See the menus and Book a table buttons
The Orchard Bar today, rebuilt from scratch in React (2026).
01

Outcomes

3,325
Bookings through the site last year
15,148
Covers booked last year
277
Bookings a month on average
02

Before & after

The original site was a homemade WordPress build on an off-the-shelf theme: dated, desktop-first, and unable to do the two jobs a hospitality site exists to do: take bookings and show the menus.

Before: the WordPress site
The Orchard Bar's old WordPress site in 2019: a narrow fixed-width column on a tiled beer photograph background, with a nearly empty About Us page
The 2019 About page on an off-the-shelf Pique theme, captured from the Wayback Machine.
The old site's Food page in 2019, showing five plain text links reading Main Menu, Gluten Free, Children's Menu, Buffet Menu and Desserts with no prices or dish names
The Food page: five links, no dishes, no prices.
After: the 2026 rebuild
The rebuilt site on a phone: the bar photograph fills the screen behind the Welcome to The Orchard Bar heading, with See the menus and Book a table buttons stacked below
The same site on a phone, built mobile first.
The rebuilt menu on desktop: Food and Drinks tabs above sub-menu switchers for Main Menu, Gluten Free, Sunday Roasts and Kids Menu, a vegetarian and vegan legend, dishes with prices and descriptions, and featured dish cards down the right
And the menu those five links became: tabs, sub-menus, dietary flags, prices and featured cards, all generated from one typed source.
  • Booking: phone-only TableSense reservations on the page
  • Menus: a list of bare links readable, self-updating menus
  • Layout: desktop theme mobile-first bespoke build
03

The React build

I designed the site in Figma first, warm and characterful to fit a neighbourhood pub, but clean and legible, with space for the menus and photography to do the work. The build is a React site where all content lives as typed data: menus, prices, hours and promotions are edited as data, not JSX. Every layout is hand-written CSS Modules over one design-token system, with no framework and no UI library.

The Orchard Bar / mobile flow
Home
The rebuilt site on a phone: the bar photograph fills the screen behind the Welcome to The Orchard Bar heading, with See the menus and Book a table buttons stacked below
Hero, promo bar, two ways in
Menu
The rebuilt menu on a phone: Food and Drinks tabs, sub-menu switchers, a vegetarian and vegan legend, and dishes listed with prices
Tabs, sub-menus, dietary flags
Booking
The booking section of the rebuilt site on a phone: the TableSense widget with Party Size, Date and Ideal Time dropdowns above a Check Availability button, over a photograph of the bar, with the Howard Place address and phone number below
Live availability, then address
The three screens the design was built around, at both fidelities: wireframes for the structure, then the visual language on top. Shown as built, since the site ships the design that was signed off.

Typed menu engine

Menus are modelled as a small schema (menu, sub-menu, category, item) carrying prices, dietary flags and a featured flag. The tabs, switchers, legend and featured cards all build from that one source, so nothing drifts out of sync.

Online booking

An embedded TableSense reservation widget with a branded loading state, alongside address, map link and contact details, replacing the old phone-only flow.

Time-aware promotions

Event banners carry start and end dates; only the active promo shows, opening to a full-screen overlay. Getting it above a z-indexed nav was a stacking-context problem, not a bigger-number problem.

Also in the build: scraper-resistant contact details, one design-token scale driving all type and spacing, and prefers-reduced-motion support throughout.

StackReact 19TypeScriptViteReact RouterCSS ModulesVitestTableSense
04

Results & the client's words

  • A site that finally fits the venue: modern, fast and mobile-first.
  • Menus stay current: updates are a quick data edit, not a fight with a CMS.

“If you need a website and don't have the technical skills to make one yourself, then I strongly suggest you choose Victor. He constructed one for the Orchard Bar, our business, and is now working on one for my individual ventures. He takes the time to hear the details and investigates what your business requires. Easy to communicate with, a very professional service. Thank you Victor.”

Lorraine, The Orchard Bar
05

Reflection

What worked

  • Modelling content as types paid off: publishing a change is editing data, and nothing falls out of sync.
  • One token scale beat per-component media queries.

What I'd improve

  • SEO/meta pass: real titles, Open Graph and LocalBusiness JSON-LD.
  • Test coverage: a smoke test per section.

More work

See all work →

Need something similar?

See the live site, read the code, or get in touch about a project.

← Back to all work

We use cookies & Pendo to monitor traffic anonymously, improve experience, and understand usage.

Let's connect