All projects

Independent product · This website · 2026

BabakAI.Dev — Personal Portfolio

I built this bilingual portfolio with React, Next.js and TypeScript, and defined its Amazon S3 and CloudFront infrastructure with AWS CDK.

LiveDesigner and developer

Screenshots

The home page: who I am, availability and featured work on one screen.
Every project, filterable by type and topic, each with an honest status.
Search with Ctrl/⌘ K — accent-insensitive, in both languages.
A case study: the problem, what I built, the architecture and an honest scope.
Image 1 of 4
Home page of this site in the dark theme

The home page: who I am, availability and featured work on one screen.

The problem

A CV is a list of claims. An employer should be able to see the work behind each one — in their own language, on any device — and find a skill in seconds.

What I built

  • A statically exported Next.js 16 and React 19 site in English and Turkish: every page is pre-rendered HTML, and the Turkish dictionary is typed against the English one, so a missing translation is a compile error.
  • Site-wide search (Ctrl/⌘ K) across projects, skills and roles that ignores accents, light and dark themes, and a language switch that keeps the current page.
  • PDF CVs in both languages, printed from the CV page with Playwright at build time, so the PDF can never drift from the site.
  • Build-time checks: a privacy rule over every page, every internal link and anchor, and the SEO tags (canonical address, hreflang, structured data).
  • Tests in CI: Vitest unit tests, Playwright end-to-end tests on desktop and phone, and axe-core accessibility checks in both themes.
  • AWS infrastructure as code with AWS CDK: a private S3 bucket behind CloudFront (Origin Access Control, HTTP/3, security headers), the certificate and DNS records, an edge function for the language redirect, and a deploy role GitHub Actions assumes through OpenID Connect — no stored keys.
  • I deployed the site to AWS using GitHub Actions; the workflow runs every check again before it publishes.

Architecture

    • GitHub Actions

      lint · tests · build · PDF CVs · checks

    • Amazon S3 (private)

      uploaded with an OIDC role, no stored keys

    • Amazon CloudFront

      HTTP/3 · security headers · edge function for language and paths

    • Visitor

      English or Turkish, desktop or phone

Key decisions

  • Static, not a server

    Every page is HTML at build time: nothing to patch or scale, and almost nothing to pay for.

  • The PDF is printed from the page

    One source for the site and the CV, so the two can never disagree.

  • No stored cloud keys

    The deploy job gets short-lived credentials through OpenID Connect, limited to one bucket and one distribution.