Loading
Projects
  • Client:   Politeknik Negeri Batam
  • Marketplace
  • Date:   Aug 2026

Vannamei Connect: Marketplace and Traceability for Vannamei Shrimp

Cover image of Vannamei Connect: Marketplace and Traceability for Vannamei Shrimp

A web platform for vannamei shrimp businesses in the Riau Islands. It brings the marketplace, QR Code traceability, and a government monitoring dashboard together in one application.

Beranda (desktop)
Marketplace (desktop)

Background

Vannamei shrimp is one of the main export commodities of the Riau Islands, yet the people in the business work in isolation. Farmers sell their harvest through personal networks, collectors and fish processing units keep records in their own books, and export buyers regularly ask for proof of origin that nobody can produce. The regional government faces a different problem: production and export readiness data is scattered across different formats, so it is hard to use for policy.

The International Trade Logistics programme at Politeknik Negeri Batam wanted all of it held in a single web application, supported by BRIDA of the Riau Islands provincial government. I built the application.

Solution

Vannamei Connect works with four roles: operators (farmers, suppliers, collectors, fish processing units), buyers (local and export), government, and admin. Operators publish a product catalogue, record their ponds and production cycles, then upload their legal documents. Buyers search the public marketplace, place an order, transfer directly to the operator's account, and upload the proof of transfer. The application never holds money and takes no commission, so its job is to record evidence and move the order status along.

Every order automatically creates a traceability lot containing the farming and harvest stages. When the operator fills in shipping details, the shipping stage joins the same chain. Each lot has a QR Code anyone can scan without logging in, and the scan result page shows the product's journey from the pond to the buyer.

The government side sits in its own read-only panel: transaction trends, a map of businesses, top-selling shops, top buyers, aggregated export readiness, plus data downloads in CSV, Excel, and PDF.

Key features

  • A public marketplace with a product catalogue, shop pages, ratings from buyer reviews, and a wishlist.
  • A full order flow from placing the order, uploading proof of transfer, seller confirmation, packing, shipping, and completion, through to the review.
  • QR Code traceability per lot, with a public page for the scan result.
  • An Export Readiness Score from 0 to 100 across five weighted categories (legality, quality documents, production, product quality, shipping), recalculated automatically whenever a document, product, pond, or shipping record changes.
  • Operator registration that requires uploading NIB and NPWP documents, followed by admin approval before the account can sell.
  • An admin panel and a government monitoring panel as two separate areas with different access rights.
  • A bilingual interface, Indonesian and English, with prices shown in both rupiah and dollars using an exchange rate refreshed daily.

Technical challenges

The most troublesome part turned out to be the one that looks trivial: addresses. The first form used a free text field, and as a result the addresses of businesses could not be used to filter anything. I replaced it with a four-level region picker built on the Kepmendagri dataset of 91,599 rows. I loaded that much data inside a migration rather than a seeder, because the release process on the server only runs migrations. The file is stored compressed and read line by line, then inserted in batches of 2,000 rows to keep memory use low, and skipped in the testing environment so the test suite does not slow down with it.

The traceability page once returned a 500 error on the server. The QR generator used PngWriter, which needs the GD extension, and the application image did not install it. I moved to SvgWriter embedded as a data URI. The file is smaller, it adds no dependency, and it stays sharp when printed on packaging.

The next problem: registration emails never arrived. The container on the server does not run a queue worker, so ShouldQueue notifications simply piled up in the jobs table. I wrapped the sending in a small helper that uses defer and rescue, so the email goes out after the response reaches the browser and a failing SMTP is only written to the log instead of breaking the registration.

For operator approval, I put the logic in the User model events rather than in the button. An admin can approve from three different places in the panel, and keeping the rule in one place prevents a path that forgets to verify documents or send the email.

My role

I built this project alone. It started with writing the PRD, the database schema, and the architecture document, then building the whole application: migrations, models, Livewire components, two Filament panels, the bilingual translations, and the Dockerfile for release. I also wrote the user manual and produced its images myself.

Results and what comes next

The first phase is finished and running at vannameiconnect.com with all four role flows complete, from registration to reviews. I used automated tests to cover the parts that are tedious to check by hand: the admin panel, the government dashboard, the operator registration flow, and phone number formatting.

A few things are on my list for later. The shipping form does not yet have fields for container and seal numbers, even though the Shipping category of the readiness score needs them, so for now the only route is uploading a shipping document. Laravel's built-in validation messages are also still in English because the translation files have not been written. Next up: a mobile application, the WhatsApp Business API so notifications really do go out automatically, and integration with official government data.

Tech stack

Laravel 13 PHP 8.3 Livewire 3 Filament v4 Tailwind CSS v4 MySQL 8 Docker

Similar projects

Ready to bring your ideas to life? I'm here to help

© 2026 Axa Rajandrya. All rights reserved.

+
+