Compare commits
No commits in common. "6aaf87f11a6ec5ad016afee68063145cb73af8d7" and "86b13fb6b431ece6a032c1544877ee1dd2e8b8ae" have entirely different histories.
6aaf87f11a
...
86b13fb6b4
8 changed files with 161 additions and 107 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -20,9 +20,6 @@ pnpm-debug.log*
|
|||
# images fetched from NAS
|
||||
src/assets/images/photos/
|
||||
|
||||
# editor backup files
|
||||
*~
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
// Add your javascript here
|
||||
|
||||
window.darkMode = false;
|
||||
|
||||
const stickyClasses = ["fixed", "h-14"];
|
||||
const unstickyClasses = ["absolute", "h-20"];
|
||||
const stickyClassesContainer = [
|
||||
|
|
@ -13,12 +17,32 @@ let headerElement = null;
|
|||
document.addEventListener("DOMContentLoaded", () => {
|
||||
headerElement = document.getElementById("header");
|
||||
|
||||
if (
|
||||
localStorage.getItem("dark_mode") &&
|
||||
localStorage.getItem("dark_mode") === "true"
|
||||
) {
|
||||
window.darkMode = true;
|
||||
showNight();
|
||||
} else {
|
||||
showDay();
|
||||
}
|
||||
stickyHeaderFuncionality();
|
||||
applyMenuItemClasses();
|
||||
evaluateHeaderPosition();
|
||||
mobileMenuFunctionality();
|
||||
});
|
||||
|
||||
// window.toggleDarkMode = function(){
|
||||
// document.documentElement.classList.toggle('dark');
|
||||
// if(document.documentElement.classList.contains('dark')){
|
||||
// localStorage.setItem('dark_mode', true);
|
||||
// window.darkMode = true;
|
||||
// } else {
|
||||
// window.darkMode = false;
|
||||
// localStorage.setItem('dark_mode', false);
|
||||
// }
|
||||
// }
|
||||
|
||||
window.stickyHeaderFuncionality = () => {
|
||||
window.addEventListener("scroll", () => {
|
||||
evaluateHeaderPosition();
|
||||
|
|
@ -45,6 +69,70 @@ window.evaluateHeaderPosition = () => {
|
|||
}
|
||||
};
|
||||
|
||||
document.getElementById("darkToggle").addEventListener("click", () => {
|
||||
document.documentElement.classList.add("duration-300");
|
||||
|
||||
if (document.documentElement.classList.contains("dark")) {
|
||||
localStorage.removeItem("dark_mode");
|
||||
showDay(true);
|
||||
} else {
|
||||
localStorage.setItem("dark_mode", true);
|
||||
showNight(true);
|
||||
}
|
||||
});
|
||||
|
||||
function showDay(animate) {
|
||||
document.getElementById("sun").classList.remove("setting");
|
||||
document.getElementById("moon").classList.remove("rising");
|
||||
|
||||
let timeout = 0;
|
||||
|
||||
if (animate) {
|
||||
timeout = 500;
|
||||
|
||||
document.getElementById("moon").classList.add("setting");
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
document.getElementById("dayText").classList.remove("hidden");
|
||||
document.getElementById("nightText").classList.add("hidden");
|
||||
|
||||
document.getElementById("moon").classList.add("hidden");
|
||||
document.getElementById("sun").classList.remove("hidden");
|
||||
|
||||
if (animate) {
|
||||
document.documentElement.classList.remove("dark");
|
||||
document.getElementById("sun").classList.add("rising");
|
||||
}
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
function showNight(animate) {
|
||||
document.getElementById("moon").classList.remove("setting");
|
||||
document.getElementById("sun").classList.remove("rising");
|
||||
|
||||
let timeout = 0;
|
||||
|
||||
if (animate) {
|
||||
timeout = 500;
|
||||
|
||||
document.getElementById("sun").classList.add("setting");
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
document.getElementById("nightText").classList.remove("hidden");
|
||||
document.getElementById("dayText").classList.add("hidden");
|
||||
|
||||
document.getElementById("sun").classList.add("hidden");
|
||||
document.getElementById("moon").classList.remove("hidden");
|
||||
|
||||
if (animate) {
|
||||
document.documentElement.classList.add("dark");
|
||||
document.getElementById("moon").classList.add("rising");
|
||||
}
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
window.applyMenuItemClasses = () => {
|
||||
const menuItems = document.querySelectorAll("#menu a");
|
||||
for (let i = 0; i < menuItems.length; i++) {
|
||||
|
|
@ -52,6 +140,7 @@ window.applyMenuItemClasses = () => {
|
|||
menuItems[i].classList.add("text-neutral-900", "dark:text-white");
|
||||
}
|
||||
}
|
||||
//:class="{ 'text-neutral-900 dark:text-white': window.location.pathname == '{menu.url}', 'text-neutral-700 dark:text-neutral-400': window.location.pathname != '{menu.url}' }"
|
||||
};
|
||||
|
||||
function mobileMenuFunctionality() {
|
||||
|
|
|
|||
|
|
@ -1,30 +1,16 @@
|
|||
---
|
||||
// DarkModeToggle component - cycles between auto / light / dark
|
||||
// DarkModeToggle component - toggles between light and dark mode
|
||||
---
|
||||
|
||||
<button
|
||||
id="darkModeToggle"
|
||||
type="button"
|
||||
class="flex items-center justify-center w-8 h-8 rounded-lg cursor-pointer text-neutral-600 dark:text-neutral-300 hover:text-neutral-900 dark:hover:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors"
|
||||
aria-label="Changer le thème"
|
||||
aria-label="Toggle dark mode"
|
||||
>
|
||||
<!-- Auto icon (system preference) -->
|
||||
<svg
|
||||
class="w-5 h-5 hidden"
|
||||
data-theme-icon="auto"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||||
</svg>
|
||||
<!-- Light icon (sun) -->
|
||||
<svg
|
||||
class="w-5 h-5 hidden"
|
||||
data-theme-icon="light"
|
||||
class="w-5 h-5 dark:hidden"
|
||||
id="sunIcon"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
|
|
@ -36,10 +22,9 @@
|
|||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
|
||||
></path>
|
||||
</svg>
|
||||
<!-- Dark icon (moon) -->
|
||||
<svg
|
||||
class="w-5 h-5 hidden"
|
||||
data-theme-icon="dark"
|
||||
class="hidden w-5 h-5 dark:block"
|
||||
id="moonIcon"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
|
|
@ -54,62 +39,17 @@
|
|||
</button>
|
||||
|
||||
<script>
|
||||
function getThemePreference(): 'auto' | 'light' | 'dark' {
|
||||
const stored = localStorage.getItem('theme');
|
||||
if (stored === 'light' || stored === 'dark') return stored;
|
||||
return 'auto';
|
||||
}
|
||||
|
||||
function getEffectiveDark(preference: 'auto' | 'light' | 'dark'): boolean {
|
||||
if (preference === 'dark') return true;
|
||||
if (preference === 'light') return false;
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
}
|
||||
|
||||
function applyTheme(preference: 'auto' | 'light' | 'dark') {
|
||||
const isDark = getEffectiveDark(preference);
|
||||
document.documentElement.classList.toggle('dark', isDark);
|
||||
updateIcon(preference);
|
||||
updateAriaLabel(preference);
|
||||
}
|
||||
|
||||
function updateIcon(preference: 'auto' | 'light' | 'dark') {
|
||||
document.querySelectorAll<HTMLElement>('[data-theme-icon]').forEach(icon => {
|
||||
icon.classList.toggle('hidden', icon.dataset.themeIcon !== preference);
|
||||
});
|
||||
}
|
||||
|
||||
function updateAriaLabel(preference: 'auto' | 'light' | 'dark') {
|
||||
const toggle = document.getElementById('darkModeToggle');
|
||||
const labels = { auto: 'Thème : automatique', light: 'Thème : clair', dark: 'Thème : sombre' };
|
||||
toggle?.setAttribute('aria-label', labels[preference]);
|
||||
}
|
||||
|
||||
const cycle: Record<string, 'light' | 'dark' | 'auto'> = { auto: 'light', light: 'dark', dark: 'auto' };
|
||||
|
||||
function setupDarkModeToggle() {
|
||||
const toggle = document.getElementById('darkModeToggle');
|
||||
const preference = getThemePreference();
|
||||
applyTheme(preference);
|
||||
|
||||
toggle?.addEventListener('click', () => {
|
||||
const current = getThemePreference();
|
||||
const next = cycle[current];
|
||||
if (next === 'auto') {
|
||||
localStorage.removeItem('theme');
|
||||
} else {
|
||||
localStorage.setItem('theme', next);
|
||||
}
|
||||
applyTheme(next);
|
||||
});
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
if (getThemePreference() === 'auto') {
|
||||
applyTheme('auto');
|
||||
}
|
||||
document.documentElement.classList.toggle('dark');
|
||||
const isDark = document.documentElement.classList.contains('dark');
|
||||
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
||||
});
|
||||
}
|
||||
|
||||
// Run on page load and on Astro navigation
|
||||
setupDarkModeToggle();
|
||||
document.addEventListener('astro:after-swap', setupDarkModeToggle);
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -15,8 +15,10 @@ const { title } = Astro.props;
|
|||
<!-- Used to add dark mode right away, adding here prevents any flicker -->
|
||||
<script is:inline>
|
||||
if (typeof Storage !== 'undefined') {
|
||||
var theme = localStorage.getItem('theme');
|
||||
if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
||||
if (
|
||||
localStorage.getItem('dark_mode') &&
|
||||
localStorage.getItem('dark_mode') == 'true'
|
||||
) {
|
||||
document.documentElement.classList.add('dark')
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import Layout from "../../layouts/main.astro";
|
|||
جليل عرفاوي
|
||||
</h1>
|
||||
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
||||
مطوّر • ممثل • مصوّر
|
||||
مطوّر • عاشق للمسرح • هاوي للتصوير
|
||||
</h2>
|
||||
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
||||
مرحبًا بكم في عالمي الإبداعي حيث يلتقي الكود بالفن
|
||||
|
|
@ -30,10 +30,11 @@ import Layout from "../../layouts/main.astro";
|
|||
|
||||
<div class="relative justify-end w-full mt-12 md:flex md:pr-10 md:w-1/2 md:mt-0">
|
||||
<div class="relative z-50 w-full max-w-sm mx-auto">
|
||||
<div class="absolute top-6 left-6 z-40 w-20 h-20 rounded-full bg-gradient-to-br from-blue-400 to-purple-600 animate-pulse"></div>
|
||||
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
||||
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
||||
<img
|
||||
src="/assets/images/jalil-2.jpg"
|
||||
src="/assets/images/photo.png"
|
||||
alt="جليل عرفاوي"
|
||||
loading="eager"
|
||||
decoding="auto"
|
||||
|
|
@ -46,9 +47,11 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Universe Cards Section -->
|
||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Professional Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -56,7 +59,7 @@ import Layout from "../../layouts/main.astro";
|
|||
المطوّر
|
||||
</h3>
|
||||
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
||||
شغوف بحرفة البرمجة، DDD والهندسة النظيفة. خبير في TypeScript و Node.js.
|
||||
شغوف بحرفة البرمجة، TDD والهندسة النظيفة. خبير في TypeScript و Node.js و DevOps.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
|
|
@ -72,6 +75,7 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Theater Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -79,16 +83,23 @@ import Layout from "../../layouts/main.astro";
|
|||
المسرح
|
||||
</h3>
|
||||
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
||||
مرتجل شغوف، أستكشف أيضًا المسرح المكتوب والتمثيل أمام الكاميرا.
|
||||
عاشق للمسرح ومبدع للمحتوى الفكاهي. من خشبة المسرح إلى وسائل التواصل الاجتماعي، استكشاف فن الإضحاك.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
← المسار الفني 🚧
|
||||
</span>
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
← عروضي 🚧
|
||||
</span>
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
← مدوّنة المسرح 🚧
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Photography Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -96,22 +107,25 @@ import Layout from "../../layouts/main.astro";
|
|||
التصوير
|
||||
</h3>
|
||||
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
||||
هاوي تصوير فوتوغرافي شغوف. التقاط اللحظة، ورواية قصة من خلال العدسة.
|
||||
هاوي تصوير فوتوغرافي، ألتقط اللحظات وأروي القصص من خلال العدسة.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||
← معرض الصور
|
||||
</a>
|
||||
<a href="/photo/blog" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||
← مُدوّنة الصور
|
||||
</a>
|
||||
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
← الألبومات 🚧
|
||||
</span>
|
||||
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||
← مدوّنة التصوير 🚧
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Blog Section
|
||||
<!-- Blog Section -->
|
||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
||||
|
|
@ -132,7 +146,6 @@ import Layout from "../../layouts/main.astro";
|
|||
</span>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- Contact Section -->
|
||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
||||
|
|
@ -145,19 +158,19 @@ import Layout from "../../layouts/main.astro";
|
|||
</p>
|
||||
|
||||
<div class="flex justify-center space-x-6 space-x-reverse">
|
||||
<a href="https://linkedin.com/in/jalil" target="_blank" rel="noopener noreferrer" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||
<a href="https://linkedin.com/in/jalil" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/jalilarfaoui" target="_blank" rel="noopener noreferrer" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||
<a href="https://github.com/jalilarfaoui" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="mailto:jalil@arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||
<a href="mailto:contact@jalil.arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
|
@ -165,4 +178,4 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
</Layout>
|
||||
|
|
@ -11,7 +11,7 @@ import Link from "../../components/Link.astro";
|
|||
description="حرفي في البرمجة، عاشق للمسرح، هاوي للتصوير الفوتوغرافي."
|
||||
/>
|
||||
|
||||
<img src="/assets/images/jalil.jpg" class="relative z-30 w-full my-10 rounded-xl" alt="جليل عرفاوي" />
|
||||
<img src="/assets/images/photo.png" class="relative z-30 w-full my-10 rounded-xl" alt="جليل عرفاوي" />
|
||||
|
||||
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">من أنا؟</h2>
|
||||
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import Link from "../../components/Link.astro";
|
|||
description="Code craftsman, theater enthusiast, photography lover."
|
||||
/>
|
||||
|
||||
<img src="/assets/images/jalil.jpg" class="relative z-30 w-full my-10 rounded-xl" alt="Jalil Arfaoui" />
|
||||
<img src="/assets/images/photo.png" class="relative z-30 w-full my-10 rounded-xl" alt="Jalil Arfaoui" />
|
||||
|
||||
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">Who am I?</h2>
|
||||
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
import Layout from "../../layouts/main.astro";
|
||||
---
|
||||
|
||||
<Layout title="Jalil Arfaoui - Developer • Comedian • Photographer">
|
||||
<Layout title="Jalil Arfaoui - Developer • Actor • Photographer">
|
||||
<!-- Hero Section -->
|
||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-16 px-7 md:mt-24 lg:mt-32 xl:px-0">
|
||||
<div class="flex flex-col items-center md:flex-row">
|
||||
|
|
@ -11,7 +11,7 @@ import Layout from "../../layouts/main.astro";
|
|||
Jalil Arfaoui
|
||||
</h1>
|
||||
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
||||
Developer • Comedian • Photographer
|
||||
Developer • Theater enthusiast • Photography lover
|
||||
</h2>
|
||||
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
||||
Welcome to my creative universe where code meets art
|
||||
|
|
@ -30,10 +30,11 @@ import Layout from "../../layouts/main.astro";
|
|||
|
||||
<div class="relative justify-end w-full mt-12 md:flex md:pl-10 md:w-1/2 md:mt-0">
|
||||
<div class="relative z-50 w-full max-w-sm mx-auto">
|
||||
<div class="absolute top-6 right-6 z-40 w-20 h-20 rounded-full bg-gradient-to-br from-blue-400 to-purple-600 animate-pulse"></div>
|
||||
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
||||
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
||||
<img
|
||||
src="/assets/images/jalil-2.jpg"
|
||||
src="/assets/images/photo.png"
|
||||
alt="Jalil Arfaoui"
|
||||
loading="eager"
|
||||
decoding="auto"
|
||||
|
|
@ -46,9 +47,11 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Universe Cards Section -->
|
||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Professional Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -56,7 +59,7 @@ import Layout from "../../layouts/main.astro";
|
|||
Developer
|
||||
</h3>
|
||||
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
||||
Passionate about Software Craftsmanship, DDD and Clean Architecture. TypeScript and Node.js expert.
|
||||
Passionate about Software Craftsmanship, TDD and clean architecture. TypeScript, Node.js and DevOps expert.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="Under construction">
|
||||
|
|
@ -72,6 +75,7 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Theater Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -79,16 +83,23 @@ import Layout from "../../layouts/main.astro";
|
|||
Theater
|
||||
</h3>
|
||||
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
||||
Passionate improviser, I'm also exploring written theater and on-camera acting.
|
||||
Theater enthusiast and creator of humorous content. Exploring the art of making people laugh, from stage to social media.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||
→ Artistic journey 🚧
|
||||
</span>
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||
→ My shows 🚧
|
||||
</span>
|
||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||
→ Theater blog 🚧
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Photography Universe -->
|
||||
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
||||
<div class="relative z-10">
|
||||
|
|
@ -96,22 +107,25 @@ import Layout from "../../layouts/main.astro";
|
|||
Photography
|
||||
</h3>
|
||||
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
||||
Passionate photography enthusiast. Capturing the moment, telling a story through the lens.
|
||||
Photography hobbyist capturing moments and telling stories through the lens.
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||
→ Photo portfolio
|
||||
</a>
|
||||
<a href="/photo/blog" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||
→ Photo Feed
|
||||
</a>
|
||||
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="Under construction">
|
||||
→ Galleries 🚧
|
||||
</span>
|
||||
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="Under construction">
|
||||
→ Photo blog 🚧
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Blog Section
|
||||
<!-- Blog Section -->
|
||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
||||
|
|
@ -132,7 +146,6 @@ import Layout from "../../layouts/main.astro";
|
|||
</span>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- Contact Section -->
|
||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
||||
|
|
@ -145,19 +158,19 @@ import Layout from "../../layouts/main.astro";
|
|||
</p>
|
||||
|
||||
<div class="flex justify-center space-x-6">
|
||||
<a href="https://linkedin.com/in/jalil" target="_blank" rel="noopener noreferrer" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||
<a href="https://linkedin.com/in/jalil" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/jalilarfaoui" target="_blank" rel="noopener noreferrer" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||
<a href="https://github.com/jalilarfaoui" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="mailto:jalil@arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||
<a href="mailto:contact@jalil.arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
|
@ -165,4 +178,4 @@ import Layout from "../../layouts/main.astro";
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
</Layout>
|
||||
Loading…
Add table
Reference in a new issue