Un'app web interattiva per calcolare il proprio "trauma score" attraverso un questionario autoironico basato su esperienze di vita. Progettata con un approccio mobile-first e un'interfaccia moderna.
TraumaScore รจ un'applicazione single-page che guida l'utente attraverso diverse categorie di esperienze potenzialmente traumatiche, permettendo di selezionare quelle vissute e calcolando un punteggio finale con commenti ironici personalizzati.
- ๐ฑ Mobile First: Ottimizzata per dispositivi mobili con design responsive
- ๐จ UI Moderna: Interfaccia pulita realizzata con TailwindCSS
- ๐ Multilingue: Supporto per italiano e inglese con i18next
- ๐ Punteggio Dinamico: Calcolo in tempo reale del trauma score
- ๐พ Persistenza: Salvataggio automatico delle selezioni in localStorage
- ๐ญ Commenti Ironici: Feedback personalizzato basato sul punteggio ottenuto
- ๐ Cambio Lingua: Selettore lingua in tempo reale
- React 18 + Vite - Framework e build tool
- TypeScript - Type safety
- TailwindCSS - Styling e design system
- react-i18next - Internazionalizzazione
- Firebase - Database e hosting (opzionale)
- LocalStorage - Persistenza dati lato client
- Node.js (versione 16 o superiore)
- npm o yarn
# Clona il repository
git clone <url-repository>
cd trauma-score
# Installa le dipendenze
npm install
# Avvia il server di sviluppo
npm run dev
# Build per produzione
npm run build- Benvenuto: L'utente vede una schermata di benvenuto con il titolo "TraumaScore" e un pulsante "Inizia"
- Selezione Lingua: Possibilitร di scegliere tra italiano e inglese
- Categorie Progressive: Navigazione attraverso 7 categorie di traumi:
- ๐จโ๐ฉโ๐งโ๐ฆ Famiglia & Infanzia
- ๐ Amore & Relazioni
- ๐ง Mente & Emozioni
- ๐ฅ Corpo & Salute
- โฐ๏ธ Lutti & Perdita
- ๐ผ Lavoro & Soldi
- ๐ฏ Bonus Trauma
- Selezione Interattiva: Checkbox per ogni esperienza con punteggio visibile
- Risultato Finale: Punteggio totale con commento ironico personalizzato
- Reset e Ricomincia: Possibilitร di rifare il test
Il punteggio viene calcolato sommando i punti di ogni esperienza selezionata:
- Traumi lievi: 4-7 punti
- Traumi moderati: 8-12 punti
- Traumi gravi: 15-25 punti
- Punteggio massimo teorico: 1146 punti
- 0-50: "Vita abbastanza serena" ๐
- 51-150: "Qualche botta, ma si sopravvive" ๐
- 151-300: "La vita ti ha testato parecchio" ๐ฐ
- 300+: "Meriti una medaglia al valore" ๐
trauma-score/
โโโ src/
โ โโโ components/ # Componenti React riutilizzabili
โ โ โโโ Button.tsx
โ โ โโโ LanguageSelector.tsx
โ โโโ data/ # Dati statici
โ โ โโโ traumaData.ts # Database dei traumi e categorie
โ โโโ firebase/ # Configurazione Firebase
โ โ โโโ config.ts
โ โ โโโ database.ts
โ โโโ locales/ # File di traduzione
โ โ โโโ en.json
โ โ โโโ it.json
โ โโโ types/ # Definizioni TypeScript
โ โ โโโ quiz.ts
โ โโโ utils/ # Utilitร e helper
โ โ โโโ messages.ts
โ โ โโโ translations.ts
โ โ โโโ util.ts
โ โโโ App.tsx # Componente principale
โ โโโ main.tsx # Entry point
โโโ public/ # Asset statici
โโโ README.md
- Salvataggio Automatico: Le selezioni vengono salvate automaticamente nel localStorage
- Responsive Design: Perfettamente utilizzabile su desktop, tablet e mobile
- Accessibilitร : Progettato seguendo le best practice per l'accessibilitร web
- Performance: Ottimizzato per caricamenti rapidi e fluiditร d'uso
I traumi sono definiti in src/data/traumaData.ts. Per aggiungerne di nuovi:
{
id: "nuovo-trauma",
text: "Descrizione del trauma",
points: 10,
}I messaggi personalizzati sono configurabili in src/utils/messages.ts.
L'app supporta la traduzione in piรน lingue utilizzando react-i18next.
- ๐ฎ๐น Italiano (lingua predefinita)
- ๐บ๐ธ Inglese
I file di traduzione si trovano in src/locales/:
src/locales/
โโโ it.json # Traduzioni italiane
โโโ en.json # Traduzioni inglesi
- Crea un nuovo file JSON in
src/locales/(es:fr.json) - Copia la struttura da
it.jsone traduci i testi - Registra la nuova lingua in
src/i18n/index.ts:
import frTranslations from "../locales/fr.json";
const resources = {
it: { translation: itTranslations },
en: { translation: enTranslations },
fr: { translation: frTranslations }, // Nuova lingua
};- Aggiungi l'opzione nel componente
LanguageSelector.tsx
import { useTranslation } from "react-i18next";
const { t } = useTranslation();
const welcomeTitle = t("welcome.title");useTraumaData(): Restituisce i dati dei traumi tradottiuseTraumaMessages(): Gestisce i messaggi di punteggio e partecipanti tradotti
- Fork del progetto
- Crea un branch per la tua feature (
git checkout -b feature/AmazingFeature) - Commit delle modifiche (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Apri una Pull Request
Questo progetto รจ distribuito sotto licenza MIT. Vedi LICENSE per maggiori informazioni.
Questa applicazione ha scopo puramente di intrattenimento e autoriflessione ironica. Non sostituisce in alcun modo un consulto professionale psicologico o medico. Se stai vivendo difficoltร emotive serie, ti invitiamo a rivolgerti a un professionista qualificato.