jjose.dev
Invoicing App + Public Site · Built in SpanishLive

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
Visit thermotechpcool.netlify.app

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.