Changelog

A chronological record of every release on this site — new features, performance improvements and fixes.

20 releases · latest v3.4.0 · Sep 9, 2026 · RSS feed

v3.4.0Minor

Content Program Kicks Off — New English Blog Posts and Tag System

First wave of the 140-post blog / 50-comparison content program went live: 8 new English blog posts and a normalized blog tagging system.

  • Content program wave 1: 8 new native-English blog posts published
  • Blog tag system normalized — inconsistent/duplicate tags merged
v3.3.0Minor

Two New Interactive Blog Demos and Small Fixes

2 new interactive demos were added to blog posts (CSS/requestAnimationFrame-based, no added library weight). The English RSS feed grew to 15 articles, and a table-of-contents link bug was fixed.

  • 2 new interactive blog demos added (planner-loop, mcp-flow) — respects reduced-motion preference
  • English RSS feed expanded to 15 articles
  • Fixed a broken table-of-contents (TOC) link on blog posts
  • Reduced-motion preference handling centralized site-wide

Measured change (synthetic/lab measurement)

  • Initial-load JavaScript (article with demos ↔ article without)

    353,209 353,209 bayt

    Source: Gzipped total of the script list in HTML fetched with curl; same build, same language, one article with demos and one without · Measured:

v3.2.0Minor

English Blog Content Is Live

15 blog articles went live with native English translations, with reciprocal Turkish-English language links (hreflang). The site now serves blog content in two languages.

  • 15 blog posts published with native English translations (/en/blog/)
  • Reciprocal Turkish-English hreflang links added
  • Sitemap updated with the English article URLs

The problem behind this release

The whole blog was Turkish-only: an English-speaking reader who found an article could not read it, and untranslated URLs quietly fell through to the wrong page.

Outcome: 15 curated articles were written in English from scratch rather than machine-translated; untranslated URLs now return an honest 404 and the two languages link to each other reciprocally.

Let's talk about a similar problem

v3.1.1Patch

Fixed Incorrect Metrics in the Site Analytics Dashboard

Several calculation bugs in the admin dashboard's performance and visitor metrics were fixed — load speed, conversion rate and page metrics now reflect real data.

  • Fixed a filter bug in the Web Vitals (LCP) metric that showed an incorrect measurement
  • Fixed the conversion funnel and conversion counters to use real data
  • Fixed a mislabeled 'average time on page' field in page metrics

Measured change (synthetic/lab measurement)

  • LCP p75 as reported in the admin panel

    3,404 1,589 ms

    Source: analytics-api /export/json raw rows → the panel's own p75 computation (same raw data, before/after) · Measured:

  • LCP p75 in the daily digest e-mail

    58,594 2,439 ms

    Source: digest collectVitalsP75 output — unfiltered vs. filtered version, same day, same records · Measured:

The problem behind this release

Measurements from backgrounded tabs — some of them hours long — were never filtered out, so the panel and the daily digest reported a load time of several hours where the real figure was 1.6 seconds.

Outcome: Outliers are now dropped at the measurement layer, and the panel and the digest derive the same result from the same raw data.

Let's talk about a similar problem

v3.1.0Minor

Site Admin Panel Rebuilt — Real-Time Data and Alerts

Every module of the admin dashboard was rebuilt to run on real data: live KPIs, anomaly detection, a lead management center and an optional AI-assisted insight summary. Slack alerting was added for critical conditions.

  • Admin dashboard rebuilt across every module to run on real data
  • Live event stream and anomaly detection added
  • Lead management center added
  • Optional AI-assisted insight summary added
  • Slack notifications added for critical alerts

The problem behind this release

The admin panel had 41 pages but most cards were empty; day-to-day decisions were made by SSH-ing into the server instead of reading the dashboard.

Outcome: Six modules were wired to real data; all 39 QA scenarios passed through the panel, and routine checks no longer need an SSH session.

Let's talk about a similar problem

v3.0.1Patch

Sprint BE + BF — Header Polish and the TOP1 Changelog

The header pill was overflowing on the Turkish locale — fixed with a 1280px cap and an xl breakpoint. A magnetic conic-gradient hover was rolled out to every icon button. The changelog page was rebuilt to a top-tier standard.

  • Header pill maxWidth 1180→1280, 10 nav links now fit on one line on the TR locale
  • Magnetic hover pattern rolled out to Search/Lang/Sound/Theme buttons — 4/4 consistent
  • Changelog: scroll-driven SVG timeline, magnetic version cards, alternating split view
  • Changelog: 35 i18n keys × 8 languages = 280 translations (fully multilingual UI)
  • Changelog: filter chips (All/Major/Minor/Patch) + live search + expand/collapse
  • Schema: SoftwareApplication + 14 ReleaseNotes + ItemList for Google rich results
  • Hidden internal linking: changelog → blog/project cross-links (8 releases × 2-3 links)
  • Light/dark parity: typeColors design token, WCAG AAA contrast 7:1+
v3.0.0Major

Phase A — Apple HIG Canonical Colors + Navigation Restructure

Brand colors were pulled to the Apple HIG canonical values (#007AFF / #0A84FF). Top nav was restructured: Comparisons + GitHub + Cal.com were added, Pricing was removed. /pricing/ moved to a zero-price consulting model.

  • Apple HIG canonical brand colors: light #007AFF + dark #0A84FF (system-matched)
  • Nav restructure: Comparisons/GitHub/Cal.com added, /pricing removed from nav
  • /pricing/ full rewrite: 3 tiers (consultation only), zero listed price
  • /resume/ CV/print removed — clean single-page CV experience
  • Fixed an invisible-on-hover title bug on /blog/ — contrast corrected
  • Fixed hero background cut-off with an h-48/72 fade-out gradient
  • Site-wide ellipsis cleanup — 60+ occurrences across 8 languages
v2.6.0Minor

Quality Layers + Homepage Revamp + App Constellation

Knip + type-coverage + madge + bundle-analyzer were added. 52 dead files were removed and 14 circular dependencies were broken. The homepage projects grid became an asymmetric grid with 8 meta-filters, and App Journey became a 36-point App Constellation.

  • Knip 52→0 unused files, type-coverage 99.68%, madge 14→0 cycles
  • ESLint 2817→124 issues (errors 738→0), TypeScript errors 739→0
  • Vitest 186/186 passing, line coverage 58.43%
  • Projects page rewrite: asymmetric grid + 8 meta-filters + search + show more
  • Skills section mobile parity + years-of-experience chip added
  • App Journey: desktop 5-column layout → 36-point App Constellation with hover info cards
  • Newsletter footer went live end-to-end — fixed a Prisma client-side bug (API route + rate-limit + honeypot)
  • Added Popular Blog top-3 and Popular Comparisons sections
v2.5.0Minor

Sprint AQ-BD — Full i18n Coverage + 100/100 Lighthouse on 18 Pages

Full translation across 8 languages (1936 strings, 242 flat keys). 18 pages × desktop + mobile = 54 perfect Lighthouse scores (100/100/100). A Latin name rendered reversed in Arabic RTL — fixed with dir=ltr.

  • Get-quote 6-step wizard fully localized into Arabic (560+ strings)
  • Fixed RTL bidi rendering of trust badges on the Contact page (dir=ltr for LTR numbers)
  • About hero + Projects hero + Blog hero fully localized in 8 languages
  • CategoryFilter component + blog/projects result labels localized in 8 languages
  • Fixed a Latin-name RTL rendering bug in the hero h1 (KineticHeroTitle dir=ltr)
  • Every public page reached Accessibility 100, 4.5:1+ contrast on all combinations
  • Lighthouse: 18 pages × 3 categories × 2 viewports = 108 perfect scores
v2.4.0Minor

Motion v12 + Kinetic Hero + Nav Redesign + 200+ Blog Posts

150 files migrated from framer-motion to motion/react. New kinetic hero title (blur-stagger load + scrub parallax + magnetic character follow). Nav redesign: scroll-morph glass pill, auto-hide, magnetic links, layoutId indicator.

  • Motion v12 migration: 150 files moved from framer-motion to motion/react
  • KineticHeroTitle: blur-stagger load + scrub parallax + magnetic character follow
  • Nav: scroll-morph pill (1100→720px), blur 0→16, auto-hide on scroll down
  • MagneticNavLink: spring follow + layoutId indicator + hover glow
  • MC logo breathing animation, haptic feedback via the mobile vibrate API
  • 25 new unique blog posts (179→204), passing the 200+ target
  • Sprint AL: 345/345 sitemap URLs returning HTTP 200, 0 production console errors
v2.3.0Minor

Content Expansion — 36 Blog Posts + 30 Comparisons + Localized Counters

Blog grew from 143 to 179 posts, comparisons from 30 to 60. ASCII slug normalization, curated related posts, breadcrumb + radar chart on comparison detail pages, 5 CTAs per project page.

  • 36 new blog posts (parts 22-27), 179 total — iOS/Swift/SwiftUI ecosystem
  • 30 new comparisons (60 total), each with a radar chart + breadcrumb
  • Counter labels localized across 8 languages (TR + 7 more)
  • Slug ASCII normalization (accented Turkish characters flattened)
  • Curated related posts, previous/next navigation, 0 non-ASCII internal links
  • Comparison detail pages: radar chart rendering, Get a Quote CTA
  • Project detail pages: H1, 10+ ARIA-labeled sections, metrics, 5 CTAs
v2.2.0Minor

Sprint A-S — Data Compliance + Security + Lazy i18n + AAA Accessibility

11 vulnerabilities fixed (HMAC, timing-safe comparison, ARIA AAA, lazy i18n, WebGL frame loop). Fixed an authentication timing attack, removed a shared newsletter secret fallback, and tightened dark-mode focus specificity. Verified across 7 page types with browser testing.

  • Fixed an authentication timing attack (timingSafeEqual)
  • Removed a shared newsletter ADMIN_TOKEN_SECRET fallback
  • MegaMenu ARIA: 34+ aria attributes added, 0 axe violations
  • Lazy i18n: Turkish loads by default, 7 languages dynamically imported (~80KB saved)
  • WebGL frame loop now pauses when scrolled out of view (CPU savings)
  • WCAG AAA focus ring: 3px solid brand blue + 4px offset
  • Turkish data-protection (KVKK) compliance: disclosure notice + cookie policy + data request page
  • Closed a bundle-size CI gate false-pass — now measures the real delta
v2.1.0Minor

Visual Quality Sprint

Hero split layout with a 3D MC monogram, Lenis smooth scroll, AnimatePresence page transitions, and a magnetic custom cursor (later removed). 49 new AI-focused blog posts + 30 new projects + a hidden retro arcade page.

  • Hero split layout + 3D cursor-reactive MC monogram
  • Lenis smooth scroll + AnimatePresence page transitions
  • CSS-only iPhone device mockup
  • Preloader curtain-reveal animation
  • Marquee + WaveDivider components
  • 49 new AI-focused blog posts (94→143)
  • 30 new projects (21→51)
  • Hidden retro arcade page (8 games)
  • Bento-grid Uses page + 30-day uptime counter
  • Newsletter subscription (Resend integration)
v2.0.0Major

Full Redesign — Next.js 16 + Tailwind v4

Upgraded to Next.js 16 + React 19 + Tailwind v4. Added 8-language support (client-side i18n), kinetic typography, a light/dark theme system, and full SEO with structured data.

  • Migrated to Next.js 16 + React 19
  • Upgraded to Tailwind CSS v4 (@theme + custom-variant)
  • Added 8-language support (TR/EN/DE/ES/FR/AR/ZH/JA)
  • Kinetic typography animations
  • iPhone mockup component
  • Light/dark theme system
  • Full SEO with structured data (JSON-LD)
v1.5.0Minor

Animation Improvements

Framer Motion page transitions, Lenis smooth scroll, magnetic buttons and tilt-card hover effects.

  • Framer Motion page transitions
  • Lenis smooth-scroll integration
  • Magnetic button effects
  • Tilt-card hover animations
  • Ripple button effects
v1.4.0Minor

Content Update

6 new blog posts, expanded project case studies, a redesigned resume, and contact form improvements.

  • 6 new blog posts added
  • Project case studies expanded
  • Resume section redesigned
  • Contact form improvements
v1.3.0Minor

Performance Optimization

next/image adoption, font subsetting + preloading, code-splitting improvements, and offline support via a service worker.

  • Image optimization with next/image
  • Font subsetting and preloading
  • Code-splitting improvements
  • Service worker for offline support
v1.2.0Minor

Accessibility Update

WCAG 2.1 AA compliance, keyboard navigation, screen-reader optimization, stronger focus indicators, and prefers-reduced-motion support.

  • WCAG 2.1 AA compliance
  • Keyboard navigation improvements
  • Screen-reader optimizations
  • Stronger focus indicators
  • Reduced-motion support
v1.1.0Minor

Blog Launch

Added the blog section, an RSS feed, article share buttons, and reading-time estimates.

  • Blog section added
  • RSS feed support
  • Article share buttons
  • Reading-time estimates
v1.0.0Major

Initial Launch

The portfolio website launched: Home, About, Projects, Contact.

  • Portfolio website launched
  • Home, About, Projects, Contact pages
  • Responsive design
  • Basic animations

Does your product have a blind spot like this?

Most of the releases above started with noticing that something was being measured wrong. I do the same work on your team's product: first I look at what is actually being measured, then I fix it.