stalance/portfolio/evastack

Evastack: one codebase under every storefront.

Evastack is the platform under our storefronts: a new storefront is configuration, not code. This is the teardown: how it is wired and why.

type
Own product, multi-tenant platform
our role
Architecture, engineering, operations
built since
2014
v2
Rebuilt as a multi-tenant platform in 2025
scale
20+ storefronts · 8 countries
catalogue
4,000,000+ product listings
sources
50+ merchant programmes
product site
evastack.com →
pepit.bg homepage
pepit.bg · fashion · BG
aliani.ro homepage
aliani.ro · beauty · RO
redecor.bg homepage
redecor.bg · home & décor · BG

01What it is

A platform for vertical price-comparison storefronts: feed import, category mapping, templates and hosting, shared by every storefront instead of copied into each.

Evastack has been built since 2014. In 2025 we rebuilt it as a multi-tenant platform, with one goal written down: a new storefront is configuration, not code. The product site tells the v2 story from the platform’s side.

02Tenancy

Host-based and multi-tenant. Every request resolves its host to a storefront record in a control-plane database before routing, gets marked as control plane or storefront, and has the storefront’s own database switched in. Routes and access rules branch on that mark. Background jobs bootstrap the same way, by domain.

requesthost
control planestorefront record
switchits own database
resolvetheme · language · settings

Each storefront is a declarative profile: a base per vertical and country, plus one level of overrides. Before go-live, launch checks run against it.

03Ingestion

Every source is a configuration file. Large feeds are streamed, so file size costs time, not memory.

fetchstreamed, cached, budgeted
parseper-source selectors
variantsgrouped on a canonical model key
attributescolour, size, material
persistidentity resolved at ingest
indexsearch, per storefront

A new merchant feed is censused before it is configured: unmapped categories, empty shelves, dead selectors and truncated downloads fail the coverage gate. Off-vertical branches are excluded at ingest, so they never exist to be hidden later.

04Classification

Three layers: a public product taxonomy as the backbone, a rule registry, and operator rules on top. A shared mapping catalogue is read at ingest; local rules always win. AI-assisted maintenance proposes brands, categories and option values, with a multilingual colour vocabulary, but its proposals land as rules. Every decision can be explained, and reverted.

05Prices and offers

A price change log per variant feeds price history and a shelf of recent price drops. Offers for the same product across shops are grouped by matching strategies. Each storefront publishes a transparency page describing how offers are ranked, and every sentence on it maps to the code that does the ranking. Change one, change both.

06Click-outs

Bot traffic is filtered before it counts as a lead.

07Watching it run

We watch it and get paged when it breaks.

Visit evastack.com Build something like this with us