Atos مجموعة خدمات تقنية حاضرة في أكثر من سبعين بلدًا. صار تحديث موقعها العمومي مستحيلًا دون تدخل مطور، فأعادت الوكالة التي التحقت بها بناءه من الصفر. سلّمت ثلاثة من أنظمة المحتوى السبعة — وصححت في الطريق ثلاثة أخطاء في إطار العمل الخاص بالوكالة.
Atos is an international technology services group operating in more than 70 countries with close to 100,000 employees — the worldwide IT partner of the Olympic and Paralympic Games. Its corporate portal is the public front door for clients, investors, partners and candidates. Atos handed the complete rebuild to VOID Agency, and I delivered part of it as my six-month graduation project inside an eight-person agile team.
The legacy platform was a WordPress monolith with four structural failures:
hreflang tags were consistently malformed: wrong region codes, missing x-default, non-canonical URLs. English-speaking visitors were being served Arabic pages. Across 70 markets the damage compounded.The answer was a headless architecture. Drupal 10 became a pure content repository, hidden behind a private network and reachable only through filtered JSON:API endpoints — which removes the public attack surface entirely. Next.js renders the public site, pre-generating pages statically (SSG) and refreshing them in the background on every content change (ISR), with Redis absorbing the read load. The whole stack runs containerised through Docker Compose locally, Easypanel for staging and AWS in production.
All of it sits on Vactory, VOID's proprietary enterprise framework built on the Software Product Line principle, so modules can be shared across the group's three portals — Atos Groupe (already live), Atos (this project) and Eviden (next).
The portal carries seven editorial content types across two families. Three were mine end to end — Case Studies, Research Reports, and Events & Webinars — from Drupal entity modelling and JSON:API normalizers through to the React components. I then audited and corrected the four modules built by the rest of the team before final delivery.
A second sprint delivered the Featured system: seven widgets letting webmasters hand-pick the priority content on any listing page, rendered as a hero card for the Insights family or an animated carousel for the Newsroom family.
Three of the portal's seven content modules, owned end to end: Case Studies (cross-linked to reports and white papers), Research Reports (gated PDF downloads through Adobe Marketo) and Events & Webinars (dynamic Speakers built on Drupal's Paragraphs API, plus a registration CTA that renders only while the event is still upcoming).
Seven widgets across two editorial families, all delegating to one shared rendering layer — a hero card for Insights, a 7-second auto-advancing carousel with progress indicators, hover-pause and swipe for Newsroom. An eighth widget would need only a config file.
Automatic regional filtering across 20 regions and full translation across 9 languages, applied to listings, detail pages and cross-content blocks so no article ever leaks outside its target market.
Audited the four modules built by teammates and fixed two classes of defect: regional filter parameters missing from JSON:API queries (content surfacing in the wrong markets) and WCAG 2.1 AA gaps in the interactive components — ARIA roles, semantic landmarks, translated slide labels, hover/touch pause on animation.
Three limitations in Vactory itself surfaced during the build. Each time the call was to fix the framework rather than work around it locally — so all three shipped into the agency's install profile and now benefit every VOID project, past and future.
return $element_defaults + $element;. PHP's array union operator keeps the left value on a key collision, so the hardcoded #default_value from the YAML always beat the one loaded from the database. The fix unsets that key from the left-hand array — but only when a saved value actually exists, so genuinely new widgets still get their defaults.
This was my first time building at genuine enterprise scale, and the lesson was that architecture is mostly about who has to live with it. Twenty regions across nine languages means every content-model decision multiplies before an editor ever sees it — and 300 people editing at once is a constraint you cannot retrofit. Working through a Product Owner rather than directly with the client taught me to argue technical choices in business terms.
The most durable takeaway came from the three framework contributions. Fixing Vactory instead of patching around it inside our own module meant reading code I had not written, finding the exact failure point, and writing something general enough for projects I will never see. That is a different discipline from making one site work, and it is the part of this project I would do again first.