🔹 1. Project Overview
The client was a manufacturing and trading company working with eco-packaging, warehouses, marketplaces, B2B/B2C sales and internal operations in Odoo. The system was already the business hub, but after years of manual edits, third-party modules, imports and live Studio changes, it had turned into a dense operational knot
The owner did not need another small Odoo fix. He needed one system that connected departments, employees, warehouse, manufacturing, sales, email, CRM, marketplaces, e-commerce and final operations into one controlled flow
My role was rescue engineer: enter a chaotic ERP environment, untangle the technical and process debt, and rebuild an end-to-end operating model from raw material intake to finished product sale
🔹 2. What The Client Came With
•Infrastructure debt: Odoo was running on Hetzner with a mix of custom and third-party modules, some of which were not ready for the move to Odoo 19
•Catalog without a clean model: products were mixed across templates, variants, bundles, packaging, EAN, BaseLinker SKU and warehouse logic. Some records had been created by bad imports as separate duplicates
•Polluted contact database: duplicates, empty records, test entries, inconsistent bank details, regions and contact formats
•Warehouse and manufacturing without a control structure: BoMs, raw materials, barcodes, storage rooms and label printing existed, but needed stabilization and normalization
•CRM and email were not under control: messages disappeared into Discuss or manual workflows, follow-ups were handled by managers by hand, and sales inquiries had no stable path to quotation
•Security and quality risks: during the audit I found a historical Followers vulnerability: an external contact had accidentally been subscribed to internal discussions and had been receiving copies of operational correspondence for a long time. The system also had uncontrolled scheduled actions / cron jobs and automations running background operations without a clear owner
🔹 3. Scope Of Work
•Move Odoo from Hetzner to Odoo.sh / Odoo Cloud and adapt the system to Odoo 19
•Audit custom modules, keep what mattered, remove incompatible pieces, stabilize PBX and UI after the upgrade
•Clean contacts, leads, bank details and regions
•Normalize product catalog and manufacturing nomenclature: templates, variants, SKU, EAN, packaging, photos, weight, dimensions, raw materials and BaseLinker mapping
•Configure warehouse logic: BoM, RAW materials, barcodes, storage rooms, labels and a production-ready structure
•Configure attendance and operational discipline: office staff tracked time inside Odoo, while warehouse and production worked through barcode scanning
•Build mail and CRM automation: AI routing, lead qualification, deterministic rules, follow-ups and sales draft flow
•Prepare e-commerce, B2B/B2C portal, Shopify / Allegro / delivery integrations and tracking layer
•Reintegrate the cleaned catalog, warehouse logic and product data back into marketplaces and the online store
🔹 4. Solution And Execution
Infrastructure & Odoo 19 Migration
•Audited the old Hetzner environment and Odoo modules folder
•Moved ERP to Odoo.sh / Odoo Cloud and upgraded the database to Odoo 19
•Adapted custom code and ORM queries to the new core version
•Migrated and adapted a set of key custom and third-party modules for telephony, HR, purchasing, internal workflows and service extensions
•Removed incompatible telephony and OCA modules from the target architecture so the Odoo 19 setup would not inherit avoidable technical debt
Product Catalog Recovery
•Audited the existing catalog state: products, variants, packaging, bundles, raw materials, SKU, EAN, photos, prices, dimensions and BaseLinker mapping were all tangled without one governing logic
•Based on technical analysis and data-driven research, prepared several restructuring options with risks and downstream effects for warehouse, marketplaces, e-commerce and manufacturing
•After the target model was approved, created a naming convention for everything that could carry a name: products, templates, variants, packages, bundles, raw materials, SKU, EAN logic, photos and attributes
•Rebuilt the catalog from a chaotic record pile into a controlled product template → product variant hierarchy where every sellable SKU had a clear role, name, package, EAN, weight, dimensions and BaseLinker connection
•Product names were rewritten not only for internal accounting logic, but also for customer search behavior: the data-driven research aligned names and metadata with real search demand, supporting sales growth after the store and marketplace updates
•The import mess was handled in context: a wave of 719 badly created products/templates was identified, actually used records were separated from noise, and unused records were safely archived without losing operational data
•The result was a maintainable catalog: SKU, names, attributes, photos, metadata, BaseLinker mapping and warehouse logic stopped fighting each other and became a stable base for store and marketplace synchronization
Warehouse, BoM & Barcode Logic
•Raw materials were moved into a RAW structure
•Created BoMs for finished products and kits
•Connected stock quantities to concrete storage rooms
•Fixed label printing after the migration to Odoo 19: reports were moved to product.product level, QWeb templates, print file names, barcode fields and variant attributes were corrected
•Found and isolated 11 EAN conflicts, with 8 confirmed EAN pairs moved through a backup / plan / rollback / verify pipeline
CRM, Contacts & Database Hygiene
•Removed 1380 duplicate contacts, 34 test records and 59 empty cards
•Normalized IBAN, BIC/SWIFT and bank addresses for 10 banks
•Standardized voivodeships and localization for 11 languages
•Prepared cold leads and custom lists for lead generation, CRM outreach and later sales enrichment
•Removed CRM noise from automatically created leads: email from existing contacts had to land in the communication history of that contact, not create a new lead every time
Mail Routing, AI Qualification & Sales Automation
•Designed and implemented MelonRing AISMR — an Odoo module for inbound email routing, AI qualification, deterministic rules and audit trail •Configured routing logic: new business inquiries create crm.lead with category, assignee, tags, priority and summary, while emails from existing contacts attach to existing records and do not generate duplicate leads
•Implemented Poka-yoke rules against mass sending directly through local SMTP
•Closed a historical mail.followers leak: incorrect subscriptions were cleaned, external contacts were blocked from sensitive internal objects, and the prevention rule became explicit system behavior
•Reviewed scheduled actions / cron jobs: removed redundant or unknowingly active background tasks that duplicated standard logic, recalculated data or created unpredictable load without a business owner
•Moved mail infrastructure to SendGrid, verified SPF/DKIM and reduced bounce rate from ~15% to under 1%
•Built a sales automation layer: qualification states, draft-input snapshots, partner/product/qty/pricing candidates and manager review before quotation generation
E-commerce & Integrations
•Configured Shopify sync, warehouse routes, transit locations and automatic order conversion
•Technically prepared FedEx PL, DHL and InPost delivery integrations for rate calculation and label generation
•Prepared Odoo E-commerce and B2B portal as a replacement for Shopify
•Added a custom Odoo theme layer and MelonRing Meta Pixel tracking for Odoo Website Sale
•Prepared Allegro Odoo Sync for importing orders through Allegro REST API
•After normalizing products, raw materials, SKU, EAN, photos, weight and dimensions, the updated data was reintegrated into marketplaces and the online store
🔹 5. Technical Stack
•ERP Core: Odoo 19, Odoo.sh / Odoo Cloud, Python, XML/QWeb, ORM
•Data & Integration: XML-RPC, BaseLinker API, Shopify integration, Allegro REST API, CSV pipelines
•CRM & AI: Odoo CRM, mail.thread, crm.lead, OpenAI-style AI qualification architecture, deterministic rule engine
•Sales & E-commerce: Odoo Sales, Website Sale, B2B/B2C portal, quotation draft workflow, Meta Pixel
•Warehouse & Manufacturing: Inventory, Barcode, MRP, BoM, product.product, product.template, product dimensions, label reports
•Communication: Zadarma PBX, SendGrid SMTP, IMAP/SMTP routing, SPF/DKIM, mail followers cleanup
🔹 6. Business Value And Results
•ERP stabilized after migration: Odoo was moved from Hetzner to Odoo.sh, upgraded to Odoo 19 and cleaned from incompatible modules
•Operations became one flow: the owner received a technical base connecting departments, employees, warehouse, manufacturing, sales, CRM, email and integrations into one system from raw materials to final product sale
•Catalog became controllable: around 400 templates and variants were moved into a clean hierarchy, while BaseLinker/Odoo SKU mapping became deliberate rather than blind import logic
•Updated data returned to sales: normalized catalog, warehouse logic, photos, SKU, EAN, weight and dimensions were reintegrated into marketplaces and the online store
•Database was cleaned: 1380 duplicate contacts, 34 test records and 59 empty cards were removed, with details and regions normalized
•Warehouse got a real automation base: BoM, RAW materials, barcoding, storage rooms and labels were moved into a more stable model
•Mail reputation was protected: SendGrid + SPF/DKIM reduced bounce rate from ~15% to under 1%
•CRM received an automation layer: inbound email routing, AI qualification, follow-up automation and sales draft flow with manager review
•Operational risks were reduced: a historical Followers leak was found and closed, dangerous mass mailings were blocked, redundant scheduled actions / cron jobs were cleaned up, and critical QWeb/PBX/Owl 2 migration issues were removed
🔹 7. Current Status
Launched / Technically Ready. The system is technically stabilized, with key modules and integrations prepared. Part of the business effect depends on internal adoption: CRM discipline, warehouse scanning, courier service testing and the habit of working in Odoo instead of falling back to manual processes