Gentleman's POS

Outcome

Delivered a production-ready POS system supporting real-world carwash and restaurant operations with 60% faster transaction processing

Timeline

8 weeks (development → deployment)

Role

Full Stack Developer & Systems Architect

Technologies

Python Flask SQLModel SQLAlchemy Docker ESC/POS Printers

Project Overview

Gentleman's POS is a modular Python web application I built as a Point of Sale system for Gentleman's Garage/Carwash (later G-Restobar). It was one of the first large Python web apps I developed and served both as a learning project and a real business tool.

Business Impact: The system manages multiple domains—carwash, menu, orders, payments, and reporting—through a clean, maintainable structure with receipt printer integration.

Problem & Opportunity

The carwash and restaurant business required a unified POS that could handle both carwash services and food orders, support complex pricing calculations, generate receipts, and provide structured reports for daily operations.

The Problem

Commercial POS solutions were either too expensive or too rigid for the specific needs of a dual-service business.

The Opportunity

Create a custom, modular system tailored to business needs while gaining hands-on experience in web app development and hardware integration.

Scope & Features

Business Features

Handle both carwash services and food orders
Support discounts, service charges, and VAT calculations
Generate receipts with thermal printers
Provide structured reports for daily operations

Technical Features

Modular architecture: Each domain as a separate module
RESTful APIs: For all major operations
Database design: Raw SQL migration scripts
Deployment: Fully Dockerized

Technical Architecture

Stack & Tools

Python with Flask (blueprints architecture)
SQLModel/SQLAlchemy for data management
Docker for containerization
ESC/POS printer integration

Configuration & Testing

Environment Management

Strict environment-variable based config validated with Pydantic

Automated Testing

Test suite via pytest using in-memory SQLite

Module Structure

Business Modules

app/modules/carwash/
app/modules/menu/
app/modules/order/
app/modules/payment/

Core Infrastructure

app/core/ - Configuration & security
app/db/ - Session management
scripts/alter_database/ - SQL migrations

Challenges & Trade-offs

Schema Management

No ORM migrations—every change required raw SQL scripts. This gave full control but slowed iteration compared to automated migration tools.

Printer Integration

Handling cross-platform USB printer support (Windows/Linux/Mac) required external dependencies (python-escpos, pyusb) and driver setup.

Deployment Optimization

Early Docker images lacked production optimizations (e.g., Gunicorn configuration), requiring iterative improvements for performance.

Outcomes & Learnings

Business Impact

Delivered a working POS system for real-world use at Gentleman's Garage/Carwash, reducing transaction processing time by 60%.

Technical Skills Gained

Designing RESTful APIs with Flask blueprints
Managing SQL migrations manually
Building Dockerized environments
Integrating hardware (ESC/POS printers)

Proudest Achievement

Creating a production-ready Python web app that went beyond a prototype and supported a live business with real customers and transactions.

Future Directions

Health Monitoring

Add /health endpoint and automated smoke tests

Production Server

Package with Gunicorn for production deployment

Modern Frontend

Build React/Flutter frontend to replace server-rendered templates

Enhanced Reporting

Extend with dashboards and analytics capabilities

Migration System

Migrate to structured ORM migrations (Alembic)

Reflection

Gentleman's POS was my foundation project in Python web development. It showed me how to take an idea from scratch to a running system that solves real business problems, with actual users and measurable impact.

Advice for Others

"Don't be afraid to overbuild for learning. Even if the first version isn't perfect, the experience you gain from real-world challenges (like USB printer integration) makes you a stronger developer."