Thermotech Services Houston, TX
Before
He ran the business out of a carbon-copy paper invoice book — one page per job, in Spanish, written by hand at the customer's counter. If a page went missing, so did the record. Partial payments were tracked in his head, and there was no website at all.
What was built
Started as a custom invoicing app built entirely in Spanish for a commercial refrigeration company, then grew into a full public website. The owner creates and edits invoices from his phone, tracks jobs and partial payments with automatic paid/pending status, and downloads a branded PDF invoice that matches the paper invoice book it replaced. The public site — services, photo gallery, and contact form — is entirely self-managed from the same admin login.
From a carbon-copy invoice book to one app plus a real website — all run from a phone.
▸ Invoicing side is private — full walkthrough available on request
Project facts
- Status
- Live
- Client location
- Houston, TX
- Stack
- Next.jsSupabaseTypeScriptTailwind
100%
Spanish, interface and invoice
42
automated tests on the money math
20×
smaller photos, compressed on upload
What's in it
- ✓Invoices created and edited from his phone, numbered to continue exactly where the paper book left off
- ✓A branded PDF built to look like the paper invoice his customers already recognize
- ✓Partial payments with the balance and paid/pending status calculated automatically
- ✓Every word in Spanish — the interface and the invoice, accents and all
- ✓A public site with services and a photo gallery he updates from his phone's camera roll
The hard part
Sharing a PDF from an iPhone
The whole app is worthless if he can't hand the invoice to a customer standing in front of him. The normal way a website downloads a file fails silently on iPhone when the app is saved to the home screen or opened inside another app — no error, just nothing. The fix detects a touch device and passes the file straight to the phone's native share sheet, and treats closing that sheet as him changing his mind rather than as a failure.



