All projects

MastroPreventivo

AI quotes for tradespeople: you describe the job, the app writes it in your own style.

PWALive

The problem

A tradesperson spends the day on site. Quotes get written in the evening, piecing together photos, voice notes and chats with the client, often with no one to help with the paperwork.

Quoting software makes you fill in forms and turns out documents that all look the same and don't feel like yours. What was missing was something that starts from how they already work: talking about the job, then sending a quote with their own letterhead and their own wording.

The solution

MastroPreventivo learns from the tradesperson. The first time, you upload your letterhead and one or two old quotes: the app finds where to write on the letterhead and picks up your fixed texts, typical phrases and font.

Then, for each job, you describe out loud what needs doing, or send photos, chat screenshots or text. The AI drafts the client, subject, intro and line items, written the way you would write them. If something is missing, it asks a few questions.

Prices you didn't mention stay empty: you fill them in, and only what you confirm goes into the total. In the end the PDF comes out on your letterhead, numbered and dated, ready to send to the client as a link.

My role

  • I built MastroPreventivo with the help of AI, using skills and workflows I created myself.
  • Here AI is also inside the product, which made the work harder. I wrote the instructions it gets, defined the format of its answers and check them before they're used.
  • I decided what the AI must not do: it doesn't make up prices, it doesn't copy client data from old quotes, and nothing goes into the total without the tradesperson's confirmation.
  • I planned for when the AI isn't enough or doesn't answer: questions for missing details, the draft kept safe with "Retry", a request limit and a log of every call.
  • I built the part that learns from the tradesperson: it reads the letterhead and old quotes (PDF or Word), finds the space for the text and suggests the fixed texts to check.
  • I made the PDF on the server: once issued it stays the same, with a number and versions. I also made the page where the client accepts or declines.
  • I designed the database with its security rules: each tradesperson sees only their own data.

Stack and timeline

It's built with Next.js and React, in TypeScript. Data, sign-in and security rules live on Supabase (a PostgreSQL database).

The interface uses Tailwind CSS and shadcn/ui components on Base UI, with Framer Motion for animations; forms use React Hook Form and Zod, which also checks the AI's answers. The PDF is generated with React-PDF; PDF.js reads the letterhead and old quotes; Tesseract.js reads the text in screenshots on the phone. Serwist handles the PWA side, Web Push the notifications, Sentry the errors. Tests with Vitest and Playwright.

The work went project by project: first the full flow, then the PDF that never changes once issued, the letterhead as background, structure and tone taken from old quotes, and finally fonts.

Result

MastroPreventivo is online and the whole flow works: sign-in, company setup, new quote, review, PDF, sending and the client's reply.

The video shows a quote being made from start to finish, on the real app, with real AI answers that weren't prepared in advance. That quote took 3 AI calls, and each answer came back in under 8 seconds.

The screens

Here's MastroPreventivo on a phone: what it does, how it learns from the tradesperson's quotes, before and after on the same letterhead, and the path from voice to prices. The company, client and prices are made up for the example. Scroll to see them all, tap an image to enlarge it.

  • MastroPreventivo image on a dark background: the title "Tu parli, l'AI scrive il preventivo." (You talk, the AI writes the quote), four highlights (it learns from your letterhead and old quotes, you describe the job out loud, it asks if something is missing, you confirm the prices) and a phone with AI-drafted items to check (shower tray €320, shower enclosure €480) in front of the final PDF on a sample company's letterhead.
  • Four MastroPreventivo steps, each with a title above it: two old paper quotes from a sample company, the letterhead preview with sample data, the fixed texts taken from the old quotes (payment, terms, signature, typical phrases) and the review with subject and intro written in the company's style.
  • MastroPreventivo image on a dark background: the title "Sulla tua carta, con le tue frasi." (On your letterhead, in your words), three highlights (fixed texts taken from your quotes, number and date added by the app, only what you confirm counts in the total) and two sheets side by side on the same letterhead: an old quote for a boiler and the new one for a bathroom, made with the app (total €2,900).
  • Four MastroPreventivo screens, each with a title above it: voice recording for a new quote, the AI's questions to fill in missing details, the AI-drafted items to check, and an item without a price marked "Prezzo da compilare" (price to fill in), next to labour with the price entered (€230 per day).

Video music: "Wallpaper" by Kevin MacLeod (incompetech.com), licensed under CC BY 4.0. The track was shortened and faded.

Stack

  • Next.js
  • React
  • TypeScript
  • Supabase
  • Tailwind CSS
  • shadcn/ui
  • Base UI
  • Zod
  • React Hook Form
  • React-PDF
  • PDF.js
  • Tesseract.js
  • Serwist
  • Web Push
  • Framer Motion
  • Sentry
  • Vitest
  • Playwright

Need something similar?

Get in touch