ToolsPortfolio ↗

YEB / JOURNAL — FOLLOW THE CURIOSITY

Software & design blog.

Notes on software, design and all the details in between.

19 articles

A four-gate flow: 1 Request (HTTP response, 200 and 4xx/5xx), 2 Crawl (robots.txt and Googlebot), 3 Index eligibility (noindex and canonical) and a dashed fourth gate, Selection, labelled "No guarantee".A four-gate flow: 1 Request (HTTP response, 200 and 4xx/5xx), 2 Crawl (robots.txt and Googlebot), 3 Index eligibility (noindex and canonical) and a dashed fourth gate, Selection, labelled "No guarantee".

AI search technical SEO checklist: access, index and measurement

Google's AI features do not ask for a special file or markup; the page has to be indexed and eligible to be shown with a snippet. A checklist that separates request, crawl, index and selection, and says what can and cannot be measured. Last checked: 25 October 2026.

Read article ↗
A schedule is a trigger, then a runA schedule is a trigger, then a run

GitHub Actions cron not running? Check timezone and delivery

Separate UTC defaults, current IANA timezone support and trigger eligibility. Check the default branch, inactivity, minimum interval and delivery delays.

Read article ↗
Three layers of a CSV importThree layers of a CSV import

Why Excel opens CSV incorrectly: encoding, delimiters and zeros

Diagnose mangled characters, records in one column and missing leading zeros separately. A deliberate Excel import process with an executed Python example.

Read article ↗
A matrix of five link types: a link with no SEO qualifier observed, nofollow, ugc, sponsored and noopener/noreferrer. Each row gives the observed markup, the intended relationship and a practical caution. A note at the bottom says that security and privacy tokens are not ranking qualifiers and that a link with no qualifier does not promise a ranking benefit either.A matrix of five link types: a link with no SEO qualifier observed, nofollow, ugc, sponsored and noopener/noreferrer. Each row gives the observed markup, the intended relationship and a practical caution. A note at the bottom says that security and privacy tokens are not ranking qualifiers and that a link with no qualifier does not promise a ranking benefit either.

Free backlink sources: relevant platforms, real contributions and a 30-day plan

Free accounts are opportunities to publish useful work and be discovered, not promises of ranking gains. Free-entry routes and link types observed on 42 platforms on 11 October 2026, with each platform’s own eligibility limits.

Read article ↗
Two groups of cards are shown. Dotted pair: small i (U+0069, LATIN SMALL LETTER I) and capital İ (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE). Dotless pair: small ı (U+0131, LATIN SMALL LETTER DOTLESS I) and capital I (U+0049, LATIN CAPITAL LETTER I). Below, the default rule gives I for i and ı, i for I and i plus U+0307 for İ; the tr-TR rule gives İ for i, I for ı, ı for I and i for İ.Two groups of cards are shown. Dotted pair: small i (U+0069, LATIN SMALL LETTER I) and capital İ (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE). Dotless pair: small ı (U+0131, LATIN SMALL LETTER DOTLESS I) and capital I (U+0049, LATIN CAPITAL LETTER I). Below, the default rule gives I for i and ı, i for I and i plus U+0307 for İ; the tr-TR rule gives İ for i, I for ı, ı for I and i for İ.

The Turkish İ problem: how İ/i and ı/I break software

İ/ı bugs in case mapping, comparison, sorting, slugs and protocol keywords, for JavaScript, Java, C#, Python and SQL. The JavaScript and Python examples were run on 11 October 2026.

Read article ↗
Export-of-services flow: a client abroad, an invoice in the foreign buyer's name, the earnings reaching Türkiye and a 100% deduction on the return; notes below cover code 302 for the KDV exemption and that the deduction does not guarantee no tax.Export-of-services flow: a client abroad, an invoice in the foreign buyer's name, the earnings reaching Türkiye and a 100% deduction on the return; notes below cover code 302 for the KDV exemption and that the deduction does not guarantee no tax.

Turkey's 2026 tax guide for software service exports: 100% deduction, KDV exemption and sole proprietorship vs limited

A 2026 guide for developers selling software services abroad: the 100% deduction, the KDV (VAT) exemption and code 302, and the minimum corporate tax difference between a sole proprietorship and a limited company.

Read article ↗
Before-and-after comparison: on the left, separate settings for Vite, ESLint, Prettier and Vitest in vite.config.ts, eslint.config.js and .prettierrc.json; on the right, the vp command reaches Vite/Rolldown, Oxlint, Oxfmt and Vitest through the shared lint, fmt and test settings in vite.config.ts. Below, package.json, package-lock.json and tsconfig.json are shown; the manifest and lockfile remain.Before-and-after comparison: on the left, separate settings for Vite, ESLint, Prettier and Vitest in vite.config.ts, eslint.config.js and .prettierrc.json; on the right, the vp command reaches Vite/Rolldown, Oxlint, Oxfmt and Vitest through the shared lint, fmt and test settings in vite.config.ts. Below, package.json, package-lock.json and tsconfig.json are shown; the manifest and lockfile remain.

Simplifying a toolchain with Vite+ 1.1.0: from a JSON-LD tool to tests and CI

Vite+ 1.0 launched on 28 September 2026; this guide takes a small JSON-LD tool from a new project to migration, tests and CI with 1.1.0, the version checked and tested on 10 October 2026.

Read article ↗
Two separate zig build invocations turn the shared src/main.zig and src/root.zig into an x86_64-linux-gnu output and an x86_64-windows-gnu output; optional C paths use zig cc and translate-c.Two separate zig build invocations turn the shared src/main.zig and src/root.zig into an x86_64-linux-gnu output and an x86_64-windows-gnu output; optional C paths use zig cc and translate-c.

A practical guide to Zig 0.17: learn the language with a small command-line tool

Write a small line-counting command-line tool with Zig 0.17.0: memory, error handling, comptime, current I/O, build modes, cross-compilation and the C boundary.

Read article ↗
Astro islands: a static HTML page and three islands that hydrate on load, idle, or visibility.Astro islands: a static HTML page and three islands that hydrate on load, idle, or visibility.

A practical guide to Astro: building content-first websites

Build a bilingual portfolio and blog with Astro 7: components, content collections, islands architecture, on-demand rendering, SEO and a launch checklist.

Read article ↗
Logo-free provider tiles for OpenAI, Anthropic, Google, xAI, Meta, Mistral, DeepSeek and Qwen with an October 2026 badge.Logo-free provider tiles for OpenAI, Anthropic, Google, xAI, Meta, Mistral, DeepSeek and Qwen with an October 2026 badge.

AI models compared in 2026: GPT-6, Claude 5.5, Gemini and the rest

The newest models from OpenAI, Anthropic, Google, xAI, Meta, Mistral, DeepSeek and Qwen: release dates, prices, context windows and independent benchmark tables.

Read article ↗
Flow showing a browser request passing through Nitro and Vue SSR to payload-backed hydration.Flow showing a browser request passing through Nitro and Vue SSR to payload-backed hydration.

A practical guide to Nuxt: building a solid web app from setup to production

Build a product catalog step by step with Nuxt 4: file-based routing, SSR data fetching, a Nitro API, hybrid rendering, SEO, testing and a launch checklist.

Read article ↗
Go worker pool: a job queue, bounded workers and a results channelGo worker pool: a job queue, bounded workers and a results channel

Building services with Go: HTTP, concurrency and production discipline

Build reliable network services with a small standard-library surface, explicit error flow and controlled goroutines.

Read article ↗
Python project flow: virtual environment, application code and testsPython project flow: virtual environment, application code and tests

Real-world projects with Python: a solid roadmap from automation to web APIs

Use Python not just for quick prototypes, but for maintainable services, data processing and automation—with the right boundaries in place.

Read article ↗
Rust ownership diagram: ownership, borrowing and end of scopeRust ownership diagram: ownership, borrowing and end of scope

A practical introduction to Rust: ownership, error handling and safe service design

Treat the borrow checker not as an obstacle to memorize your way around, but as a design tool that makes data lifetimes visible.

Read article ↗
TypeScript flow: source, type checking and JavaScript outputTypeScript flow: source, type checking and JavaScript output

Modern web projects with TypeScript: from idea to reliable product

Use type safety where it matters in the JavaScript ecosystem: initial setup, API boundaries, testing, performance and a production project example.

Read article ↗

A fast web experience starts with the first decision.

Make performance part of the design with less JavaScript, intentional imagery and measurable goals.

Read article ↗

The details that should survive design handoff.

Spacing, states and component boundaries: carrying a design’s character into a working product.

Read article ↗

Typography: the quiet foundation of a good interface.

Beyond choosing a font: hierarchy, line length and the rhythm of reading.

Read article ↗

Small interactions, more inclusive experiences.

Build more usable interfaces with keyboard focus, clear labels and motion preferences.

Read article ↗

An idea. A new beginning.

Let’s talk ↗