Versa Ecommerce
A complete e-commerce platform for Versa's radio and device business, selling to individuals and companies. It covers the storefront customers buy from, the console staff run the store with, and the backend service that prices, takes orders, bills subscriptions and handles payments.
Highlights
Three ways to buy, priced on the product page
A buyer chooses to own a device outright, subscribe to it monthly over a fixed term, or own it with added cover. The price changes with the choice, and a subscription shows both the one-time and the monthly amount.
Checkout that cannot fail late
The delivery fee comes from the buyer's city and the store's delivery zones, so a city nobody delivers to is caught at the address step, not at payment. Orders that need approval are still placed, then become payable once approved.
A console that opens on work, not statistics
Each dashboard tile is a queue with an age that escalates from clear to at risk to breached, and the worst queue leads. Every tile opens the screen that can clear it.
Fulfilment with guard rails
An order cannot be packed until every line has its serial numbers and a quality check. Cancelling a paid order refunds it in the same step, so an order is never left cancelled but unrefunded.
Six services merged into one
The backend was built as six separate services, then consolidated into one service with six modules. The merge removed 16 of 23 message topics and cut the source by 22 percent, and the module boundaries stayed.
Everything it does
- Catalogue with search and filters by brand, device type and contract
- Three ways to buy a device — outright, on a monthly plan, or outright with added cover
- Cart that follows the account and merges a cart built while signed out
- Stepped checkout — contact, delivery address, review, agreements, payment
- Delivery fee worked out by the server from the buyer's city and configured delivery zones
- Promo codes that say why a code was rejected
- Card payments through Stripe, with the first card saved for later orders
- Recurring subscription billing against a saved card
- Buyer verification, with regulated and subscription orders held until approved
- Order tracking with courier, tracking number and printable invoice
- Business accounts, so orders are attributed to a company
- Staff dashboard that opens on work queues ranked by how overdue they are
- Fulfilment steps from confirmed to delivered, with serial numbers required to pack
- Full refund in the same step as cancelling a paid order
- Products, prices, promotions, fees, couriers and delivery zones managed from the console
- Currency, tax and terms configured per country
- Permission matrix where widening access needs a second confirmation and a reason
- Read-only activity log with filters and CSV export
Specifications
- Role
- Full-stack developer
- Platform
- Web app
- Period
- 2024 – 2026
- Frontend
- Two Next.js apps — store and console — sharing a design system
- Backend
- One NestJS service with six domain modules, MongoDB and Kafka
- Payments
- Stripe, with card details entered in Stripe's own form
- Automated tests
- Unit, browser and mutation testing on both the frontend and the backend
- Documentation
- In-repo user manual, domain rules and architecture decision records
- Stack
- Next.jsTypeScriptNestJSMongoDBKafkaStripe