Skip to content
View hasanozkan's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report hasanozkan

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
hasanozkan/README.md

Hasan Özkan

Tech Lead & AI Architect — AI systems and software architecture.

I lead teams through AI transformation by treating it as an engineering problem, not a demo: LLM-powered products on a sound domain model, delivered through GitOps, with AI coding agents working inside the same specs, conventions and CI gates as the rest of the team.

Currently architecting Narthelix, an AI-first consumer platform (private). The samples below are independent illustrations of how it's built. Based in Antalya, open to AI architecture roles.

LinkedIn Email

Python, C#, .NET, TypeScript, React, Next.js, Kubernetes, Terraform, PostgreSQL, Kafka, Redis, Grafana, Prometheus, Docker, AWS, GitHub Actions

Architecture

AI-first platform reference architecture: clients, edge (identity, ingress, realtime), services (modular monolith, assistant engine with human-approved writes, provider-neutral LLM gateway, STT, workers), data and events, and a platform band (Kubernetes, GitOps, observability, zero-trust network, quality gates)

Representative of the platform I designed and built end to end — simplified, not as-is. The samples below implement its patterns in miniature.

How I build

  • Spec-driven, domain-driven. Behaviour is written first as numbered rules; bounded contexts own their language and talk through events; the architecture is enforced by the build, not by review comments.
  • GitOps all the way down. Everything that runs is declared in Git and reconciled by Flux; merging is deploying; infrastructure is Terraform.
  • Measure, don't assume. A gate is trusted only after it has been broken on purpose and seen to fail — and in production, services are instrumented and alerts reach people, not just dashboards.
  • Agent-assisted engineering. Coding agents work from the same specs, conventions and CI gates as people, with a shared, versioned memory of what the team has learned.

Stack I work in

Area Tools
AI LLM gateways & model routing, tool-calling assistants, speech-to-text, RAG on PostgreSQL/pgvector, evaluation and guardrails
Backend C# / .NET Core, Python, FastAPI, SQLAlchemy/Alembic, PostgreSQL (pgvector, PostGIS), Kafka, Redis
Web React, Next.js, TypeScript
Mobile React Native / Expo, TypeScript; Flutter — on a native base (earlier: iOS in Swift and Objective-C, Android in Java)
Platform AWS, Kubernetes (k3s), Flux, Helm, Terraform, Cloudflare, self-hosted CI runners
Identity & network Authentik (SSO/OIDC, client credentials for services), Headscale (WireGuard zero-trust mesh), Cloudflare (DNS/WAF as Terraform)
Observability OpenTelemetry, Prometheus, Grafana (Loki, Tempo, Faro for web), alerting to Slack (earlier: AppDynamics, New Relic, ELK)
Quality Contract snapshots (OpenAPI/AsyncAPI), import-linter architecture rules, SonarCloud, gitleaks

Background

Sixteen years across the stack, and each era left something I still use. I started with desktop and classic web — Delphi, WinForms and WPF, ASP.NET Web Forms and MVC, Angular, PHP, Java, native iOS (Objective-C, Swift) and Android (Java) — on top of SQL Server and Oracle (T-SQL, PL/SQL). That is where I learned data modelling, transactions and what users actually do with software. .NET Core and service architectures came next, and today the work is Python, LLM systems and platforms run from Git. The older tools are retired; the lessons are in everything above.

Sample projects

Independent, from-scratch illustrations of the patterns above — small enough to read in one sitting, each with its gates verified.

Repository What it shows
llm-tool-calling-assistant An AI system built to ship: provider-neutral LLM gateway, validated tool contracts, writes that wait for the user, prompt-injection defence, budgets, evals as a CI gate, and LLM observability on OpenTelemetry with promtool-tested alerts
ai-native-engineering How AI coding agents work inside a team: a playbook (principles, the loop, gates, memory, approval boundaries, failure patterns), templates, and tested gate tools
spec-driven-ddd-python A modular monolith where specs lead: numbered rules traced to tests, bounded contexts that can only talk through events, policy as data, API contracts in review
spec-driven-ddd-dotnet The same domain in C# / .NET 10 from byte-identical specs and the same HTTP contract — bounded contexts as assemblies, architecture and gates as tests; CI runs the Python smoke test against it
contract-first-react-native A contract-first React Native (Expo) client: types generated from both services' contracts with a CI drift gate, honest mocks, live tests against the real services, and one approval card for human- and AI-proposed changes
gitops-reference Flux GitOps on a laptop in one command: ordered reconciliation onto restricted workloads, image automation that picks the newest main-<ts>-<sha> build, and observability as code (Prometheus, Grafana, Loki, Tempo) whose dashboards and alerts are checked against the services' telemetry contracts; end-to-end tested on kind in CI

The six fit together: the DDD samples (Python and .NET, one spec) are the service, the mobile app is its client, gitops-reference deploys it, the assistant is an AI system built on the same discipline, and the playbook is how the work gets done.

Pinned Loading

  1. llm-tool-calling-assistant llm-tool-calling-assistant Public

    A tool-calling LLM assistant: provider-neutral gateway, approval-gated writes, prompt-injection defence, budgets, and golden conversations as a CI gate.

    Python

  2. spec-driven-ddd-dotnet spec-driven-ddd-dotnet Public

    The same spec-driven DDD library domain in C# / .NET 10: specs byte-identical to the Python implementation, same HTTP contract, bounded contexts as assemblies, gates as tests.

    C#

  3. gitops-reference gitops-reference Public

    Flux GitOps on a laptop in one command: ordered reconciliation onto restricted workloads, image automation, and observability as code (Prometheus, Grafana, Loki, Tempo) checked against telemetry co…

    Shell

  4. ai-native-engineering ai-native-engineering Public

    A playbook, templates and small tools for teams that build software with AI coding agents: specs, gates, memory and approval boundaries.

    Python 1

  5. spec-driven-ddd-python spec-driven-ddd-python Public

    Spec-driven, domain-driven modular monolith in miniature: specs lead, bounded contexts talk through events, architecture and traceability enforced as build gates.

    Python 1

  6. contract-first-react-native contract-first-react-native Public

    A contract-first React Native (Expo) client: types generated from service contracts, honest mocks, live tests against real services, and one approval card for human and AI-proposed changes.

    TypeScript