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
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.
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.
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.
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
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
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.
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
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
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)
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
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.