E-Commerce Store Development
An e-commerce store is not a template with cart and payment form. It's an operating system for business: warehouse management, pricing, logistics, marketing, analytics — everything should work in concert and without manual intervention where avoidable. Development starts with understanding business model, not choosing an engine.
Technology Stack Selection
The question "what to build on" is resolved based on three factors: catalog volume, integration scenarios, planned load. Typical options:
| Scenario | Stack | Justification |
|---|---|---|
| Up to 1,000 SKU, B2C, quick start | Shopify + custom frontend on Next.js | Shopify handles payments, hosting, PCI DSS |
| 1,000–50,000 SKU, complex filters | Laravel/Django + React/Vue, Elasticsearch | Flexibility in data model, full-text search |
| High-load marketplace | Microservices, Kafka, separate cart/order services | Scaling by component |
| B2B with personal cabinets and pricelists | Custom ERP integration, contract prices | Standard solutions don't cover role logic |
For most mid-size projects, monolith with clear module boundaries is optimal — faster development, simpler maintenance.
Catalog and Data Structure
Catalog data model determines everything else. Common mistake — making products table with columns color, size, material directly. Works until first non-standard product.
Correct approach: EAV (Entity-Attribute-Value) or JSONB attributes in PostgreSQL. Example schema:
products (id, sku, slug, base_price, status)
product_variants (id, product_id, sku, price_delta, stock)
variant_attributes (variant_id, attribute_id, value)
attributes (id, name, type, filterable, sortable)
For catalogs with diverse products (electronics + clothing + furniture), use product types — each type defines its own attribute set. This is how Akeneo PIM works, connected for 10,000+ SKU catalogs.
Search and Filtering
Standard SQL LIKE '%query%' won't work even for 500-item catalog — no relevance, no morphology, no synonyms. Options:
-
PostgreSQL FTS with
ts_vector— works up to ~5,000 products, Russian language setup viaispellorhunspell - Elasticsearch / OpenSearch — full-featured: fuzzy search, field boosting, synonyms, percolator for "similar products"
- Typesense — simpler operations, good for small teams
Build filters via Elasticsearch aggregations: users see only filter values that give non-zero results. This is called faceted search — standard for ecommerce.
Cart and Checkout
Cart is where 60–80% of conversions are lost. Critical decisions:
Guest cart stored in Redis with 30-day TTL, merged with account cart on login. Without guest cart, registration becomes a barrier.
One-screen checkout statistically better for B2C. For B2B opposite — need steps: details, shipping address, manager approval.
Real-time shipping calculation: SDEK, Boxberry, Nova Poshta, DHL APIs. Rates depend on weight, dimensions, origin — calculated on-the-fly, not stored.
Payment gateway: Stripe for international, CloudPayments / Yandex.Kassa for RU/CIS, Fondy / WayForPay for Ukraine. Integration via webhook verification, order status changes only after signature validation.
Order Management
Order lifecycle is a state machine. States: draft → pending_payment → paid → processing → shipped → delivered → completed. Plus branches: cancelled, refunded, on_hold.
Libraries: winzou/state-machine for Laravel, xstate if part of logic on frontend. Each state transition is an event triggering notifications (email, SMS, push), warehouse updates, logging.
Integrations
Typical suite for full-featured store:
- 1C / MoySklad / Retailio — stock and price sync. Usually via queue (RabbitMQ/Redis) every 5–15 minutes
- CRM (AmoCRM, HubSpot) — automatic order and lead transfer
- Email marketing (Klaviyo, Mailchimp, Sendpulse) — trigger chains: abandoned cart, post-purchase, reactivation
- Analytics: GA4 with Enhanced Ecommerce + server GTM for accurate data without ad blocker impact
Performance and SEO
Catalog pages must be cached. Strategy: stale-while-revalidate — serve cache immediately, update in background. Redis for server cache, CDN (Cloudflare) for static.
Ecommerce SEO specifics:
- Canonical URLs for filtered pages — prevents thousands of duplicates
-
hreflangfor multilingual stores - Schema.org markup:
Product,Offer,AggregateRating— affects rich snippets - Pagination via
rel="next"/"prev"or infinite scroll with SSR first screen
Timeline and Phases
Typical mid-size store (1,000–10,000 SKU, standard checkout):
- Analysis and design — 2–3 weeks: TZ, wireframes, data schema, integration selection
- Backend: catalog + cart + orders — 4–6 weeks
- Frontend — 4–6 weeks parallel or sequential
- Integrations (1C, payment, shipping) — 2–4 weeks
- Testing and launch — 1–2 weeks
Total: 12–20 weeks for full project without templates. Shopify projects with minimal customization — 4–8 weeks.
Key principle: store launches not when everything is ready, but when enough is ready for first sales. Rest is iterations.







