--- import { getCollection } from "astro:content"; import { Image } from "astro:assets"; import Layout from "../../../layouts/main.astro"; import Link from "../../../components/Link.astro"; import FeaturedRecommendation from "../../../components/code/FeaturedRecommendation.astro"; import ProjectCard from "../../../components/code/ProjectCard.astro"; import SkillBadge from "../../../components/code/SkillBadge.astro"; import logoTiqa from "../../../assets/images/logo-tiqa-blanc.png"; import skillsData from "../../../data/skills.json"; const locale = "ar"; const experiences = (await getCollection("experiences")) .filter((e) => e.data.lang === locale && !e.data.draft) .sort((a, b) => (b.data.startDate > a.data.startDate ? 1 : -1)); const recentExperiences = experiences.slice(0, 4); const projects = (await getCollection("projects")) .filter((p) => p.data.lang === locale && !p.data.draft && p.data.category === "dev" && p.data.featured) .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); const recommendations = (await getCollection("recommendations")) .filter((r) => r.data.featured) .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); const recommendationTexts = recommendations.map((rec) => ({ ...rec, text: rec.body || '', })); const topSkills = skillsData.categories.slice(0, 3); function formatMonth(dateStr: string) { const [year, month] = dateStr.split('-'); return new Date(parseInt(year), parseInt(month) - 1) .toLocaleDateString('ar-SA', { year: 'numeric', month: 'short' }); } ---

حِرَفيّ البرمجيات

مطوّر مستقل مقيم في ألبي، فرنسا. أكثر من 20 سنة في بناء البرمجيات — Craftsmanship، TDD، DDD. أرافق الفرق كمطوّر أول، أو قائد تقني، أو مدرب تقني.

المسار

← عرض الكل
{recentExperiences.map((exp) => { const isOngoing = !exp.data.endDate; const start = formatMonth(exp.data.startDate); const end = exp.data.endDate ? formatMonth(exp.data.endDate) : 'الحالي'; return (

{exp.data.role}

{exp.data.companyUrl ? ( {exp.data.company} ) : exp.data.company} {exp.data.location && ` · ${exp.data.location}`}

{start} — {end}
); })}

المشاريع

← عرض الكل
{projects.map((project) => ( ))}
{recommendationTexts.length > 0 && (

التوصيات

← عرض الكل
{recommendationTexts.map((rec) => ( ))}
)}

المهارات

← عرض الكل
{topSkills.map((category) => (

{category.name[locale as keyof typeof category.name]}

{category.skills.map((skill) => ( ))}
))}

القيم والمنهج

  • حركة Software Craftsmanship
  • الفائدة الاجتماعية للمطوّر
  • الفخر بالعمل، دون غرور
  • منهج Domain Driven Design
  • تنظيم أجايل: التكرار والتحسين المستمر

المجتمع والتدريس

أنشّط مجتمع Software Crafters Albi منذ 2018. أستاذ هندسة البرمجيات في جامعة شامبوليون في ألبي منذ 2019.

على الإنترنت

{[ { label: 'LinkedIn', href: 'https://www.linkedin.com/in/jalil' }, { label: 'Malt', href: 'https://www.malt.fr/profile/jalilarfaoui' }, { label: 'Stack Overflow', href: 'https://stackexchange.com/users/54164/jalil' }, { label: 'GitHub', href: 'https://github.com/JalilArfaoui' }, { label: 'Framagit', href: 'https://framagit.org/jalil' }, { label: 'Forge شخصية', href: 'https://forge.tiqa.fr' }, ].map((link) => ( {link.label} ))}
شعار Tiqa

SAS Tiqa
12, rue Fabre d'Églantine — 81 000 Albi, France
811 917 871 RCS Albi