diff --git a/achievements/index.html b/achievements/index.html new file mode 100755 index 0000000..4a14430 --- /dev/null +++ b/achievements/index.html @@ -0,0 +1,73 @@ + + + + + + Achievements — Anthony Vinay + + + + + +← Accueil + +
+ + +
+ +
+ + + +
+ +

Mise en place d'un serveur proxy (TODO)

+
+ +
+ +

Déploiement d'un serveur VPN WireGuard (TODO)

+
+ +
+ + + +
+ + + + + \ No newline at end of file diff --git a/assets/css/achievements.css b/assets/css/achievements.css new file mode 100644 index 0000000..40bbd91 --- /dev/null +++ b/assets/css/achievements.css @@ -0,0 +1,256 @@ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background: #fff; + font-family: 'Source Sans 3', Georgia, sans-serif; + color: #111; + font-size: 15px; + line-height: 1.6; +} + +.page { + max-width: 780px; + margin: 0 auto; + padding: 3rem 2.5rem 5rem; +} + +/* BACK BUTTON */ +.back { + position: fixed; + top: 1.2rem; + left: 1.5rem; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + text-decoration: none; + color: #aaa; + transition: color 0.15s; + z-index: 101; +} + +.back:hover { + color: #111; +} + +/* HEADER */ +.page-header { + margin-bottom: 1.5rem; +} + +.page-header h1 { + font-family: 'EB Garamond', Georgia, serif; + font-size: 2rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; + margin-bottom: 0.3rem; +} + +.page-header .subtitle { + font-family: 'EB Garamond', Georgia, serif; + font-size: 1rem; + font-style: italic; + color: #666; +} + +hr.thick { + border: none; + border-top: 2px solid #111; + margin: 1rem 0 0; +} + +/* ARTICLE LIST */ +.articles { + margin-top: 2rem; + display: flex; + flex-direction: column; +} + +.article { + padding: 2rem 0; + border-bottom: 0.5px solid #ddd; +} + +.article:last-child { + border-bottom: none; +} + +.article-meta { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 0.6rem; +} + +.article-date { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + color: #aaa; + letter-spacing: 0.06em; +} + +.article-tags { + display: flex; + gap: 0.4rem; + flex-wrap: wrap; +} + +.tag { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.65rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #888; + border: 0.5px solid #ddd; + padding: 0.15rem 0.5rem; + border-radius: 2px; +} + +.article-title { + font-family: 'EB Garamond', Georgia, serif; + font-size: 1.3rem; + font-weight: 600; + color: #111; + line-height: 1.3; + margin-bottom: 0.5rem; +} + +.todo { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.65rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #aaa; + vertical-align: middle; + margin-left: 0.6rem; +} + +.article-summary { + font-size: 0.88rem; + color: #555; + line-height: 1.7; + margin-bottom: 1rem; +} + +/* ARTICLE BODY — visible when expanded */ +.article-body { + display: none; + font-size: 0.88rem; + color: #333; + line-height: 1.8; + border-left: 2px solid #111; + padding-left: 1.25rem; + margin-bottom: 1rem; +} + +.article-body p { + margin-bottom: 0.75rem; +} + +.article-body p:last-child { + margin-bottom: 0; +} + +.article-body code { + font-family: 'Courier New', monospace; + font-size: 0.82rem; + background: #f5f5f5; + padding: 0.1rem 0.35rem; + border-radius: 2px; + color: #333; +} + +.article-body pre { + background: #f5f5f5; + padding: 1rem 1.25rem; + border-radius: 3px; + overflow-x: auto; + margin: 0.75rem 0; + font-size: 0.8rem; + font-family: 'Courier New', monospace; + line-height: 1.6; +} + +.article-body h3 { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.78rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; + margin: 1.25rem 0 0.5rem; + padding-bottom: 0.2rem; + border-bottom: 1px solid #eee; +} + +.article-body ul { + list-style: disc; + margin-left: 1.2rem; + display: flex; + flex-direction: column; + gap: 0.25rem; + margin-bottom: 0.75rem; +} + +/* READ MORE / CLOSE toggle */ +.toggle-btn { + background: none; + border: none; + cursor: pointer; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; + padding: 0; + display: flex; + align-items: center; + gap: 0.4rem; + transition: opacity 0.15s; +} + +.toggle-btn:hover { + opacity: 0.6; +} + +.toggle-arrow { + display: inline-block; + transition: transform 0.2s; + font-size: 0.8rem; +} + +.toggle-btn.open .toggle-arrow { + transform: rotate(90deg); +} + +/* FOOTER */ +.page-footer { + margin-top: 3rem; + padding-top: 0.65rem; + border-top: 0.5px solid #ccc; + display: flex; + justify-content: space-between; + font-size: 0.72rem; + color: #aaa; +} + +@media (max-width: 560px) { + .page { padding: 3rem 1.5rem 4rem; } + .article-meta { flex-direction: column; align-items: flex-start; gap: 0.4rem; } +} + +@media print { + .back { display: none; } + .article-body { display: block !important; } + .toggle-btn { display: none; } +} \ No newline at end of file diff --git a/assets/css/blog.css b/assets/css/blog.css new file mode 100644 index 0000000..f971efb --- /dev/null +++ b/assets/css/blog.css @@ -0,0 +1,103 @@ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background: #fff; + font-family: 'Source Sans 3', Georgia, sans-serif; + color: #111; + font-size: 15px; + line-height: 1.6; +} + +.page { + max-width: 780px; + margin: 0 auto; + padding: 3rem 2.5rem 5rem; +} + +.back { + position: fixed; + top: 1.2rem; + left: 1.5rem; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + text-decoration: none; + color: #aaa; + transition: color 0.15s; + z-index: 101; +} + +.back:hover { + color: #111; +} + +.page-header { + margin-bottom: 1.5rem; +} + +.page-header h1 { + font-family: 'EB Garamond', Georgia, serif; + font-size: 2rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; + margin-bottom: 0.3rem; +} + +.page-header .subtitle { + font-family: 'EB Garamond', Georgia, serif; + font-size: 1rem; + font-style: italic; + color: #666; +} + +hr.thick { + border: none; + border-top: 2px solid #111; + margin: 1rem 0 0; +} + +.placeholder { + margin-top: 3rem; + padding: 2rem 0 2rem 1.5rem; + border-left: 2px solid #111; +} + +.placeholder-status { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.18em; + text-transform: uppercase; + color: #aaa; + margin-bottom: 0.75rem; +} + +.placeholder-message { + font-family: 'EB Garamond', Georgia, serif; + font-size: 1.1rem; + font-style: italic; + color: #555; + line-height: 1.7; +} + +.page-footer { + margin-top: 3rem; + padding-top: 0.65rem; + border-top: 0.5px solid #ccc; + display: flex; + justify-content: space-between; + font-size: 0.72rem; + color: #aaa; +} + +@media (max-width: 560px) { + .page { padding: 3rem 1.5rem 4rem; } +} \ No newline at end of file diff --git a/assets/css/cv.css b/assets/css/cv.css new file mode 100755 index 0000000..8fa3f18 --- /dev/null +++ b/assets/css/cv.css @@ -0,0 +1,312 @@ +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + + body { + background: #fff; + font-family: 'Source Sans 3', Georgia, sans-serif; + color: #111; + font-size: 15px; + line-height: 1.6; + } + + .page { + max-width: 1100px; + margin: 0 auto; + padding: 3rem 3.5rem 4rem; + } + + .cv-header { + margin-bottom: 1.2rem; + } + + .cv-header h1 { + font-family: 'EB Garamond', Georgia, serif; + font-size: 2rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; + margin-bottom: 0.1rem; + } + + .cv-header .subtitle { + font-family: 'EB Garamond', Georgia, serif; + font-size: 1rem; + font-style: italic; + color: #444; + margin-bottom: 0.45rem; + } + + .cv-header .contact-line { + font-size: 0.82rem; + color: #444; + } + + .cv-header .contact-line a { + color: #444; + text-decoration: none; + } + + .cv-header .contact-line a:hover { text-decoration: underline; } + + hr.thick { + border: none; + border-top: 2px solid #111; + margin: 1rem 0 0; + } + + /* SECTION HEADING */ + .section-heading { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.82rem; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: #111; + margin: 1.8rem 0 0; + padding-bottom: 0.2rem; + border-bottom: 1.5px solid #111; + } + + /* PROFILE */ + .profile-text { + margin-top: 0.85rem; + font-size: 0.9rem; + color: #222; + line-height: 1.7; + } + + /* ENTRY ROW */ + .entry { + display: grid; + grid-template-columns: 160px 1fr; + gap: 0 1.25rem; + margin-top: 0.85rem; + align-items: start; + } + + .entry-date { + font-size: 0.82rem; + color: #555; + line-height: 1.5; + padding-top: 0.05rem; + } + + .entry-org { + font-size: 0.88rem; + font-weight: 600; + color: #111; + line-height: 1.4; + } + + .entry-title { + font-family: 'EB Garamond', Georgia, serif; + font-size: 0.98rem; + font-style: italic; + color: #111; + margin-top: 0.05rem; + line-height: 1.4; + } + + .entry-title strong { + font-style: normal; + font-weight: 600; + } + + .entry-detail { + font-size: 0.83rem; + color: #555; + margin-top: 0.1rem; + line-height: 1.5; + } + + .entry-bullets { + list-style: disc; + margin-top: 0.3rem; + margin-left: 1rem; + display: flex; + flex-direction: column; + gap: 0.18rem; + } + + .entry-bullets li { + font-size: 0.85rem; + color: #222; + line-height: 1.55; + } + + /* BADGE */ + .badge-current { + display: inline-block; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.62rem; + font-weight: 600; + letter-spacing: 0.07em; + text-transform: uppercase; + background: #111; + color: #fff; + padding: 0.08rem 0.42rem; + vertical-align: middle; + margin-left: 0.45rem; + position: relative; + top: -1px; + } + + /* SKILLS */ + .skills-grid { + margin-top: 0.85rem; + display: flex; + flex-direction: column; + gap: 0.6rem; + } + + .skill-row { + display: grid; + grid-template-columns: 160px 1fr; + gap: 0 1.25rem; + align-items: baseline; + font-size: 0.85rem; + } + + .skill-cat { + font-weight: 600; + color: #111; + font-size: 0.82rem; + } + + .skill-list { color: #333; } + + .skill-list span::after { content: ' · '; color: #aaa; } + .skill-list span:last-child::after { content: ''; } + + /* LANGUAGES */ + .lang-rows { + margin-top: 0.85rem; + display: flex; + flex-direction: column; + gap: 0.5rem; + } + + .lang-row { + display: grid; + grid-template-columns: 160px 1fr; + gap: 0 1.25rem; + font-size: 0.85rem; + align-items: baseline; + } + + .lang-name { font-weight: 600; color: #111; font-size: 0.82rem; } + .lang-level { color: #333; } + + /* FOOTER */ + .cv-footer { + margin-top: 3rem; + padding-top: 0.65rem; + border-top: 0.5px solid #ccc; + display: flex; + justify-content: space-between; + font-size: 0.72rem; + color: #aaa; + } + + /* PHOTO HEADER */ + .cv-header-inner { + display: flex; + align-items: center; + justify-content: flex-start; + gap: 2rem; + margin-bottom: 1.2rem; + } + + .cv-photo { + width: 160px; + height: 160px; + object-fit: cover; + object-position: center 15%; + border: 1px solid #ddd; + flex-shrink: 0; + border-radius: 50%; + } + + .cv-header-text { text-align: center; } + + @media (max-width: 560px) { + .entry, .skill-row, .lang-row { grid-template-columns: 1fr; } + .entry-date { color: #888; font-size: 0.78rem; } + .cv-header-inner { flex-direction: column; gap: 1rem; } + .cv-header-text { text-align: center; } + } + + + /* LANG TOGGLE */ + .lang-toggle { + position: fixed; + top: 1.2rem; + right: 1.5rem; + display: flex; + gap: 0; + border: 1px solid #bbb; + border-radius: 3px; + overflow: hidden; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + z-index: 100; + background: #fff; + } + .lang-toggle button { + border: none; + background: transparent; + padding: 0.3rem 0.65rem; + cursor: pointer; + color: #888; + letter-spacing: 0.05em; + transition: background 0.15s, color 0.15s; + } + .lang-toggle button.active { + background: #111; + color: #fff; + } + .lang-toggle button:hover:not(.active) { + background: #f5f5f5; + color: #111; + } + @media print { .lang-toggle { display: none; } } + + @media print { + .page { padding: 1.5rem 2rem; } + body { font-size: 13px; } + } + +/* BACK HOME BUTTON */ +.back-home { + position: fixed; + top: 1.2rem; + left: 1.5rem; + font-family: 'Source Sans 3', sans-serif; + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + text-decoration: none; + color: #aaa; + transition: color 0.15s; + z-index: 101; +} + +.back-home:hover { + color: #111; +} + +@media print { + .back-home { display: none; } +} + +.school-link { + color: #111; + text-decoration: none; + border-bottom: 0.5px solid #bbb; +} + +.school-link:hover { + border-bottom-color: #111; +} \ No newline at end of file diff --git a/assets/css/home.css b/assets/css/home.css new file mode 100755 index 0000000..986edb4 --- /dev/null +++ b/assets/css/home.css @@ -0,0 +1,105 @@ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background: #fff; + font-family: 'Source Sans 3', Georgia, sans-serif; + color: #111; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; +} + +.wrap { + max-width: 580px; + width: 100%; + padding: 3rem 2rem; + text-align: center; +} + +.name { + font-family: 'EB Garamond', Georgia, serif; + font-size: clamp(2.8rem, 8vw, 4.5rem); + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: #111; + line-height: 1; + margin-bottom: 0.6rem; +} + +hr.thick { + border: none; + border-top: 2px solid #111; + margin: 1rem auto; + width: 100%; +} + +.role { + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.2em; + text-transform: uppercase; + color: #888; + font-family: 'Source Sans 3', sans-serif; + margin-bottom: 3rem; +} + +nav { + display: flex; + flex-direction: column; + gap: 0; + border-top: 1.5px solid #111; + border-bottom: 1.5px solid #111; +} + +nav a { + display: grid; + grid-template-columns: 160px 1fr auto; + align-items: center; + text-decoration: none; + padding: 1rem 0.25rem; + border-bottom: 0.5px solid #ddd; + transition: background 0.15s; +} + +nav a:last-child { + border-bottom: none; +} + +nav a:hover { + background: #f9f8f6; +} + +.nav-label { + font-family: 'Source Sans 3', sans-serif; + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #111; +} + +.nav-desc { + font-family: 'EB Garamond', Georgia, serif; + font-size: 0.95rem; + font-style: italic; + color: #888; +} + +.nav-arrow { + font-size: 0.8rem; + color: #aaa; +} + +.footer { + margin-top: 2.5rem; + font-size: 0.72rem; + color: #bbb; + font-family: 'Source Sans 3', sans-serif; + letter-spacing: 0.08em; +} diff --git a/assets/js/achievements.js b/assets/js/achievements.js new file mode 100755 index 0000000..98d7901 --- /dev/null +++ b/assets/js/achievements.js @@ -0,0 +1,11 @@ +function toggleArticle(btn) { + const article = btn.closest('.article'); + const body = article.querySelector('.article-body'); + const isOpen = body.style.display === 'block'; + + body.style.display = isOpen ? 'none' : 'block'; + btn.classList.toggle('open', !isOpen); + btn.innerHTML = isOpen + ? 'Lire ' + : 'Fermer '; + } \ No newline at end of file diff --git a/assets/js/cv.js b/assets/js/cv.js new file mode 100755 index 0000000..c180289 --- /dev/null +++ b/assets/js/cv.js @@ -0,0 +1,157 @@ +const translations = { + subtitle: { fr: "Ingénieur Systèmes & Réseaux", en: "Systems & Network Engineer" }, + contact: { + fr: "La Garenne Colombes, France  ·  Permis B", + en: "La Garenne Colombes, France  ·  French Driving License B" + }, + s_profile: { fr: "Profil", en: "Profile" }, + s_exp: { fr: "Expérience professionnelle", en: "Professional Experience" }, + s_edu: { fr: "Formation", en: "Education" }, + s_proj: { fr: "Projets", en: "Projects" }, + s_skills: { fr: "Compétences & Technologies", en: "Skills & Technologies" }, + s_lang: { fr: "Langues", en: "Languages" }, + profile_text: { + fr: "Ingénieur systèmes et réseaux passionné par les technologies de l'information, avec une expérience confirmée en administration d'infrastructures critiques, supervision réseau et déploiement de solutions logicielles. Habitué à intervenir sur des environnements complexes, je m'attache à renforcer continuellement mes compétences techniques tout en apportant une vision opérationnelle fiable.", + en: "Systems and network engineer with a strong passion for information technologies, with proven experience in critical infrastructure administration, network monitoring, and software deployment. Experienced in complex environments, I continuously develop my technical expertise while delivering reliable operational insights." + }, + badge: { fr: "En poste", en: "Current" }, + // Exp 1 + org1: { fr: "Groupe Vivendi Africa / Canal+ Télécoms Africa", en: "Groupe Vivendi Africa / Canal+ Télécoms Africa" }, + title1: { fr: "Ingénieur Systèmes et Stockage", en: "Systems & Storage Engineer" }, + b1_1: { fr: "Administration de l'ensemble de l'infrastructure systèmes en France et dans les filiales africaines", en: "Administration of the entire systems infrastructure in France and African subsidiaries" }, + b1_2: { fr: "Gestion des serveurs physiques et machines virtuelles associées aux hyperviseurs", en: "Management of physical servers and virtual machines across hypervisors" }, + b1_3: { fr: "Administration des systèmes Debian et FreeBSD ; gestion des solutions de stockage NetApp", en: "Administration of Debian and FreeBSD systems; management of NetApp storage solutions" }, + b1_4: { fr: "Automatisation et déploiement de configurations via Ansible et Python", en: "Automation and configuration deployment via Ansible and Python" }, + b1_5: { fr: "Supervision réseau SNMP, administration des firewalls PfSense et équipements Juniper", en: "SNMP network monitoring, PfSense firewall and Juniper equipment administration" }, + b1_6: { fr: "Support IT et maintien en condition opérationnelle des environnements critiques", en: "IT support and operational maintenance of critical environments" }, + // Exp 2 + title2: { fr: "Ingénieur Intégrateur Logiciel", en: "Software Integration Engineer" }, + b2_1: { fr: "Intégration et déploiement de solutions logicielles chez le client", en: "Integration and deployment of software solutions at client sites" }, + b2_2: { fr: "Validation — gestion et traitement des Faits Techniques", en: "Validation — management and processing of Technical Facts" }, + b2_3: { fr: "Vérification — constat technique accompagné du client", en: "Verification — technical assessment alongside the client" }, + b2_4: { fr: "Qualification — non-régression de la solution via fiches de tests", en: "Qualification — non-regression testing via test sheets" }, + // Exp 3 + title3: { fr: "Apprenti Ingénieur Appui Réseau", en: "Network Support Engineer Apprentice" }, + b3_1: { fr: "Support de niveau 2 et 3 sur les incidents réseaux", en: "Level 2 and 3 support on network incidents" }, + b3_2: { fr: "Contribution à des projets techniques et de gestion", en: "Contribution to technical and management projects" }, + b3_3: { fr: "Analyse, suivi et résolution des problématiques complexes", en: "Analysis, monitoring and resolution of complex issues" }, + // Exp 4 + title4: { fr: "Apprenti Technicien Informatique", en: "IT Technician Apprentice" }, + b4_1: { fr: "Maintenance opérationnelle des infrastructures réseaux", en: "Operational maintenance of network infrastructures" }, + b4_2: { fr: "Gestion des serveurs, postes de travail et terminaux", en: "Management of servers, workstations and terminals" }, + b4_3: { fr: "Support de niveau 2 aux distributeurs Enedis et GRDF", en: "Level 2 support for Enedis and GRDF distributors" }, + b4_4: { fr: "Suivi et mise à jour des outils associés à l'infrastructure", en: "Monitoring and updating infrastructure-related tools" }, + // Education + edu1_title: { fr: "Ingénieur Réseaux & Sécurité", en: "Network & Security Engineer" }, + edu1_detail: { fr: "Formation en alternance — Administration des systèmes, sécurité des réseaux, gestion de projets techniques", en: "Work-study program — Systems administration, network security, technical project management" }, + edu2_detail: { fr: "Mobilité académique internationale — Espagne", en: "International academic exchange — Spain" }, + edu2_title: { fr: "Erasmus Exchange Program", en: "Erasmus Exchange Program" }, + edu3_title: { fr: "Licence Professionnelle — Administration & Sécurité des Systèmes et des Réseaux", en: "Professional Degree — Systems and Network Administration & Security" }, + edu4_title: { fr: "DUT Réseaux & Télécommunications", en: "Technical Degree in Networks & Telecommunications" }, + // Projects + proj1_title: { fr: "Intégration d'une solution de supervision dans un environnement complexe", en: "Integration of a Monitoring Solution in a Complex Environment" }, + proj1_b1: { fr: "Mise en place d'un environnement sécurisé de supervision avec Zabbix et Grafana à des fins de qualification", en: "Setup of a secure monitoring environment using Zabbix and Grafana for qualification purposes" }, + proj1_b2: { fr: "Intégration, configuration et support technique de la solution", en: "Integration, configuration, and technical support of the solution" }, + proj2_title: { fr: "QualiPoste — Solution d'analyse de poste de travail", en: "QualiPoste — Workstation Analysis Solution" }, + proj2_b1: { fr: "Qualification rapide des postes de travail pour optimiser le support au centre d'appels", en: "Rapid workstation qualification to optimize call center support" }, + proj2_b2: { fr: "Encadrement d'une équipe de 3 alternants", en: "Management of a team of 3 apprentices" }, + // Skills + cat1: { fr: "Systèmes", en: "Systems" }, + cat2: { fr: "Réseaux", en: "Networks" }, + cat3: { fr: "Stockage & Virtualisation", en: "Storage & Virtualization" }, + cat4: { fr: "Supervision", en: "Monitoring" }, + cat5: { fr: "Automatisation", en: "Automation" }, + // Languages + lang1: { fr: "Français", en: "French" }, + lvl1: { fr: "Langue maternelle", en: "Native language" }, + lang2: { fr: "Anglais", en: "English" }, + lvl2: { fr: "Niveau professionnel B2 — TOEIC 910 / 990", en: "Professional level B2 — TOEIC 910 / 990" }, + // Footer + footer_updated: { fr: "Mis à jour — Mai 2026", en: "Last updated — May 2026" } +}; + +function setLang(lang) { + document.getElementById('btn-fr').classList.toggle('active', lang === 'fr'); + document.getElementById('btn-en').classList.toggle('active', lang === 'en'); + + const t = (key) => { + if (!translations[key]) { console.error('Missing key:', key); return ''; } + return translations[key][lang] || ''; + }; + + document.querySelector('.cv-header .subtitle').textContent = t('subtitle'); + document.querySelector('.contact-first').innerHTML = t('contact'); + document.querySelector('.badge-current').textContent = t('badge'); + + document.querySelectorAll('.section-heading')[0].textContent = t('s_profile'); + document.querySelectorAll('.section-heading')[1].textContent = t('s_exp'); + document.querySelectorAll('.section-heading')[2].textContent = t('s_edu'); + document.querySelectorAll('.section-heading')[3].textContent = t('s_proj'); + document.querySelectorAll('.section-heading')[4].innerHTML = t('s_skills'); + document.querySelectorAll('.section-heading')[5].textContent = t('s_lang'); + + document.querySelector('.profile-text').textContent = t('profile_text'); + + // Exp entries + const orgs = document.querySelectorAll('.entry-org'); + const titles = document.querySelectorAll('.entry-title'); + const bullets = document.querySelectorAll('.entry-bullets'); + + titles[0].textContent = t('title1'); + bullets[0].children[0].textContent = t('b1_1'); + bullets[0].children[1].textContent = t('b1_2'); + bullets[0].children[2].textContent = t('b1_3'); + bullets[0].children[3].textContent = t('b1_4'); + bullets[0].children[4].textContent = t('b1_5'); + bullets[0].children[5].textContent = t('b1_6'); + + titles[1].textContent = t('title2'); + bullets[1].children[0].textContent = t('b2_1'); + bullets[1].children[1].textContent = t('b2_2'); + bullets[1].children[2].textContent = t('b2_3'); + bullets[1].children[3].textContent = t('b2_4'); + + titles[2].textContent = t('title3'); + bullets[2].children[0].textContent = t('b3_1'); + bullets[2].children[1].textContent = t('b3_2'); + bullets[2].children[2].textContent = t('b3_3'); + + titles[3].textContent = t('title4'); + bullets[3].children[0].textContent = t('b4_1'); + bullets[3].children[1].textContent = t('b4_2'); + bullets[3].children[2].textContent = t('b4_3'); + bullets[3].children[3].textContent = t('b4_4'); + + // Education + titles[4].textContent = t('edu1_title'); + document.querySelectorAll('.entry-detail')[0].textContent = t('edu1_detail'); + titles[5].textContent = t('edu2_title'); + document.querySelectorAll('.entry-detail')[1].textContent = t('edu2_detail'); + titles[6].textContent = t('edu3_title'); + titles[7].textContent = t('edu4_title'); + + // Projects + titles[8].querySelector('strong').textContent = t('proj1_title'); + bullets[4].children[0].textContent = t('proj1_b1'); + bullets[4].children[1].textContent = t('proj1_b2'); + titles[9].querySelector('strong').textContent = t('proj2_title'); + bullets[5].children[0].textContent = t('proj2_b1'); + bullets[5].children[1].textContent = t('proj2_b2'); + + // Skills cats + const cats = document.querySelectorAll('.skill-cat'); + cats[0].textContent = t('cat1'); + cats[1].textContent = t('cat2'); + cats[2].innerHTML = t('cat3'); + cats[3].textContent = t('cat4'); + cats[4].textContent = t('cat5'); + + // Languages + document.querySelectorAll('.lang-name')[0].textContent = t('lang1'); + document.querySelectorAll('.lang-level')[0].textContent = t('lvl1'); + document.querySelectorAll('.lang-name')[1].textContent = t('lang2'); + document.querySelectorAll('.lang-level')[1].textContent = t('lvl2'); + + // Footer + document.querySelectorAll('.cv-footer span')[1].textContent = t('footer_updated'); +} \ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..4a7913f --- /dev/null +++ b/blog/index.html @@ -0,0 +1,37 @@ + + + + + + Blog — Anthony Vinay + + + + + +← Accueil + +
+ + +
+ +
+

En construction

+

+ Cette section accueillera prochainement mes carnets de voyages, expériences personnelles et autres réflexions. +

+
+ + + +
+ + + \ No newline at end of file diff --git a/home.html b/home.html new file mode 100755 index 0000000..79c5abf --- /dev/null +++ b/home.html @@ -0,0 +1,42 @@ + + + + + + Anthony Vinay + + + + +
+

Anthony Vinay

+
+

Ingénieur Systèmes & Réseaux

+ + + + +
+ + diff --git a/my-cv/index.html b/my-cv/index.html new file mode 100755 index 0000000..ff51ea1 --- /dev/null +++ b/my-cv/index.html @@ -0,0 +1,225 @@ + + + + + + Anthony Vinay — CV Académique + + + + + +
+ + +
+ +← Accueil + +
+ + +
+
+

Anthony Vinay

+

Ingénieur Systèmes & Réseaux

+

+ La Garenne Colombes, France  ·  Permis B
+ anthonyvinay@ikmail.com +  ·  + linkedin.com/in/anthony-vinay +

+
+
+
+ + +
Profil
+

+ Ingénieur systèmes et réseaux passionné par les technologies de l'information, avec une expérience confirmée en administration d'infrastructures critiques, supervision réseau et déploiement de solutions logicielles. Habitué à intervenir sur des environnements complexes, je m'attache à renforcer continuellement mes compétences techniques tout en apportant une vision opérationnelle fiable. +

+ + +
Expérience professionnelle
+ +
+ +
+
Groupe Vivendi Africa / Canal+ Télécoms Africa En poste
+
Ingénieur Systèmes et Stockage
+
    +
  • Administration de l'ensemble de l'infrastructure systèmes en France et dans les filiales africaines
  • +
  • Gestion des serveurs physiques et machines virtuelles associées aux hyperviseurs Proxmox
  • +
  • Administration des systèmes Debian et FreeBSD ; gestion des solutions de stockage NetApp
  • +
  • Automatisation et déploiement de configurations via Ansible et Python
  • +
  • Supervision réseau, administration des firewalls PfSense et équipements Juniper
  • +
  • Support IT et maintien en condition opérationnelle des environnements critiques
  • +
+
+
+ +
+ +
+
SII / Thales Six GTS France
+
Ingénieur Intégrateur Logiciel
+
    +
  • Intégration et déploiement de solutions logicielles chez le client
  • +
  • Validation — gestion et traitement des Faits Techniques
  • +
  • Vérification — constat technique accompagné du client
  • +
  • Qualification — non-régression de la solution via fiches de tests
  • +
+
+
+ +
+ +
+
Enedis
+
Apprenti Ingénieur Appui Réseau
+
    +
  • Support de niveau 2 et 3 sur les incidents réseaux
  • +
  • Contribution à des projets techniques et de gestion
  • +
  • Analyse, suivi et résolution des problématiques complexes
  • +
+
+
+ +
+ +
+
Enedis / GRDF
+
Apprenti Technicien Informatique
+
    +
  • Maintenance opérationnelle des infrastructures réseaux
  • +
  • Gestion des serveurs, postes de travail et terminaux
  • +
  • Support de niveau 2 aux distributeurs Enedis et GRDF
  • +
  • Suivi et mise à jour des outils associés à l'infrastructure
  • +
+
+
+ + +
Formation
+ +
+ +
+
ESIEE-IT
+
Ingénieur Réseaux & Sécurité
+
Formation en alternance — Administration des systèmes, sécurité des réseaux, gestion de projets techniques
+
+
+ +
+ +
+
Universidad Politécnica de Madrid
+
Erasmus Exchange Program
+
Mobilité académique internationale — Espagne
+
+
+ +
+ +
+
Université Sorbonne Paris Nord
+
Licence Professionnelle — Administration & Sécurité des Systèmes et des Réseaux
+
+
+ +
+ +
+
Université Sorbonne Paris Nord
+
DUT Réseaux & Télécommunications
+
+
+ + +
Projets
+ +
+ +
+
Intégration d'une solution de supervision dans un environnement complexe
+
    +
  • Mise en place d'un environnement sécurisé de supervision avec Zabbix et Grafana à des fins de qualification
  • +
  • Intégration, configuration et support technique de la solution
  • +
+
+
+ +
+ +
+
QualiPoste — Solution d'analyse de poste de travail
+
    +
  • Qualification rapide des postes de travail pour optimiser le support au centre d'appels
  • +
  • Encadrement d'une équipe de 3 alternants
  • +
+
+
+ + +
Compétences & Technologies
+ +
+
+
Systèmes
+
+ DebianRed HatFreeBSDWindows Server +
+
+
+
Réseaux
+
+ CiscoJuniperArubaStormshieldPfSense +
+
+
+
Stockage & Virtualisation
+
+ NetAppVMwareVirtualBoxGNS3Veeam Backup +
+
+
+
Supervision
+
+ ZabbixGrafanaSolarWindsWhatsUp GoldSuite Elastic +
+
+
+
Automatisation
+
+ AnsiblePythonBashPerlPowerShell +
+
+
+ + +
Langues
+ +
+
+
Français
+
Langue maternelle
+
+
+
Anglais
+
Niveau professionnel B2 — TOEIC 910 / 990
+
+
+ + + + +
+ + + + + \ No newline at end of file diff --git a/projects/index.html b/projects/index.html new file mode 100755 index 0000000..3a9bba9 --- /dev/null +++ b/projects/index.html @@ -0,0 +1,103 @@ + + + + + + Projets — Anthony Vinay + + + + +
+ ← Retour + +

Projets

+
+

En construction

+ +

+ Cette section présentera mes réalisations techniques.
+ Les projets seront disponibles sur Gitea prochainement. +

+ + +
+ +