PROJE
Ofis ekibi için ortak kahve siparişleri
Ofiste ortak kahve siparişleri için iç hizmet: toptan katalog, tek tedarikçi siparişi, otomatik sepet, ödemeler, teslim alma ve teslim etme.
Görev
Bir IT şirketinin ofisinde çalışanlar kahveyi toptan tedarikçiden birlikte sipariş ediyor: çekirdek ya da öğütülmüş kahve, ayrıca çay ve ilgili ürünler. Talepler önceden ortak bir Google Sheets tablosunda toplanıyordu. Organizatör bu satırlara bakarak Tasty Coffee toptan hesabındaki sepeti elle hazırlıyor, tutarları hesaplıyor ve ödemeleri kontrol ediyordu.
Böyle bir süreçte hata yapmak kolaydır: öğütme ya da paket boyu karışabilir, bir satır atlanabilir, tedarikçide artık bulunmayan bir ürün gözden kaçabilir. Belirli bir siparişin hangi aşamada olduğunu ve ödenip ödenmediğini anlamak da zordu.
Ne yaptım
Hizmeti Eylül ve Ekim 2026'da tasarlayıp geliştirdim: çalışan arayüzü, yönetim paneli, tedarikçi entegrasyonu, veritabanı ve dağıtım. Hizmet, stüdyonun kendi sunucusunda Docker içinde, Nginx ve Let's Encrypt TLS sertifikasının arkasında production ortamında çalışıyor. Bakımını da ben yapıyorum.
Nasıl çalışıyor
Çalışanın siparişi
Çalışan kahvenin adını yazmaya başlar ve önerilerden tam ürünü seçer. Katalog yayımlandıktan sonra serbest metin gönderilemez. Kahvede çekirdek ya da öğütülmüş seçimi zorunludur, ardından paket boyu ve miktar gelir. Form yalnızca tedarikçinin sepetine gerçekten eklenebilen kombinasyonları sunar. Toptan API stok bilgisi verirse daha büyük bir miktarı kabul etmez.
Formda fiyat gösterilmez. Tutar, organizatör tedarikçinin gerçek sepetini kontrol ettikten sonra sipariş kartında görünür. Sipariş geçmişinde mevcut aşama ve sonraki adım yer alır. Site telefona PWA olarak kurulabilir.
Tek tedarikçi siparişi ve otomatik sepet
Yönetim panelinde talepler bir kuyrukta birikir. Organizatör tek bir işlemle bunları bir sevkiyatta birleştirir, hizmet de Tasty Coffee toptan sepetini kendisi doldurur: sepeti temizler ve kayıtlı satırları ekler. Sevkiyat sonradan düzenlenirse sepet yeniden doldurulabilir ve eski miktarlar sepette kalmaz. Aktarılamayan satır gerekçesiyle işaretlenir, organizatör onu elle ekler ve onay kutusuyla doğrular. Tedarikçide siparişi tamamlamak ve ödemek elle yapılmaya devam eder: entegrasyon son düğmeye hiçbir zaman basmaz.
Geç gelen talepler henüz teslim alınmamış bir sevkiyata eklenebilir. Teslim alma tamamlanana kadar sevkiyat düzeltilebilir, yeniden dışa aktarılabilir ya da tamamen iptal edilebilir. İptal edilirse talepler kuyruğa geri döner.
Ödeme
Organizatör, tedarikçinin indiriminden sonraki gerçek sepete göre tutarları sabitler ve ödeme toplamayı açar. Her çalışan kendi tutarını ve ödeme bağlantısını görür, "Ödedim" işaretini koyar ve isterse ekran görüntüsü ekler. Sipariş ancak organizatör paranın geldiğini doğruladıktan sonra ödenmiş sayılır. Kontrol edilen ödemeler tek tek ya da 100 siparişe kadar gruplar halinde onaylanabilir. Hizmet, "Sipariş verildi" durumuna yalnızca tüm ödemeler kontrol edildikten ve sipariş tedarikçiye gerçekten verildikten sonra izin verir.
Teslim alma ve teslim etme
Teslimat geldiğinde organizatör onu satır satır teslim alır: tamamen alındı, kısmen alındı, stokta yok ya da muadil ürün geldi. Her şey tamsa onaylı tek bir işlem yeterlidir. Hizmet sonucu her çalışan için kendisi hesaplar. Yalnızca tamamen teslim alınan siparişler çalışana verilebilir, diğerleri eksik kuyruğuna düşer.
Yönetim paneli dört kuyruk etrafında kurulu: yeni talepler, ödeme kontrolü, teslim ve eksikler. Siparişler ve sevkiyatlar CSV ve PDF olarak dışa aktarılabilir.
Eski tablodan geçiş
Bazı çalışanlar hâlâ Google Sheets tablosunu kullanırken geçişin kademeli olması gerekiyordu. Önizlemeli bir içe aktarma geliştirdim: her satır ad ve soyad, katalogdaki tam varyant ve miktar açısından kontrol edilir. Herhangi bir hata, benzer bir ürün koymak yerine aktarımı durdurur. Tablodaki fiyatlar ve ödeme işaretleri aktarılmaz. İçe aktarma günlüğü her siparişi kaynak satır numarasına bağlar. Bu yüzden tablonun yeniden yüklenmesi kopya oluşturmaz, değiştirilmiş bir satır ise çakışma olarak görünür. Ayrı bir karşılaştırma, içe aktarılan talepleri elle hazırlanmış sepetle karşılaştırır ve sepette hiçbir şeyi değiştirmez.
Mühendislik kararları
Katalog ve tam varyantlar
Katalog, Tasty Coffee toptan API'siyle istenildiğinde ya da haftada en fazla üç çalıştırmalık bir takvimle senkronize edilir. Takvimi sunucu kendisi kontrol eder, yönetim panelini açık tutmak gerekmez. Başarısız bir deneme yayımlanmış kataloğu silmez. Veritabanı her varyant için tedarikçi API'sindeki ürün, teklif, öğütme ve ambalajla tam eşleşmeyi saklar. Bu anahtar talepten sepet satırına kadar taşınır, böylece hizmet bir ürünü adından tahmin etmek zorunda kalmaz.
Güvenlik
Tüm dış istekler Nginx ve Node.js tabanlı bir gateway üzerinden geçer. Gateway, istemcinin gönderdiği kimlik başlıklarını siler ve kullanıcıyı imzalı bir HttpOnly cookie ile kendisi belirler. Yönetici oturumu 8 saat sürer, aynı adresten beş başarısız girişten sonra giriş 15 dakika kilitlenir ve parola yalnızca scrypt hash olarak saklanır. Ödeme ekran görüntüleri Yandex Object Storage'daki özel bir bucket'ta tutulur ve yalnızca gateway üzerinden açılır. Toptan hesabın giriş bilgileri sunucunun gizli değişkenlerinde durur, token ise yalnızca bellekte bulunur. Tedarikçiye ve Google Sheets'e giden istekler, genel ağdan erişilemeyen iç proxy'lerden geçer.
Küçük bir sunucuda çalışmak
Uygulama React ve TypeScript ile yazıldı. Cloudflare Workers çalışma ortamında, Docker volume içindeki yerel SQLite veritabanı üzerinde D1 API ile çalışıyor. Sunucu paylaşımlı ve 2 GB belleğe sahip. Bu yüzden konteynerlerin katı bellek sınırları var ve güncelleme sırasında eski örnek, yenisi başlamadan önce durduruluyor. Derleme sunucunun ayırabileceğinden fazla bellek isterse imaj başka bir yerde derlenip hazır halde yükleniyor.
Sonuç
Hizmet ortak tablonun ve sepetin elle hazırlanmasının yerini aldı. Talepler baştan katalogdaki tam varyantlara bağlı olduğu için öğütme, paket boyu ve miktarla ilgili hatalar azaldı. Siparişin ve ödemenin durumunu hem çalışan hem de organizatör görüyor. Benim tahminime göre hizmet, çalışanlara ve yöneticilere ayda toplam 100 saatten fazla çalışma süresi kazandırıyor. Bu ayrı bir ölçümün sonucu değil, bir tahmindir.
Sürecinizi konuşalım
Ekibinizde siparişler, ödemeler ya da talepler hâlâ bir tabloda duruyor ve elle aktarılıyorsa, en çok zamanın nereye gittiğini anlatın. Benzer ihtiyacı görüşelim.
İlgili alanlar: iç sistemler, API entegrasyonları ve elektronik tablo otomasyonu. İlgili okuma: elektronik tabloları ne zaman bir sistemle değiştirmeli.
Aynı teknolojiler, farklı görevler
2023’ten beri sera iklimi ve parametreleri için ağlar, sunucular, backend ve arayüze bağlı mikrodenetleyiciler.
Servis operasyonlarıServis işletmesinde çağrılar, CRM ve ekip operasyonları2021’den beri backend, 15 ölçütlü çalışan sıralaması, canlı TV panoları, IVR’den GoHighLevel’a kayıt ve AI çağrı analizi.
İK ve işe uyumÇalışan işe alıştırmasını bağlı bir sürece dönüştürmekWorkspace bağlantılı işe alıştırma uygulamasında roller, belgeler, eğitim ve hatırlatmalar.