Portfolio personale sviluppato con Flask e MariaDB, con gestione dinamica dei contenuti tramite API REST.
- 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
- Python 3.10 o superiore
- MariaDB/MySQL 11.2 o superiore (o usa Docker Compose)
- Pip (gestore dei pacchetti Python)
git clone https://github.com/BluLupo/hersel.it.git
cd hersel.itpython3 -m venv env
source env/bin/activate # Linux/Mac
# oppure
env\Scripts\activate # Windowspip install -r requirements.txtcp .env.example .env
# Modifica .env con le tue credenziali del databaseCrea 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;python init_db.py# ModalitΓ sviluppo
python app.py
# ModalitΓ produzione con Gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app- Docker
- Docker Compose
docker-compose up -dL'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
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)
GET /api/profile- Ottieni informazioni profiloPUT /api/profile- Aggiorna profilo
GET /api/skills- Lista competenzePOST /api/skills- Crea competenzaPUT /api/skills/<id>- Aggiorna competenzaDELETE /api/skills/<id>- Elimina competenza
GET /api/projects- Lista progettiPOST /api/projects- Crea progettoPUT /api/projects/<id>- Aggiorna progettoDELETE /api/projects/<id>- Elimina progetto
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
profile- Informazioni personaliskills- Competenze tecnologicheprojects- Portfolio progettiproject_tags- Tag/badge progettisocial_links- Link profili social
Questo progetto Γ¨ stato migrato da Quart (framework asincrono) a Flask (framework sincrono) per:
- Semplificare l'architettura
- Migliorare la compatibilitΓ con librerie esistenti
- Facilitare il deployment con server WSGI standard (Gunicorn)
- Ridurre la complessitΓ per un portfolio che non richiede operazioni async intensive
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"}
]
}'Copyright Hersel Giannella
- Portfolio Live: https://hersel.it
- GitHub: https://github.com/BluLupo
- LinkedIn: https://linkedin.com/in/hersel