<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<meta name="description" content="Carte professionnelle d'Alaeddine Oulidi. Informatique, audiovisuel et médias.">
<title>Alaeddine Oulidi | Carte professionnelle</title>
<style>
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background: #f5f5f5;
color: #171717;
line-height: 1.6;
}
a { color: inherit; text-decoration: none; }
.container {
width: min(100% - 32px, 560px);
margin: 32px auto;
}
.card {
background: #fff;
border: 1px solid #e5e5e5;
border-radius: 20px;
overflow: hidden;
}
header {
text-align: center;
padding: 38px 22px 28px;
border-bottom: 1px solid #eee;
}
.monogram {
width: 76px;
height: 76px;
display: grid;
place-items: center;
margin: 0 auto 18px;
border-radius: 50%;
background: #171717;
color: white;
font-size: 25px;
font-weight: bold;
letter-spacing: 2px;
}
h1 { margin: 0; font-size: 27px; }
.role { margin: 6px 0 0; color: #666; }
.specialities { font-size: 13px; color: #777; margin-top: 15px; }
.content { padding: 24px; }
.actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 30px;
}
.btn {
display: flex;
align-items: center;
justify-content: center;
min-height: 48px;
padding: 12px;
border: 1px solid #171717;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
text-align: center;
}
.btn-dark { background: #171717; color: #fff; }
.btn-light { background: #fff; color: #171717; }
h2 {
font-size: 16px;
margin: 26px 0 12px;
}
.activity {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
padding: 17px 0;
border-bottom: 1px solid #eee;
}
.activity:last-child { border-bottom: 0; }
.activity strong { display: block; font-size: 15px; }
.activity p { margin: 3px 0; color: #777; font-size: 13px; }
.visit { font-size: 13px; font-weight: bold; white-space: nowrap; }
.contact-line {
display: block;
padding: 12px 0;
border-bottom: 1px solid #eee;
overflow-wrap: anywhere;
font-size: 14px;
}
.qr-section {
margin-top: 28px;
padding: 24px 16px;
text-align: center;
background: #fafafa;
border: 1px solid #eee;
border-radius: 14px;
}
.qr-section img {
display: block;
width: 190px;
height: 190px;
margin: 16px auto;
background: #fff;
}
.small { color: #777; font-size: 12px; }
footer { padding: 20px; text-align: center; color: #888; font-size: 12px; }
@media (max-width: 380px) {
.actions { grid-template-columns: 1fr; }
h1 { font-size: 24px; }
.content { padding: 18px; }
}
</style>
</head>
<body>
<main class="container">
<article class="card">
<header>
<div class="monogram" aria-hidden="true">AO</div>
<h1>Alaeddine Oulidi</h1>
<p class="role">Entrepreneur</p>
<p class="specialities">INFORMATIQUE · AUDIOVISUEL · MÉDIAS</p>
</header>
<div class="content">
<div class="actions">
<a class="btn btn-dark" href="tel:+212661228330">Appeler</a>
<a class="btn btn-light"
href="https://wa.me/212661228330"
target="_blank" rel="noopener">WhatsApp</a>
<a class="btn btn-light"
href="mailto:alae.oulidi@servalog.ma">Envoyer un e-mail</a>
<button class="btn btn-light" id="saveContact" type="button">
Enregistrer mon contact
</button>
</div>
<h2>Mes activités</h2>
<a class="activity" href="https://servalog.ma"
target="_blank" rel="noopener">
<div>
<strong>Servalog</strong>
<p>Informatique, réseaux et sécurité</p>
</div>
<span class="visit">Visiter ↗</span>
</a>
<a class="activity" href="https://fpstudios.ma"
target="_blank" rel="noopener">
<div>
<strong>FramePulse Studios</strong>
<p>Production audiovisuelle et cinématographique</p>
</div>
<span class="visit">Visiter ↗</span>
</a>
<a class="activity" href="https://roeyatv.ma"
target="_blank" rel="noopener">
<div>
<strong>Roeya TV</strong>
<p>Presse et médias</p>
</div>
<span class="visit">Visiter ↗</span>
</a>
<h2>Coordonnées</h2>
<a class="contact-line" href="tel:+212661228330">
Téléphone : 0661228330
</a>
<a class="contact-line" href="mailto:alae.oulidi@servalog.ma">
E-mail : alae.oulidi@servalog.ma
</a>
<a class="contact-line"
href="https://www.instagram.com/servalog.ma?vrfl=cWtnYnptN3h1OW9k&utm_source=qr"
target="_blank" rel="noopener">
Instagram : @servalog.ma ↗
</a>
<section class="qr-section">
<strong>Ma carte professionnelle</strong>
<p class="small">Scannez pour ouvrir cette carte numérique.</p>
<img id="qr" alt="QR code vers ma carte professionnelle">
<p class="small">
Le QR code nécessite une connexion Internet.
</p>
</section>
</div>
<footer>© <span id="year"></span> Alaeddine Oulidi</footer>
</article>
</main>
<script>
const cardUrl = "https://fpstudios.ma/carte/";
document.getElementById("year").textContent =
new Date().getFullYear();
// QR code fourni par un service externe.
document.getElementById("qr").src =
"https://api.qrserver.com/v1/create-qr-code/?size=240x240&margin=8&data=" +
encodeURIComponent(cardUrl);
document.getElementById("saveContact").addEventListener("click", () => {
const vcard = [
"BEGIN:VCARD",
"VERSION:3.0",
"N:Oulidi;Alaeddine;;;",
"FN:Alaeddine Oulidi",
"TITLE:Entrepreneur",
"TEL;TYPE=CELL:+212661228330",
"EMAIL;TYPE=WORK:alae.oulidi@servalog.ma",
"URL:https://servalog.ma",
"URL:https://fpstudios.ma",
"URL:https://roeyatv.ma",
"END:VCARD"
].join("\r\n") + "\r\n";
const blob = new Blob([vcard], {
type: "text/vcard;charset=utf-8"
});
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = "Alaeddine_Oulidi.vcf";
document.body.appendChild(link);
link.click();
link.remove();
setTimeout(() => URL.revokeObjectURL(url), 1000);
});
</script>
</body>
</html>