[ Case study ]

[ 11 ]

← All workFrontend reference build, solo

OmniShop.

Multi-channel commerce showcase. Storefront, admin, analytics — built end-to-end as a frontend reference for prospects who want to see the pattern before they brief.

Year
2024
Duration
3 months
Stack
Next.js · TypeScript · Tailwind · Radix · React Query
omnishop-one.vercel.app/
OmniShop — case study hero
Brief

Why multi-channel, why this stack

Most growing commerce brands hit the same wall around their second year. They start on Shopify. They add Amazon for reach. They list a few SKUs on eBay because someone said they should. By the time a marketplace channel like Allegro or eMag enters the mix, they're switching between four dashboards, reconciling inventory in a spreadsheet, and noticing that conversion rates are completely different across channels but they don't have one place to compare them.

OmniShop is a reference build for that wall. It demonstrates the surface area a unified commerce ops platform needs to cover — without pretending to be a SaaS product I'm selling. The point isn't "here's a Shopify alternative." The point is here's how I'd architect the storefront-and-admin system if you walked into discovery with this problem.

Approach

Customer-facing surface

The storefront is the conversion side of the build. Light theme, generous whitespace, AI-generated product photography for visual consistency, a category-driven catalog of artisan goods (candles, ceramics, leather, skincare).

Gallery below walks the UI path: homepage → product detail → cart → checkout.

Brand identity

OmniShop

Same token spine as the UI: faceted mark, navy shelf, electric blue accent on digital. Shown here as physical + tablet — a deliberate pause before the dark ops surface.

OmniShop brand mockup — shopping bag, product box, business cards, tablet with logo

Identity stays quiet so product UI stays the hero — colour discipline carries from print to screen.

Operator-facing surface

The dashboard is the ops side. Dark theme — not because dark mode is fashionable, because operators stare at it for eight hours a day and the storefront's white background would tire them. Channel-specific colours (Shopify green, Amazon orange, eBay red, Direct blue) keep multi-channel data parseable at a glance.

The overview is the "good morning" view: KPIs, revenue trend, channel mix, recent orders, top products. Analytics goes deeper: growth, acquisition cost, lifetime value, return rate — the numbers a commerce operator actually steers by — plus revenue-by-channel and category mix.

Stack & architectural decisions

Frontend       Next.js 14 (App Router) · TypeScript · React 18
Styling        Tailwind v4 · Radix UI primitives · custom design tokens
State          React Context (cart) · Zustand (app) · React Query (server)
Forms          React Hook Form + Zod
Charts         Recharts
Icons          Lucide (290+ icons)
Animations     Framer Motion + Tailwind keyframes
Build          Turborepo monorepo
Deploy         Vercel (Edge functions where they help)
Quality        ESLint · Prettier · Husky · Commitlint
Imagery        Seedream 4.5 (BytePlus) for product photography

1. App Router for the storefront, not Pages Router. Server components for category and product pages mean the SEO-critical surface ships server-rendered HTML. The cart and admin are client components where they need to be — checkout flow, dashboard interactions. Mixing render strategies inside a single Next.js app is routine now, but the decision still matters: a storefront that ships as a SPA loses organic traffic.

2. Three state libraries, not one. Cart state lives in React Context — small, session-scoped, no global store. App-wide UI state (sidebar, theme, profile shell) lives in Zustand — minimal API, no provider soup. Server state (catalog, orders, analytics fixtures) lives in React Query — caching, background refetch, optimistic updates where it pays off. Each tool is sized to its problem.

3. Dual theme as a product decision, not a toggle. The storefront and admin have different audiences and different time-on-page. A dark-mode toggle on the storefront would be a distraction. A light-mode admin would tire operators by lunch. Themes are scoped to context: customers always see light, operators always see dark. Tokens are shared; the resolved theme is hard-coded per surface.

Outcome
92
UI components
25
Pages
4
Channels
2
Themes

What this demonstrates

For prospects evaluating commerce work, this build covers:

Storefront craft. Hero, catalog, product detail, cart, checkout, and confirmation — the full conversion path.

Admin craft. Multi-page dashboard, KPI cards, charts, tables, settings surfaces — the full operations path.

Design system discipline. Dozens of reusable components, two themes from shared tokens, motion vocabulary, responsive down to 320px.

Information architecture. Storefront and admin trees, sidebar navigation, breadcrumbs where they clarify hierarchy.

Stack judgment. Multiple state layers used intentionally, server vs. client split where SEO and interactivity demand it, monorepo structure ready to grow.

The codebase is dummy-data only. If you brief me with a real commerce problem, I'd start from a Discovery Sprint to understand the domain — B2B vs B2C, single-channel vs multi-channel, headless vs platform, EU compliance — not by lifting this scaffold.

Gallery

Storefront path → checkout. Then admin.

omnishop-one.vercel.app/
OmniShop storefront homepage — hero, category row, announcement bar

Category row, search, and free-shipping threshold lead the fold so shoppers orient fast; Seedream 4.5 keeps product shots consistent without a studio week.

omnishop-one.vercel.app/product
OmniShop product detail — gallery, pricing, reviews, accordions

Gallery left and right stack surface price, rating, vendor, and quantity without scrolling; accordions hide care and shipping noise until expanded.

omnishop-one.vercel.app/cart
OmniShop cart — line items and order summary

Splits line items from the summary so the checkout CTA stays visible when shoppers change quantities—especially on narrow breakpoints.

omnishop-one.vercel.app/checkout
OmniShop checkout — single-page flow with order summary

Single-page checkout runs contact, address, and payment in one scroll; summary stays pinned right with Continue shopping top-left for a cheap exit.

omnishop-one.vercel.app/admin
OmniShop admin overview — KPIs, revenue chart, channel mix

KPIs, sparklines, revenue trend, channel mix bar, recent orders, and top products land in one scan for a Monday-morning ops check-in.

omnishop-one.vercel.app/admin/analytics
OmniShop analytics — channel revenue, category donut, funnel

Adds steering metrics—growth, CAC, LTV, returns—and pairs them with revenue-by-channel, category mix, traffic, and funnel blocks.

1/ 3slots open · Q2 2026
Booking open nowlive times on /book
Solo operator · Custom work

Brief me on something similar

Multi-channel commerce, headless storefronts, ops dashboards, design systems for product teams — this is core territory. Send a brief or book a 30-min call. Discovery Sprint first, fixed-price build after.

Send a brief
mail@nkovalcin.comReply within 1 working day