Bro. Nungu

01 · Business management system

BizSyncer

In production

Business operations, synchronised.

Category
Business management system
Role
Product design & full-stack engineering
Built by
Empire Pro Dev
BizSyncer home page on desktop: the headline “Transform Your Business With Smart Solutions”, a summary of point of sale, inventory tracking and real-time analytics, and Start Now and Learn More buttons.
BizSyncer mobile app on two phones: a dashboard greeting with a net profit summary, and a sales by category chart above recent sales.

Screens

BizSyncer interface

  • BizSyncer home page on desktop: the headline “Transform Your Business With Smart Solutions”, a summary of point of sale, inventory tracking and real-time analytics, and Start Now and Learn More buttons.
  • BizSyncer mobile app on two phones: a dashboard greeting with a net profit summary, and a sales by category chart above recent sales.
  • BizSyncer home page on a phone: the headline “Transform Your Business With Smart Solutions”, a summary of point of sale, inventory tracking and real-time analytics, Start Now and Learn More buttons, and the start of a row of headline statistics.
  • BizSyncer dashboard on a laptop, a tablet and a phone for Empire Technology: a bookings calendar, sales and revenue performance, monthly revenue, expenses and profit, sales by category, a net profit summary, and the mobile bottom navigation with a central POS button.
  • BizSyncer dashboard on desktop for a stationery business: a greeting, a business selector and Report Summary button, cards for revenue, expenses, net profit, inventory and services, a date-range calendar, and a sales and revenue performance chart.
  • BizSyncer point of sale on desktop: Products and Services tabs, search by name, SKU or ISBN, a category filter and Scan Barcode button, a grid of stationery products with stock counts and prices, and a cart with payment method, customer details, discount and tax.
  • BizSyncer products list on desktop: search with category and stock-status filters, and a table of stationery items showing SKU and ISBN, category, price and cost, stock with reorder level, in-stock status, and view, edit and delete actions.
  • BizSyncer mobile app dashboard on a large phone screen held up by two smiling people, one in a BizSyncer shirt: business, report and date-range selectors, a net profit summary, and the bottom navigation with a central POS button.

Overview

A business management platform bringing sales, inventory, point of sale, services, customers, expenses, branches, staff, reports, assets and debt management into one operational system.

Product areas

  • Sales
  • Inventory
  • Point of sale
  • Services
  • Customers
  • Expenses
  • Branches
  • Staff
  • Reports
  • Assets
  • Debt management

Technologies

  • Next.js
  • TypeScript
  • Tailwind CSS
  • Supabase
  • PostgreSQL
  • Prisma

Case study

From problem to product

The complete engineering lifecycle behind BizSyncer.

  1. 01

    Problem

    Running a business means tracking sales, stock, services, staff, branches, expenses and debts at the same time, usually across disconnected tools or paper records.

    • Sales, stock and debts kept in separate notebooks and spreadsheets
    • Owners with several branches cannot see the whole business in one place
    • Unreliable internet at the counter stops cloud-only tools from working
  2. 02

    Idea

    BizSyncer: one operational system where every part of the business stays in sync, from the point of sale to the final report.

    • One account per business, with its branches and staff underneath
    • A point of sale that keeps working offline and syncs when the connection returns
    • Reports built from the same records the counter creates
  3. 03

    Approach

    BizSyncer started as a Django back end with a separate Next.js front end. As the product grew, I moved the back end into Next.js route handlers that read the same PostgreSQL database through Prisma, so the whole product now ships from one codebase with its data model intact.

    • Build around the daily routine at the counter: sell, restock, record expenses, close the day
    • Ship small increments on a live product rather than one large release
    • Treat offline behaviour as a requirement from the start
  4. 04

    Architecture

    Operations, resources, finance and customer relationships are modelled as connected domains, all feeding a shared reporting layer.

    • Route handlers grouped by domain: sales, products, services, debts, expenses, assets and branches
    • Owner and staff permissions checked on the server for every request
    • Subscription status controls write access when a plan expires

    System architecture

    4 layers · 11 modules

    1. L01Operations

      3 modules
      • Point of sale
      • Sales
      • Services
    2. L02Resources

      4 modules
      • Inventory
      • Assets
      • Branches
      • Staff
    3. L03Finance & relationships

      3 modules
      • Expenses
      • Debt management
      • Customers
    4. L04Insight

      1 module
      • Reports
    Conceptual architecture: layers and their responsibilities.
  5. 05

    Design

    The interface is organised around the tasks a shop owner repeats every day, with the point of sale one tap away and every list searchable and filterable.

    • A bottom navigation bar on phones and a full sidebar on desktop
    • Skeleton loading states, so screens never jump while data arrives
    • Receipts, invoices and reports laid out to be printed or shared
  6. 06

    Development

    BizSyncer is written in TypeScript end to end, from React Query data hooks in the interface to Prisma queries on the server.

    • Barcode scanning with the device camera at the point of sale
    • Product photos and receipts uploaded straight to Cloudflare storage through short-lived signed links
    • A local IndexedDB store and sync queue that record work offline and replay it in order once back online
    • Mobile-money subscription payments confirmed by a verified webhook
  7. 07

    Data

    Every transaction becomes structured operational data, which forms the basis for reports that describe how the business is actually performing.

    • Daily summaries with net profit per product
    • Debt histories with every payment recorded against the customer
    • Tanzanian regions, districts, wards and streets as reference data for addresses
  8. 08

    Testing

    Every change is type-checked and linted, and each workflow is exercised in the browser both online and offline before it reaches the live product.

    • Offline sales tested by dropping the connection mid-sale and confirming the queue replays
    • Permissions tried from staff accounts, not only from the owner's
    • Expired-subscription behaviour checked so data stays readable but locked for editing
  9. 09

    Deployment

    BizSyncer runs in production at bizsyncers.com on serverless hosting, with the PostgreSQL connection pool tuned for short-lived functions.

    • Installable as an app on phones and desktops
    • A service worker caches the app shell, so it opens without a connection
    • Search metadata, a sitemap and public landing pages for discovery
  10. 10

    Result & current state

    BizSyncer is live in production and keeps growing feature by feature on the same codebase.

    • Sales, services, stock, debts, expenses, assets, branches and staff in one system
    • Keeps working at the counter when the internet drops
    • A platform admin area for businesses, subscriptions and reports

What building it taught.

Challenges

  • Keeping sales recorded offline consistent with the server once the connection returns
  • Moving the back end off Django without disrupting a live product and its data
  • Showing staff only what their role allows while owners see everything

Solutions

  • A local sync queue with optimistic updates that replays changes in order and reconciles with the server
  • Prisma pointed at the existing database, so the new route handlers read the same tables the old API wrote
  • Staff permissions stored per branch and enforced in every route handler

Lessons

  • Offline support has to shape the data layer from the start; it cannot be bolted on later
  • A back-end port is safest when the database stays the single source of truth
  • Small, frequent releases on a live product surface problems while they are still small