Skip to content
NM
Back to Projects
BuiltBusiness Software · POS · Inventory

FSSS Limat POS

A local-first register, inventory, and retail operations system for a real church store

My Role
Product design, full stack development, and database design
Platform
Locally hosted web/PWA and Electron desktop point-of-sale application
ReactViteNode.jsExpressMySQLElectronPWAZXingJsBarcode

Private local application; no public link.

FSSS Limat POS interface showing a new sale screen with cart and payment

Quick Overview

React and Express point-of-sale system with hardware and mobile barcode scanning, held carts, inventory history, customers, receipts, reporting, label printing, auditing, exports, and role-based operations.

Who it serves
Fenote Selam Sunday School store cashiers, managers, and administrators handling sales, products, customers, reporting, and settings
Current status
Built

Built for a local church-store environment. The source repository is private and there is no public live deployment. The application depends on its configured local MySQL database and should not be represented as an offline-sync cloud POS.

The Problem

The store needed one system for the daily register and the work around it: finding products quickly, scanning labels, tracking stock, serving walk-in and repeat customers, printing receipts, and giving managers visibility without exposing every control to every cashier.

The replacement also had to work with an existing MySQL installation whose table and column names differed across earlier versions, rather than forcing the organization to discard its records or immediately rebuild its local environment.

The Solution

FSSS Limat POS combines a responsive React cashier workspace with a session-protected Express API and MySQL database. Staff can search or scan products, build and hold carts, attach customers, apply discounts, take several payment types, and generate thermal-friendly receipts.

Managers receive inventory and category tools, movement history, sales reports, product labels, void-and-restock controls, CSV exports, settings, backup records, and audit visibility. Compatibility logic maps common legacy user, customer, sales, and receipt columns so the React conversion can operate against the real local database.

My Contribution

Product planning

Defined the POS and inventory workflow based on real store operations.

Frontend development

Built the responsive React/Vite register, dashboard, inventory, customer, sales, reports, users, labels, and settings workspaces.

Backend integration

Built the Express API for sessions, role checks, catalog operations, checkout, reporting, receipts, exports, audit records, and settings.

Database compatibility

Mapped legacy MySQL column variants and added safe inventory migration tooling so the React system can use the organization's existing records.

Register UX

Designed keyboard-first product search, hardware barcode input, secure mobile camera scanning, held carts, customer creation, and responsive cart behavior.

Local delivery

Added production web serving, installable PWA behavior, and an Electron desktop runtime for the local store environment.

Key Features

Point of sale

Core register flow: search or scan a product, build a cart, and take payment.

Hardware and mobile barcode scanning

Supports keyboard-style barcode readers and secure-context camera scanning on mobile devices.

Inventory management

Tracks stock levels as sales happen.

Inventory movement history

Records changes to stock over time for accountability.

Customers

Creates and searches customer records without losing the current cart.

Receipts and reports

Provides 80mm print-ready receipts, optional SMTP delivery, sales KPIs, filters, history, and receipt review.

Barcode and price labels

Generates the requested quantity of 2-by-1-inch product labels with permanent SKU identity.

Role based access

Different permissions for staff versus management.

Held carts

Pauses and restores up to 20 local carts without completing a sale.

Voids and stock restoration

Manager-authorized sale voids require a reason and return sold quantities to inventory.

Audit, backup, and exports

Records operational actions, tracks backup activity, and exports products, customers, and sales as CSV.

Configurable store behavior

Controls payment defaults, discounts, receipt layout, email, low-stock thresholds, label output, theme, and mobile behavior.

Technology

Frontend

ReactVitePWA

Backend

Node.jsExpressMySQL

Register tooling

ZXingJsBarcode80mm receipt printing

Desktop

Electron

Architecture

Register and management UI

React + Vite

Responsive cashier and manager workspaces run in the browser or installable PWA shell.

Application API

Node.js + Express

Session-protected routes own authentication, authorization, sales, inventory, reporting, receipts, and settings.

Operational data

MySQL

Products, categories, customers, users, sales, line items, inventory movements, settings, and audit records stay in the local database.

Register peripherals

Scanner + printer workflows

Barcode readers, mobile camera scanning, label generation, and thermal receipt layouts support the physical counter.

Desktop delivery

Electron

A desktop wrapper starts the local runtime and presents the POS as an application on the store computer.

The React client never connects directly to MySQL. It calls the local Express API, which manages server-side sessions, role checks, schema compatibility, validation, and database operations. The same application can run as a local web/PWA experience or inside the Electron desktop wrapper.

Product Gallery

These are AI-generated concept images illustrating the implemented POS workflows, not screenshots captured from the private local application.

Engineering Challenges

Converting a working legacy database safely

The earlier PHP/MySQL versions used different database names and column conventions. The API detects common user and sales schemas, preserves permanent SKU identity, and includes a migration path that updates matching SKUs instead of duplicating them.

Reconciling inventory accurately

Checkout, manual stock edits, opening inventory, and voided sales can all change stock. Movement records and automatic restoration on voids keep those changes explainable.

Designing for a physical register

The workflow has to stay fast with a keyboard scanner, work responsively on touch devices, print specialized labels and receipts, and avoid losing a cart when staff pause to help someone else.

Results and Evidence

  • Converted the original modular PHP/MySQL workflow into a React/Vite frontend with an Express API while retaining compatibility with the real store database.
  • Implemented complete dashboard, POS, inventory, customer, sales, reports, labels, users, and settings workspaces.
  • Delivered role-protected local web/PWA and Electron desktop paths for the store environment.

What I Learned

Building for a real register taught me that hardware, printing, existing data, staff permissions, and interruptions shape the application as much as the checkout screen does.

Compatibility work is product work: adapting safely to the organization's real database made the React conversion more useful than a clean rewrite that ignored existing records.

Related Credentials

IBM

Project Management Fundamentals

IBM SkillsBuild

Issued Apr 25, 2026

See every credential on the Credentials and Learning page.