Backend lead at T-Soft, an e-commerce SaaS platform based in Türkiye. I work primarily with Laravel/PHP across a multi-service architecture — including an OAuth2 identity provider built on Laravel Passport.
Computer Engineering, Çukurova University alum.
Currently focused on: API design, multi-tenant SaaS, OAuth2 / authentication infrastructure, and developer tooling — with a strong bias toward testable code, PHPUnit / Pest suites, and CI pipelines that catch regressions before customers do.
spatie/laravel-query-builder #1060 —
Filter Groups (OR/AND conjunction). Released in
v7.3.0
on May 2, 2026, as a first-time contribution to the package. Adds
AllowedFilter::groupOr() and groupAnd() so you can compose filters with
JSON:API-style "fancy filters" semantics — the SQL-precedence-safe way to
express "search across name OR full_name" as a single shorthand parameter.
QueryBuilder::for(User::class)
->allowedFilters(
AllowedFilter::groupOr('q', [
AllowedFilter::partial('name'),
AllowedFilter::partial('full_name'),
]),
);
// GET /users?filter[q]=John → WHERE (name LIKE %John% OR full_name LIKE %John%)- @bir-tan/crisp-oquent — Zero-dependency, fetch-only TypeScript client that speaks Spatie laravel-query-builder's URL contract end-to-end. Eloquent-style fluent builder with full v7 parity, including the Filter Groups shorthand above. Docs: bir-tan.com/crisp-oquent · Source: taskinbirtan/crisp-oquent
- laravel-netgsm — NETGSM SMS integration for Laravel
- gayret/ataturk — Community web app about Atatürk's life
I treat tests as a first-class deliverable, not an afterthought. Day-to-day that means PHPUnit / Pest for PHP, Vitest for the TypeScript side, and a lot of opinions about meaningful coverage over coverage numbers. I lean on mutation testing to catch the assertions that look like they test something but don't, and I'd rather ship a thin slice with real tests than a fat slice without.
- 🔗 bir-tan.com — personal site, projects, writing
- ✉️ taskinbirtan@gmail.com
In tests we trust. 🧪

