We Smoke Fish
Six apps, one system: from an order on your phone to smoked fish at your door.
- Client
- wesmokefish.md
- City
- Chișinău
- Year
- 2026
- Status
- Live

Challenge
We Smoke Fish smokes fish to order on the day of delivery and keeps no finished-goods stock. The old website, manual order intake, Syrve accounting and Telegram reports all lived apart: the operator copied data by hand, couriers phoned customers, and cash collected at the door was reconciled at the end of the day.
Solution
We designed and built a platform of six apps that share one API contract. Customers order on the website or in the app and watch the courier on a map. Couriers build each run by scanning boxes. Operators, the production floor and accounting work in one panel: orders, delivery windows, inventory, recipe cards, purchasing, loyalty, 1C export.
Project screens
What we built
Online store
- Nuxt 4 SSR in three languages with localized URLs
- Every pack size (300 g, 500 g, whole fish) gets its own page with the final price
- Delivery window picker that explains why a given slot is available
- Address suggestions and a point check against delivery zone polygons
- Real-time order status and a customer account with loyalty
- SEO: JSON-LD, hreflang, sitemap, llms.txt, IndexNow; CSP and a BFF proxy
Customer app
- iOS and Android on Expo: the catalog opens right away, sign-in only at checkout
- SMS code sign-in, server-side cart, reorder and cancel
- Live courier on a map built on our own OpenStreetMap tiles
- Push notifications, an activity feed and “quiet hours”
- Loyalty card with QR, points and tiers
- Offline cache and over-the-air updates
Courier app
- A shift is a chain of runs, and each run is built by scanning QR codes on boxes
- Route and one-tap launch of an external navigation app
- Background location, offline map and a command queue for dead zones
- Handover confirmed only within the meeting point radius
- The courier logs the payment method at the door, the server checks the amount
CRM + ERP panel
- 26 modules and 94 screens: orders, delivery, catalog, inventory, purchasing, accounting
- Live courier map and delivery zone editor
- Versioned recipe cards with cost of goods, production and write-off records, month-end close
- CRM: customers, loyalty program, newsletters and push campaigns
- Sales analytics by channel, category and time
- Roles and 45 permissions, staff 2FA, audit log
- Voice assistant: operators control the panel by voice
Backend
- NestJS: 25 modules, 404 endpoints, 153 PostgreSQL tables
- Contract-first: clients for all five apps are generated from OpenAPI
- Multi-tenant: fish and meat run as two companies on one installation
- Realtime on Socket.IO + Redis, BullMQ queues, our own OSRM router
- Integrations with Syrve, fiscalization, the maib terminal, SMS, 1C and RestData
Outcome
Customers, operators, the production floor, couriers and accountants work from the same data, and nobody re-enters orders by hand.
The “smoked to order, zero stock” model is built into the system: delivery windows, shelf life counted from delivery day, an order feed for the production floor.
The system counts the cash at the door: the courier logs the payment, the server checks the amount.
A live courier map and push notifications answer the “where’s my order?” question.
The in-house ERP (inventory, recipe cards, cost of goods, 1C) paves the way to drop the paid Syrve license.
Stack
Integrations
Services involved

Want the same?
Tell us about your challenge — within 24 hours we’ll come back with a solution, timeline and launch plan.