E-Commerce

ORTHOSTOREOrthodontic Supplies Store

A store for orthodontists: brackets, instruments, micro-implants

Online store for orthodontic supplies: a storefront, an admin panel with sales analytics and a NestJS API as separate apps.

ORTHOSTORE — Orthodontic Supplies Store
Challenge

The supplier needed a full store and an internal panel for stock and orders — without a storefront release ever taking the admin down.

Result

A Next.js storefront with catalogue, cart and order statuses, an admin panel with sales charts, and a NestJS backend with authentication, API documentation and rate limiting.

Key features

  • Categorised catalogue
  • Cart & checkout
  • Order statuses
  • Customer accounts
  • Admin with sales charts
  • JWT auth
  • API documentation

How it's built

An online store for orthodontic supplies: a Next.js storefront, an admin panel with sales analytics and a NestJS API, built for a professional buyer who knows exactly what they need. These are the decisions that shaped it.

3
Apps, one API
4
Order states
OTP
Login without passwords
UAH
Cashback balance

A catalogue for people who know the part number

The buyer here is an orthodontist, not a browser. Categories and subcategories carry manufacturer and country of origin, because a practice buys a specific bracket from a specific maker and a near-match is not a substitute.

So the catalogue is organised around those axes rather than around lifestyle merchandising, and search exists to confirm a choice that is already made.

Login by code, not by password

Customers sign in with a one-time code delivered by SMS or email, with a password option for those who want one. A clinic's purchasing is done by whoever is at the desk that day; a shared password would be written on a sticky note within a week.

The SMS sender sits behind an interface with console, HTTP and Twilio implementations, so the same code path runs in development without spending money on messages.

Four states, on purpose

An order is new, processing, done or cancelled. A store this size is worked by people who already know the customer; adding eight states would produce a dashboard full of rows nobody moves.

Cashback is credited when an order reaches done and is adjusted atomically on the customer record, so a balance cannot drift when two orders close at once.

Discounts that survive contact with reality

Discounts are percent or fixed, and promo codes are their own entity with their own rules, because a seasonal campaign and a negotiated price for a regular clinic are different things that expire at different times.

Keeping them apart means ending a campaign never touches the terms a long-standing customer was promised.

An admin panel that answers questions

The back office is a separate React application with charts over sales, so the owner sees what is moving without exporting anything. The API is documented in Swagger, rate-limited, and separated into customer and admin authentication, so a compromised customer session cannot reach the store's own data.

The result

A working store for a professional market — catalogue, cart, orders, cashback and promo codes, with an admin panel the owner runs alone and a documented API behind all of it.

Next project
Web

RentaLviv

The team runs the fleet, prices and car order on its own

View case
RentaLviv — Car Rental Platform

Want something similar?

Tell us about your project and we'll build it with the same care and attention to detail.

Start a project →