About
Since 2021, I have built and maintained software for mobile devices, tablets, desktop operating systems, and the web. My work includes ERP and point-of-sale products, logistics workflows, digital publishing, backend services, and the release systems around them.
I started with Flutter client applications and grew into the parts around them: native integrations, offline data, real-time synchronisation, Go services, queues, databases, deployment, and production reliability. I still work close to the product and follow features through testing, release, and long-term maintenance.
Experience
Mid-Level Flutter Developer — Uzman Adres
March 2021 — Present
Project-based since March 2021 and full-time since September 2025. I build and maintain production ERP and point-of-sale applications across Android and iOS tablets plus Linux, macOS, and Windows desktops, with a focus on offline data, native integrations, performance, release reliability, and long-lived product maintenance.
Flutter Developer — iVent
May 2022 — November 2025
Contributed to Flutter application delivery and maintenance in a long-running part-time role, carrying product work from implementation through release support.
Full Stack Developer — JuniusTech
June 2023 — August 2025
Delivered mobile and web product work spanning Flutter and React, REST and WebSocket data flows, live vehicle tracking, Google and Apple Maps integrations, deployment, and QA coordination.
Software Engineering Intern — Extreme BS
June 2024 — August 2024
Completed a software engineering internship focused on production development practices, collaborative delivery, and applying academic foundations inside a working engineering team.
Full Stack Developer — Promob TR
September 2022 — July 2024
Contributed to the Aydınlık E-Gazete and Bilim ve Ütopya E-Dergi mobile applications, working across Flutter delivery, API integration, localisation, and release workflows for Android and iOS.
Flutter Developer — DEYOFU
June 2022 — August 2023
Contributed to Flutter mobile application projects in a long-running part-time role, working across Dart implementation and product delivery.
B.Sc. Software Engineering — Mehmet Akif Ersoy University
2021 — 2025
Formal study in algorithms, data structures, databases, software design, and team-based product development.
Open Source contributions
Return null from RenderProxyBoxMixin.computeDryBaseline when the child has no baseline
Flutter
Returned null when the child reports no baseline, matching what computeDistanceToActualBaseline already does at layout time, with a regression test that exercises the dry path.
Pull request IssueIgnore unrecognized SVG font-weight values
Flutter Packages
Treated unrecognized font-weight values as unspecified, preserved supported mappings, and covered the parser behaviour with the existing vector-graphics test suite.
Pull request IssueTreat 20-digit positive overflows as big integers
simdjson
Returned the big-integer result from the positive arm so both signs report overflow the same way.
Pull requestValidate dynamic library architecture from file headers
Dart Native Assets
Added a validator that reads a bundled library's ELF, Mach-O, or PE headers and compares the container and architecture against the build target, with a pluggable validator extension point and a warning when the bytes are unrecognized.
Pull requestAdd the caching hints from the 2026-07-28 protocol revision
Dart MCP
Added the CacheableResult extension type and the CacheScope enum, folding an absent or negative time-to-live to zero the way the specification tells clients to.
Pull requestRestore the plan9 build by splitting errno matching out
gRPC-Go
Moved the classification behind a build-tagged file pair, leaving errno matching unchanged everywhere else and keeping the portable labels on plan9.
Pull requestKeep the request future in the stream pipeline for ResponseType.stream
Retrofit for Dart
Kept the request future in the stream pipeline so streamed responses surface errors and completion correctly.
Pull requestGuard PartMap helper variables for nullable file parts
Retrofit for Dart
Guarded the PartMap helper variables so nullable file parts compile safely.
Pull requestMake contentType null-safe in newRequestOptions
Retrofit for Dart
Made contentType null-safe in the generated newRequestOptions code.
Pull requestOperate on decoded messages instead of JSON strings
Dart MCP
Changed the core channel type to StreamChannel<Map<String, Object?>> so JSON is encoded and decoded only at the transport edge, with string transports adapted through a separate jsonRpcChannel.
Pull requestJoin multiple Cookie header values with the RFC-correct separator
Shelf
Joined multiple Cookie header values with '; ' so the combined cookie header is valid and readable.
Pull requestSurface lost SQL migration finalizer errors
Bun
Switched the migration closure to a named return and joined finalizer errors with the execution error so commit and rollback failures are reported.
Pull requestAdd request-scoped message dispatch for MCP servers
Dart MCP
Added request-scoped message dispatch so a server can emit messages tied to the originating request.
Pull requestSeparate server feature registration from legacy initialization
Dart MCP
Separate reusable feature and capability registration from legacy protocol negotiation, migrate the mixins and examples, and preserve compatibility with the existing initialization path through regression coverage.
Pull requestMake Firebase core loading deterministic on WebKit
FlutterFire
Load the Firebase core script before component bundles and preserve deterministic dependency order.
Pull requestWait for web rendering before the first-frame event
Flutter
Counted the first frame's outstanding renders instead of collecting their futures, and waited for the next browser frame before dispatching the event, with order-independent tests that also cover a later frame.
Pull request IssueAdd SEP-2575 request metadata and discovery types
MCP Kotlin SDK
Add typed experimental metadata accessors, server discovery types, polymorphic codecs, and malformed-input coverage.
Pull requestReset unknown dropdown initial values on first build
Flutter Form Builder
Normalize the first build and cover the regression with widget tests.
Pull requestTreat SQLite TRUE and 1 defaults as the same schema
Drift
Normalize the verifier comparison and add regression coverage for both representations.
Pull requestAdd a Fiber and Asynq background-jobs recipe
Go Fiber Recipes
Add a runnable producer, worker, queue configuration, and usage documentation.
Pull request
Work
FugaSoft
The ERP and point-of-sale product family I continue to build at Uzman Adres for retail teams working across tablets and desktop operating systems.
FugaSoftDorse
A public logistics platform connecting drivers, fleet companies, and weighbridge businesses through mobile and web workflows.
DorseAydınlık E-Gazete
A newspaper client for iPhone and iPad with issue browsing, subscriber archive access, API-backed content, and mobile releases.
Aydınlık E-GazeteBilim ve Ütopya
A magazine client for iPhone and iPad that presents issue, archive, and account controls in one Flutter application.
Bilim ve ÜtopyaQueue Inspector MCP
An MCP server for read-only inspection of Redis-backed Asynq, BullMQ, and Sidekiq queues through one typed interface.
Queue Inspector MCPMulti-tenant Gateway
A single-binary gateway demonstrating tenant resolution, JWT authentication, per-tenant rate limits, and module boundaries.
Multi-tenant GatewayRedis Task Queue
A Redis-backed task queue for Dart with retries, dead-letter handling, and weighted queues.
Redis Task QueueConstellation Particles
A dependency-free particle field for Flutter with pointer interaction and spatial-grid neighbour lookup.
Constellation ParticlesFlutter Web Portfolio
This site is the working record of my experience, shipped products, and open-source contributions.
Flutter Web Portfolio
Packages
redis_task_queue
Redis-backed task queue: retries, a dead-letter list, weighted queues and crash-safe at-least-once delivery.
Package Repositoryre2
Linear-time regular expressions via Google's RE2 over FFI — immune to catastrophic backtracking (ReDoS).
Package Repositoryxlsxwriter
Native .xlsx writer with a constant-memory mode: one row in RAM whether the sheet has 10k or 1M rows.
Package Repositorymcp_probe
Conformance checks and a test harness for MCP servers: runs any stdio server and asserts on its behaviour from package:test.
Package Repositoryhf_tokenizers
The HuggingFace Rust tokenizers crate over FFI: load any tokenizer.json and get byte-exact encoding with UTF-8 offsets.
Package Repositorysimdjson_dart
Read a few fields out of a large JSON payload without decoding the rest; whole-document and NDJSON decoding too.
Package Repositoryvector_kit
SIMD vector maths for embeddings: dot, cosine, normalisation and top-k search over packed matrices.
Package Repositoryinstructor_dart
Typed, validated structured output from LLMs with repair retries — plain-Dart schemas, no codegen, adapters for the major hosted providers.
Package Repositoryrag_kit
Pure-Dart RAG kernel: chunking, embeddings, vector search and context building — zero dependencies, bring your own model.
Package Repositoryimage_ffi
Native image decode, resize, thumbnail and JPEG/PNG encode — several times quicker than the pure-Dart path.
Package Repositoryblake3_ffi
BLAKE3 hashing over FFI: one-shot, streaming, keyed MAC, KDF and XOF — drops into package:crypto's Hash interface.
Package Repositoryaudio_decode
Decode MP3, Ogg Vorbis and WAV to raw PCM over FFI — a decoder, not a player; runs under plain dart run.
Package Repositoryresilience
Circuit breaker, bulkhead, retry with backoff, timeout, rate limiter and hedge — one Policy interface, zero dependencies.
Package Repositoryllm_eval
LLM evals as unit tests: assertion checks, an optional judge, and cached responses so CI stays deterministic and free to rerun.
Package Repositorystream_struct
Stream an LLM's structured output as it arrives: tolerant partial JSON fills a typed object token by token, SSE framing included.
Package Repositoryflutter_prerender
Prerenders a built Flutter web app to crawlable HTML: loads each route in headless Chrome and emits headings, links, meta and a sitemap.
Package Repositoryphoto_zoom
Pan, zoom, rotate and swipe a photo gallery — double tap and pinch zoom where you touch, mouse wheel on desktop.
Package Repositoryskeleton_shimmer
Shimmer and skeleton loaders where one sweep is shared across every placeholder — drop-in compatible, reduced-motion aware.
Package Repositoryfind_in_page
An in-app find bar: wrap your page and Ctrl+F highlights and scrolls to every match — even in lazy-list rows that were never built.
Package Repositorytext_autosize
Auto-size text that fits width, height and maxLines — drop-in compatible with the incumbent, TextScaler-aware including nonlinear scaling.
Package Repositoryconstellation_particles
Pointer-reactive constellation background that honours reduced motion and high contrast, and pauses when backgrounded.
Package Repositoryexpandable_plus
Expandable panels that cross-fade two genuinely different views, with accordion groups and correct screen-reader semantics.
Package Repositorygo_channels
Go-style concurrency: typed channels, a select that truly withdraws the losing branch, and structured scopes with cancellation.
Package Repository
Writing
Why one failed font load kept breaking pendingFonts() in Flutter
Read articleRun it, bound it, check it every week: how I made a Dart MCP client checkable
Read articleYour leak test is probably measuring the test runner
Read articleThe Biggest MCP Update Ever, Explained With a Restaurant
Read articleThe object that falls out of the Set it is still in — mutable hashCode in Dart
Read articleMy CI ran on three platforms and still could not catch this
Read articleThe 24.8 milliseconds you pay before ffmpeg decodes a single sample
Read articlePinning the point you pinch: the one line behind anchored zoom
Read articleA public const constructor is the back door around your factory's validation
Read article2.75 seconds or 2 microseconds: the same regex, two engines
Read articleA finite loop in skeleton_shimmer that stopped resuming when the loop count was raised
Read articleA route could write index.html outside the output directory: a path traversal fix in flutter_prerender 0.3.2
Read article