From 4c95327d9455dc68c6f536bc8f82859fdbfdd2b4 Mon Sep 17 00:00:00 2001 From: Zeeshaun Date: Tue, 5 May 2026 18:41:34 +0000 Subject: [PATCH] Stream linining --- client/src/App.jsx | 82 +++++++++++++++++++++++-------------------- client/src/styles.css | 30 ++++++++++++++++ 2 files changed, 74 insertions(+), 38 deletions(-) diff --git a/client/src/App.jsx b/client/src/App.jsx index 563ceec..cb5985f 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -12,6 +12,11 @@ import logo from "../../assets/ranaze-logo.png"; const queueStatuses = ["new", "making", "ready"]; const orderIdleTimeoutMs = 90_000; +const tabLabels = { + order: "Order", + queue: "Order Status", + menu: "Menu Admin" +}; const initialBuilder = (settings) => ({ size: settings.sizeOptions[0]?.name ?? "Regular", @@ -132,22 +137,22 @@ export default function App() { const selectedDrink = menu.find((item) => item._id === selectedDrinkId) || null; const modeDetails = { premade: { - stepLabel: "Quick pick", - title: "Pick a house favorite", - description: "Choose a ready-to-go drink and add it to the ticket in one tap.", - buttonLabel: "Add this drink" + stepLabel: "House favorite", + title: selectedDrink?.name || "Pick a house favorite", + description: "Choose one of our ready-to-enjoy drinks and add it in one tap.", + buttonLabel: "Add to my order" }, simple: { stepLabel: "Quick customize", - title: selectedDrink?.name || "Choose a drink", - description: "Make a few easy choices and keep the line moving.", - buttonLabel: "Add customized drink" + title: selectedDrink?.name || "Choose your drink", + description: "Pick your drink, then make a few simple choices like size and sweetness.", + buttonLabel: "Add to my order" }, detailed: { - stepLabel: "Full customize", - title: selectedDrink?.name || "Choose a drink", - description: "Adjust every detail, including toppings and special instructions.", - buttonLabel: "Add fully customized drink" + stepLabel: "Build it your way", + title: selectedDrink?.name || "Build your drink", + description: "Customize every detail, including ice, toppings, and special requests.", + buttonLabel: "Add to my order" } }; const activeMode = orderMode ? modeDetails[orderMode] : null; @@ -161,9 +166,9 @@ export default function App() {

Ranaze Bubble Tea & Slush

-

Tablet POS

+

Choose your drink

- Fast ordering for house favorites, easy edits, and detailed custom drinks. + Fresh bubble tea, fruit slushes, and easy customizations made just the way you like them.

@@ -174,7 +179,7 @@ export default function App() { className={`tab ${view === tab ? "is-active" : ""}`} onClick={() => setView(tab)} > - {titleCase(tab)} + {tabLabels[tab]} ))} @@ -185,10 +190,10 @@ export default function App() { {orderMode && (

- This screen returns to the start menu after 90 seconds of inactivity. + This screen returns to the drink menu after 90 seconds of inactivity.

)} @@ -196,27 +201,27 @@ export default function App() { {!orderMode && (
-

Start a new order

-

How would you like to order today?

+

Welcome to Ranaze

+

How would you like to choose your drink?

- Pick the path that feels easiest for your guest. You can switch anytime during the order. + Start with a signature favorite, make a few quick changes, or fully customize your drink.

@@ -267,7 +272,7 @@ export default function App() {
-

Selected drink

+

Your drink

{activeMode.title}

@@ -341,7 +346,7 @@ export default function App() { )} {orderMode === "premade" && (
- This version uses the house recipe exactly as listed on the menu. + This option keeps the drink exactly as our signature recipe.
)}
@@ -375,14 +380,14 @@ export default function App() {
-

Current order

-

Current ticket

+

Your order

+

Review your drinks

- +
- {ticket.length === 0 &&
No items in the ticket.
} + {ticket.length === 0 &&
Your order is empty.
} {ticket.map((line, index) => (
@@ -397,10 +402,10 @@ export default function App() {

{line.size} • {line.sweetness} • {line.ice}

-

{line.toppings.length ? line.toppings.join(", ") : "No toppings"}

- {line.notes &&

Note: {line.notes}

} +

{line.toppings.length ? line.toppings.join(", ") : "No extra toppings"}

+ {line.notes &&

Special request: {line.notes}

}
- Line total + Drink total {formatCurrency(lineTotal({ basePrice: line.basePrice }, line, settings))}
@@ -409,21 +414,22 @@ export default function App() {
@@ -447,7 +453,7 @@ export default function App() { } }} > - Place order + Place my order
diff --git a/client/src/styles.css b/client/src/styles.css index 1b21167..d567e9e 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -95,6 +95,11 @@ button { gap: 0.2rem; } +.brand-copy h1 { + font-size: clamp(2rem, 3vw, 3rem); + line-height: 0.98; +} + .brand-copy p:last-child { margin: 0; max-width: 30rem; @@ -123,6 +128,13 @@ button { flex-wrap: wrap; } +.tabs { + padding: 0.4rem; + border-radius: 999px; + background: rgba(255, 255, 255, 0.55); + border: 1px solid rgba(16, 16, 16, 0.06); +} + .screen { display: grid; grid-template-columns: 1.15fr 0.85fr; @@ -140,6 +152,7 @@ button { .order-toolbar-note { margin: 0; + font-size: 0.92rem; } .queue-screen, @@ -170,6 +183,13 @@ button { .mode-launcher-copy { max-width: 48rem; + display: grid; + gap: 0.45rem; +} + +.mode-launcher-copy h2 { + font-size: clamp(2rem, 3.4vw, 3.3rem); + line-height: 0.96; } .mode-grid { @@ -181,7 +201,9 @@ button { .mode-card { display: grid; gap: 0.65rem; + align-content: start; padding: 1.25rem; + min-height: 200px; border: 1px solid rgba(16, 16, 16, 0.08); border-radius: 24px; background: rgba(255, 255, 255, 0.9); @@ -240,6 +262,7 @@ button { background: var(--accent); color: #fff6e8; border-color: var(--accent); + box-shadow: 0 8px 18px rgba(16, 16, 16, 0.18); } .text-btn { @@ -286,6 +309,12 @@ button { text-align: left; } +.drink-card h3, +.ticket-line strong, +.queue-card h3 { + line-height: 1.05; +} + .drink-card.is-selected { border-color: rgba(246, 179, 62, 0.7); box-shadow: @@ -350,6 +379,7 @@ select { .builder-intro { max-width: 28rem; + margin-top: 0.35rem; } .inline-builder {