Dilavtech: Online Store for Plumbing and Electrical Supplies
About the project
Dilavtech sells plumbing, electrical supplies and tools in Moscow and the Moscow region. We built the whole store: the storefront, the API, an admin panel for managers and the data migration from the old platform. The store started on Strapi. When the catalog and the requirements grew, we moved it to a custom backend without changing page URLs or layout.
Storefront
- A catalog of 20+ sections: a category tree and attribute filters that show the number of products for each value
- Readable filter URLs (
?f=group.value). Old links redirect with a 301, so search rankings are kept - Product pages with a gallery, specifications, one-click ordering, favorites and comparison
- Before checkout, the cart checks prices and stock with the server. The order total is calculated on the server, not in the browser
- Card payments via YooKassa. An unpaid order can be paid later from the customer account
- Sign-up by phone with an SMS code, or by email with a confirmation link
- Quick order requests for guests, with bot protection
- Articles targeting local search queries to bring SEO traffic
Admin panel for managers
Instead of a general-purpose CMS, we built an admin panel shaped around how the store works. It has 9 sections: orders, requests, catalog, attributes, prices and stock, customers, site pages and settings.
- The home screen shows new orders and requests, plus products that need attention: out of stock, no photos, no attributes, hidden from the site
- A drag-and-drop category tree. Subcategories inherit filters
- Every product field on one screen, with product duplication
- Bulk price changes by a percentage per category, with history and rollback
- Order pages with status changes, manager comments and a log of emails sent to the customer
- Sign-in protection: a lockout after 5 failed attempts, and store settings are visible only to the owner
Integrations
- An API for 1C and other accounting systems, with Bearer keys issued in the admin panel: product and order export, stock updates
- Emails to customers and new-order notifications to managers
- Full data migration from Strapi, with a check after the move
- Image sizes of 320/640/1280 px and a sitemap for search engines
Tech stack
- Storefront: Next.js (App Router), React, TypeScript, Tailwind CSS
- API: NestJS 11, Prisma, PostgreSQL 18
- Admin panel: React 19, Vite, TanStack Router / Query / Table, shadcn/ui, dnd-kit, TipTap
- Shared zod schemas for the API and the admin panel, strict TypeScript, unit and integration tests
- Docker, nginx, YooKassa payments







