
AdvTool (side proje)
Projeye Nasıl Başladım?
İlk başta amacım sadece yeni teknolojileri keşfetmekti. Basitçe, VDA mesajlarını kaydeden ve tekrar oynatabilen küçük bir araç geliştirmeyi hedefliyordum. Web tabanlı bir uygulama yapmayı planladım ve bu yolculuk böyle başladı. Aklımda sadece bir backend ve bir frontend uygulaması olan, verileri timestamp ile bir veritabanına kaydeden basit bir yapı vardı.
2024 Temmuz-Ağustos aylarında farklı veritabanlarını denemeye başladım. Pek çok veritabanı inceledikten sonra JSON verilerini saklamak için en uygun çözümün (şu an için) TimescaleDB olduğunu fark ettim. Başlarda biraz yavaş gelse de hypertable gibi özellikleri kullanmaya başlayınca performansın ciddi şekilde arttığını gördüm.
Veritabanına veri yazmak için Telegraf gibi farklı yöntemleri denedim. Ama sonra biraz daha “kendim yapayım” moduna girdim ve Rust ile bir backend uygulaması geliştirdim. Bu uygulama verilen MQTT konfigürasyonlarıyla bir MQTT broker’a bağlanıp gelen verileri kaydediyor, aynı zamanda websocket ile frontend’e iletiyor. Her şey planladığım gibi gitti. Hatta bir video çekip LinkedIn’de paylaştım. Videoyu buradan izleyebilirsiniz.
Proje Nasıl Bir Platforma Evrildi?
Yaklaşık iki ayda bu uygulamayı geliştirince, aklıma yeni fikirler gelmeye başladı. Madem bu verileri kaydedebiliyoruz, neden analiz de etmeyelim? Elimizde tonla işlenmemiş veri var ve sadece oynatmakla mı yetineceğiz?
Projenin başından beri para kazanma gibi bir hedefim yoktu (hala da yok, tamamen free-to-use olacak). Bu yüzden projeyi genişletmeye karar verdim.
Zamanla aklımdaki fikir bir platforma dönüştü: araçlarınızı, siparişlerinizi ve bu verilere ait analizleri, istatistikleri görebileceğiniz bir yer. Amaç, filoda bir şeyler ters gidiyorsa bunu hemen fark edip iyileştirme yapabilmek. Üstelik bu sistem herhangi bir fleet manager’a bağlı olmayacağı için verilerinizin gizliliği konusunda daha fazla kontrol sağlıyordu.
Bu nedenle frontend’i local olarak değil, bir üyelik sistemiyle erişilebilecek hale getirdim. Ancak tüm veriler yine local sistemde tutuluyor — tıpkı VDA mesajlarını TimescaleDB’ye kaydettiğimiz gibi.
Kurulum oldukça basit: AdvTool üzerinden bir üyelik oluşturuyorsunuz, ardından bir docker-compose
dosyasıyla projeyi ayağa kaldırıyorsunuz. Docker içinde çalışan iki ayrı uygulama verileri kaydedip analiz ediyor, sonuçları da sizin veritabanınıza yazıyor.
Başta Supabase’i localde çalıştırmayı düşünüyordum ama sonra PostgREST’i keşfettim. PostgREST, PostgreSQL veritabanınıza bağlandığınızda size otomatik olarak RESTful API sağlayan harika bir araç. Üstelik OpenAPI standardını da destekliyor, bu da frontend tarafında işleri fazlasıyla kolaylaştırıyor. OpenAPI dosyasını kullanarak frontend’de client kodlarını kolayca oluşturabiliyorsunuz.
Başlarda Rust’ta herhangi bir ORM kullanmadan, direkt tokio
ile veritabanına erişiyordum. Ama güncellemeleri nasıl yöneteceğim sorusuyla karşılaşınca 2025 Ocak ayında Diesel kullanmaya karar verdim. Şu an sistem Diesel ile stabil şekilde çalışıyor.
Verileri zaman aralıklarına göre filtrelemek istiyordum — örneğin, belirli bir zaman aralığında ortalama değerleri alıp anlamlı veriler oluşturmak. Bunun için PostgreSQL içindeki fonksiyonları kullandım. Bu da performansa büyük katkı sağladı.
Rust uygulamalarımı paylaşmak için en uygun yolu düşündüm. Rust zaten derlenen bir dil olduğu için kodlar doğrudan erişilebilir değil. Bu yüzden her uygulama için birer Docker dosyası oluşturdum ve imajları Docker Hub’a yükledim. Böylece sadece docker-compose
ile uygulamaları kolayca kurabilirsiniz.
Frontend
Frontend için Vue 3 kullanmaya karar verdim. Landing page ve dokümantasyon için ise yeni bir şey denemek istiyordum. Kısa bir araştırma sonrası Next.js tarafına yöneldim ve ShadCN ile desteklenen bir tema buldum. Landing page’e ayrı bir tasarım entegre ettim ve bu sayede profesyonel bir görüntü elde ettiğimi düşünüyorum. Dashboard ile aynı temayı kullanmak da uygulamanın “tek elden çıkmış” hissini güçlendirdi.
Dashboard tarafı ise gerçekten çok emek isteyen bir kısımdı. Kütüphaneler olsa da birçok iş yine size kalıyor. Supabase’in OpenAPI sunup sunmadığını araştırdım ama kesin bir sonuca ulaşamadım. Neyse ki PostgREST bu dosyayı sağlıyor ve tüm API’leri tip tanımlarıyla birlikte frontend’de kolayca kullanabiliyorsunuz.
Grafik tarafında birkaç deneme sonunda en iyi çözümü buldum. İlk olarak ShadCN-Vue tarafından sağlanan grafik kütüphanesini denedim ama büyük veriyle performans düşüyordu. Sonra ApexCharts’a geçtim, özellikleri hoşuma gitse de güncelleme metotlarıyla sorun yaşadım. En sonunda Chart.js ile tanıştım. Hem performans hem de kullanım kolaylığı açısından beni en çok tatmin eden seçenek oldu. Plugin desteğiyle de oldukça esnek.
ShadCN Hakkında
ShadCN’e ayrıca değinmek istiyorum. Klasik UI kütüphaneleri tüm bileşenleri minified halde tek bir dosyada sunar. Özelleştirme zordur ve kullanmadığınız bileşenler bile projeye dahil olur. ShadCN bunu tamamen değiştiriyor: CLI ile ihtiyacınız olan bileşenleri projenize dahil ediyorsunuz. Orijinali React için geliştirilmiş olsa da Vue versiyonu da çok başarılı. Hem görsel hem de mantıksal olarak projede kullanmaktan oldukça memnunum.
AI Desteği
Projenin başında AI (Copilot hariç) hiç kullanmadım. Sonradan Cursor denemeye başladım ve işleri ciddi şekilde hızlandırdı. Ancak her ilacın dozu olduğu gibi, AI’ın da kontrollü kullanılması gerektiğini düşünüyorum. “Kod yazmayı AI’a bırakmak” sizi koddan koparabilir. Örneğin, Cursor ile bir sayfa geliştirdim ama sonra küçük bir şeyi bile değiştirmem uzun zaman aldı çünkü koda hâkim değildim. Bu yüzden AI’ı adım adım kullanmak en mantıklısı: ne yapmak istediğimi net şekilde tanımlayıp Cursor’a bunu parça parça yaptırıyorum ve her satırı kontrol ediyorum. Bir anda 500 satır kod ekleniyorsa, orada durup düşünmek gerekiyor.
Eksikler
Projede hâlâ geliştirmek istediğim pek çok şey var:
- Araç ve sipariş bazında analiz yapabiliyoruz ama filo genelinde analizler henüz yeterince detaylı değil.
- Güvenlik tarafında PostgREST şu an sadece HTTP ile çalışıyor; HTTPS desteği şart.
- TimescaleDB 150GB civarına ulaştığında bazı dosya kayıpları yaşadım. Bu sorun veritabanından mı yoksa veri akışından mı kaynaklı emin değilim. Yeniden üretmeye çalışıyorum.
Nasıl Test Ediyorum?
Evde eski bir bilgisayarımı local server’a çevirdim. Küçük bir script ile sürekli VDA5050 siparişleri üretiyor ve bunları simüle ediyorum. Sanal bir filoya sahip olmak ilk başta beni epey heyecanlandırmıştı. Sonuçları da AdvTool üzerinden takip ediyorum.
Bir Sonraki Adım Ne?
Planım, bir form aracılığıyla projeyi kullanmak isteyen kişi ya da firmalara hesap oluşturma imkanı sunmak. Tüm veriler tamamen localde tutulacağı için sorumluluk tamamen kullanıcıya ait olacak. Bu projenin ticari bir amacı yok ve bu çizgide devam edecek. Kullanıcıların geri bildirimleriyle projeyi daha da geliştirmek istiyorum. Ama bunun için biraz daha zamana ihtiyacım olduğu kesin.
Kullandığım Teknolojiler
- Supabase
- InfluxDB (vazgeçildi)
- Telegraf (vazgeçildi)
- PostgREST
- TimescaleDB (PostgreSQL)
- Diesel
- Rust
- Docker Hub
- ShadCN
- Chart.js
- ApexCharts (vazgeçildi)
Bu bağlantıdan siteye gidebilirsiniz: advtool.one