[{"data":1,"prerenderedAt":432},["ShallowReactive",2],{"cs-cases":3,"published-article-paths":425},[4,161,311,372],{"id":5,"title":6,"background":7,"blocks":12,"body":13,"built":27,"client":53,"context":54,"cover":36,"cta":55,"description":58,"duration":59,"extension":60,"extras":61,"figures":62,"gallery":79,"headline":80,"incident":82,"kicker":85,"logo":61,"meta":86,"method":87,"navigation":90,"order":91,"path":92,"problem":93,"results":108,"sector":136,"seo":137,"situation":138,"stack":139,"stem":140,"techsheet":141,"testimonial":61,"year":159,"__hash__":160},"cases\u002Fwork\u002Fprice-intelligence.md","The shelf photo that becomes data the next day",{"title":8,"image":9,"caption":10,"body":11},"A market where price is a political issue","\u002Fwork\u002Fprice-intelligence\u002Faccueil.webp","The Vigie platform home screen","In France's overseas departments, groceries cost around 40% more than in mainland France. Prices there are closely watched by retailers, by brands and by the authorities.\n\nVigie measures those prices in the field. Its agents visit stores, photograph shelf labels and record promotions. Vigie turns this into market studies, sells the data, and opens its platform to clients who run their own price checks.\n\nSo its software is not a back-office tool. It is the product.",[],{"type":14,"value":15,"toc":23},"minimark",[16,20],[17,18,19],"p",{},"Vigie measures grocery prices across the French Caribbean: its agents photograph shelf labels in store, and the data becomes market studies.",[17,21,22],{},"We merged its three systems into one, then handed the manual work its team used to do to an AI. A photo taken in the morning is usable data the next day.",{"title":24,"searchDepth":25,"depth":25,"links":26},"",2,[],{"title":28,"steps":29},"One chain, from the shelf to the analysis grid",[30,33,38,43,48],{"title":31,"body":32},"The agent collects, even offline","The app checks the agent is actually in the store, then runs through the checks — barcode, photo, promotion, out-of-stock. Everything is stored on the phone, and nothing is deleted until the server has confirmed receipt of every photo.",{"title":34,"body":35,"image":36,"caption":37},"The AI reads the label","A first model finds the label in the photo, a second reads the price, the name and the barcode. The barcode it reads is compared with the one the phone scanned. If they disagree, the check goes to a person.","\u002Fwork\u002Fprice-intelligence\u002Fverification-ia.webp","Checking a price — the photo, and what the AI read",{"title":39,"body":40,"image":41,"caption":42},"A person checks","The team sees the photo and what the machine read, and approves or corrects it. The AI only fills empty fields — it never overwrites what a person entered.","\u002Fwork\u002Fprice-intelligence\u002Fverifications-ia.webp","The review log — time taken, fields corrected, confidence",{"title":44,"body":45,"image":46,"caption":47},"The software double-checks","Every night, it recalculates the average price of each product and flags any check that deviates from it by more than 100%.","\u002Fwork\u002Fprice-intelligence\u002Fanomalies.webp","Anomalies flagged overnight",{"title":49,"body":50,"image":51,"caption":52},"The client analyses","One row per product, one column per store, filters by region, retailer and period. Every catalogue promotion across five regions since 2018, and store sales imported from Excel files in every format imaginable.","\u002Fwork\u002Fprice-intelligence\u002Fgrille-prix.webp","Price comparison, store by store","Vigie","Price intelligence · grocery retail",{"title":56,"body":57},"Are your teams still retyping what already exists as a photo, a PDF or a spreadsheet?","That is the work we removed here. Tell us how it works at your company — in two hours, we map your workflows and tell you what can be automated.","Vigie, a price intelligence firm in the French Caribbean: three systems merged into one, and an AI that does the retyping. 3.7 million price checks, 3,000 hours saved a year.","since 2018, ongoing","md",null,[63,67,71,75],{"value":64,"unit":65,"label":66},"3.7","M","shelf prices",{"value":68,"unit":69,"label":70},"3,000","h","less retyping per year",{"value":72,"unit":73,"label":74},"3.4","s","to check a price",{"value":76,"unit":77,"label":78},"−40","%","on the hosting bill",[],{"value":64,"unit":65,"label":81},"shelf prices collected, checked by AI and analysed",{"title":83,"body":84},"The AI read €6.79 as €679","When automatic reading went live, on a round of 87 price checks, 11 prices were wrong. The cents, printed smaller on the label, were stuck to the amount or dropped. Elsewhere, the machine picked up the price per kilo instead of the product price.\n\nWe added three safeguards. Any round price triggers a second reading focused on the cents. The price per kilo has its own field. And every human review is logged: we know how long it took and what was corrected.\n\nA month later, across 207,000 reviewed checks, 6% of the prices read by the machine are corrected by a person.","Grocery retail · Web platform + mobile app · AI",{},{"title":88,"body":89},"Seven years, one meeting a week","We have worked with Vigie since 2018. First on one tool, then on the whole system, for which we now act as technical lead.\n\nEvery week: one meeting, one release tested on a separate environment, and a written report for the client, not for developers. It says what changed and what it brings them.",true,1,"\u002Fwork\u002Fprice-intelligence",{"title":94,"items":95},"Three systems, and a team copying out photos",[96,99,102,105],{"title":97,"body":98},"Tools that didn't talk to each other","The mobile app, the field-team management tool and the store directory had been built by different contractors. Each had its own database, with syncs between the three, and every new feature cost more than the last.",{"title":100,"body":101},"Retyping by hand","Every price check arrived as a photo. A team opened it and copied out the barcode, the price and the product name. Twenty seconds a label, more than 700,000 labels a year.",{"title":103,"body":104},"Data that went missing","The old mobile app could lose price checks mid-upload, without telling anyone.",{"title":106,"body":107},"Clients kept waiting","Two to three days between the store visit and a usable figure. Then more time to put the study together.",{"title":109,"rows":110,"note":135},"What changed",[111,115,119,123,127,131],{"label":112,"before":113,"after":114},"Processing one label photo","20 seconds of retyping","3.4 seconds of review",{"label":116,"before":117,"after":118},"Human work over a year","about 4,000 hours","about 900 hours",{"label":120,"before":121,"after":122},"From store to data","2 to 3 days","the next day",{"label":124,"before":125,"after":126},"Tools","3 systems, 3 databases","1 platform, 1 database",{"label":128,"before":129,"after":130},"Hosting","US provider","France, bill cut by 40%",{"label":132,"before":133,"after":134},"Client access to their data","wait for the study","query the database themselves","Time saved is an estimate based on 724,000 price checks a year.","Price intelligence for grocery retail",{"title":6,"description":58},"ia",[],"work\u002Fprice-intelligence",[142,145,148,151,153,156],{"label":143,"value":144},"Web platform","Nuxt, PostgreSQL, AG Grid tables",{"label":146,"value":147},"Mobile app","Flutter, iOS and Android, offline-first",{"label":149,"value":150},"AI","Open models (Mistral, Qwen), hosted in France",{"label":128,"value":152},"Scaleway, Paris",{"label":154,"value":155},"Volume","3.7M price checks, 4,700 stores, 8,900 catalogues",{"label":157,"value":158},"Duration","Since 2018, ongoing","2018","12i_QxNOfqA4eLM2sJxhPXB8E1US6yPX9zk31zZ0vQ4",{"id":162,"title":163,"background":164,"blocks":167,"body":168,"built":178,"client":202,"context":203,"cover":204,"cta":205,"description":208,"duration":209,"extension":60,"extras":210,"figures":222,"gallery":235,"headline":236,"incident":238,"kicker":241,"logo":61,"meta":242,"method":243,"navigation":90,"order":25,"path":246,"problem":247,"results":262,"sector":287,"seo":288,"situation":289,"stack":290,"stem":291,"techsheet":292,"testimonial":61,"year":309,"__hash__":310},"cases\u002Fwork\u002Fbuying-group.md","Three systems and ten spreadsheets, replaced by one tool the suppliers use too",{"title":165,"body":166},"A promotion is a contract and an invoice","When a supermarket features a product in its catalogue, the supplier pays for that placement. The rate depends on the size of the photo, and it is negotiated once a year, supplier by supplier.\n\nSo every catalogue produces hundreds of contracts, and every contract an invoice. At year end, forecast revenue is compared with actual revenue, and the accounts are settled.\n\nExpodial does this for nine retail banners and 170 stores in the French Caribbean and French Guiana, with several hundred suppliers.",[],{"type":14,"value":169,"toc":176},[170,173],[17,171,172],{},"Expodial runs the trade promotions of nine grocery retail banners in the French Caribbean and French Guiana, with several hundred suppliers.",[17,174,175],{},"We built the tool that runs the relationship with each of them: the annual agreement, the catalogues, the contracts, the invoices. The suppliers work in it themselves.",{"title":24,"searchDepth":25,"depth":25,"links":177},[],{"title":179,"steps":180},"One chain, from negotiation to accounting",[181,184,189,194,199],{"title":182,"body":183},"The annual agreement","Every supplier has its agreement in the tool — forecast revenue, discounts, the rate for each placement. The tool checks it is complete, produces the PDF and sends it for signature.",{"title":185,"body":186,"image":187,"caption":188},"The catalogue","Marketing splits the catalogue into pages and slots. Each supplier sees the ones that concern them and proposes their own products. The buyer approves, rejects or renegotiates.","\u002Fwork\u002Fbuying-group\u002Fproduits.webp","Products proposed for a catalogue, and their status",{"title":190,"body":191,"image":192,"caption":193},"The layout","A visual editor, in the browser, to place products on the pages. Prices and photos come from the product records and update themselves.","\u002Fwork\u002Fbuying-group\u002Fediteur.webp","The catalogue's visual editor",{"title":195,"body":196,"image":197,"caption":198},"The contract","One contract per placement, signed online. Several contracts from the same supplier are signed in one go, and a reminder takes one click.","\u002Fwork\u002Fbuying-group\u002Fcontrats.webp","Contracts and their signature status",{"title":200,"body":201},"The invoice","It goes out once the contract is signed and the catalogue is finished. The PDF and the accounting entry land directly in the accounting software. Meanwhile, each supplier reports its sales online, and the tool calculates what is due at quarter end.","Expodial · Groupe SAFO","Trade promotions · retail","\u002Fwork\u002Fbuying-group\u002Foperations.webp",{"title":206,"body":207},"Do you send the same file to fifty partners?","And someone pastes the answers back together by hand. Tell us how it works at your company — in two hours, we map your workflows and tell you what can be replaced.","Expodial (Groupe SAFO): the tool that runs the relationship with every supplier — annual agreement, catalogues, contracts, invoices. 419 suppliers connected, 23,500 contracts signed online.","since 2023, ongoing",{"title":211,"items":212},"Software that keeps up with the law and its suppliers",[213,216,219],{"title":214,"body":215},"E-invoicing","France's e-invoicing obligation came into force on 1 September 2026. The tool was ready, and it refuses to send a contract to a supplier whose e-invoicing address is incomplete.",{"title":217,"body":218},"E-signature","We switched signature providers mid-season, without interruption, then archived the signed contracts and their certificates outside the provider.",{"title":220,"body":221},"Upgrades","Every technical building block was upgraded within a month.",[223,226,229,232],{"value":224,"label":225},"3 → 1","systems",{"value":227,"label":228},"419","suppliers connected",{"value":230,"label":231},"23,500","contracts signed online",{"value":233,"label":234},"29,000","invoices issued",[],{"value":224,"label":237},"systems, and about ten fewer spreadsheets",{"title":239,"body":240},"In year one, some invoices went out twice","In a few edge cases, the tool produced two invoices with the same number. Credit notes had to be issued.\n\nWe rebuilt invoicing from the ground up. Numbers are now assigned under a lock, an invoice can only be triggered once, and if the document fails, the number is released. Tests deliberately replay two triggers at the same moment.\n\nThe problem has not come back. On software that issues invoices, this is the kind of detail that makes the difference between a tool you watch and a tool you trust.","Grocery retail · Custom management tool · Supplier portal",{},{"title":244,"body":245},"Getting people you don't employ to adopt a tool","419 of the 474 users work for the suppliers. We recorded video tutorials, ran chat support, and built help into the tool.\n\nOn the client side, the rhythm is a product's: regular meetings with purchasing and marketing, weekly releases, a changelog.","\u002Fwork\u002Fbuying-group",{"title":248,"items":249},"A workbook that took minutes to open",[250,253,256,259],{"title":251,"body":252},"Three old systems","They didn't talk to each other, and couldn't produce the year-end reconciliation.",{"title":254,"body":255},"A giant workbook","One sheet per supplier, formulas everywhere. Versions went out by email and were merged by hand.",{"title":257,"body":258},"One file per supplier, for every catalogue","Each filled it in their own way. Someone then pasted the answers back together — different fonts, data in the wrong column.",{"title":260,"body":261},"Gaps in the chain","Contracts never signed, for lack of a simple reminder. Placements left off invoices, because nothing linked a contract to its invoice.",{"title":109,"rows":263},[264,267,271,275,279,283],{"label":124,"before":265,"after":266},"3 systems, about ten spreadsheets","1 application",{"label":268,"before":269,"after":270},"Annual agreement","one workbook, versions by email","one agreement, shared in real time",{"label":272,"before":273,"after":274},"Catalogue offers","one file per supplier, pasted together by hand","entered by the supplier themselves",{"label":276,"before":277,"after":278},"Contract","several days, reminders by email","same-day possible, one-click reminder",{"label":280,"before":281,"after":282},"Invoice","done separately, sometimes forgotten","issued as soon as the contract is signed",{"label":284,"before":285,"after":286},"Year-end reconciliation","calculated by hand","calculated by the tool, approved online","Trade promotions, grocery retail",{"title":163,"description":208},"excel",[],"work\u002Fbuying-group",[293,296,299,302,304,307],{"label":294,"value":295},"Application","Nuxt, Vue, PostgreSQL, AG Grid tables",{"label":297,"value":298},"Visual editor","React, embedded in the application",{"label":300,"value":301},"Connected to","E-signature, e-invoicing platform, accounting, product master data",{"label":154,"value":303},"474 users, 400 catalogues, 26,000 operations, 68,000 documents",{"label":305,"value":306},"Quality","1,500 automated tests",{"label":157,"value":308},"Since 2023, ongoing","2023","JhWnx5I_RmUdgvtmPUNV8ujz3KbM5StRyw_GnaKMpC8",{"id":312,"title":313,"background":61,"blocks":314,"body":330,"built":61,"client":340,"context":341,"cover":61,"cta":61,"description":342,"duration":343,"extension":60,"extras":61,"figures":344,"gallery":355,"headline":356,"incident":61,"kicker":61,"logo":61,"meta":358,"method":61,"navigation":90,"order":359,"path":360,"problem":61,"results":61,"sector":361,"seo":362,"situation":138,"stack":363,"stem":368,"techsheet":369,"testimonial":61,"year":370,"__hash__":371},"cases\u002Fwork\u002Fgrand-chambery.md","Their staff use AI every day. Nothing has ever left.",[315,320,325],{"title":316,"mock":317,"caption":318,"body":319},"The choice was bad in both directions","doc","administrative documents — mock-up","Ban the tool and watch it get used anyway on personal phones, or allow it and let administrative documents travel to an American service. Neither option was acceptable.",{"title":321,"mock":322,"caption":323,"body":324},"An open model, hosted on the inside","table","internal assistant — mock-up","We deployed a conversational assistant inside the authority's own infrastructure, on an open French model. Access over the internal network only, named accounts, hosting in France.",{"title":326,"mock":327,"caption":328,"body":329},"Delivered end to end, infrastructure included","dashboard","monitoring — mock-up","We did not hand over software to install. We delivered the whole thing in working order, then maintained it for twelve months. The constraint — nothing leaves — dictated the architecture, and it holds up to inspection.",{"type":14,"value":331,"toc":338},[332,335],[17,333,334],{},"Staff wanted to use artificial intelligence. The authority could not send its documents\nto a service hosted outside Europe.",[17,336,337],{},"It is a situation many organisations know, and it is almost always settled by giving\nsomething up — on one side or the other.",{"title":24,"searchDepth":25,"depth":25,"links":339},[],"Grand Chambéry","Grand Chambéry · local government","Grand Chambéry, a French agglomeration authority. A conversational assistant deployed inside the authority's own infrastructure. Delivered and maintained.","12 months of maintenance",[345,348,351],{"value":346,"label":347},"0","outbound calls",{"value":349,"unit":77,"label":350},"100","hosted in France",{"value":352,"unit":353,"label":354},"12","months","of maintenance provided",[],{"value":346,"label":357},"pieces of data left the authority",{},3,"\u002Fwork\u002Fgrand-chambery","Local government",{"title":313,"description":342},[364,365,366,367],"Open French model","Internal hosting","Named accounts","Infrastructure included","work\u002Fgrand-chambery",[],"2025","He2_uLyovp_fAvK8DSclUjK4U1z0mfP4yuPgkdJdYHA",{"id":373,"title":374,"background":61,"blocks":375,"body":388,"built":61,"client":398,"context":399,"cover":61,"cta":61,"description":400,"duration":401,"extension":60,"extras":61,"figures":402,"gallery":409,"headline":410,"incident":61,"kicker":61,"logo":61,"meta":412,"method":61,"navigation":90,"order":413,"path":414,"problem":61,"results":61,"sector":415,"seo":416,"situation":61,"stack":417,"stem":421,"techsheet":422,"testimonial":61,"year":423,"__hash__":424},"cases\u002Fwork\u002Fbox-plus.md","Shipped in 2016. Opened this morning.",[376,380,384],{"title":377,"mock":322,"caption":378,"body":379},"We were doing this before it had a name","consolidated collection — mock-up","Automated collection from external sources, consolidation, reporting. Today it is called scraping and business intelligence, and everyone sells it. In 2016 you simply had to build it.",{"title":381,"mock":327,"caption":382,"body":383},"Collecting was never the point","operations dashboard — mock-up","The point has always been to make the data legible at the moment somebody has to decide. It is the same principle we apply today, on volumes of a different order entirely.",{"title":385,"mock":317,"caption":386,"body":387},"What ten years of production proves","maintenance log — mock-up","A studio of five is not judged on its size but on what is still running behind it. Ten years without interruption means an architecture that held, a client who stayed, and a team that answered when it mattered.",{"type":14,"value":389,"toc":396},[390,393],[17,391,392],{},"A logistics web application, delivered ten years ago, and used every day since. Not a\nversion kept on life support: a tool its users open in the morning without thinking\nabout it.",[17,394,395],{},"It is the oldest thing we have built, and it answers the question every director asks\nbefore handing a critical process to a small studio.",{"title":24,"searchDepth":25,"depth":25,"links":397},[],"Box Plus","Box Plus · logistics","Box Plus, logistics. Automated data collection and business intelligence, in an interface that has aged remarkably well. Still in production.","10 years of continuous production",[403,407],{"value":404,"unit":405,"label":406},"10","yrs","of continuous production",{"value":346,"label":408},"rebuilds needed",[],{"value":404,"unit":405,"label":411},"in daily service, without interruption",{},4,"\u002Fwork\u002Fbox-plus","Logistics",{"title":374,"description":400},[418,419,420],"Automated collection","Business intelligence","Dashboards","work\u002Fbox-plus",[],"2016","bvMc6ZG5KKvdC1FN5PtWnYK3ran3z9Q12jjMFWy_pJU",[426,428,430],{"path":427},"\u002Fblog\u002Fai-without-data-leaving",{"path":429},"\u002Fblog\u002Fhire-or-studio",{"path":431},"\u002Fblog\u002Fseven-signs-spreadsheet",1793998422363]