Open-Source Automotive Shop Management System
Features • Screenshots • Build • Architecture • Contributing • License
DISCLAIMER THIS PROJECT WAS STARTED USING THE HELP OF LLM CODING ASSISTANCE GEMINI IN THIS CASE BUGS ARE EXPECTED
TuxRepair is a high-density, high-efficiency automotive shop management system built for independent repair shops. It provides a complete service counter workflow — from vehicle intake and work order creation to parts/labor billing, double-entry accounting, and PDF print output — all in a single offline-first desktop application.
No cloud subscriptions. No vendor lock-in. Your data stays on your machine in a standard SQLite database.
- Rapid Vehicle Intake — Search by license plate with live typeahead suggestions
- Full Work Order Lifecycle — Create Quotes, Estimates, and Invoices with one-click transitions
- 10-Row Line Items Grid — Right-click context menus for Part/Labor type selection on each row
- Predefined Job Kits — One-click insertion of common service packages (Oil Change, Brake Service, etc.)
- Catalog Lookup Dialog — Search parts inventory and labor codes with instant insert
- Customer & Vehicle Management — Editable customer/vehicle details tied to each work order
- GnuCash-Style Chart of Accounts — Assets, Liabilities, Income, Expense accounts with dynamic balances
- Transaction Journal — Every finalized invoice posts proper debit/credit splits
- Account Register View — Click any account to see running balance history
- Automatic COGS Tracking — Parts cost-of-goods-sold and inventory asset adjustments on finalization
- Parts Catalog — Track part numbers, descriptions, stock quantities, reorder points
- Wholesale vs. Retail Pricing — Maintain cost and selling prices in cents precision
- Auto-Deduction on Finalize — Inventory counts automatically reduce when work orders are closed
- Service Bay Management — Configurable bays (Lift 1, Lift 2, Alignment, etc.)
- Appointment Scheduling — Assign customers/vehicles to time slots with notes
- 3 Built-in Templates — Standard Tech Traveler, Compact Thermal Receipt, Formal Customer Invoice
- Custom Template Editor — HTML/CSS editor with live preview and click-to-insert placeholders
- Smart PDF Rendering — Automatic page size detection (Letter vs. 80mm thermal roll)
- Barcode Generation — SVG barcode rendered on every printed traveler
- Configurable Tax Rate — Set your local sales tax percentage
- Shop Supplies Fee — Automatic 5% of labor (min $2, max $25)
- Light/Dark Theme Toggle — Full theme switching with one click
- Database Backup — One-click SQLite backup to timestamped files
Coming soon — screenshots of the Work Orders tab, Accounting Ledger, Inventory Manager, and Print Template Editor.
| Dependency | Version | Notes |
|---|---|---|
| CMake | 3.16+ | Build system generator |
| C++ Compiler | GCC 12+ / Clang 15+ | Must support C++23 |
| Qt6 | 6.x | Modules: Core, Gui, Widgets, PrintSupport |
| SQLite3 | 3.x | Development headers and library |
Fedora / OpenMandriva / RPM-based:
sudo dnf install cmake gcc-c++ qt6-qtbase-devel qt6-qttools-devel sqlite-develUbuntu / Debian:
sudo apt install cmake g++ qt6-base-dev libqt6printsupport6 libsqlite3-devArch Linux:
sudo pacman -S cmake qt6-base sqlite# 1. Clone the repository
git clone https://github.com/m-esag/TuxRepair.git
cd TuxRepair
# 2. Configure
cmake -B build -S .
# 3. Compile
cmake --build build -j$(nproc)
# 4. Run
./build/desktop-ui/tuxrepair-uiThe application creates a tuxrepair.db SQLite database in the working directory on first launch, pre-seeded with default accounts, sample inventory, and job kit templates.
TuxRepair/
├── CMakeLists.txt # Root build configuration
├── core/ # Core business logic library (no Qt dependency in headers)
│ ├── CMakeLists.txt
│ ├── models.h # Data structs: Customer, Vehicle, Invoice, Account, etc.
│ ├── db_manager.h # SQLite database manager interface
│ └── db_manager.cpp # Schema, CRUD, transactions, accounting splits
├── desktop-ui/ # Qt6 desktop application
│ ├── CMakeLists.txt
│ ├── main.cpp # Entry point, DB initialization, demo data seeding
│ ├── main_window.cpp/h # Primary UI: tabs, menus, work order workflow
│ ├── traveler_renderer.cpp/h # HTML template engine + QPrinter PDF renderer
│ ├── qol_dialogs.cpp/h # Catalog lookup, customer search, service history
│ ├── register_dialog.cpp/h # Account register drill-down dialog
│ ├── template_editor_dialog.cpp/h # Print template HTML/CSS editor with live preview
│ ├── resources.qrc # Qt resource file (app icon)
│ └── app_icon.png # Application icon
├── LICENSE # GNU AGPL v3
└── .gitignore
- Offline-First — All data stored locally in SQLite. No network required, no SaaS dependency.
- Cents-Based Currency — All monetary values stored as
int64_tcents to avoid floating-point rounding errors in financial calculations. - Double-Entry Accounting — Every finalized invoice creates proper balanced debit/credit transaction splits across the chart of accounts.
- Thread-Safe Database — All
DBManagermethods protected bystd::recursive_mutexfor safe concurrent access. - Template Placeholders — Print templates use
{{PLACEHOLDER}}syntax (e.g.,{{CUSTOMER_NAME}},{{TICKET_ITEMS_TABLE}}) replaced at render time.
TuxRepair uses the following SQLite tables:
| Table | Purpose |
|---|---|
customers |
Customer records (name, address, phone) |
vehicles |
Vehicles linked to customers (plate, VIN, year, model, engine) |
invoices |
Work orders / tickets (type, mileage, status, dates) |
invoice_items |
Line items on each invoice (parts and labor) |
accounts |
Chart of accounts (Asset, Liability, Income, Expense) |
transactions |
Accounting transaction headers |
splits |
Double-entry splits (debits positive, credits negative) |
inventory |
Parts inventory with stock tracking |
job_kits / job_kit_items |
Predefined service packages |
bays / bay_schedules |
Service bay definitions and appointments |
print_templates |
Custom HTML print templates |
settings |
Key-value application settings (tax rate, etc.) |
Contributions are welcome! This is an open-source project licensed under the GNU AGPL v3.
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m "Add my feature" - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
- Follow the existing code style (4-space indentation,
snake_casefor variables/functions) - All monetary values must be stored as
int64_tcents — never floating-point - Add null guards for all
sqlite3_column_text()calls - Use
std::recursive_mutexlock guards in allDBManagerpublic methods - Test with both light and dark themes
- Customer/vehicle creation directly from work order panel
- Search by VIN, name, or phone number (not just license plate)
- Export accounting data to CSV/OFX format
- Work-In-Progress (WIP) Live Dashboard (
F9) with low-stock visual cues - Auto-save background timer for work orders (60s interval)
- Parts Matrix Markup Calculator Settings (Tiered 4-level markup matrix)
- Master Database update confirmation prompts for edited customer/vehicle profiles
- Multi-technician assignment per line item with payroll tracking
- Undo/redo stack for line item edits
- Keyboard shortcut help overlay
TuxRepair is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
See LICENSE for the full license text.
Built with ❤️ for independent repair shops everywhere.