commit 8be9d73db4d48ef542e3f58cda0f8c97c8d3345b Author: Namonay Date: Thu Nov 27 11:29:46 2025 +0000 Initial commit diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..b14d21d --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,26 @@ +services: + website: + container_name: website + build: ./src + labels: + - "traefik.enable=true" + - "traefik.http.routers.flask.rule=Host(`portfolio.vavaas.dev`)" + - "traefik.http.routers.flask.entrypoints=websecure" + - "traefik.http.routers.flask.tls.certresolver=myresolver" + - "traefik.http.services.flask.loadbalancer.server.port=5000" + + - "traefik.http.routers.redirect-vavaas.rule=Host(`vavaas.dev`,`www.vavaas.dev`)" + - "traefik.http.routers.redirect-vavaas.entrypoints=web,websecure" + - "traefik.http.routers.redirect-vavaas.tls.certresolver=myresolver" + - "traefik.http.routers.redirect-vavaas.middlewares=redirect-to-portfolio" + - "traefik.http.middlewares.redirect-to-portfolio.redirectregex.regex=^https?://vavaas.dev/(.*)" + - "traefik.http.middlewares.redirect-to-portfolio.redirectregex.replacement=https://portfolio.vavaas.dev/$1" + - "traefik.http.middlewares.redirect-to-portfolio.redirectregex.permanent=true" + networks: + - web + volumes: + - "./src/data:/data" + +networks: + web: + external: true diff --git a/src/Dockerfile b/src/Dockerfile new file mode 100644 index 0000000..fec0dcf --- /dev/null +++ b/src/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.11-slim + + +COPY . . + +WORKDIR /data + +RUN pip install --no-cache-dir -r /data/requirements.txt + +RUN ls +RUN pwd + +CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"] diff --git a/src/data/__pycache__/app.cpython-311.pyc b/src/data/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000..a7ea4db Binary files /dev/null and b/src/data/__pycache__/app.cpython-311.pyc differ diff --git a/src/data/app.py b/src/data/app.py new file mode 100644 index 0000000..5400068 --- /dev/null +++ b/src/data/app.py @@ -0,0 +1,15 @@ +from flask import Flask, render_template + +app = Flask(__name__) + +@app.route("/") +def home(): + return render_template("index.html", title="Accueil") + +@app.route("/projects") +def projects(): + return render_template("projects.html", title="Projets") + +@app.route("/contact") +def contact(): + return render_template("contact.html", title="Contact") diff --git a/src/data/requirements.txt b/src/data/requirements.txt new file mode 100644 index 0000000..e4a286c --- /dev/null +++ b/src/data/requirements.txt @@ -0,0 +1,2 @@ +flask +gunicorn diff --git a/src/data/static/css/style.css b/src/data/static/css/style.css new file mode 100644 index 0000000..05bd4a4 --- /dev/null +++ b/src/data/static/css/style.css @@ -0,0 +1,174 @@ +* ====================================== + Base styles +====================================== */ +:root { + --bs-body-bg: #2c2c2c; + --bs-body-color: #f8f9fa; +} +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background: #2c2c2c; /* Dark background to match navbar */ + color: #f8f9fa; /* Light text for readability */ + display: flex; + flex-direction: column; + min-height: 100vh; +} + +main { + flex: 1 0 auto; + padding: 2rem 1rem; +} + +/* ====================================== + Header / Navbar tweaks +====================================== */ +.navbar { + box-shadow: 0 2px 4px rgba(0,0,0,0.2); +} + +.navbar .nav-link { + color: #f8f9fa; /* Ensure nav links are visible */ +} + +.navbar .nav-link.active { + text-decoration: underline; + font-weight: bold; +} + +.navbar .nav-link:hover { + color: #ffc107; /* Bootstrap warning color for hover highlight */ +} + +/* ====================================== + Footer +====================================== */ +footer { + flex-shrink: 0; + background: #343a40; /* Dark gray, same tone as navbar */ + color: #f8f9fa; + border-top: 1px solid #444; +} + +footer p { + margin: 0; + font-size: 0.9rem; + display: flex; + align-items: center; + justify-content: center; +} + +footer img { + margin-left: 0.3rem; +} + +/* ====================================== + Projects page cards +====================================== */ +.projects-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; +} + +.project-card { + background: #3c3f44; /* Slightly lighter than page background */ + color: #f8f9fa; + padding: 1.5rem; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0,0,0,0.3); + transition: transform 0.2s, box-shadow 0.2s; +} + +.project-card:hover { + transform: translateY(-5px); + box-shadow: 0 6px 15px rgba(0,0,0,0.45); +} + +/* ====================================== + Links +====================================== */ +a { + color: #0d6efd; /* Bootstrap primary color */ +} + +a:hover { + text-decoration: underline; +} + +/* ====================================== + Responsive tweaks +====================================== */ +@media (max-width: 576px) { + main { + padding: 1rem; + } +} + +/* Zoom effect for profile picture */ +.profile-pic { + transition: transform 0.3s ease; +} + +.profile-pic:hover { + transform: scale(1.1); /* Zoom in slightly on hover */ +} + +/* Hero section styling */ +.hero-section { + background: linear-gradient(135deg, #1f1f1f, #2c2c2c); /* dark gradient */ + box-shadow: 0 8px 20px rgba(0,0,0,0.3); +} + +.hero-section p, .hero-section h1 { + color: #f8f9fa; /* Ensure text is readable on dark bg */ +} + +/* Profile picture hover zoom */ +.profile-pic { + transition: transform 0.3s ease; +} + +.profile-pic:hover { + transform: scale(1.1); +} + +/* Hero box animation */ +.hero-box { + opacity: 0; + transform: translateY(20px); + animation: fadeInUp 1s forwards; + animation-delay: 0.2s; +} + +/* Project box hover scale */ +.hover-scale { + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.hover-scale:hover { + transform: scale(1.03); + box-shadow: 0 10px 25px rgba(0,0,0,0.5); +} + +/* Fade-in animation */ +@keyframes fadeInUp { + to { + opacity: 1; + transform: translateY(0); + } +} +.project-row .row > div > .bg-dark { + background-color: #1c1c1c; /* slightly darker than default bg-dark */ +} +/* Alternate spacing for left/right boxes */ +.project-row .row:nth-child(even) { + flex-direction: row-reverse; +} + +.project-img { + max-height: 180px; /* adjust as you like */ + width: auto; /* keeps proportions */ + object-fit: contain; +} diff --git a/src/data/static/img/companion.png b/src/data/static/img/companion.png new file mode 100755 index 0000000..4d545bd Binary files /dev/null and b/src/data/static/img/companion.png differ diff --git a/src/data/static/img/kfs.png b/src/data/static/img/kfs.png new file mode 100755 index 0000000..31a9440 Binary files /dev/null and b/src/data/static/img/kfs.png differ diff --git a/src/data/static/img/monster.png b/src/data/static/img/monster.png new file mode 100755 index 0000000..dce0c61 Binary files /dev/null and b/src/data/static/img/monster.png differ diff --git a/src/data/static/img/override.png b/src/data/static/img/override.png new file mode 100755 index 0000000..002261b Binary files /dev/null and b/src/data/static/img/override.png differ diff --git a/src/data/static/img/profile.png b/src/data/static/img/profile.png new file mode 100755 index 0000000..b024173 Binary files /dev/null and b/src/data/static/img/profile.png differ diff --git a/src/data/static/img/profile.webp b/src/data/static/img/profile.webp new file mode 100755 index 0000000..0d8ca15 Binary files /dev/null and b/src/data/static/img/profile.webp differ diff --git a/src/data/templates/base.html b/src/data/templates/base.html new file mode 100644 index 0000000..ed619e2 --- /dev/null +++ b/src/data/templates/base.html @@ -0,0 +1,55 @@ + + + + + {{ title if title else "Portfolio" }} + + + + + + + +
+ +
+ + +
+ {% block content %}{% endblock %} +
+ + + + + + + + diff --git a/src/data/templates/contact.html b/src/data/templates/contact.html new file mode 100644 index 0000000..e1d793e --- /dev/null +++ b/src/data/templates/contact.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} +{% block content %} +

Contact

+

Tu peux me joindre à vavaas.dev@gmail.com

+{% endblock %} diff --git a/src/data/templates/index.html b/src/data/templates/index.html new file mode 100644 index 0000000..1d04d43 --- /dev/null +++ b/src/data/templates/index.html @@ -0,0 +1,93 @@ +{% extends "base.html" %} +{% block content %} + +
+ +
+
+
+

Bienvenue sur mon portfolio

+

+ Salut ! Je suis Valentin, développeur bas-niveau passionné par la cybersécurité et le DevOps. + Ici, vous pouvez découvrir mes projets et me contacter directement. +

+
+
+ Profile picture +
+
+
+ + +

Featured Projects

+ + + +
+ +{% endblock %} diff --git a/src/data/templates/projects.html b/src/data/templates/projects.html new file mode 100644 index 0000000..687b1ae --- /dev/null +++ b/src/data/templates/projects.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} +{% block content %} +

Mes Projets

+ +{% endblock %}