logo

Task Manager Fullstack

Un task manager costruito con tecnologie all'avanguardia per una fluida esperienza utente 🚀

ViteJSExpressJSSQLiteTanstack Query & Router
post_image
12/10/2024
0
65
Codice Sorgente
Live Demo

⚠️ Nota che il Backend è hostato su render.com. Questo vuol dire che potrebbero servire alcuni secondi prima di tornare online per limitazione del tier gratuito!

La Storia

Il percorso di ogni sviluppatore include la creazione di un task manager - è quasi un rito di passaggio. Ma invece di creare un'altra semplice lista di cose da fare, ho visto l'opportunità di esplorare le più recenti tecnologie risolvendo un problema comune. L'obiettivo? Creare un task manager che non sia solo funzionale, ma che serva anche come campo di prova per le moderne tecnologie web e le migliori pratiche.

Cosa Lo Rende Speciale

Immagina un task manager reattivo quanto i tuoi pensieri. Aggiungi un'attività? È già lì. Aggiorni il suo stato? L'interfaccia si aggiorna senza interruzioni. Elimini qualcosa? Sparisce senza ricaricare la pagina. Tutta questa magia avviene grazie alla potenza della sincronizzazione in tempo reale di TanStack Query, facendo sembrare l'app più un'applicazione nativa che una pagina web. ✨

L'Arte Tecnica

Funzionalità Principali

  • 🔄 Aggiornamenti in Tempo Reale: Sincronizzazione istantanea dell'interfaccia utilizzando TanStack Query
  • 🎯 Routing Pulito: Navigazione fluida con TanStack Router
  • 🎨 UI Moderna: Design elegante con Tailwind CSS
  • 🔧 Backend Robusto: API Express.js con persistenza SQLite
  • 🚀 Velocità Fulminea: Costruito con Vite per un'esperienza di sviluppo ottimale

Il Segreto del Successo

Magia Frontend:

  • Vite per uno sviluppo ultraveloce
  • TanStack Query per il recupero e la memorizzazione efficiente dei dati
  • TanStack Router per un routing type-safe
  • Tailwind CSS per uno stile responsivo
  • TypeScript per un'esperienza di sviluppo migliorata

Potenza Backend:

  • Express.js per un'API robusta
  • SQLite per un'archiviazione dati affidabile
  • Middleware personalizzato per la gestione degli errori
  • Principi di architettura RESTful

Sfide e Soluzioni

Il Puzzle della Gestione dello Stato 🧩

  • Sfida: Mantenere la sincronizzazione tra lo stato del server e l'interfaccia utente
  • Soluzione: Implementato il potente sistema di caching e invalidazione di TanStack Query
  • Risultato: Aggiornamenti in tempo reale senza interruzioni con modifiche ottimistiche dell'interfaccia

L'Architettura TypeScript 🎯

  • Sfida: Mantenere la sicurezza dei tipi su tutto lo stack
  • Soluzione: Create definizioni di tipo condivise e interfacce robuste
  • Risultato: Esperienza di sviluppo migliorata con sicurezza dei tipi full-stack

Approfondimento Tecnico

Architettura Frontend

Esempio di task mutation usando TanStack Query

Code
Copiato!
const addTask = useMutation({
  mutationFn: (newTask: Task) => {
    return axios.post('/api/tasks', newTask)
  },
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ['tasks'] })
  }
})

Struttura Backend

Task route handler con un corretto error handling

Code
Copiato!
router.post('/tasks', async (req: Request, res: Response) => {
  try {
    const task = await db.create(req.body)
    res.status(201).json(task)
  } catch (error) {
    handleError(error, res)
  }
})

Dietro le Quinte

Questo progetto è stato un esercizio di bilanciamento tra le moderne pratiche di sviluppo e la funzionalità pratica. Ogni decisione tecnica, dalla scelta di Vite per il sistema di build all'implementazione di TanStack Query per la gestione dello stato, è stata presa considerando sia l'esperienza dello sviluppatore che le prestazioni per l'utente finale.

Prossimi Passi

  • Categorie e tag per le attività
  • Riordinamento delle attività tramite drag-and-drop