// Dev Notes

Il mio Blog

Articoli tecnici su sviluppo web, Firebase, PWA e intelligenza artificiale applicata al mondo reale.

Gmail API OAuth2 Netlify Functions

Via Tidio, dentro Gmail API: la casella email condivisa senza mai vedere la password

Come ho ricreato dentro un pannello interno la stessa esperienza di Tidio — leggere e rispondere a una casella email condivisa senza dare agli operatori la password reale — con Gmail API, OAuth2 lato server, Netlify Functions, RTDB e FCM. Con i bug veri: un import mancante, un commento che si chiude da solo, e un secret sbagliato di un carattere.

10 min →
Firebase Google Cloud Pricing

Spark vs Blaze: la guida ai prezzi Firebase che avrei voluto leggere prima

Spark vs Blaze spiegato senza il gergo di marketing: cosa include davvero il piano gratuito, come funziona il pay-as-you-go di Blaze, tabella prezzi per Firestore/Hosting/Storage/Auth, e la novità 2026 su Cloud Storage che richiede sempre Blaze.

9 min →
Firebase Netlify Functions Realtime Database Firestore

Chi è online sul sito, senza Tidio: presenza live e storico visitatori con Firebase RTDB e Firestore

Come ho costruito, per un sito WordPress esterno, un sistema di presenza live e storico visitatori senza usare Tidio: Firebase Realtime Database con onDisconnect, storico su Firestore con geolocalizzazione IP, e un bug CORS che in realtà era un crash sulla risposta 204.

11 min →
myPOS Netlify Functions Node.js RSA

Integrazione myPOS IPC in un checkout Netlify: firma RSA, Error Code 25 e i tranelli della documentazione

Come ho integrato myPOS IPC v1.4 in un checkout Netlify/Firebase: chiave RSA 1024-bit rifiutata da OpenSSL 3, mutual TLS incompatibile, l'algoritmo di firma corretto e l'Error Code 25 causato da un dominio .netlify.app non whitelistato.

12 min →
Firebase Security Cloud Functions Vanilla JS

Audit sicurezza Firebase PWA: XSS da innerHTML, credenziali hardcoded e Cloud Function con custom token

Come ho rimosso tre superfici di attacco da un gestionale Firebase vanilla JS: XSS via innerHTML risolto con escapeHtml ed escapeJsAttr, password Firebase in chiaro sostituita da signInWithCustomToken via Cloud Function, chiave HMAC ruotata e migrata su Secret Manager.

13 min →
Netlify Functions SOAP Firebase VPS

Etichette di spedizione automatiche: API SOAP MBE, il muro del WAF e il proxy VPS

Come ho automatizzato la generazione etichette MBE da un pannello ordini Netlify/Firebase: limite 4KB sulle env var di AWS Lambda, blocco WAF su tutti gli IP cloud mascherato da documentazione SOAP obsoleta, e la soluzione finale con un proxy Node.js su VPS dedicato.

11 min →
Netlify Functions JavaScript Firebase pdf-lib

Firma elettronica con OTP: audit trail Firestore, hash PDF e certificato con pdf-lib

Come ho costruito un sistema di conferma presa visione documenti con OTP email, hash SHA-256 del PDF via crypto.subtle, audit trail su Firestore e certificato generato con pdf-lib. Con i problemi reali: CORS su Firebase Storage, limite 4KB env var Netlify e popup blocker su window.open().

12 min →
Gemini API JavaScript AI Firebase

Assistente AI nel gestionale: Gemini API + system prompt dinamico da Firebase

Come ho integrato un pannello di chat AI in un gestionale vanilla JS: fetch alla Gemini API, system prompt costruito dai dati live Firebase (ordini, operatori, bonus), base di conoscenza aziendale statica e gestione del versioning rapido dei modelli Gemini.

8 min →
Firebase JavaScript PBKDF2 E-commerce

E-commerce custom su Firebase: catalogo, ordini atomici e admin panel

Varianti tariffarie per prodotto, admin panel protetto da PBKDF2 con Web Crypto API senza password nel codice, ordini numerati con transazione atomica anti-race-condition e CSP su Netlify con sottodomini dinamici Firebase.

10 min →
Firebase RTDB Storage Admin UI

Catalogo file dinamico nella PWA: Firebase RTDB + Storage + modal admin

Come ho sostituito un catalogo hardcoded con Firebase Realtime DB e Cloud Storage — modal di gestione visibile solo ad alcuni utenti, race condition asincrona risolta e Service Worker cache versioning.

9 min →
JavaScript Web Crypto API HMAC-SHA256 Sicurezza

Token firmato tra due PWA su Firebase diversi

Come ho passato l'identità dell'utente da PanelControl a un sito di onboarding su un Firebase separato — senza backend, usando HMAC-SHA256 con la Web Crypto API nativa del browser e un URL firmato con scadenza a 5 minuti.

8 min →
Firebase JavaScript Admin Debug

Sezione PayPOS nell'Admin: RTDB, chiavi sbagliate e il bug dell'ID dinamico

Come ho integrato una tabella lead PayPOS nel pannello Admin leggendo Firebase RTDB — tre bug in sequenza: nodo sbagliato, chiavi di mapping errate e un ID dinamico con setTimeout che mostrava silenziosamente solo metà dei record.

7 min →
Firebase JavaScript Firestore UI / UX

Centro notifiche personale su PWA: Firebase, Firestore e il drawer a categorie

Come ho costruito uno storico notifiche personale per ogni operatore — sei categorie filtrabili, 90 giorni di storico, Firestore per ferie/permessi e RTDB per chat e calendario. Con il problema del bootstrap al restore sessione.

10 min →
Firebase PWA Push Notifications Debug

Calendario condiviso su PWA: Firebase, push e il bug del restore sessione

Come ho costruito un calendario condiviso con notifiche push FCM e suono affidabile — e il bug nascosto nel flusso di auto-login che impediva a metà del team di ricevere qualsiasi avviso.

9 min →
Firebase JavaScript UI / UX

Guida app interattiva con hotspot su screenshot

Come ho costruito una guida interna per navigare gli screenshot di un'app come se fosse il telefono reale — editor visuale di hotspot, macchina a stati, Firebase Storage auth-aware e glow blu pulsante.

7 min →
Firebase Cloudinary JavaScript

Invio documenti in una chat Firebase + Cloudinary

Come ho aggiunto il supporto PDF, Word ed Excel in una chat web già funzionante con immagini e vocali — upload raw, bubble personalizzata e preview in lista.

5 min →

// Snippet & Guide

⚖️ Firebase RTDB vs Firestore: quando usare quale Confronto pratico basato sull'uso reale in produzione. Struttura, query, costi, scalabilità. Guida → PWA Checklist 2025 Checklist interattiva per PWA: manifest, service worker, HTTPS, offline, push, SEO. Guida → 🔐 HMAC-SHA256 con Web Crypto API Firma e verifica payload senza dipendenze. Zero librerie esterne. Snippet → Firebase RTDB: once vs on Lettura una tantum o listener real-time: differenze, quando usare quale, SDK v9. Snippet → 🔍 Firestore: query composta + indice Query con più where() e orderBy(): quando serve un indice composito e come crearlo. Snippet → ☁️ Cloudinary Upload Raw Carica PDF e file binari su Cloudinary senza backend, con preset unsigned. Snippet → 🔔 FCM Push Multipiattaforma Payload FCM con suono garantito su web, Android e iOS. Snippet → 🗂️ Notifiche Multi-Categoria Firestore + RTDB nello stesso drawer di notifiche, diviso per categorie. Snippet → 🤖 Gemini API Multi-turn Conversazione multi-turn e system prompt dinamico da Firebase. Snippet → 🔢 OTP via Email Generazione e verifica OTP timing-safe in una Netlify Function. Snippet → 🧾 Hash SHA-256 PDF Calcola l'hash di un PDF nel browser per audit trail, senza upload del file. Snippet → 🚀 PWA Firebase Vanilla Boilerplate Template open source Firebase + Netlify. Clona e fai deploy in 5 minuti. GitHub →

// Prossimamente

🔥

Firebase in produzione

Patterns, ottimizzazioni e lezioni imparate costruendo applicazioni reali su Firebase — dal Realtime Database a Firestore.

📱

PWA: da zero a installabile

Come trasformare un sito web in una Progressive Web App, con Service Worker, manifest e offline-first strategy.

🤖

AI integrata nel web

Integrare Gemini AI e altri LLM nelle applicazioni web: chatbot, generazione contenuti e automazioni pratiche.

Netlify Functions

Serverless senza server: come usare le Netlify Functions per backend leggeri, webhook e integrazioni API sicure.

🛒

E-commerce fai-da-te

Costruire piattaforme e-commerce senza framework pesanti: pagamenti, gestione ordini e spedizioni con API esterne.

🔍

SEO tecnico per sviluppatori

Schema.org, sitemap, Core Web Vitals e tutto quello che uno sviluppatore deve sapere per posizionarsi su Google.

Hai una domanda o vuoi approfondire un argomento?

Scrivimi ← Torna al sito