Client: International Salon Supplies (evaluation)
Role: Developer
Period: Feb 2026 – Aug 2026
Status: Exploration / in progress
Tech stack: Odoo 19, Python, PostgreSQL, QWeb, OWL 2, JavaScript, SCSS, Docker, debugpy, VS Code
Hands-on evaluation of Odoo 19 as a future platform: a Docker development environment with breakpoint debugging from VS Code, a custom website theme for the ISS storefront with a 'Monthly Specials' snippet, and backend work covering models, constraints and OWL 2 components.
Why Odoo
The ISSWA 2.0 sync engine was designed with an ERP_MODE switch (REX | ODOO) from the start. Evaluating Odoo properly meant building real things in it, not just reading feature lists.
1. A dev environment you can actually debug
- Docker Compose with a custom Odoo 19 image and PostgreSQL 15. Enterprise sources are mounted read-only, and custom addons are mounted for live editing.
- debugpy starts with the server (without blocking for a client), with
--dev=xmlfor live view reloading. - VS Code / Cursor launch configurations attach the debugger, with path mappings for community, enterprise and custom addons, and tasks that start and stop the containers automatically.
- An Odoo language-server config gives proper autocomplete across the framework.
Being able to set a breakpoint inside an ORM method changes how quickly you learn a framework this size.
2. The ISS storefront theme
A custom theme_iss module built on Odoo's website and e-commerce apps:
- A replacement double header: an announcement bar (price-match message), logo, shop search, account and cart.
- A Monthly Specials snippet: category "chip" tabs switch a responsive 2/3/4/5-column product grid, populated by QWeb searches. The product cards reuse Odoo's native e-commerce classes, because the stock product-item template depends on data only the
/shopcontroller provides. - A mega carousel, a product carousel and column blocks, plus custom SCSS.
3. Backend fundamentals
- A complete real-estate module following Odoo's official tutorial, using current Odoo 19 idioms: the new
models.Constraintsyntax, computed/inverse/related fields,@api.ondelete, onchange warnings, a state machine, mail tracking, security groups and access rules. - OWL 2 experiments on the sales order form: custom widgets injected through XPath view inheritance, parent/child components using
useSubEnvanduseState, and a custom service registered with a dependency on notifications.
Takeaway
Odoo rewards investment in tooling. Once debugging and live reload were in place, building a storefront theme and custom backend behaviour went quickly. The evaluation continues.