Avatar Diamonds — a jewellery ERP where every piece is unique and the price moves daily.
Avatar Diamonds is a diamond and gold jewellery business where two facts shape every system decision: market rates change every day, and no two pieces in inventory are truly identical. The brief was a single integrated platform for sales, purchasing, inventory, pricing, exchanges, and accounting — built around how a jewellery business actually operates, not a generic retail template. Galaxy implemented Odoo from the ground up, combining standard modules with custom workflows for daily rate integration, per-piece barcoding, and the diamond exchange / gold buyback process.
Jewellery looks like retail on a surface scan and behaves nothing like it under the hood. Two facts force the rewiring. First, pricing is not a static field on a product record — it is a function of the day's gold rate and the day's diamond rate, and every sale on a given day needs to reference the same rate so margins stay accurate and the till stays honest. Second, two rings with identical configuration on paper are not interchangeable in reality. Each piece is its own SKU. Standard variant logic treats them as fungible, which works for t-shirts and breaks for jewellery the moment a customer asks for the specific stone they were shown last week.
Layered on top of those: diamond exchanges and gold buybacks as a routine part of the sales motion, with settlement options that range from cash refunds to credit notes against future sale orders. Most ERPs treat these as edge cases handled with workarounds. For a jewellery business, they are core workflow — and the absence of system-driven traceability for them shows up as reconciliation pain at month-end and customer disputes that the system can't help you resolve.
Avatar's brief wasn't "give us an ERP." It was: give us one platform where the daily rate, the unique piece, the exchange, the inventory record, and the accounting entry all stay honest with each other in real time.
A jewellery operation has two structural problems no generic ERP solves out of the box — daily commodity pricing and one-of-a-kind inventory. Everything else in the implementation has to bend around those two.
The alternatives all had structural problems. Off-the-shelf jewellery software covers the workflows but tends to live as an island — separate from accounting, separate from any web channel, with brittle export paths and limited customization headroom when the operation grows. SAP Business One or NetSuite would handle the operation but at licensing and integration costs that don't match jewellery retail margins. The familiar combination of a POS plus a separate inventory system plus QuickBooks would multiply the integration problem rather than solve it — and the daily-rate and per-piece-barcode requirements would still need custom work on top.
Odoo's fit was structural. One platform covering sales, purchase, inventory, accounting, and the website — with a module architecture flexible enough to accept the jewellery-specific custom work as native parts of the system rather than bolt-ons. The licensing math worked for the operation. The customization headroom let us build the daily rate integration, the per-piece barcoding logic, and the exchange/buyback workflow directly into the platform, so they behave like first-class Odoo features rather than scripts duct-taped to the side.
Three things made this a Galaxy implementation rather than a configuration-only project: a custom Odoo module that pulls daily gold and diamond rates from an external API and locks them across the day's transactions, customized product handling so every jewellery item carries a unique barcode even when configurations match, and a custom exchange and buyback workflow with cash-or-credit settlement built directly into the sales process. None of these are achievable with stock Odoo alone. All of them sit inside Odoo cleanly once built.
The implementation ran across six workstreams. Three were standard Odoo work done properly — accounting, inventory structuring, and the customer-facing website. The other three are where the jewellery-specific engineering lives, and where the system stops looking like a generic ERP and starts behaving like a platform built for this business.
We built a custom Odoo module that pulls the day's gold and diamond rates from an external rate API and stores them as the authoritative pricing reference for the day. Sales workflows are configured to reference the fetched rate so every transaction on a given day uses the same number — no per-sale manual updates, no drift between what the showroom quotes and what the system records. The module handles the daily refresh, the lock-in for the trading day, and the fallback behaviour if the API doesn't respond.
Consistent pricing across all sales for a given day. Manual rate updates removed from the daily operations rhythm, along with the pricing errors they introduced.
Jewellery items are unique by nature, even when their configuration on paper is identical. Standard product tracking and variant logic doesn't model this correctly — two rings with the same SKU are treated as fungible inventory. We implemented the Purchase module with custom fields for the purchase-level data the jewellery business needs, and customized product handling so every piece receives its own unique barcode at point of receipt, even when the configuration matches another piece. Each barcode is then the inventory record's primary identifier, tracked individually through every downstream movement.
Precise tracking of every individual jewellery item. Ambiguity between similar-looking pieces reduced — both for inventory reconciliation and for customer conversations about a specific item.
Exchanges and buybacks are not edge cases in jewellery — they are routine sales motion. We built a custom workflow inside Odoo that handles the full process: creation of a Purchase Order for the item being taken in, generation of a Credit Note where applicable, and settlement options that let the customer either receive cash or hold a credit note redeemable against future Sales Orders. The workflow is integrated with the per-piece barcoding from workstream /02, so any individual piece taken in or pushed back out is traceable end-to-end through the system rather than living in a separate ledger.
Standardized exchange and buyback operations across the showroom floor. Flexible settlement options for the customer with full system-side traceability.
With every piece tracked as its own barcode, the inventory module needed to be structured to make that visibility usable rather than overwhelming. We organized product categories and variants so the catalog reads sensibly for staff, and built a custom inventory reporting workflow that surfaces barcode-level movement on a daily basis — receipts, sales, transfers, exchanges. The goal was to make physical-to-system reconciliation a routine daily activity rather than a quarterly audit project.
Granular daily visibility into stock movement and availability. Reconciliation between physical inventory and system records substantially easier.
We designed and developed the company website using the Odoo Website module, configured so customer orders flow directly into Odoo as Sales Orders with no manual re-entry. The jewellery-specific work sat on top: the website pulls the same daily gold and diamond rates as the in-store system, and individual pieces from the unique-barcode inventory surface as their own listings rather than aggregated variants. The result is a single online-to-backend flow with the pricing and inventory truth shared across both channels.
Unified online-to-backend sales flow. Manual order entry between web and back-office removed.
The accounting module was implemented with a Chart of Accounts, Journals, and Tax configurations sized for the jewellery business. The work that mattered was the integration layer — making sure that every Sales Order, Purchase Order, inventory movement, exchange, and buyback writes the right accounting entry automatically, so financial reporting reflects operational reality without manual journal stitching at month-end. The custom exchange and buyback workflow was a particular focus here, since credit notes and cash settlements both need to land correctly in the books.
Real-time financial reporting backed by the operational data. Manual accounting work and reconciliation effort reduced.
Jewellery implementations have a predictable failure mode. The team configures stock Odoo for the standard retail flows, then layers the jewellery-specific behaviour as scripts, exports, and reconciliation spreadsheets outside the system. It works for a quarter. Then the rate desync between the spreadsheet and the till causes a customer dispute, the per-piece inventory drifts because the script ran half its job, and the team is back to running two parallel sources of truth. Three principles kept this implementation out of that pattern.
The daily rate has to live inside the ERP, not adjacent to it. Pricing pulled from a spreadsheet or a side-tool will eventually disagree with the till at a moment the business cannot afford. Building the rate fetch as a native Odoo module means every Sales Order, every Website transaction, and every accounting entry references the same number for the same day — by construction, not by discipline.
Per-piece identity is an inventory model decision, not a labelling convention. Sticking a unique barcode on each piece is the easy part. Making the inventory module treat each barcode as its own tracked entity through every downstream flow — sales, exchanges, returns, reporting — is where the engineering lives. Once that's done, every other workflow becomes simpler. Exchanges trace the exact piece. Reconciliation matches the exact piece. Customer conversations reference the exact piece.
Exchange and buyback is workflow, not exception handling. For a jewellery business this is a routine sale shape, not a footnote. Building it as a first-class workflow with both cash and credit-note settlement paths, wired to the accounting module on both sides, removes the manual reconciliation tax that defines most jewellery operations and gives the showroom staff a clean path through what is otherwise the messiest part of their day.
Jewellery isn't generic retail with cosmetic adjustments. Daily commodity pricing and per-piece uniqueness are structural — and an implementation that treats them as bolt-ons rather than core platform behaviour will fight the business forever.