Legacy audit & rule extraction
Three brand-site calculators audited line by line, business rules extracted into a canonical rule set, bug history triaged, GDPR + CCPA posture mapped, multi-tenant data model designed.
Case study · Home Improvement · Web
How we shipped a production window-quoting platform — one Laravel pricing engine, one React configurator, one CRM, powering three separate brand sites — that gives shoppers an accurate millimeter-precise quote in minutes and a sales team a unified lead inbox, with audit-ready posture for the US and EU.
The Mosokna manufacturer arrived with three brand sites, three independent quoting calculators, and three different sets of accumulated pricing bugs. The same standard window quoted at three different prices depending on which brand site the customer happened to land on, and the sales team had no unified inbox for leads coming in across the three storefronts. The product brief was unambiguous: consolidate every calculator into one engine, give shoppers in the United States and the European Union an accurate millimeter-precise quote with an address-based dimension prefill, and connect the funnel to a real CRM. We audited every legacy calculator despite incomplete documentation, designed a Laravel pricing engine that holds every business rule in one place, built a React configurator that drives the engine, and stood up a CRM module alongside it that the sales team uses every day. A multi-tenant architecture means one deploy powers all three brand sites with per-brand layouts, per-region pricing adapters, and a shared audit trail. The live product is at mosokna.ru for the US & EU home-improvement audience.
A snapshot of what the Mosokna consolidation delivered across the pricing engine, the configurator, the CRM, and three brand sites in its first production cycle.

The architecture decision dominated every other lever in the rebuild. We chose a Laravel multi-tenant engine over WordPress calculator plugins and an off-the-shelf SaaS configurator because the trade-offs lined up with a manufacturer running three brand sites that share product physics but not brand storytelling. WordPress plugins are fast to drop in and exactly the reason Mosokna was in trouble: each brand site had its own plugin copy, its own bug history, its own price-rule edits that nobody could reconcile. A SaaS configurator solves the pricing-engine problem but trades it for vendor template constraints, vendor data lock-in, and an inability to bind a brand layout to the engine without iframe gymnastics.
Laravel multi-tenant flips both trade-offs. One service holds every business rule — pane counts, profile families, hardware add-ons, regional surcharges — and per-brand layouts read from the same engine over a clean REST API. The configurator state machine lives in Laravel and the front end is a thin React + Redux Toolkit client that renders whatever the engine permits, so a pricing change ships to all three brand sites simultaneously without per-site copy. A future fourth brand site is a configuration row, not an engineering project.
| Dimension | Laravel multi-tenant (Mosokna) | WordPress + plugins | SaaS configurator |
|---|---|---|---|
| Config-logic isolation | One engine, one rule set, per-brand adapters | Plugin copy per site — drifts immediately | Vendor-owned — fixed schema |
| Pricing-engine rebuild cost | Touch one service, ship to all three sites | Touch three plugins, hope for parity | Vendor ticket — wait for roadmap |
| Lead-form coupling to CRM | Same backend — direct CRM write | Form plugin + bridge plugin + sync job | Webhook to external CRM only |
| Regional pricing fit (US & EU) | Adapter per region against one engine | Plugin per region — schema drift | Region-locked or extra vendor fee |
| Custom layout per brand | Independent React layer per brand | Theme template per brand | Vendor template constraints |
| Audit trail across brand sites | One audit log — engine-level | Three logs — manual reconciliation | Vendor log — limited export |
| Vendor / dependency lock-in | Open framework — portable | Plugin ecosystem — moderate | Hard vendor lock-in |
References: Laravel framework documentation, React documentation, OpenStreetMap Nominatim geocoding.

The configurator is built in React with Redux Toolkit driving a state machine that mirrors the Laravel engine one-for-one. The shopper enters an address, an OpenStreetMap Nominatim geocoding step resolves it to a building, and a typology lookup against the building's series surfaces the typical window dimensions for that unit. Every transition — address resolved, dimensions confirmed, pane count chosen, profile picked, hardware add-ons selected — is a guarded state in the machine, so the engine can never receive a malformed configuration. Millimeter-precise input validates client-side first for snappiness, then server-side for authority before a price locks.
The same state machine drives every brand site. Per-brand React themes provide the typography, color palette, and layout density that each brand demands, but the state graph and the engine round trip are identical. The result is a configurator that a shopper in the United States or the European Union can complete in minutes, with a price that is binding rather than aspirational, and a finished cart that lands directly in the CRM as a qualified lead. The end-to-end web surface is delivered as part of our web application development practice.

The pricing engine is built in Laravel with PHP services holding every business rule that has accumulated across two decades of window manufacturing. Single, double, and triple-pane configurations each carry their own physics and price components; balcony-door subtypes inherit from the same engine but layer in extra opening types, hardware sets, and installation surcharges. Regional adapters layer on per-region surcharges, currency, and labor multipliers so the same engine prices the same configuration honestly across markets in the US and EU without forking the rule set.
Every legacy bug from the three retired calculators was triaged against the new engine, and a parity harness compared 4,000+ historical quotes to the new prices line by line. Where the legacy result was simply wrong, the new engine ships the right answer; where the legacy result was a deliberate concession, the engine carries it forward with an explicit business-rule comment so the next engineer can find it. The engine sits behind the same REST API the configurator uses, and the CRM reads from it directly — no separate "price snapshot" copy drifts in the lead record. The pricing layer is delivered as part of our custom software development practice.

The CRM is built into the same Laravel application as the pricing engine, so a lead lands in the inbox the instant the shopper completes a cart — no webhook bridges, no sync jobs, no eventually-consistent gaps. Sales managers see leads grouped by brand site, scored by configurator completeness and address resolution, and routed to the right consultation team automatically. Multi-tenant data isolation runs at the database row level: every record carries a tenant key, every query enforces it, and a manager from brand A cannot read a lead from brand B even with a constructed URL. Role-based access controls which manager can read which lead, and audit logs capture every read and write for compliance review.
Customer privacy is built into the platform from day one. The lead-capture flow is region-aware: users in the European Union receive a granular GDPR consent screen with separate toggles for marketing follow-up and product analytics; users in California receive the CCPA / CPRA "Do Not Sell or Share My Personal Information" disclosure in the same flow. CRM records are retention-bounded, deletion requests are a single backend job across all three brand sites, and the audit log holds the evidence trail for the US & EU regulatory environment.
Compliance posture: GDPR-aligned · ISO 27001 ready · SOC 2 Type II in progress · HIPAA-capable · CCPA-acknowledged.
A five-phase build that took Mosokna from three drifting brand calculators to one consolidated multi-tenant platform with a CRM.
Three brand-site calculators audited line by line, business rules extracted into a canonical rule set, bug history triaged, GDPR + CCPA posture mapped, multi-tenant data model designed.
Laravel pricing engine skeleton, configurator state machine, REST API contract, React + Redux Toolkit client, address-based dimension auto-detect via OpenStreetMap.
Per-brand React themes reading from one engine, balcony-door configurator subtype, CRM module, lead scoring, role-based access, manager consultation routing.
Multi-tenant row-level data isolation, retention policies, region-aware consent flows, parity harness comparing 4,000+ legacy quotes against the new engine, third-party readiness scaffolding.
Cutover across the three brand sites, legacy calculators retired, sales-team onboarding on the CRM, conversion-funnel telemetry, first-cycle correction loop across the US and EU surfaces.
Mosokna's CRM was built so the sales team works one inbox, not three. Every lead carries the source brand site, the configurator completeness score, the address resolution status, and the full configuration history that the shopper built — including abandoned drafts that the configurator's state machine snapshots on every transition. Managers triage leads by score, hot leads route to consultation phone calls automatically, and warm leads drop into a follow-up cadence with templates that pre-fill the configuration the shopper actually built. The lead scoring model is a configuration object the manager can adjust without touching code, so the business can dial in what "qualified" means as the funnel matures. A partner channel — dealers and installers who want to drop the configurator on their own site under their own brand — is a multi-tenant configuration row plus a per-partner pricing adapter, not a separate build. The whole subsystem is designed so a future financing partner, a B2B contract pricing tier for the United States and the European Union, or a marketplace handoff to large home-improvement chains is a configuration change against the engine and the entitlement service, not a code release.
Mosokna launched across the three brand sites with storefronts active across the United States and the European Union. The English-language build serves shoppers in California, New York, Texas, Florida, and Washington in the US, and shoppers in the Netherlands, Germany, France, Ireland, and Sweden in the EU, without a separate codebase per region. Per-region pricing adapters carry currency, labor multipliers, and tax handling honestly, and the configurator surfaces a regional disclosure under every quote so the shopper sees what is in and what is out before the price locks. Consent flows are region-aware at the client layer: users in the EU and EEA receive a GDPR-style granular consent screen with separate toggles for marketing follow-up; users in California receive a CCPA-style "Do Not Sell or Share My Personal Information" disclosure in the same flow. Data-handling practices are aligned with GDPR for European users and with the US state-privacy patchwork — CCPA / CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas), and Oregon CPA.
The configurator and CRM were rolled out across US and EU dealer regions in parallel — Netherlands, Germany, France, Sweden, and Ireland for EU coverage; US East and US West dealer territories for North America — with each region's leads provisioned identically against the same multi-tenant database. The matching service that picks the right consultation team per lead runs stateless workers that can be pinned to EU or US regions independently for future data-residency commitments. The engineering team behind the build sits across CET and runs a CET workday with East-Coast US overlap (9 AM–1 PM ET) for sales-team standups, manufacturer-side coordination, and incident response — the timezone that lets a US sales team and an EU engineering team share four hours of live overlap every day.
The active custom software development roadmap for Mosokna includes a financing-partner integration that surfaces installment quotes inside the configurator, a B2B contract pricing tier with team management, an installer-handoff portal for partner dealers, and a configurator embed for third-party home-improvement sites. A roof-and-glazing extension that reuses the same multi-tenant engine is planned, and the entitlement subsystem is already structured for multi-seat assignment. Infrastructure plans include further pricing-engine performance tuning, an internal regression harness against the parity test set, and a future independent readiness assessment scaffolded into the cloud & DevOps roadmap.
If you are planning a quoting platform, a multi-tenant configurator, or any consolidation where several drifting calculators have to collapse into one engine for audiences in the US and EU, we have shipped this stack end-to-end and can compress the build timeline meaningfully. The live product is available at mosokna.ru, and the engineering team behind it sits inside YuSMP Group. We work fixed-price for well-scoped MVPs and on dedicated development teams for ongoing delivery, with a CET workday and a guaranteed East-Coast US overlap (9 AM–1 PM ET) window for stand-ups, demos, and incident response.
A focused window-quoting MVP with a Laravel pricing engine, a React configurator, address-based lookup, a shopping cart, and a basic CRM for lead management typically costs $120k–$240k. Adding multi-tenant brand sites that share one engine, a balcony-door configurator, regional pricing adapters, profile and add-on libraries, and integrations with the dealer's accounting stack brings a full-featured platform to $260k–$520k. The dominant cost drivers are the pricing-engine logic consolidation, the configurator state machine, and the multi-tenant data isolation layer.
WordPress calculator plugins are quick to deploy but lock each brand site into its own pricing logic copy, which is exactly the problem Mosokna had before the rebuild — three sites, three drifting calculators, three sets of accumulated bugs. A SaaS configurator solves the engine problem but loses every layout, CRM, and content choice to the vendor's templates. Laravel multi-tenant gives the business one engine, one CRM, and per-brand layouts with regional pricing adapters that share the same audit trail.
The shopper enters an address; an OpenStreetMap geocoding step resolves it to a building, and a typology lookup against the building's series surfaces the typical window dimensions for that unit. The shopper still confirms or adjusts each dimension to the millimeter before pricing locks, but the auto-detect cuts measurement friction by an order of magnitude for the most common building series. Where no typology match exists, the shopper enters dimensions manually with the same precision and validation.
A quoting platform with a CRM collects real personal data — names, phone numbers, addresses, configuration history — so the obligations are first-class. The lead-capture flow exposes a granular consent screen for users in the European Union that satisfies GDPR, and a CCPA / CPRA disclosure for users in California in the same flow. CRM records are retention-bounded, role-based access controls which manager can read which lead, and a request to delete is a single backend job across the multi-tenant data plane.
A focused MVP with a Laravel pricing engine, a React configurator, address-based lookup, a shopping cart, a CRM module, and a single brand site typically takes 16–22 weeks. Adding a second and third brand site sharing the same engine, regional pricing adapters, a balcony-door configurator, and manager consultation routing adds 6–10 weeks. The audit-ready hardening pass — multi-tenant data isolation, role-based access, retention policies, and GDPR + CCPA consent flows — is frequently underestimated and should be budgeted at 3–5 weeks.
Related cases
Offline-first ecosystem replacing paper journals for reactor process control.
View case → Home Renovation · WebRedesigned, SEO-optimized website for an apartment renovation and design company.
View case → AdTech · Lead generationTilda landing with Telegram-bot lead capture — fast inbound funnel for a service business.
View case →