Shop Online

Vai al sito

Un finto shop online costruito in React, con React Router per gestire le pagine, dal lato front end e in Node.js dal lato back end.

Funzionalità dello shop:

Grafica e UI

Ho deciso di usare dei colori scuri come colori principali per dare un taglio moderno a un sito che tratta di giochi da tavolo, ricordando i colori di siti di videogiochi come Steam. Come accent color ho scelto l'arancio che spicca e si intona bene ai toni di grigio e nero dei colori principali.

Schermata dell'homepage dello shop su desktop
Come appare l'homepage su desktop
Schermata dell'homepage dello shop su mobile
Su mobile si scorrono i prodotti e le categorie nella barra di navigazione in orizzontale con uno swipe

Nell'header ho scelto di mettere in evidenza la barra di ricerca dei prodotti in modo simile ad Amazon. Nell'homepage ho preferito dare spazio ai singoli prodotti divisi per categorie rispetto all'uso di carousel per mostrare i prodotti in rilievo, poichè risultano essere elementi poco accessibili e in generale non molto usati dagli utenti.

Schermata di una pagina del sito
Schermata di un singolo prodotto
Schermata del carrello
Schermata del carrello

Dettagli tecnici

Vorrei soffermarmi in particolare su quattro aspetti:

Tutti gestiti senza l'uso di particolari package.

Ho scelto di far gestire il carrello con due diversi stati, uno per gestire i prodotti e un altro per la quantità dei vari prodotti inseriti nel carrello. Ho preferito separare in due diversi stati per evitare di modificare i dati dei prodotti.

Dato che il carrello e le funzioni per gestire le quantità sono condivise da diversi componenti (header, pagina del singolo prodotto, pagina del carrello), ho deciso di usare un Context per rendere più semplice la condivisione di stati e funzioni.

Per la validazione dei campi di testo ho voluto provare un approccio diverso dal solito, detto Reward Early, Punish Late. Con questo pattern si avvisa l'utente dell'errore quando lascia l'input, ma si ha un feedback istantaneo quando l'utente corregge l'errore.

Per gestire in modo accessibile la navigazione della gallery sono stati implementati sia la navigazione tramite la tastiera (frecce sinistra e destra, tasto esc per uscire dalla finestra), sia la navigazione tramite il tasto tab. In questo caso ho seguito le linee guida del W3C che consiglia di implementare la navigazione con tab nella sola finestra, in modo tale da evitare di avere il cursore intrappolato nella pagina sottostante non visibile.

Viene mostrato il messaggio d'errore quando si abbandona il campo ma quando si corregge il messaggio sparisce all'istante
Il cursore non supera i confini della finestra della gallery

Per quanto riguarda l'API ho cercato di strutturarla come una REST API, andando a definire le varie route per accedere ai prodotti nell'homepage, nelle pagine singole e nella ricerca, facendo attenzione a gestire correttamente gli errori in caso di dati inesistenti. Nella parte front end ho utilizzato la funzione useLoaderData di React Router per accedere ai dati del back end. I dati dei prodotti sono salvati in un database MySQL.

Cosa ho imparato da questo progetto

Da questo progetto ho imparato principalmente a: