Portfolio / System Ops / mikrofarm

Un POS che nessuna app
del Play Store riusciva a coprire.

Mikro Farm vende mangimi, medicinali per animali, sementi, pesticidi e fertilizzanti — al kilo, al sacco, al container. Il titolare aveva provato ogni POS pronto all'uso: nessuno separava il magazzino dal punto vendita, nessuno aggiornava i prezzi al cambio fornitore, e nessuno mostrava al cliente cosa c'era sullo scaffale prima di guidare un'ora per scoprirlo. Allora lo abbiamo costruito noi.

ClienteMikro Farm
AmbitoCatalogo · POS · Magazzino · Fornitore
Sedi1 negozio + 1 magazzino
Dimensione ordine1–2 container / spedizione
Anno2026
I problemi del titolare

Cinque cose che facevano male ogni settimana.

Prima di scrivere una sola riga di codice, il titolare ci ha raccontato lo stesso sabato cinque volte. Questi sono i punti dolenti che tornavano sempre.

Problema 01

Il cliente guida un'ora. Il sacco di mangime non è sullo scaffale.

Il negozio è lontano da dove vivono la maggior parte degli agricoltori. Quando il prodotto non c'è, il viaggio è sprecato — e con lui la fiducia.

"Mi dispiace ogni volta. Hanno fatto tutta questa strada per niente."
Problema 02

Il sabato mattina è pieno. I clienti non sanno cosa vogliono.

I clienti arrivano in un negozio affollato senza un piano — si fermano davanti agli scaffali a leggere le etichette mentre dieci persone aspettano in fila. A rimetterci è il tempo dello staff.

Problema 03

Lo stock è in due posti. Il sistema lo conta come uno solo.

Magazzino e punto vendita sono fisicamente separati, ma ogni POS pronto all'uso li somma insieme. Così lo schermo dice 40 sacchi, lo scaffale ne ha 3 e il deposito 37 — e nessuno lo sa finché un cliente non chiede.

Problema 04

Sapere cosa scarseggia significa girare il magazzino con un appunti.

Ogni venerdì qualcuno conta. A mano. A occhio. Gli errori saltano fuori due settimane dopo, quando un ordine arriva incompleto rispetto al reale fabbisogno.

Problema 05

Una spedizione è uno o due container. Sbagliare l'ordine e te lo tieni.

Non si compra un sacco alla volta. Un singolo ordine fornitore è un container di mangime. Ordinarne troppo poco — esaurimento scorte per un mese. Troppo — capitale bloccato, scadenze che si avvicinano su medicinali e sementi.

"Per di più i fornitori cambiano i prezzi ogni poche settimane. Il margine si erode senza che me ne accorga."
● Problemi 01 + 02

Chi guida un'ora ha bisogno di sapere cosa c'è sullo scaffale.

La prima cosa che abbiamo costruito non è per lo staff. È un catalogo pubblico, orientato alla formazione, che il cliente apre prima di salire in macchina. Ogni prodotto mostra lo stock in tempo reale per sede, note su dosaggi per medicinali e sementi, e un pulsante "prenota / ordina" così il sacco è riservato quando entra.

Il problema dello scaffale si risolve da solo: i clienti che hanno già scelto da casa non devono leggere etichette in coda. Il problema dell'ora di viaggio si risolve da solo: se è rosso, non partono.

"Adesso mi scrivono chiedendo quale fertilizzante usare per i peperoncini nella stagione secca. Prima arrivavano confusi e basta." — Titolare, Mikro Farm
9:41
•••▮▮
Mikro Farm
Toko · live stock
Cart · 0
All Pakan Obat Benih Pupuk
Pakan Ayam Petelur 50kg
CP · Sak
12 sak
Rp 425k
Vitamin B-Complex 1L
Medion · Botol
2 left
Rp 78k
▸ Perché è importante
Cavolo in stagione secca → Urea + KNO3
Azoto per la crescita fogliare, potassio per tollerare lo stress idrico. Entrambi disponibili — ordinarli insieme dà diritto al ritiro gratuito.
Pupuk Urea 50kg
Pusri · Sak
Restock 3d
Rp 280k
● Problema 03

Gudang e Toko sono due posti. Quindi abbiamo fatto due colonne.

Ogni articolo ha un record principale ma due righe di stock — una per il magazzino, una per il punto vendita. Anche il HPP è tracciato per sede, così un trasferimento porta il costo con sé e i report sul margine restano corretti.

Le vendite scalano prima da Toko. Se Toko si esaurisce, il sistema attinge da Gudang senza chiedere conferma — ma registra il prelievo, così il calcolo del riordino sa che è lo scaffale a dover essere riempito, non solo il deposito.

Gudang backstock
Pakan Ayam 50kg37
Pupuk Urea 50kg82
Vitamin B-Complex 1L14
Pestisida Decis 100ml26
Toko on shelf
Pakan Ayam 50kg3
Pupuk Urea 50kg8
Vitamin B-Complex 1L2
Pestisida Decis 100ml5
● Problema 04

Il giro con gli appunti diventa uno schermo di cui il titolare si fida.

Gli avvisi di scorta bassa girano per sede, non in aggregato. La scheda "Cosa comprare" fa lo stesso lavoro che il venerdì sera si faceva a mano — ma non sbaglia mai il conteggio e mostra gli articoli per urgenza, non per ordine alfabetico.

Le categorie con scadenza tracciata (medicinali, sementi, pesticidi) ricevono un secondo controllo: tutto ciò che scade entro 60 giorni appare nella stessa scheda, così viene venduto o spostato prima di diventare inutilizzabile.

mikrofarm / what to buy
live
Below min
14
Expiring <60d
06
Hours saved / wk
4–6
ItemLocOn handMinAction
Pakan Ayam Petelur 50kgToko310Pindah
Pupuk Urea 50kgGudang82120Reorder
Vit. B-Complex 1L (exp 09/26)Toko24Sell first
Decis 100mlGudang2650Reorder
● Problema 05 — quantità

Calcoli da container, non da sacco.

Per chi vende un sacco alla volta, "riordina quando è basso" va bene. Per Mikro Farm la domanda è quanti sacchi riempiono un container da 20 piedi senza superare sei mesi di domanda. Quindi il riordino non è un pulsante — è un calcolatore che il titolare può modificare.

Il sistema aggrega le ultime 12 settimane di vendite, moltiplica per il lead time del fornitore e arrotonda il risultato al MOQ del fornitore e alla linea di riempimento container successiva. Il titolare vede il calcolo, non solo la risposta, e può aggiustarlo prima di inviare.

▸ Reorder calculator · Pakan Ayam 50kg
avg_weekly_sales × lead_time_weeks × safety
32 sak/wk × 6 wk × 1.25 = 240 sak
snap to MOQ (50 sak) → 250 sak
snap to container (300 sak) → 300 sak ✓
Suggerimento
300 sak
Riempimento container
100%
Copertura
~9 wk
● Problema 05 — prezzo

I fornitori cambiano i prezzi. Il margine scivola in silenzio. Non più.

Ogni ricezione di merce ricalcola il HPP medio ponderato per sede. Se il nuovo HPP supera la banda di markup impostata dal titolare, il prezzo al dettaglio si aggiorna in automatico e viene registrato — sia sul POS che sul catalogo clienti.

Il titolare vede un unico feed di ogni variazione: cosa è cambiato, perché, e di quanto. Basta "aspetta, perché il margine è calato questo mese".

▸ Price moves · last 7 days
Pakan Ayam 50kg Rp 410k Rp 425k ▲ +3.7%
Pupuk Urea 50kg Rp 295k Rp 280k ▼ −5.1%
Decis 100ml Rp 64k Rp 68k ▲ +6.3%
Benih Cabai 10g Rp 28k Rp 26k ▼ −7.1%
Come l'abbiamo costruito

Cinque settimane. Costruito sopra uno scheletro POS esistente.

Non siamo partiti da zero. Lo scheletro del POS era il nostro template Floural — vendite, spese, presenze, pagamenti. Il lavoro su misura era tutto sull'inventario: separarlo, costificarlo, renderlo visibile.

01

Week 1 — Walk the warehouse

Modello inventario su carta prima di scrivere una riga di codice. Mappate tutte le categorie, le unità (kg / sak / litro / pz), i MOQ dei fornitori, ogni SKU con scadenza tracciata.

02

Week 2 — Two-location data model

Costruita la junction inventory_items + inventory_stock (un record principale, qtà e HPP per sede). Costo medio ponderato agganciato a ogni ricezione. Il flusso di trasferimento ("Pindah ke Toko") consegnato nella stessa settimana.

03

Week 3 — POS rewire

Le vendite ora scalano prima da Toko, poi da Gudang, e salvano lo snapshot HPP sulla riga ordine. Avvisi di scorta bassa e scheda "Cosa comprare" alimentati da join in tempo reale.

04

Week 4 — Public catalog + reorder math

PWA pubblica che legge la stessa tabella stock su cui scrive il POS. Calcolatore di riordino con arrotondamento al riempimento container. Ticker dei prezzi agganciato agli eventi di ricezione.

05

Settimana 5 — In parallelo col metodo vecchio

Per una settimana intera, ogni conteggio è stato fatto sia sul sistema che sugli appunti. Riconciliazione finale. Discrepanze → bug → corretti → consegna.

Cosa funziona adesso

Sei cose che il titolare non fa più a mano.

Nessun numero mese-su-mese fabbricato — il sistema è nuovo. Questi sono i flussi di lavoro usciti dalla carta e dalla testa del titolare.

2

Sedi di stock, separate

Gudang e Toko hanno le loro qtà e HPP. Le vendite scalano in modo pulito. I trasferimenti portano il costo con sé.

0

Aggiornamenti prezzi manuali

Ogni ricezione ricalcola l'HPP e riprezza il dettaglio secondo la banda di markup del titolare. Il catalogo si aggiorna all'istante.

1

Posto dove vedere cosa comprare

Una sola scheda, ordinata per urgenza, inclusi gli articoli in scadenza imminente. Sostituisce il giro del venerdì con gli appunti.

100%

Stock in tempo reale visibile ai clienti

Il catalogo pubblico legge la stessa tabella su cui scrive il POS. Nessun staging, nessun ritardo di cache.

1–2

Calcoli container, automatizzati

I suggerimenti di riordino si arrotondano al MOQ e al riempimento container. Il titolare vede il calcolo, può aggiustarlo, poi invia.

0

Abbonamenti SaaS

Sostituisce ogni tentativo fallito con i POS del Play Store. Posseduto interamente. Gira su un piccolo VPS.

Lo stack

Scelto per il retail indonesiano con priorità offline.

▸ App POS

React Native + Expo

Gira sul tablet Android dello staff alla cassa. Offline-first tramite uno store di sincronizzazione in coda — la cassa continua a registrare le vendite quando il wi-fi va via, e le riproduce al ritorno. Aggiornamenti OTA per distribuire fix solo JS senza reinstallare.

React Native · Expo 55 · Zustand · TypeScript
▸ Backend

PHP + MySQL su un piccolo VPS

Un file per dominio, routing ?action=, PDO puro. Autenticazione JWT. Audit log su ogni mutazione per risalire a qualsiasi variazione di stock, alla persona e al momento.

PHP · MySQL · PDO · JWT · audit log
▸ Catalogo clienti

PWA con stock in tempo reale

App browser pubblica. Legge la stessa tabella inventory_stock su cui scrive il POS — nessuna sincronizzazione separata. Orientata alla formazione: ogni prodotto porta una nota "perché questo" per il contesto di cross-sell.

PWA · live stock per location · WhatsApp share link
▸ Modello inventario

Record principale + stock per sede

Una riga inventory_items per SKU. Due righe inventory_stock (Gudang, Toko) con chiave (item_id, location). Ogni evento di ricezione attiva il HPP medio ponderato e un eventuale aggiornamento del prezzo al dettaglio.

junction table · weighted-avg HPP · expiry tracking
Successivo → Floural

Il POS standard
non si adatta al suo negozio?

Una call gratuita per capire il perimetro. Le diciamo la soluzione più economica che funziona davvero.