Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
317 posts found
Animation and Scroll APIs in JavaScript: element.animate, getAnimations, the finished Promise, scrollIntoView and scrollend
Frontend PART 17

Animation and Scroll APIs in JavaScript: element.animate, getAnimations, the finished Promise, scrollIntoView and scrollend

In JavaScript you start an animation with element.animate, control it through the returned Animation object and wait for its end with the finished promise; for scrolling you reach the target with scrollIntoView and scrollBy and do the work once scrolling ends with scrollend. We show it in Bookstore with a cover flying to the cart, jumping to the invalid checkout field and the book strip's arrows, with real browser output.

15 Nov 2026 12 min 9
Localization with JavaScript Intl: Turkish Sorting with Collator, PluralRules, ListFormat, Segmenter, DisplayNames and DurationFormat
Frontend PART 19

Localization with JavaScript Intl: Turkish Sorting with Collator, PluralRules, ListFormat, Segmenter, DisplayNames and DurationFormat

Use Intl.Collator("tr") for Turkish sorting, PluralRules for singular/plural text, ListFormat for "Dune, Emma, and The Hobbit", Segmenter for character limits in reviews with emoji and DurationFormat for reading time. With Bookstore examples we show each one, the browser differences and why caching instances matters, with real output.

15 Nov 2026 13 min 9
Global Attributes, Link Types and Inline SVG in HTML: data-*, hidden, contenteditable, spellcheck, translate, download, mailto/tel and Accessible Icons
Frontend PART 13

Global Attributes, Link Types and Inline SVG in HTML: data-*, hidden, contenteditable, spellcheck, translate, download, mailto/tel and Accessible Icons

contenteditable is not a form control: plaintext-only turns rich text into plain text, but the note never reaches the server with the form, so the right element is a textarea. In this post we measure data-*, hidden="until-found", spellcheck, autocapitalize and translate in Chromium and WebKit, and show tel:, mailto:, download's same-origin limit, accessible SVG icons and the <svg hidden> pitfall on Bookstore.

15 Nov 2026 17 min 8
Animation in Angular: animate.enter, animate.leave, CSS Transitions and Moving Off @angular/animations
Frontend PART 35

Animation in Angular: animate.enter, animate.leave, CSS Transitions and Moving Off @angular/animations

animate.enter and animate.leave, added in Angular 20.2, put a CSS class on an element as it enters or leaves the DOM and wait for the animation, with no need for @angular/animations. We animate Bookstore cart lines and toasts and cover prefers-reduced-motion, @starting-style, withViewTransitions and migrating old trigger code.

15 Nov 2026 8 min 6
i18n in Angular: $localize, the i18n Attribute, ICU Messages, ng extract-i18n and Per-Locale Builds
Frontend PART 34

i18n in Angular: $localize, the i18n Attribute, ICU Messages, ng extract-i18n and Per-Locale Builds

Angular's build-time i18n marks text with the i18n attribute and $localize, extracts it to an XLIFF file with ng extract-i18n and builds a separate app per language. We make the Bookstore UI Turkish and English and cover ICU plural/select, LOCALE_ID, /tr and /en routing in ASP.NET Core and catching missing translations at build time.

15 Nov 2026 9 min 7
Writing Your Own Form Control in Angular: FormValueControl, FormCheckboxControl and ControlValueAccessor in Existing Code
Frontend PART 33

Writing Your Own Form Control in Angular: FormValueControl, FormCheckboxControl and ControlValueAccessor in Existing Code

In Angular 22 a value = model() is all a component needs to be a form control: we write a quantity stepper and a gift wrap switch with FormValueControl and FormCheckboxControl, use the same control with Reactive Forms and ngModel, and read and migrate old ControlValueAccessor code.

15 Nov 2026 10 min 5
Angular Signal Forms in Practice: form(), Schemas, Built-in and Custom Validators, Async Validation and submit()
Frontend PART 32

Angular Signal Forms in Practice: form(), Schemas, Built-in and Custom Validators, Async Validation and submit()

In Signal Forms the data lives in a model signal and form() builds a typed FieldTree on top of it. We build the Bookstore checkout form with a schema, built-in and custom validators, applyWhen/applyEach, a debounced validateHttp coupon check and submit() that maps server errors to fields.

15 Nov 2026 11 min 7
What Changed in Flutter 3 and Dart 3: Impeller, Patterns, Widget Previews, material_ui and What's Next
Frontend PART 17

What Changed in Flutter 3 and Dart 3: Impeller, Patterns, Widget Previews, material_ui and What's Next

Dart 3.0 made null safety mandatory and brought records, patterns and sealed classes; 3.6 to 3.13 took small steps that change everyday code, from digit separators to primary constructors. On the Flutter side there are Impeller, SwiftPM, UIScene, Widget Previews and, between 3.44 and 3.50, Material moving into the material_ui package; we show with real output that the language version comes from the pubspec, and how to upgrade.

15 Nov 2026 8 min 14
Publishing a Flutter App: Google Play and the App Store, Signing, Versioning, Flavors and CI
Frontend PART 16

Publishing a Flutter App: Google Play and the App Store, Signing, Versioning, Flavors and CI

A Flutter app takes the same road in both stores: release build, signing, a test channel, review and a gradual release. For Bookstore we cover version numbers, environments with --dart-define-from-file (and why they cannot carry secrets), the Android upload key and Play App Signing, iOS signing and TestFlight, the 2026 store rules and a signed App Bundle build in GitHub Actions.

15 Nov 2026 8 min 14
Testing in Flutter: Unit, Widget and Integration Tests, Fake Repositories and Golden Tests
Frontend PART 15

Testing in Flutter: Unit, Widget and Integration Tests, Fake Repositories and Golden Tests

The backbone of Flutter testing is unit and widget tests written with fake repositories; mocks only for "was this call made?", integration_test for critical flows and golden tests for catching visual changes on a single platform. With Bookstore's 86 tests, a checkout flow through provider and go_router, mocktail's registerFallbackValue trap and the platform differences of goldens.

15 Nov 2026 9 min 15
Local Storage and Offline in Flutter: shared_preferences, flutter_secure_storage, SQLite/drift and Caching Strategy
Frontend PART 14

Local Storage and Offline in Flutter: shared_preferences, flutter_secure_storage, SQLite/drift and Caching Strategy

In Flutter, small non-secret settings go to shared_preferences, tokens to flutter_secure_storage (iOS Keychain, Android Keystore) and data you query to SQLite through drift. We move Bookstore's cart to drift, try a migration and a reactive query, and show the catalog without internet in the order fresh cache, network, stale cache, all without changing the ViewModels.

15 Nov 2026 9 min 11
API Integration in Flutter: http/dio, JSON Serialization, Repositories and Connecting to the ASP.NET Core Bookstore API
Frontend PART 13

API Integration in Flutter: http/dio, JSON Serialization, Repositories and Connecting to the ASP.NET Core Bookstore API

The solid way to connect a Flutter app to an ASP.NET Core API is to keep HTTP in one ApiClient (timeout, retry only for GET, a single refresh on 401), to turn JSON into the domain model in one place and to swap the repository without touching the ViewModel. With real responses from a SQLite copy of the Bookstore API, ProblemDetails mapping, and the 10.0.2.2, cleartext and CORS traps.

15 Nov 2026 12 min 9
Blog Map