Questo è il mio portfolio personale costruito con React e Vite. Un'applicazione moderna e performante che mostra i miei progetti, competenze ed esperienze.
- ⚡ Performance ottimizzata con Vite
- 🎨 Design moderno e responsive
- 🔄 Hot Module Replacement (HMR)
- 📱 Mobile-first approach
- 🎯 SEO friendly
- 🖱️ Custom cursor con switch ON/OFF persistente
- React 18.3.1
- Vite 5.4.1
- React Router DOM 6.26.2
- Redux Toolkit 2.2.7
- Bootstrap 5.3.3
- GSAP 3.12.5
- Swiper 11.1.14
- Lenis Scroll 1.0.42
- React Unicons 2.0.2
- Howler.js 2.2.4
- ESLint 9.9.0
- TypeScript
- React Redux 9.1.2
- Popper.js 2.11.8
- Node.js (versione 14.0.0 o superiore)
- npm o yarn
- Clona il repository
git clone https://github.com/tuousername/my-react-portfolio.git
cd my-react-portfolio- Installa le dipendenze
npm install
# oppure
yarn install- Avvia il server di sviluppo
npm run dev
# oppure
yarn dev- Apri http://localhost:5173 nel tuo browser
npm run dev- Avvia il server di svilupponpm run build- Compila il progetto per la produzionenpm run preview- Anteprima della build di produzionenpm run lint- Esegue il linting del codicenpm run format- Formatta il codice con Prettier
- È disponibile uno switch fisso in alto a destra per attivare/disattivare il cursore custom.
- Lo stato viene salvato in
localStoragetramite la chiavecursorEnabled. - Quando il cursore custom è attivo viene applicata la classe
html.cursor-enablede il cursore di sistema viene nascosto. - Quando è disattivo il cursore di sistema torna immediatamente visibile senza side effects.
- Su dispositivi touch/coarse pointer e con
prefers-reduced-motion: reduceil cursore custom è disabilitato di default. - Lo switch è accessibile con tastiera e screen reader (
role="switch",aria-checked,focus-visible).
- Apri il sito e verifica che lo switch compaia in alto a destra.
- Imposta switch su ON e controlla che compaia il cursore tondo animato e sparisca la freccia di sistema.
- Imposta switch su OFF e verifica ritorno immediato del cursore di sistema.
- Ricarica la pagina e controlla che lo stato resti quello scelto.
- Naviga tra
/,/3d,/project/:ide verifica persistenza e comportamento coerente. - Con emulazione touch o
prefers-reduced-motion: reduce, verifica che il custom cursor resti disattivato.
my-react-portfolio/
├── public/ # Asset statici
├── src/ # Codice sorgente
│ ├── components/ # Componenti React
│ ├── pages/ # Pagine dell'applicazione
│ ├── styles/ # File CSS/SCSS
│ ├── utils/ # Utility functions
│ └── App.tsx # Componente principale
├── index.html # Entry point HTML
└── vite.config.js # Configurazione Vite
- UI terminale:
src/components/Motivate.jsx - Endpoint API locale (dev middleware Vite):
GET /api/cat-factsinsrc/server/catFactsApi.js - Motore relevance:
src/utils/catFactsEngine.js - Fonte dati:
- locale IT:
src/data/localCatFacts.json - remota EN:
https://meowfacts.herokuapp.com/?count=120(cache in-memory 10 minuti)
- locale IT:
- Candidate retrieval:
- normalizzazione input, tokenizzazione robusta (multi-parola, punteggiatura)
- filtro lessicale + typo soft match (Levenshtein limitato) su pool lingua preferita
- Ranking:
- BM25 lightweight + segnali semantici leggeri (coseno su trigrammi + Jaccard token)
- ordinamento finale su score combinato
- Language routing:
- rilevamento lingua (
it/en) da heuristics - input italiano: priorità frasi IT; fallback traduzione lightweight in italiano se manca copertura
- input non italiano: risposta in inglese
- rilevamento lingua (
- API correctness:
- risposta compatibile con UI:
{ data: [text], lang, meta } - gestione input vuoto/lungo, rate-limit base, logging minimo
- risposta compatibile con UI:
- Sostituire ranking lightweight con embeddings + cosine nel modulo
catFactsEngine.js. - Sostituire fallback traduzione con provider esterno nel file
catFactsApi.js. - Migrare cache/rate-limit da memoria a Redis/KV mantenendo invariata la shape di risposta.
Le contribuzioni sono benvenute! Per favore, segui questi passaggi:
- Forka il progetto
- Crea un branch per la tua feature (
git checkout -b feature/AmazingFeature) - Committa le tue modifiche (
git commit -m 'Add some AmazingFeature') - Pusha al branch (
git push origin feature/AmazingFeature) - Apri una Pull Request
Questo progetto è sotto la licenza MIT. Vedi il file LICENSE per maggiori dettagli.
- Email: [foferys@gmail.com]
- LinkedIn: [https://www.linkedin.com/in/gianpiero-ferraro/]
- Portfolio: [https://gianpieroferraro.it/]
⭐️ Se ti piace questo progetto, non dimenticare di lasciare una stella!
