Etkinlik, konser, festival, konferans, workshop ve her türlü organizasyon için
tek kurulumda etkinlik oluşturma, bilet satışı, QR kod üretimi, PDF bilet ve giriş kontrolü.
Özellikler · Ekran Görüntüleri · Kurulum · Kullanım · API · Katkı · Lisans
TicketFlow, etkinlik organizatörlerinin kağıt bilete ve dağınık Excel tablolarına veda etmesini sağlayan, modern ve minimalist bir bilet satış + katılımcı yönetim + giriş kontrol sistemidir. Kurulum sonrası 5 dakikada etkinliğini oluşturur, bilet türlerini ve indirim kodlarını tanımlar, çalışanlarını eklersin ve bilet satmaya başlarsın.
Müşteri etkinlik linkini açar → bilet türünü seçer → bilgilerini girer → satın alır.
Sistem her bilet için benzersiz QR kod + PDF üretir.
Çalışan kapıda QR okutur → giriş onaylanır → katılımcı içeri girer.
Organizatör panelden canlı olarak kaç bilet satıldı, kim geldi, ne kadar ciro yapıldı görür.
- 🚀 Sıfır kurulum karmaşası — SQLite ile dosya tabanlı, harici sunucu gerektirmez
- 📱 Mobil uyumlu — müşteri tarafı telefonda kusursuz çalışır
- 🎫 Çoklu bilet türü — VIP, öğrenci, erken kuş, davetli... sınırsız tanımlama
- 🏷️ İndirim kodları — yüzdelik indirim uygula (örn.
ERKEN30→ %30) - 🔳 Otomatik QR + PDF — her bilet için özel QR kod ve yazdırılabilir PDF
- 📊 Canlı panel — sipariş, ciro, giriş yapan katılımcı sayısı anlık
- 👨💼 Çalışan yönetimi — kapıda QR okutacak görevlileri sisteme ekle
- 🔎 3 yollu bilet sorgulama — telefon, e-posta veya bilet ID ile
- 📷 QR ile giriş kontrolü — sadece yetkili çalışanlar giriş onaylayabilir
- 📧 E-posta modülü hazır — opsiyonel olarak aktif edilebilir (SMTP)
- 💳 Ödeme altyapısı hazır —
process_payment()fonksiyonu ileri entegrasyona hazır - 🔓 Açık kaynak — AGPL-3.0, kendi sunucunuzda barındırın
- 🇹🇷 Türkçe öncelikli — yerel organizatörler için tasarlandı
- 🔌 API-first — mobil uygulama geliştirmeye hazır mimari
- ✅ Basit e-posta ile yönetici girişi (kayıt yok, otomatik oturum)
- ✅ Etkinlik oluşturma (isim, takvimden tarih + saat, kapasite)
- ✅ Etkinlik bilgilerini düzenleme
- ✅ Her etkinliğe özel paylaşılabilir satış linki (slug bazlı)
- ✅ Yayında / yayında değil kontrolü
- ✅ Sınırsız bilet türü (VIP, Öğrenci, Erken Kuş, Davetli...)
- ✅ Her türe ayrı fiyat
- ✅ Bilet türü ekle / düzenle / sil
- ✅ Yüzdelik indirim kodları (örn.
YAZ2025→ %20) - ✅ İndirim kodu ekle / sil
- ✅ Çalışan ekle / sil / düzenle
- ✅ İsim, soyisim, telefon, şifre
- ✅ Her çalışana ayrı giriş (bilet kontrol paneli)
- ✅ Kapıda QR okutma ve giriş onaylama
- ✅ "Bu bilet zaten kullanılmış" uyarısı
- ✅ Etkinlik listesi (
/bilet-al) - ✅ Etkinlik detayı — bilet türleri + adet seçimi
- ✅ İndirim kodu uygulama
- ✅ Sipariş özeti (ara toplam, indirim, toplam)
- ✅ Alıcı bilgileri (ad soyad, e-posta, telefon)
- ✅ Ödeme modülü pasif — demo modunda anında satın alma
- ✅ Her bilet için benzersiz bilet ID (örn.
A1B2C3D4E5F6) - ✅ Otomatik QR kod üretimi
- ✅ Her bilet için A4 PDF bilet (QR + tüm bilgiler)
- ✅ Tek tıkla PDF indirme
- ✅ 3 sekmeli sorgu: Telefon / E-posta / Bilet ID
- ✅ Toplam ödenen tutar gösterimi
- ✅ Bilet durumu (giriş yapıldı / bekliyor)
- ✅ PDF tekrar indirme
- ✅ Genel bakış — sipariş, bilet, giriş, kalan, toplam ciro
- ✅ Katılımcı listesi — her biletin detayı ve toplam tutar
- ✅ Çalışan yönetimi
- ✅ Bilet ayarları (tür + indirim kodu)
- ✅ Paylaşılabilir satış linki kopyalama
- ✅ Telefon + şifre ile giriş
- ✅ QR kod / bilet ID ile anlık kontrol
- ✅ Çift kullanım engeli
- ✅ Giriş saat kaydı
- ✅ Modern minimalist arayüz
- ✅ Yumuşak gri + mavi palet
- ✅ Responsive (mobil/tablet/masaüstü)
- ✅ Sidebar tabanlı yönetici paneli
- ✅ Sekmeli sorgu arayüzü
| Katman | Teknoloji |
|---|---|
| Backend | Python 3.10+, Flask 3.0 |
| Veritabanı | SQLite (dosya tabanlı), SQLAlchemy ORM |
| Frontend | Vanilla JS, HTML5, CSS3 |
| QR Üretimi | qrcode[pil] |
| PDF Üretimi | reportlab |
| Şablon | Jinja2 |
| Font | Inter / sistem fontları |
- Python 3.10 veya üzeri
- pip
# 1. Repoyu klonla
git clone https://github.com/mdaedalus/ticketflow.git
cd ticketflow
# 2. Sanal ortam oluştur
python -m venv venv
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
# 3. Bağımlılıkları yükle
pip install -r requirements.txt
# 4. Uygulamayı başlat
python app.pyTarayıcınızda açın: http://localhost:5000
Sistem üç farklı kullanıcı rolüne sahiptir:
| Adres | Yaptığı İş |
|---|---|
http://localhost:5000/ |
Ana sayfa (rol seçimi) |
http://localhost:5000/olusturucu/giris |
Yönetici girişi |
http://localhost:5000/etkinlik/olustur |
Etkinlik oluşturma (takvim) |
http://localhost:5000/panel |
Genel bakış (ciro, sipariş, katılımcı) |
http://localhost:5000/etkinlik/duzenle |
Etkinlik bilgileri |
http://localhost:5000/calisanlar |
Çalışan yönetimi |
http://localhost:5000/katilimcilar |
Katılımcı listesi + ciro |
http://localhost:5000/bilet-ayarlari |
Bilet türleri + indirim kodları |
| Adres | Yaptığı İş |
|---|---|
http://localhost:5000/calisan/giris |
Telefon + şifre ile giriş |
http://localhost:5000/calisan/tara |
QR / bilet ID ile giriş kontrolü |
| Adres | Yaptığı İş |
|---|---|
http://localhost:5000/bilet-al |
Etkinlik listesi |
http://localhost:5000/bilet-al/<slug> |
Etkinlik detayı + bilet seçimi |
http://localhost:5000/bilet-al/<slug>/odeme |
Ödeme + alıcı bilgileri |
http://localhost:5000/siparis/<id>/basarili |
Biletler + QR + PDF |
http://localhost:5000/bilet-sorgula |
Telefon / e-posta / ID ile sorgu |
ticketflow/
├── app.py # Ana uygulama (Flask factory)
├── config.py # Yapılandırma
├── database.py # SQLAlchemy başlatma
├── models.py # Event, Employee, TicketType, DiscountCode, Order, Ticket
├── requirements.txt
├── LICENSE # AGPL-3.0
├── README.md
├── .gitignore
│
├── docs/ # 📸 Ekran görüntüleri
│ └── screenshots/
│
├── routes/ # Blueprint'ler
│ ├── __init__.py
│ ├── home.py # Ana sayfa (3 rol seçimi)
│ ├── admin.py # Yönetici girişi + panel
│ ├── employees.py # Çalışan yönetimi
│ ├── tickets.py # Bilet ayarları + katılımcılar
│ ├── purchase.py # Bilet satış (herkese açık) + sorgulama
│ └── checkin.py # Çalışan QR kontrol
│
├── utils/ # Yardımcı fonksiyonlar
│ ├── __init__.py
│ ├── qr_generator.py # QR kod üretimi
│ ├── pdf_generator.py # Bilet PDF üretimi
│ └── mailer.py # E-posta (opsiyonel - pasif)
│
├── templates/ # Jinja2 şablonları
│ ├── base.html
│ ├── home.html
│ ├── admin_login.html
│ ├── create_event.html
│ ├── panel.html
│ ├── employees.html
│ ├── participants.html
│ ├── ticket_settings.html
│ ├── public_events.html
│ ├── public_event_detail.html
│ ├── public_checkout.html
│ ├── order_success.html
│ ├── ticket_query.html
│ ├── checkin_login.html
│ └── checkin.html
│
├── static/
│ ├── css/style.css
│ ├── js/main.js
│ ├── qr/ # Oluşturulan QR kodlar
│ └── pdf/ # Oluşturulan bilet PDF'leri
│
└── instance/
└── etkinlik.db # SQLite veritabanı (otomatik oluşur)
| Metot | Endpoint | Açıklama |
|---|---|---|
POST |
/olusturucu/giris |
Yönetici girişi |
POST |
/etkinlik/olustur |
Yeni etkinlik oluştur |
POST |
/etkinlik/duzenle |
Etkinlik güncelle |
POST |
/calisanlar |
Yeni çalışan ekle |
POST |
/calisanlar/<id>/duzenle |
Çalışanı güncelle |
POST |
/calisanlar/<id>/sil |
Çalışan sil |
POST |
/bilet-ayarlari |
Bilet türü / indirim ekle |
POST |
/bilet-turu/<id>/duzenle |
Bilet türü güncelle |
POST |
/bilet-turu/<id>/sil |
Bilet türü sil |
POST |
/indirim/<id>/sil |
İndirim sil |
| Metot | Endpoint | Açıklama |
|---|---|---|
POST |
/calisan/giris |
Çalışan girişi |
POST |
/calisan/tara |
Bilet ID / QR kontrol |
| Metot | Endpoint | Açıklama |
|---|---|---|
GET |
/bilet-al |
Etkinlik listesi |
GET |
/bilet-al/<slug> |
Etkinlik detayı |
POST |
/bilet-al/<slug>/onayla |
Sepeti onayla |
POST |
/bilet-al/<slug>/odeme |
Satın alma |
GET |
/siparis/<id>/basarili |
Biletler + QR + PDF |
GET |
/bilet/<ticket_code>/pdf |
Bilet PDF indir |
POST |
/bilet-sorgula |
Telefon / e-posta / ID ile sorgu |
curl -X POST http://localhost:5000/calisan/tara \
-d "ticket_code=A1B2C3D4E5F6"config.py içinde:
MAIL_ENABLED = True
MAIL_SERVER = "smtp.gmail.com"
MAIL_PORT = 587
MAIL_USERNAME = "ornek@gmail.com"
MAIL_PASSWORD = "uygulama-sifresi"
MAIL_SENDER = "ornek@gmail.com"Sistem otomatik olarak satın alma sonrası alıcıya bilet e-postası gönderecektir.
routes/purchase.py içindeki process_payment() fonksiyonunu doldur:
def process_payment(order_data: dict) -> bool:
# iyzico / stripe / paytr entegrasyonu buraya
return True- v0.1 — Yönetici girişi, etkinlik oluşturma, çalışan yönetimi
- v0.2 — Bilet türleri, indirim kodları, PDF + QR üretimi
- v0.3 — Herkese açık bilet satış sayfası, sipariş akışı
- v0.4 — Çalışan bilet kontrol (QR okutma)
- v0.5 — 3 yollu bilet sorgulama (telefon / e-posta / ID)
- v0.6 — Ciro ve katılımcı istatistikleri
- v0.7 — Gerçek ödeme entegrasyonu (iyzico, Stripe)
- v0.8 — E-posta bildirimleri (SMTP aktif)
- v0.9 — Koltuk seçimi (numaralı oturma planı)
- v1.0 — Çoklu etkinlik yönetimi (tek hesap, birden fazla etkinlik)
- v1.1 — Kupon / davetiye sistemi
- v1.2 — iOS / Android mobil uygulama
- v1.3 — Docker + PostgreSQL
- v2.0 — Multi-tenant SaaS sürümü
Katkılarınızı bekliyoruz! Büyük değişiklikler için önce bir issue açın.
# Fork → Clone → Branch → Commit → Push → PR
git checkout -b feature/yeni-ozellik
git commit -m "feat: yeni özellik eklendi"
git push origin feature/yeni-ozellikfeat:yeni özellikfix:hata düzeltmedocs:dokümantasyonstyle:kod formatırefactor:yeniden düzenlemetest:test ekleme
Bu proje AGPL-3.0 ile lisanslanmıştır.
- Ücretsiz kullanmak, değiştirmek, dağıtmak
- Ticari amaçla kullanmak (açık kaynak şartıyla)
- Kendi sunucunuzda barındırmak
- Etkinliğinizde kullanmak
- Değiştirdiğiniz kodu açık kaynak olarak paylaşmalısınız
- Ağ üzerinden (SaaS) sunsanız bile kaynak kodu vermelisiniz
Kodunuzu kapatmak veya SaaS olarak satmak istiyorsanız ticari lisans için iletişime geçin:
Emin Neşat Gürses
- 💼 LinkedIn: Emin Neşat Gürses
- 📧 E-posta: eminnesatg@gmail.com
- 🐙 GitHub: @mdaedalus
Bu proje GNU Affero General Public License v3.0 ile lisanslanmıştır.
Detaylar için LICENSE dosyasına bakın.
⭐ Projeyi beğendiyseniz yıldız vermeyi unutmayın!









