Skip to content
md ~/projects/tamirhane-teknik-servis-takip-programi
Remembering Atatürk with Respect and Longing

November 10 · 88th anniversary

Remembering Atatürk with Respect and Longing

Mustafa Kemal Atatürk, founder of the Republic of Turkey, passed away at 09:05 on 10 November 1938 at Dolmabahçe Palace in Istanbul. Every year at this time the whole country stands in silence.

Keeping alive the Republic he entrusted to us is a duty we all share.

My humble body will one day turn to dust, but the Republic of Turkey will stand forever.Mustafa Kemal Atatürk
Project archive

2026Live

Tamirhane: Repair Shop Software

  • C#
  • ASP.NET Core MVC
  • Clean Architecture
  • Entity Framework Core
  • PostgreSQL
  • ASP.NET Core Identity
  • htmx
  • Web Push
  • MCP
  • OAuth 2.1 (OpenIddict)
  • xUnit
  • Testcontainers
  • Oracle Cloud
  • Caddy

Overview

Free work order tracking for phone, computer and appliance repair shops. It has check-in receipts, quote approval, parts stock, payments and a status page customers follow on their phone, and shops can connect an AI assistant such as Claude over MCP to ask about their work orders. Turkish and English.

01 · Problem

Small repair shops run on paper tickets. Customers keep calling to ask about their device, and existing software charges per user and is mostly English-only.

02 · Solution

A multi-tenant web app built on Clean Architecture. It has a check-in form that adapts to the device type, QR receipts, a status flow, stock and payments. Customers approve quotes from a login-free tracking link and get email and browser notifications. With its MCP server, a shop can connect an assistant such as Claude over OAuth 2.1 and ask "which devices are ready for pickup?"; the assistant can change a work order's status, while delete, payment and pricing tools are left out on purpose.

03 · Outcome

Live and free. Covered by 744 automated tests (real PostgreSQL, CSRF on every POST, tenant isolation). The assistant's token carries no permissions: shop and role are read from the database on every request, so a revoked connection stops at the next call. Strict CSP, encrypted device passcodes and a fast deployment on my own server behind Caddy.