Food commerce platform

FreshPick / FreshOnTime

A premium food-commerce platform for Colombo bringing together fresh groceries, local products, prepared meals, recurring delivery and business ordering in one customer experience.

Product work and architecture overview by Savi Saluwadana.

Next.jsPostgreSQLPrismaRecurring deliveryB2BMCP

What it does

Who it serves
Grocery shoppers, local producers, business buyers and administrators.
Product purpose
Food commerce, producer onboarding and scheduled recurring deliveries in Colombo.
  • Catalog browsing, product discovery and customer shopping.
  • Producer onboarding, admin operations and business enquiries.
  • Subscription baskets and recurring-order delivery scheduling.
  • Public read-only catalog tools through MCP.

How it works

  1. A shopper chooses catalog items or a recurring basket.
  2. Next.js validates the request and domain services persist orders through Prisma.
  3. PostgreSQL holds catalog, order and delivery state; scheduling advances due deliveries.
  4. Media and transactional messages use their configured storage and email integrations.

Architecture

Next.js → Prisma / PostgreSQL → recurring delivery + media storage

FreshPick / FreshOnTime architectureStorefront + admin connects to Commerce services. Catalog agent tools connects to Commerce services. Commerce services connects to Commerce data. Commerce services connects to Media storage. Delivery + email connects to Commerce data. Commerce services connects to Delivery + email.Storefront + adminNext.jsCatalog agent toolsRead-only MCPCommerce servicesOrders, stock, schedulesCommerce dataPrisma / PostgreSQLMedia storageConfigured storage adapterDelivery + emailScheduled workflows
Component overview. Arrows show requests and data flow between the main parts of the product.
FreshPick / FreshOnTime components and responsibilities
ComponentResponsibility
Next.jsStorefront, producer and admin interfaces, API routes and public MCP catalog access.
Prisma + PostgreSQLCatalog, order, subscription and delivery records.
Scheduled workflowsRecurring deliveries and transactional communications.
Storage adapterDurable product and editorial images.

Current scope

Customer checkout and subscription baskets currently use cash on delivery. Automatic recurring card charging is not implemented. Subscription baskets and recurring grocery orders are distinct workflows.

Architecture summary reviewed . Repository documentation.

Contributor notes

Run locally

Set development environment variables; npm ci; npm run db:migrate; npm run dev

Design decision

Next.js route handlers enforce commerce rules using Prisma and PostgreSQL.

Trade-off

One app keeps order transitions together; background jobs and integrations need separate scheduling.

Unfinished

Automatic recurring card charging is not implemented; agentic commerce is planned.

Licence: No licence identified