Portfolio Dinamico - Hersel.it
Portfolio personale sviluppato con Flask e MariaDB, con gestione dinamica dei contenuti tramite API REST.
🚀 Caratteristiche
- Framework: Flask (migrato da Quart per semplificare l'architettura)
- Database: MariaDB per la gestione dinamica dei contenuti
- ORM: SQLAlchemy con Flask-SQLAlchemy
- API REST: Endpoint per gestire progetti, competenze, profilo e social links
- Docker: Configurazione completa con Docker Compose
- Responsive: Design responsive con Bootstrap 5
📋 Requisiti
- Python 3.10 o superiore
- MariaDB/MySQL 11.2 o superiore (o usa Docker Compose)
- Pip (gestore dei pacchetti Python)
🔧 Installazione Locale
1. Clona il repository
git clone https://github.com/BluLupo/hersel.it.git
cd hersel.it
2. Crea e attiva ambiente virtuale
python3 -m venv env
source env/bin/activate # Linux/Mac
# oppure
env\Scripts\activate # Windows
3. Installa le dipendenze
pip install -r requirements.txt
4. Configura le variabili d'ambiente
cp .env.example .env
# Modifica .env con le tue credenziali del database
5. Configura MariaDB
Crea il database e l'utente:
CREATE DATABASE portfolio_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'portfolio_user'@'localhost' IDENTIFIED BY 'portfolio_password';
GRANT ALL PRIVILEGES ON portfolio_db.* TO 'portfolio_user'@'localhost';
FLUSH PRIVILEGES;
6. Inizializza il database
python init_db.py
7. Avvia l'applicazione
# Modalità sviluppo
python app.py
# Modalità produzione con Gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
🐳 Installazione con Docker
Requisiti
- Docker
- Docker Compose
Avvio rapido
docker-compose up -d
L'applicazione sarà disponibile su http://localhost:5000
Docker Compose avvierà automaticamente:
- Container MariaDB sulla porta 3306
- Container Flask sulla porta 5000
- Inizializzazione automatica del database
📁 Struttura del Progetto
hersel.it/
├── app.py # Applicazione Flask principale
├── config.py # Configurazione
├── models.py # Modelli SQLAlchemy
├── init_db.py # Script inizializzazione database
├── requirements.txt # Dipendenze Python
├── docker-compose.yml # Configurazione Docker
├── .env.example # Esempio variabili d'ambiente
├── routes/
│ ├── home.py # Route homepage
│ └── api.py # API REST endpoints
├── templates/ # Template Jinja2
│ ├── index.html
│ ├── head.html
│ ├── navbar.html
│ └── content/
│ ├── about.html
│ ├── project.html
│ └── links.html
└── static/ # File statici (CSS, JS, immagini)
🔌 API REST Endpoints
Profile
GET /api/profile- Ottieni informazioni profiloPUT /api/profile- Aggiorna profilo
Skills
GET /api/skills- Lista competenzePOST /api/skills- Crea competenzaPUT /api/skills/<id>- Aggiorna competenzaDELETE /api/skills/<id>- Elimina competenza
Projects
GET /api/projects- Lista progettiPOST /api/projects- Crea progettoPUT /api/projects/<id>- Aggiorna progettoDELETE /api/projects/<id>- Elimina progetto
Social Links
GET /api/social-links- Lista link socialPOST /api/social-links- Crea link socialPUT /api/social-links/<id>- Aggiorna link socialDELETE /api/social-links/<id>- Elimina link social
📊 Schema Database
Tabelle
profile- Informazioni personaliskills- Competenze tecnologicheprojects- Portfolio progettiproject_tags- Tag/badge progettisocial_links- Link profili social
🛠️ Sviluppo
Aggiungere un nuovo progetto via API
curl -X POST http://localhost:5000/api/projects \
-H "Content-Type: application/json" \
-d '{
"title": "Nuovo Progetto",
"description": "Descrizione del progetto",
"image_url": "img/project.webp",
"github_url": "https://github.com/username/repo",
"tags": [
{"name": "Python", "color_class": "bg-primary"},
{"name": "Flask", "color_class": "bg-info"}
]
}'
📝 Licenza
Copyright Hersel Giannella
🔗 Link Utili
- Portfolio Live: https://hersel.it
- GitHub: https://github.com/BluLupo
- LinkedIn: https://linkedin.com/in/hersel
Description
Languages
HTML
58.3%
Python
38.3%
JavaScript
1.7%
CSS
1.3%
Dockerfile
0.4%