Steven TsvikSelected projectsVol. 03

Full-stack engineering / Private Commerce Platform

A private commerce platform

Behind the
storefront.

The customer experience.
The operation behind it.
Built together, end to end.

Steven Tsvik Sole developer

00.0Contents

An anonymized look inside a live platform.
Client identity and sensitive information are obscured.
Estimated figures · Illustrative, not recorded results.

01.1Introduction

One product. Every layer.

A storefront is only
the beginning.

Role
Sole developer
Scope
Customer experience, internal tools,
backend & data architecture
Stack
Next.js · React · TypeScript
PostgreSQL · Supabase

I built a complete shopping experience alongside the software the team uses to run it. Browsing, product selection, checkout, and accounts connect to membership controls, order management, stock records, and reporting.

As the sole developer, I owned the path from the interface to the stored result. The customer-facing site and internal tools work from the same application logic and data model.

— 01 —
02.1The storefront

A way into the catalog.

Category browsing and reusable product cards keep the shopping experience consistent.

Anonymized storefront with category navigation and product grid
The storefront / category navigation and product discoveryEstimated figures
— 02 —
02.2Choosing & checkout

From a product
to a purchase.

Product options, availability, and quantity controls carry a specific selection into the bag. Shared cart state keeps that selection consistent between pages and across screen sizes.

A bag that remembers.

The cart persists locally. Explicit hydration handling restores saved items before showing an empty state.

Checkout collects contact and delivery details, order notes, delivery fees, and a preferred payment method. Payment is collected at delivery.

Anonymized product detail with options, availability and quantity controls
Product detail / one clear selectionEstimated figures
  1. 01Choose options
  2. 02Review the bag
  3. 03Confirm delivery
— 03 —
02.3People & permissions

Access has
a lifecycle.

I built signup, email verification, referrals, and account access around explicit membership states. Administrators can approve or suspend accounts from the same workspace.

Members, staff, and administrators have distinct entry points. Server-side checks enforce access; the interface makes the current state visible.

Anonymized desktop membership management
Desktop / administrative reviewEstimated figures
Anonymized mobile membership cards and controls
Mobile / the same controls, adapted for touchEstimated figures
— 04 —
03.1The workspace

The other side of the storefront.

A shared view of the catalog, stock health, and the day-to-day operation.

Anonymized operations dashboard
Operations / catalog, availability, and operational healthEstimated figures
— 05 —
03.2Orders & stock

One order.
One stock change.

The staff register connects product selection, quantities, pricing tiers, and payment-method recording. I built the database transaction that creates an order and consumes its stock together.

Tracked stock is consumed first in, first out. Insufficient stock rolls back the transaction. Cancellation restores the original batches, with an idempotent restoration that prevents duplicate stock returns.

Anonymized sales workspace with illustrative order counts at ten times the original scale
Sales / illustrative order activity and operational statusIllustrative order counts
  1. 01Create order
  2. 02Consume stock by batch
  3. 03Record costs & movements

One transaction · Commit together or roll back

— 06 —
03.3Inventory

Every adjustment has a history.

Opening balances, restocks, recounts, and returns belong to the same inventory model.

Anonymized inventory workspace showing stock and movement controls
Inventory / quantities, batch costs, and movement historyEstimated figures

Trace the movement.

Movement history explains how a quantity changed. Staff can review stock, restock products, and work with inventory imports and exports.

Keep the distinction.

An untracked product is different from a tracked item at zero. That distinction carries through to validation and reporting.

— 07 —
03.4Reporting

Useful numbers need context.

I connected shopping activity and order data so the team could see how the store was performing.

Analytics interface with illustrative sample counts, not actual business results
Reporting / 30-day activity · 584-member storeEstimated figures

Follow the shopping journey.

I built a first-party event pipeline that stores product views, cart activity, checkout starts, and purchases in the database. The dashboard brings those counts together, with date filters and CSV exports for a closer look.

See what is happening.

I integrated Sentry into a separate live activity view for pageviews, clicks, and errors, alongside recent orders from the store’s database. That brings customer activity and technical issues into one place, so the team can spot what needs attention.

— 08 —
04.1Under the interface

Connected
at every layer.

I implemented the React interfaces, TypeScript services, server routes, database functions, and operational tooling that connect a user action to a reliable stored result.

Member experienceStaff registerAdmin workspace

Next.js + TypeScript

Access checks · Validation · Application services

PostgreSQL + Supabase

Members · Orders · Inventory batches · Movement ledger

Beyond the open tab.

Email verification, background push notifications, scheduled broadcasts, and staff alerts extend the experience beyond the browser.

Make failure explicit.

Rate limiting, error monitoring, database migrations, and tests for service logic and interface behavior support the application.

— 09 —
04.2The whole product

What this project represents

Own the interface.
Understand the operation.

My contribution was the implementation across every layer: shaping the interfaces, building the workflows, and connecting them through a shared data model.

The result brings the customer experience and the team’s daily work into one product.

Next on the shelf / 04ReKindle ↗
— 10 —