Overview

Full-featured POS with order tracking, customer accounts, pricing rules, analytics, hardware integration, and SMS notifications. Built with Flask + SQLAlchemy and deployed as a local server for reliability.

Background

I spent several months working at a friend's dry cleaning business in LA and saw firsthand how many problems came from bad software and non-integrated hardware. Many cleaners ran on Legacy POS systems from 2007 that were no longer being maintained. There was no solution to upgrade to newer systems too because there was no elegant way to transfer the old database to a new system. This store kept a bunch of spare parts for their old Windows XP machines because a single hardware failure could take the whole system down. There was no integrated customer communication, paper-based garment tracking, and no way to track machine status virtually. I built this to fix all of it.

Goal

Build a low-maintenance, local-first system that stays fast and dependable without cloud dependencies, flexible enough to adapt to the changing needs of a business, and easily transferrable to new hardware or systems.

Screenshots

Dry cleaning POS interface screenshot
POS interface for intake, status, and workflow tracking.
Dry cleaning POS interface screenshot
Operations view for staff and admin workflows.

Core Features

System Architecture

Hardware + Network Topology

flowchart LR R[Router] SW[Switch] AP[WiFi AP] MM[Mac mini] K[Kiosk] S[Staff] A[Admin] D[Other Devices] SC[Scanner] RP[Receipt Printer] LP[Label Printer] CC[Card Terminal] NET[Internet] R --> SW R --> NET SW --> MM SW --> AP AP --> K AP --> S AP --> A AP --> D S --> SC S --> RP S --> LP S --> CC

Software Data Flow

flowchart TB UI[Web UIs] WS[Web Server] APP[Flask App] BL[Business Logic] SMS[SMS] PR[Printing] DB[(SQLite DB)] BK[Backups] CR[Cron Jobs] PS[Power Scheduling] UI --> WS WS --> APP APP --> BL APP --> SMS APP --> PR APP --> DB DB --> BK CR --> BK CR --> PS

Data Model (Summary)

Deployment Modes

Sitemap Summary

Hardware Integration

Scalability

Scales from a single‑terminal shop to multi‑station operations with self‑serve kiosks. Because the system runs on a dedicated in‑store VLAN, any worker can access the software instantly from any device on the network (phones, iPads, scan stations, etc.).

Deploying to a new location involves syncing the database from the development machine to the production server via SMB mount and rsync, with a controlled pause/resume workflow that stops the watchdog, creates a timestamped backup, syncs, and restarts all services — ensuring zero data loss during migrations.

Security & Privacy

Challenges & Lessons

Outcome

A stable, local POS platform that improves speed and reliability for daily operations while remaining flexible enough for shops of any size. 3 locations, running since mid-2025.

Next Steps

Continue expanding integrations (different laundry hardware, payment systems, printer models) and refine analytics/reporting workflows as the business grows. I'd also like to integrate with third-party delivery services one day.

Stack

Flask, SQLAlchemy, SQLite (WAL), Bootstrap, Waitress, Twilio.