Skip to content
←
02 — CASE STUDYOpenClassrooms → V2

OhMyFood began as an OpenClassrooms project. I kept the original submission intact and built a separate V2 when I returned to it with more front-end experience.

I wanted the restaurant concept to carry someone from discovery through a menu and reservation to confirmation.

Evolution
OpenClassrooms project → 2026 rebuild
Stack
React • TypeScript • Vite • React Router
V2 Discovery
01 / The Original Project

The original project

OhMyFood is a training project from OpenClassrooms focused on building a responsive website for restaurant discovery and booking. Its original static layout serves as the baseline for the rebuild shown here.

HTML / CSS / Sass → React / TypeScriptView original brief →
V1 Baseline
02 / Visual Direction & Architecture

A restaurant guide with a booking flow

I rebuilt the restaurant guide and added a path from menu selection to booking confirmation. The visual redesign came later, after the flow worked.

Restaurant filters live in the URL, and an in-progress menu survives navigation. Switching restaurants asks before replacing that selection.

Availability has loading, empty, and error states. Once a booking is confirmed, its details carry through to the confirmation page for that session.

Route changes move focus to the new page heading, and motion respects reduced-motion preferences. The restaurant data and availability are simulated locally; there is no backend booking service.

SAME
IDEA
DIFFERENT
EXPERIENCE.
03 / Customer Journey

The selected dishes and running total stay with you from the menu through the reservation and its confirmation.

01 / 04

Discovery

Browse restaurants and explore their ambiance, cuisine and ratings in the Paris guide.

V2 Journey // DiscoveryRestaurant guide
OhMyFood V2 discovery page showing La palette du goût in the Paris restaurant guide
02 / 04

Menu / Tray

View the menu and select dishes to build your tray. The selection and running total stay visible in real time.

V2 Journey // SelectionMenu and tray
La palette du goût menu with selected dishes and a reservation tray showing the total
Close detail of the selected dishes in the reservation tray and its 65 euro total
03 / 04

Reservation

Choose date, time and number of guests. The booking view keeps the dishes and total selected on the menu.

V2 Journey // ReservationGuided booking
Reservation page for La palette du goût with guest count, date, time, and selected menu summary
Close detail of the selected menu carried into the reservation and its 65 euro total
04 / 04

Confirmation

A clear confirmation with all reservation details, reference code, guest count, and selected dishes.

V2 Journey // ConfirmationBooking record
Confirmed booking at La palette du goût with reference, date, time, guest count, and menu summary
Close detail of the booking reference, date, time, and guest count
04 / Visual Evolution

The visual pass came last

The original submission met the brief as a static site. V2 adds a booking flow, and the screens below show how I changed its visual direction.

Once the V2 flow worked, I thought I was nearly finished. Looking at the early screen again, I could see the boxes, thin borders, and small labels still carried the school-project feel.

Original versionOpenClassrooms Baseline

Original version — HTML / Sass

Refined versionOhMyFood V2

Refined version — React / TypeScript / Editorial UI

It worked. It still looked old.

With the booking journey already working, I went back to the typography, photography, interaction, and motion.

The final direction uses warm parchment surfaces, deep wine contrast (#421930), larger type, and restaurant photography. Motion helps show what changed after an interaction.

Early V2 draft
Early V2 restaurant discovery screen with a boxed filter panel and bordered featured restaurant card
Final V2 direction
Final V2 restaurant discovery page with an editorial layout, featured dining photography, and warm wine-colored surfaces
05 / Reflection & Next Steps

What I would change next

In V1, I focused on getting each screen right. V2 made me think about what happens between them: a menu surviving navigation, a booking reaching confirmation, and a visual direction that helps someone choose a restaurant.

Availability is still simulated locally. A production booking would need a backend and live table availability; I would also explore user accounts.

01

State continuity across routes

Ensuring the in-progress menu and running total survive page navigation without accidental loss.

02

A visual pass after the flow worked

Replacing boxed templates with warm parchment surfaces, deep wine contrast (#421930), and expressive typography.

03

Accessible navigation & focus

Moving keyboard focus to the main heading upon route transition and honoring reduced motion preferences.