TB
Work/Urban Design

HoReCa Webshop / Gallery

a paper catalog → a self-serve HoReCa shop

−72%Quote-to-order timevs. phone + email cycle
B2B HoReCaBilingual webshopStripe checkoutOwner admin panel

The problemWhere it started

Urban Design supplies premium HoReCa brands (Villeroy & Boch, RAK, Schönwald, Bormioli) to restaurants, hotels and bars across Croatia. The business ran on a paper catalog, a phone, and Sanja's inbox. Every order required two or three calls to confirm specs, prices, and stock. There was no way for a chef in Dubrovnik to see what was on the shelf at 11pm before a Monday opening, and no way for the owner to update prices without calling a developer.

Role
Design + Build + Admin Panel
Duration
10 weeks
Year
2026
Stack
Next.js 16, Supabase, Stripe, Resend

ApproachWhat we did

  1. 1

    Bilingual (HR / EN) webshop with category-led browsing and a single shared cart, so a buyer can flip between languages mid-purchase.

  2. 2

    Stripe Checkout with server-side amount re-verification. No order is written until the cart total matches what Stripe charged.

  3. 3

    Custom admin panel: products, orders, messages, subscribers, catalogs, activity feed. Owned outright, no CMS rental.

  4. 4

    Editorial card design with brass-on-warm palette and clay-pill UI, so the catalog reads like a lookbook, not a Shopify theme.

  5. 5

    Croatian fiskalizacija (Swing-Q) wired into the order pipeline so legal-grade receipts go out automatically.

The resultThe numbers after launch

−72%

Quote-to-order time

phone cycle vs. self-serve
1 min

Owner price update

vs. dev ticket previously
+2.3×

After-hours orders

first 60 days

From the buildWhat we shipped

Editorial product grid

Swatch-only cards with always-on badges. The information panel slides in on hover. No clutter at rest, full detail on demand.

lookbook, not a theme

Owner admin panel

Single screen for orders, low stock, unread messages and revenue. The owner runs the shop without ever opening Supabase.

owned, not rented

Verified Stripe checkout

Cart total is recomputed on the server before the order row is written. Stripe webhook → amount check → fiskalizacija → email confirmation.

no order written until math checks out
We used to confirm every order by phone. Now they land in the inbox already paid, already fiskalizirano, already labeled by venue.
UDUrban Design · Owner
FERZWS+
Join the businesses that own their software
Ready to build?

Let's build something you actually own.

Tell us what you're trying to build. We'll come back with a clear scope, a fixed quote, and a realistic timeline, usually within a couple of days.

What actually moves the numbers

Once a month: concrete moves from the websites and campaigns we run. No theory, no spam.

By signing up you agree to receive emails. One-click unsubscribe in every one. Privacy Policy