π Tradie Invoices

A professional Invoice & PDF Generator PWA for sole traders and small businesses. Built for earthmoving contractors, it combines GPS-based worksite detection, time tracking, and invoice generation in one sleek interface.
β¨ Features
- GPS Worksite Detection β Automatically detects and logs work locations using geofencing
- Time Tracking β Check-in/check-out with automated timers and manual overrides
- Machine Hire Logging β Track equipment usage with hourly rates
- Standard & Extra Rates β Different rates for standard hours vs. overtime
- PDF Invoice Generation β Professional invoices with custom branding
- Multi-User Auth β Secure Firebase authentication with role-based access
- Admin Panel β Manage clients, rates, and invoice templates
- Cloud Sync β Real-time Firebase Firestore sync across devices
- GST Support β Optional 10% GST calculation per invoice
- Offline Support β Full PWA with service worker caching
- Installable β Add to home screen on Android & iOS
- Clean UI β Navy and amber color scheme for professional appearance
- Version: v3
π οΈ Tech Stack
- Frontend: Vanilla JavaScript (ES6+), HTML5, CSS3
- Mapping: Leaflet.js with ESRI World Imagery
- Backend: Firebase (Firestore + Authentication)
- PDF: jsPDF library
- Storage: IndexedDB for local caching
- PWA: Service Worker for offline functionality
- Hosting: GitHub Pages
π Getting Started
For Users
- Open the app: https://tradie.banksiaspringsfarm.com/
- Sign up or login with your email
- Set up your clients and hourly rates in settings
- Start tracking work:
- Click βCheck Inβ at your worksite (GPS optional)
- Device will automatically detect geofence entry
- Click βCheck Outβ when done
- Generate invoices:
- Review your timesheet
- Adjust rates if needed
- Generate and download PDF
For Development
git clone https://github.com/banksiasprings/tradie-invoices.git
cd tradie-invoices
# Serve the root directory with any static file server
python3 -m http.server 8000
# Open http://localhost:8000 in your browser
When the app is running on the real phone (e.g. in the 12V cradle on the drive to a
worksite), you can watch it live from the Mac β screen mirror and every log line
the app prints β over an encrypted Tailscale tunnel that works
on WiFi or LTE.
./scripts/monitor-phone.sh # opens scrcpy mirror + streams the app's logcat
- scrcpy mirrors the phone screen in real time.
- logcat streams
com.banksiasprings.invoicesβs output (auto-scoped to the appβs
PID β this is where [GeoLog] and Capacitor/Console lines show up).
- Tailscale carries it end-to-end encrypted; only Stevenβs signed-in devices can see
each other.
First-time phone setup (install Tailscale, sign in, grab the phoneβs 100.x.y.z IP) is a
~3-minute, phone-followable guide: scripts/setup-tailscale-debug.md.
Once set up, override the target inline without editing the script:
PHONE_IP=100.x.y.z PHONE_PORT=42385 ./scripts/monitor-phone.sh
Keep the phone on the 12V charger while monitoring β mirror + Tailscale + logcat drain
the battery noticeably. If the Mac is ever lost/stolen, remove it from
the Tailscale admin console to instantly cut its access.
πΈ Screenshots
- Time tracking dashboard with map view
- Invoice generation interface
- Admin panel for client management
π License
MIT β See LICENSE file for details
Found a bug? Open an issue. Want to contribute? PRs welcome!