Personal portfolio of Gianluca Chiaravalloti, Full Stack Web Developer with a background in Geology, Surveying and Real Estate.
🌐 Live Portfolio: https://portfolio-gianluca-phi.vercel.app
I'm Gianluca Chiaravalloti, a Full Stack Web Developer with a background in Geology, Surveying and Real Estate.
After several years of professional experience in the technical and construction sector, I decided to combine my technical background with software development.
Today I focus on building modern web applications using technologies such as React, JavaScript, Python, Django and Django REST Framework.
My approach combines:
- 💻 Software development
- 📊 Data analysis
- 🌍 Geosciences
- 🏗️ Technical design
- 📐 Surveying
- 🧠 Problem solving
My goal is to create applications that are functional, scalable, maintainable and user-friendly.
The portfolio is a modern full-stack web application with a decoupled React frontend and Django REST backend.
- ⚛️ React 19
- ⚡ Vite
- 📦 pnpm
- 🎨 Responsive UI
- 🌍 Multilingual interface
- 🇮🇹 Italian
- 🇬🇧 English
- 🇪🇸 Spanish
- 🔄 REST API integration
- 🧩 Component-based architecture
- 📱 Responsive design
- Django 6.1
- Django REST Framework
- REST API
- Database integration
- CORS configuration
- Rate limiting
- API documentation with OpenAPI / Swagger
- Production deployment with Gunicorn
The portfolio includes an AI virtual assistant powered by Google Gemini.
The assistant can provide information about:
- Gianluca's professional profile
- Technical skills
- Education
- Certifications
- Work experience
- Development projects
- TerraQuake API
- SafeQuake Alert
- Geology and surveying background
The Gemini API key is handled exclusively on the Django backend and is never exposed in the React frontend.
The backend implements several security measures:
- Environment variables for sensitive configuration
- API key protection
- CORS configuration
- Rate limiting with
django-ratelimit - Input validation
- Maximum message length
- Authentication where required
- HTTPS in production
The AI chatbot is protected against excessive requests using rate limiting.
- ⚛️ React 19
- ⚡ Vite
- 📦 pnpm
- 🟨 JavaScript / JSX
- 🌐 HTML5
- 🎨 CSS3
- 🔄 REST API
- 🌍 i18next / React i18next
- 📊 Chart.js
- 🗺️ Leaflet
- 🐍 Python
- 🟢 Django 6.1
- 🔌 Django REST Framework
- 🔐 REST APIs
- 🛡️ django-ratelimit
- 🌐 django-cors-headers
- 📚 drf-spectacular
- 🤖 Google Gemini API
- 🚀 Gunicorn
- 🧹 WhiteNoise
The backend is designed to work with relational databases supported by Django.
Possible configurations include:
- PostgreSQL
- MySQL
- SQLite
- Git
- GitHub
- VS Code
- Linux
- Windows
- pnpm
- CI/CD
- Vercel
- Render
- Nginx
- Gunicorn
- Cloud deployment
One of the main new features of the portfolio is an AI-powered virtual assistant.
The chatbot is integrated into the React frontend and communicates with a dedicated Django REST endpoint.
Visitor
│
▼
React Chat Assistant
│
│ POST /gemini/api/v1/chat/
▼
Django REST API
│
│ Rate Limiting
▼
Google Gemini API
│
▼
AI Response
│
▼
React Chat Interface
The assistant uses a structured professional context containing information about Gianluca's:
- experience
- education
- certifications
- technical skills
- projects
- professional background
The AI is instructed to answer only using the information provided in its context and to avoid inventing professional information.
The Gemini API key is stored as a server-side environment variable:
GEMINI_API_KEY=your-api-keyIt is never included in the React application.
The portfolio supports multiple languages using i18next.
Currently available:
- 🇮🇹 Italian
- 🇬🇧 English
- 🇪🇸 Spanish
The multilingual system also covers the AI chatbot interface, including:
- Welcome message
- Buttons
- Placeholders
- Error messages
- Chat controls
- Assistant information
The language can be changed without reloading the application.
The AI chatbot uses Django rate limiting to prevent excessive requests.
Example configuration:
@ratelimit(
key="ip",
rate="5/m",
method="POST",
block=True
)
@ratelimit(
key="ip",
rate="30/d",
method="POST",
block=True
)This limits requests per IP address and helps protect the backend and external AI service from abuse.
The application follows a decoupled frontend/backend architecture.
┌─────────────────────┐
│ Visitor │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ React Frontend │
│ + Vite │
│ i18next │
└──────────┬──────────┘
│
HTTPS / REST
│
▼
┌─────────────────────┐
│ Django Backend │
│ Django REST API │
│ Rate Limiting │
└──────────┬──────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Database │ │ Google Gemini │
│ │ │ AI │
└──────────────────┘ └──────────────────┘
This architecture allows the frontend and backend to be developed and deployed independently.
Make sure you have installed:
- Node.js
- pnpm
- Python 3.12+
- Git
Check your versions:
node --version
pnpm --version
python --version
git --versionNavigate to the frontend directory:
cd frontendInstall dependencies:
pnpm installStart the development server:
pnpm devThe frontend will normally be available at:
http://localhost:5173
pnpm buildPreview the production build:
pnpm previewNavigate to the backend:
cd backendCreate a virtual environment:
python -m venv .venvActivate it:
.venv\Scripts\activatepython3 -m venv .venv
source .venv/bin/activateInstall dependencies:
pip install -r requirements.txtRun migrations:
python manage.py migrateCreate a superuser:
python manage.py createsuperuserStart Django:
python manage.py runserverThe backend will normally be available at:
http://127.0.0.1:8000/
The frontend communicates with the Django backend through REST APIs.
Example endpoints:
GET /api/projects/
GET /api/skills/
GET /api/experience/
POST /api/contact/
POST /gemini/api/v1/chat/
The API is developed using Django REST Framework.
API documentation is generated using:
- drf-spectacular
- OpenAPI
- Swagger UI
- Redoc
The Gemini API is configured only on the backend.
Create a .env file inside the Django backend:
GEMINI_API_KEY=your-gemini-api-keyThe application loads the key through an environment variable.
Example:
import os
from dotenv import load_dotenv
from google import genai
load_dotenv()
client = genai.Client(
api_key=os.environ.get("GEMINI_API_KEY")
)
⚠️ Never exposeGEMINI_API_KEYin the React frontend or commit it to GitHub.
Environment-specific configuration must be stored in environment variables.
VITE_API_URL=http://127.0.0.1:8000Production:
VITE_API_URL=https://your-backend.onrender.comDEBUG=True
SECRET_KEY=your-secret-key
ALLOWED_HOSTS=localhost,127.0.0.1
GEMINI_API_KEY=your-gemini-api-keySensitive files must never be committed.
Recommended .gitignore:
.env
.venv/
venv/
__pycache__/
*.pyc
node_modules/
dist/The application uses an independent deployment architecture.
Vercel
React + Vite
│
▼
Vercel
Render
Django + DRF
│
▼
Gunicorn
│
▼
Render
The frontend communicates with the backend through HTTPS REST APIs.
The Django backend can be started with:
python manage.py migrate && gunicorn portfolio.wsgi:application --bind 0.0.0.0:$PORT --workers 1 --timeout 120Using a single Gunicorn worker is suitable for the current portfolio workload and helps reduce memory usage on a small production instance.
TerraQuake API is an open-source seismic data platform providing earthquake information through REST APIs.
- Node.js
- Express.js
- MongoDB
- React
- REST API
- INGV data
- GitHub
- Cloud deployment
The project combines my background in Geosciences with my experience in software development and data-driven applications.
SafeQuake Alert is a seismic monitoring and alert platform developed as a Capstone Project during the Epicode Full Stack Web Developer Bootcamp.
- React
- Node.js
- Socket.io
- REST API
- JavaScript
- Vercel
The application focuses on real-time seismic data, monitoring and user interaction.
The portfolio includes:
- 🏠 Home
- 👤 About Me
- 🛠️ Skills
- 💼 Experience
- 🚀 Projects
- 🎓 Education
- 📜 Certifications
- 📬 Contact
- 🤖 AI Virtual Assistant
The portfolio is continuously evolving.
Planned improvements include:
- React frontend
- Django REST backend
- REST API integration
- Multilingual support
- AI virtual assistant
- Gemini API integration
- API rate limiting
- Environment variable management
- Vercel deployment
- Render deployment
- Responsive design
- Automated testing
- Advanced SEO optimization
- CI/CD improvements
- Docker support
- Production monitoring
- Advanced analytics
Run Django tests with:
python manage.py testRun the configured frontend test suite with the project's test command.
This project is a personal portfolio and demonstration of my development skills.
Unless otherwise specified, the source code is not licensed for commercial redistribution.
Gianluca Chiaravalloti
Full Stack Web Developer Geometra · Geologo
- 💻 GitHub: https://github.com/nagcas
- 🌐 Portfolio: https://portfolio-gianluca-phi.vercel.app
- 💼 LinkedIn: https://www.linkedin.com/in/gianluca-chiaravalloti-5694081a2/
- 📧 Email: studio.nagcas@outlook.it
⭐ If you find this project interesting, feel free to explore the repository and check out my other projects.