AutoPrintEmail
Stampa da sola le email degli ordini appena arrivano
Incasso mensile: 410 USD (fonte indicata nella scheda)
Cosa fa
Stampa automaticamente ordini, fatture e fax che arrivano per email, sulla stampante scelta. Utile a ristoranti e negozi che ricevono ordini online.
Come guadagna
Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.
Rendilo tuo
- Per pizzerie e ristoranti che ricevono ordini da più piattaforme.
- Stampa in formato scontrino, sulle stampanti termiche delle cucine.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Stampa Ordini": stampa da sola, sulla stampante del locale, gli ordini e le fatture che arrivano per email (da Just Eat, dal sito, dai fornitori), senza dover aprire la posta. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale per ristoranti e negozi con come funziona e il prezzo
2. Registrazione e installazione del piccolo programma di stampa (PrintNode) sul computer del locale
3. Regole: quali email stampare (mittente, oggetto) e su quale stampante
4. Registro delle stampe con lo stato
5. Impostazioni: copie, formato scontrino o A4
Stile: pratico da cucina: sfondo bianco, arancione #EA580C, grigio scuro #1F2937, verde per le stampe riuscite, carattere "Inter", pochi pulsanti grandi. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "caselle": l'indirizzo email speciale assegnato al locale (es. pizzeria-rossi@stampa.tuodominio.it), collegato all'utente
- "regole": mittente o parola nell'oggetto, stampante, numero di copie, solo allegati PDF o anche il testo
- "stampe": email ricevuta, regola applicata, stato (in coda, stampata, errore), data
Regole di sicurezza obbligatorie:
- ogni locale vede solo le sue caselle, regole e stampe
- le email le riceve solo la Edge Function
- la chiave di PrintNode sta solo nei segreti
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. Dall'email alla stampante
Ogni locale riceve un indirizzo email speciale. Il titolare imposta nella sua posta (o su Just Eat, Deliveroo, il sito) l'inoltro automatico degli ordini a quell'indirizzo.
Le email arrivano a un servizio di ricezione email (inbound) che le passa alla Edge Function "ricevi". La funzione trova il locale dall'indirizzo, controlla le regole (es. "da: ordini@justeat.it"), e manda in stampa gli allegati PDF o il testo convertito in PDF, tramite l'API di PrintNode (codice nei Dettagli tecnici). PrintNode è un piccolo programma installato sul computer del locale, collegato alla stampante.
Ogni stampa compare nel registro; se la stampante è spenta o finisce la carta, il titolare riceve un avviso.
4. Regole e registro
Pagina regole: per ogni tipo di email si sceglie stampante, copie (es. 2: una per la cucina e una per il banco) e formato (scontrino 80 mm o A4). Pulsante "Stampa di prova".
Registro delle stampe degli ultimi 30 giorni con stato e pulsante "Ristampa". Le email si cancellano dopo 30 giorni.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 9,90 € al mese. Gratis l'utente ha: 50 stampe al mese e una stampante. Con il piano Pro sblocca: stampe illimitate, più stampanti, regole multiple e copie.
A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Stampa: manda 5 email di prova di seguito e spegni la stampante durante la terza: le altre devono stampare, la terza deve risultare in errore e ristampabile.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Mandare in stampa con PrintNode
Invia un PDF alla stampante del locale tramite PrintNode. La chiave dell'account PrintNode resta nei segreti della Edge Function.
import { encodeBase64 } from "jsr:@std/encoding/base64";
export async function stampa(
stampanteId: number, titolo: string, pdf: Uint8Array, copie = 1,
): Promise<number> {
const chiave = Deno.env.get("PRINTNODE_API_KEY")!;
const r = await fetch("https://api.printnode.com/printjobs", {
method: "POST",
headers: {
Authorization: "Basic " + btoa(chiave + ":"), // chiave come nome utente, password vuota
"Content-Type": "application/json",
},
body: JSON.stringify({
printerId: stampanteId,
title: titolo,
contentType: "pdf_base64",
content: encodeBase64(pdf),
source: "Stampa Ordini",
qty: copie,
}),
});
if (!r.ok) throw new Error("PrintNode ha risposto " + r.status + ": " + (await r.text()));
return Number(await r.text()); // id del lavoro di stampa
}Regole e registro delle stampe
Le regole di ogni locale e il registro; la funzione trova la prima regola che corrisponde all'email arrivata.
create table regole (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
mittente_contiene text,
oggetto_contiene text,
stampante_id bigint not null,
copie int not null default 1 check (copie between 1 and 5),
formato text not null default 'scontrino' check (formato in ('scontrino', 'a4')),
priorita int not null default 0
);
create table stampe (
id bigint generated always as identity primary key,
utente_id uuid not null references auth.users(id) on delete cascade,
mittente text not null,
oggetto text not null,
regola_id uuid references regole(id) on delete set null,
stato text not null default 'in_coda' check (stato in ('in_coda', 'stampata', 'errore')),
errore text,
ricevuta_il timestamptz not null default now()
);
alter table regole enable row level security;
create policy "le mie righe" on regole
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table stampe enable row level security;
create policy "le mie righe" on stampe
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
-- Prima regola che corrisponde (chiamata dalla Edge Function)
select * from regole
where utente_id = 'ID-LOCALE'
and (mittente_contiene is null or 'ordini@justeat.it' ilike '%' || mittente_contiene || '%')
and (oggetto_contiene is null or 'Nuovo ordine #123' ilike '%' || oggetto_contiene || '%')
order by priorita desc
limit 1;
Pezzi comuni a tutti i progetti
Glossario
- PrintNode
- Un servizio che collega le stampanti di un computer a internet, così un sito può mandare stampe in automatico.
- Email in arrivo (inbound)
- Un servizio che riceve email a un indirizzo e le inoltra al tuo programma come dati.