MB
~ / projects / carpet

Carpet_

Full-featured e-commerce platform for carpet retail with marketplace integration, payment processing, and inventory synchronization.

Laravel 11 Vue.js 3 TypeScript MySQL Redis Elasticsearch MoonShine v3
130+ migrations
100+ domain classes
50+ API routes
7+ integrations

// architecture

Domain-Driven Design with business logic isolated in src/Domain/ and split into bounded contexts. Each context owns its models, actions, events, and value objects.

$ tree src/Domain/ --depth 1
├── Auth/ # Registration, phone/email verification, social auth (VK, OK, GitHub)
├── Product/ # Items, variations, attributes, custom QueryBuilder
├── Cart/ # Session storage, auto-merge on login, promo codes
├── Order/ # State machine, processes (AssignCustomer, ClearCart)
├── Catalog/ # Categories, brands, abstract filter pattern
├── Favorite/ # Session-to-account sync
└── Marketplace/ # Ozon, Wildberries, Avito — unified Client → Service → Actions
Value Objects

Price with kopek precision, currency symbol, and formatting

Action Classes

Single responsibility — NewOrderAction, UploadCard, UpdateQuantity

Route Registrars

Feature-based route organization (Cart, Product, Catalog, Order)

Observers

Auto-sync with marketplaces on product and price changes

Events & Listeners

Event-driven model for orders, payments, notifications

Custom Builders

Eloquent builders with domain methods: homePage(), filtered(), sale()

// marketplace integration

Unified architecture for three marketplaces with automatic product card uploads, price and stock synchronization, attribute mapping, and background job processing.

Ozon
Product cards
Price sync
Stock management
Wildberries
14 attribute types
Collection mapping
Warehouse sync
Avito
XML feeds
Auto-upload
Listing management
$ php artisan horizon:status
ProductObserver SyncPriceJob MarketplaceClient API synced ✓

// payment system

Gateway pattern with a unified PaymentGatewayContract — swap providers without touching business logic. Event hooks for lifecycle management and Telegram notifications.

// PaymentGatewayContract.php
interface PaymentGatewayContract {
public function create(Order $order): Payment;
public function onSuccess(Payment $payment): void;
public function onError(Payment $payment): void;
}
YooKassa

Online payments with receipt generation and webhook processing

Dolyame

BNPL installments with certificate auth and minimum amount validation

RoboKassa

Alternative gateway with signature verification and callback handling

// key features

01. Catalog & Filtering

  • Dynamic filters: price, size, material, color, shape, purpose
  • Full-text search via Elasticsearch (Laravel Scout)
  • SEO-friendly filter URLs for crawlability
  • Vue + Pinia store for reactive filter state

02. Cart & Checkout

  • Session storage for guests, auto-merge on registration
  • Soft-delete items, 1-hour TTL cache
  • Promo code engine with validation rules
  • Dadata address autocomplete integration

03. SEO Engine

  • URL-bound SEO model with meta templates
  • A/B testing variants for meta tags
  • Auto-generated sitemap.xml

04. Frontend (20+ Components)

  • Vue 3 Composition API with TypeScript
  • Product gallery, variation selector, price sliders
  • Custom composables (useSizeTruncation)

// tech stack

Backend
Laravel 11, PHP 8.2+
MySQL, Redis
Elasticsearch
Queue Workers
Frontend
Vue.js 3, Pinia
TypeScript
SCSS, Bootstrap 5
Tailwind CSS
Payments
YooKassa
Dolyame (BNPL)
RoboKassa
Integrations
Ozon, WB, Avito
Dadata
Telegram Bot
SMS, MyStore