© 2026 Muhammed Göktuğ Temiz

Next.js · Tailwind · self-hosted

02 / 07AI Support Chatbot

Project 2 of 7

AI Support Chatbot

A rule engine, live agent handoff and three-layer data safety.

An enterprise support bot driven by a YAML state machine, connected to the production database strictly read-only, that hands the conversation to a human agent when it cannot resolve it.

Role
Developer
Live demo (opens in a new tab)

Stack

  • Flask
  • Gunicorn
  • MySQL
  • SQLite
  • YAML state machine
  • Zammad / Zendesk

Problem

Most of what reaches a support team is the same handful of questions repeated: billing status, line details, fault records. Letting a language model answer those freely introduces two risks at once — the model inventing an answer, and customer data leaking into logs uncontrolled. On an enterprise support channel neither is acceptable.

Solution

I built the bot on a rule engine rather than free generation. Conversation flows live in YAML files as a state machine: 16 separate flows, each with its own steps, validations and exits. Changing a flow means editing YAML, not changing code — the support team can update their own scenarios without writing any.

When the bot cannot resolve something it does not simply drop the conversation: it opens a ticket in Zammad/Zendesk and hands off to a live agent together with the full conversation history, so the customer never has to explain twice.

The path of a message
  1. Customer message
  2. PII maskingRegex + Luhn; before any log or database write
  3. Rule engineYAML state machine · 16 flows
  4. Data queryThree-layer read-only access
  5. AnswerFrom production data

If the bot cannot resolve it: a Zammad/Zendesk ticket is opened and the conversation is handed to a live agent with its history.

Live demo

  • TaksimChatFun Live Support ↗Welcome screen that collects the visitor's contact details before the chat starts (opens in a new tab)

Architectural decisions

A three-layer read-only guarantee on the production database. The bot reads live MySQL, but the possibility of a write had to be closed entirely. Instead of trusting a single safeguard, I stacked three:

  1. Table whitelist — the bot can only see explicitly permitted tables
  2. SQL guard — every generated query is inspected for write statements before it executes
  3. READ ONLY transaction — the query runs inside a transaction the database itself refuses writes on

Even if the first two are bypassed, the third is enforced by the database engine. Not leaving safety to the good intentions of the application layer was the single best decision in this project.

End-to-end PII masking. Sensitive fields — national ID numbers, phone numbers, email addresses and card numbers — are caught by regex patterns plus Luhn validation for card numbers, then masked. Masking runs before anything is written to logs or the database, so sensitive data never hits disk in raw form.

107 tests as a regression net. I wrote tests for every step of all 16 flows. Because changing one YAML flow can silently break another, updating the system safely would not have been possible without them.

Flask + Gunicorn. A deliberately plain stack: a single service that fits the synchronous request/response model and can be packaged and scaled horizontally. State lives in YAML and the database; the application server itself is stateless.

Access to the production database
  1. Table whitelistOnly explicitly allowed tables are visible
  2. SQL GuardEvery query is checked for write statements before it runs
  3. READ ONLY transactionThe database engine itself refuses writes
  4. Production MySQL

Outcome

A significant share of repeat requests now close without ever reaching an agent, and the ones that do arrive with the ticket and history already attached. Answers are correct because they come from production data, safe because queries are read-only, and changeable because the flows live in YAML.

Next projectData Processing & Automation Pipelines→
MGT
AboutProjectsCVWritingContact
let's work together

AI Engineer · Computer Engineer

MuhammedGöktuğ Temiz

I build products where AI meets data systems.

Computer engineer working on AI-driven systems, data pipelines and system integrations. I design automation-oriented, scalable structures that turn complex raw data into something meaningful and usable.

See my workGet in touch
Location
Başakşehir / İstanbul, Türkiye
selected projects
7
Muhammed Göktuğ TemizOpen to new projects

About

As an AI Engineer with a degree in Computer Engineering, I build LLM-based chatbot and AI agent systems, data processing pipelines and system integrations.

I have hands-on experience setting up PII masking, read-only database security and Prometheus/Grafana-based observability layers in production environments. Using Python, REST APIs, SQL and Elasticsearch, I integrate AI-powered systems into real business processes and focus on building secure, scalable and maintainable products.

Role
AI Engineer · Computer Engineer
Location
Başakşehir / İstanbul, Türkiye
  • Large Language Models (LLM)
  • Retrieval-Augmented Generation (RAG)
  • AI Agent Architectures
  • Embedding & Vector Search
  • Speech-to-Text (Whisper)
  • AI Chatbot Development
  • Prompt Engineering
  • Python
Meetings processed on Transify
500+
Languages supported
50+
Turkish transcription accuracy
95%+
Chatbot regression tests
107

Projects

Ask Göktuğ — Portfolio RAG Assistant
Transify

keep scrolling · click

01 / 07

Résumé

Muhammed Göktuğ Temiz

AI Engineer · Computer Engineer

Experience

2026 · January – Present
AI Engineer · Telpass İletişim Hizmetleri A.Ş.

Developed AI-based data processing, analysis and automation pipelines, optimising data collection, processing and reporting workflows. Built LLM integrations, AI agent architectures and enterprise AI chatbot solutions, enabling data enrichment, classification and business process automation. Developed REST API integrations, data processing services and inter-service communication components in Python. Designed API-based workflows and automations with n8n that connect different systems. Carried out data modelling, SQL optimisation and data management on MySQL and MariaDB. Built data search, indexing and filtering infrastructure with Elasticsearch. Set up server, application and service monitoring with Prometheus, Grafana and Zabbix, including performance tracking, alerting and observability dashboards. Contributed to managing and monitoring systems on Linux/Debian, Proxmox and container-based infrastructure.

2025 · April – May
Backend Developer (Intern) · Türkiye Finans Katılım Bankası

Supported software development within the Credit Card Payment Systems department. Contributed to data analysis, SQL query optimisation and reporting on Microsoft SQL Server. Gained experience with service integrations and layered architecture in C#/.NET enterprise applications.

2023 · July – August
.NET Developer (Intern) · Memoria Bilişim ve Medya A.Ş.

Built a blog platform with user and content management features using ASP.NET MVC, SQL Server and Entity Framework. Designed the application structure with a layered architecture and implemented database management and CRUD operations.

Education

2020 – 2025
BSc Computer Engineering · Giresun University

Bachelor's degree, Faculty of Engineering, Department of Computer Engineering.

Certificate
Cisco 1 – Computer Networking Fundamentals · Başakşehir Living Lab

Certificate of participation.

Skills

  • Large Language Models (LLM)
  • Retrieval-Augmented Generation (RAG)
  • AI Agent Architectures
  • Embedding & Vector Search
  • Speech-to-Text (Whisper)
  • AI Chatbot Development
  • Prompt Engineering
  • Python
  • Data Processing & Automation
  • REST API
  • API Integrations
  • Flask
  • n8n
  • Microsoft SQL Server
  • MySQL / MariaDB
  • Elasticsearch
  • ELK Stack (Elasticsearch, Logstash, Kibana)
  • SQL Optimisation
  • Data Modelling
  • Linux / Debian
  • Proxmox
  • Zabbix
  • Prometheus
  • Grafana

Languages

  • English — B1
web version →Download CV (EN)View CV ↗

Writing

  • 14 October 2026Cutting my RAG assistant's first word from 50 seconds to 4The first version of the RAG assistant I built for my portfolio kept visitors waiting 25–50 seconds before an answer began. What I measured, what I kept on my server and what I moved to the cloud, and what that decision cost.→
  • 14 October 2026Connecting an AI bot to a production database: three layers of read-onlyA support bot had to read live MySQL without ever writing a single row. Why I built three layers instead of trusting one safeguard, and how I masked sensitive data before it could ever reach the logs.→

Contact

Got something in mind?

If you want to talk about AI, data systems or automation work, drop me a line — I usually reply the same day.

goktugtemiz60@gmail.com
  • GitHub ↗
  • LinkedIn ↗
  • WhatsApp ↗