Money Visualiser, herhangi bir para miktarını fiziksel olarak doğru 3B banknot desteleri hâlinde çiziyor; bir maaşın, bir evin ya da bir milyarderin servetinin gerçekte neye benzediğini gözünüzle görüyorsunuz. Ocak 2026'da bir web oyuncağı olarak başladı, üç kod tabanına büyüdü: site, Chrome eklentisi ve mobil uygulama. Bu sayfa o büyümenin dürüst hikâyesi — neredeyse hiçbir şeyin olmadığı iki ay dahil.
Kimsenin büyük para miktarlarına dair sezgisi yok. Yüz doların neye benzediğini bilirsiniz; yüz milyonun neye benzediğine dair hiçbir fikriniz yoktur, benim de yoktu. Money Visualiser bunu düzeltmek için var: bir miktar yazın, para birimini seçin, size gerçek desteleri çizsin — gerçek banknot ölçüleri, gerçek kupürler, bankaların yaptığı gibi destelenmiş ve tuğlalanmış — içinde dolaşabildiğiniz bir 3B sahnede. Ölçek için yığının yanında bir insan figürü duruyor. Beni bu projeyi yapmaya ikna eden an, orta sınıf bir ömrün toplam kazancının tek bir palete sığdığını görmek oldu.
İlk commit 13 Ocak 2026'da atıldı ve moneyvisualiser.com üç aylık bir sprintte ortaya çıktı. Sonra aynı fikir başka yüzeylere sızmaya başladı: sizi fiyatların zaten olduğu yerde karşılayan bir Chrome eklentisi ve bütün 3B boru hattını telefon GPU'sunda yeniden üretmek zorunda kalan bir mobil uygulama. Üç depo, Ağustos 2026 ortası itibarıyla aralarında 1.532 commit, hepsi tek kişi.
Konsept bir oyuncak. Uygulama ise aynı markayı taşıyan üç ayrı mühendislik problemi:
Bir destenin anlam taşıması için banknotların doğru olması gerekiyor. Katalog 82 itibari para birimini her banknotun gerçek uzunluğu, genişliği, kalınlığı ve kupür setiyle modelliyor; buna külçe hâlinde değerli metaller ve geniş bir kripto kataloğu ekleniyor. Hepsi bankaların gerçekte yaptığı gibi 100'lük desteler, 1.000'lik tuğlalar ve daha büyük paketler hâlinde örgütleniyor. Bu veriyi toplamak ve tutarlı tutmak, render tarafındaki her işten daha uzun sürdü ve projenin en değerli varlığı hâline geldi — mobil uygulamanın kendi kopyasını tutmak yerine kataloğunu web deposundan üretmesinin sebebi tam olarak bu.
Yüzlüklerle bir milyar dolar, on milyon banknot demek. Tarayıcıda on milyon mesh çizemezsiniz; bu yüzden her şey instancing ile deste düzeyinde çiziliyor — deste başına yaklaşık yüz banknot — WebGL'de 1.000, isteğe bağlı WebGPU yolunda 5.000 deste sınırıyla. Bunun üzerinde sahne yalan söylemek yerine temsil değiştiriyor: kuleler ve toplu katmanlar devreye giriyor. Canlı kurlar beş katmanlı bir yedekleme zincirinden geliyor (edge önbelleği, ECB, Frankfurter, Twelve Data, statik anlık görüntü); çünkü kur API'si hıçkırdığında ölen bir görselleştiriciye kimse güvenmez.
Web uygulaması Cloudflare Workers üzerinde Next.js; arkasında R2 ve D1 var. Eklenti, content script'ler ve bir service worker ile Vite derlemesi. Uygulama ise expo-gl ve Skia üzerinden çizen Expo/React Native. Render kodu neredeyse hiç paylaşılmıyor — paylaşılan şey veri ve davranış: mobil depo varlık kataloğunu web sitesinin kaynak dosyalarından üretiyor ve buna karşı parite testleri çalıştırıyor. Böylece bir kez düzeltilen banknot ölçüsü her yerde düzeltilmiş oluyor. Port başlarken verilen bu karar, üç kod tabanının üç ayrı ürüne savrulmamasının sebebi.
Commit geçmişi bunu bir yol haritasından daha dürüst anlatıyor:
Üç ayda 765 commit: katalog, 3B sahne, altın kasasından uçak gemisine altı ortam, paylaşılabilir URL durumuyla karşılaştırma modu, tarihsel grafikler, yedi arayüz dili, D1 tabanlı bir blog ve Cloudflare Workers'a geçiş. Mart sonunda site fikrin vaadini yerine getiriyordu. Nisan ve Mayıs'ta web tarafında 7 ve 0 commit görünüyor — kısmen yorgunluk, kısmen de bir sonraki kazanımın başka bir web özelliği olmadığını doğru fark etmek.
Eklenti deposu 19 commit ve yaklaşık 9.400 satır; bu küçüklük bilinçli. Popup içinde 3B çizmeye kalkmıyor; zaten okuduğunuz sayfalardaki fiyatları tespit edip doğru parametrelerle siteye devrediyor. Temmuz'da tek yoğun günde çıkan 1.3.0 sürümü bir Google Arama widget'ı ekledi: bir kur dönüşümü aratın, satır içi bir kart ve tek tıkla tam karşılaştırma sahnesine geçiş alın. Dağıtım yüzeyi, ikinci bir motor değil.
Uygulama deposunun ilk commit'i 2 Mayıs 2026 — sonra o tek commit iki ay boyunca yalnız kalıyor. Gerçek port Temmuz'da geldi: bir ayda 516 commit; sitenin sahne matematiği paylaşılan bir görsel çekirdek olarak yeniden kuruldu, altı ortamın tamamı Skia dokularıyla expo-gl'e taşındı ve her adım web sitesine karşı ekran görüntüsü paritesiyle denetlendi. Ağustos ise yayın QA'sı: cihaz kanıtları, Maestro akışları, mağaza kontrol listeleri. Bu, mağazalara yaklaşan bir 1.0.0 — mağazalarda değil; bunu açıkça söylemeyi tercih ederim.
Üç kaynak ağacında toplam yaklaşık 199.000 satır TypeScript: kabaca 135.000 web, 55.000 mobil, 9.000 eklenti. Web uygulaması yedi dilde moneyvisualiser.com'da yayında. Eklenti fiyat tespiti ve arama widget'ıyla 1.3.0'da. Uygulamada altı ortamın tamamı yerel olarak çiziliyor ve yayın kontrol listeleri işleniyor. Bu sayıların hiçbiri kullanım metriği değil; depo istatistiklerini kullanıcı sayısı gibi giydirmeyeceğim.
"Aşağıdaki aylık commit grafiği bu sayfadaki en dürüst çıktı. Patlamalarla inşa edilmiş bir ürünü gösteriyor: üç aylık bir web sprinti, neredeyse sessiz bir ilkbahar ve mobil portun orijinal sprintin en iyi ayını geride bıraktığı bir Temmuz. Tek kişilik ürünler doğrusal ilerlemez; benimkilerin ilerlediğini iddia etmeyi bıraktım. Boşluklar, düşünmenin gerçekleştiği yerler."
Aşağıdaki her şey 13 Ağustos 2026'da üç yerel git deposundan ve kaynak ağaçlarından doğrudan okundu. Commit sayıları git log'dan geliyor; satır sayıları node_modules ve derleme çıktısını dışlıyor; Ağustos verisi ayın yalnızca ilk on üç gününü kapsıyor.
865 web, 648 mobil, 19 eklenti — Ocak–Ağustos 2026.
Web, Chrome eklentisi ve mobil uygulama aynı varlık verisini okuyor.
Her biri gerçek banknot ölçüleri ve kupürleriyle; ayrıca metaller ve kripto.
İngilizce, Almanca, İspanyolca, Fransızca, Japonca, Türkçe, Çince.
13.08.2026'da üç yerel git deposundan ve kaynak ağaçlarından okundu.
Üç depo, tek kişi, sekiz ay. Commit toplamları emeğe göre ağırlıklandırılmış değil — bir doküman commit'i, bir haftalık sahne matematiğiyle aynı sayılıyor — ama 1.532 commit boyunca biçim gerçek: ürünü web deposu taşıyor, portu uygulama deposu taşıyor, eklenti bilerek küçük kalıyor.
Gold Vault ortamında karşılaştırma modu: 50 dolarlık banknotlarla 1.000.000 $ ile euro karşılığı yan yana — 200 desteye karşı 172, ağırlıklar dahil
Bu grafikte iki şeyi açıkça söylemek gerek. Nisan–Mayıs çukuru bir gizem değil: web sürümü fikrin çalıştığı noktaya varmıştı ve dürüst olan sonraki adım, özellik eklemek değil ürünün bundan sonra nerede var olacağına karar vermekti. Temmuz sıçraması ise altyapı tuttuğunda planlı bir portun neye benzediği — parite düzeneği Temmuz'un ilk günlerinde kuruldu, sonrası ona karşı icraattı.
Aynı karşılaştırma modu Android'de yerel olarak çalışıyor: canlı kurlarla 5.000.000 $ ile euro karşılığı, dolar ve euro banknotları kendi ölçüleriyle çizilmiş
Satır sayısı değeri değil boyutu ölçer — bütün sistemin en önemli dosyası para birimi kataloğu ve o satırların küçük bir kısmı. Ama dağılım stratejinin adil bir resmi: bir ağır merkez, bir sadık port, bir ince kama.
Web uygulaması ürünün kendisi: altı ortamlı 3B sahne, paylaşılabilir URL durumuyla tekli ve karşılaştırma modları, tarihsel kur grafikleri, gömülebilir widget, bağımsız araç sayfaları ve blog; yedi dilde, piyasa verisi için ayrı bir worker ile Cloudflare Workers üzerinde. Beş katmanlı kur yedeklemesi sayesinde kur sağlayıcılarının yarısı çökse bile sahne çiziliyor.
Web uygulamasının giriş ekranı: tutar, para birimi çifti ve yüzeyler, ortamlar ile para birimine özel kupürleri gösteren görselleştirme paneli
Eklenti dağıtım kanalı. Zaten okuduğunuz sayfalardaki fiyatları izliyor — 1.3.0 itibarıyla Google kur aramalarındaki satır içi widget dahil — ve bunları karşılaştırması önceden ayarlanmış tek tıklık görselleştirici geçişlerine çeviriyor. On dokuz commit; çünkü görevi küçük olmak.
Mobil uygulama ise bunun cebinize ait olduğu bahsi. Sahneyi yerel olarak yeniden üretiyor — expo-gl, Skia dokuları, instanced çizim, altı ortamın tamamı — web sitesiyle ekran görüntüsü paritesine karşı; ve bütün varlık kataloğunu web deposunun kaynağından üretiyor ki ikisi bir banknotun ölçüsü konusunda asla anlaşmazlığa düşmesin. Ağustos 2026 ortası itibarıyla yayın QA'sında, mağazalarda değil; bu değiştiğinde bu sayfa güncellenecek.
Parking Lot ortamında bir kaide üzerinde desteler hâlinde 5.000.000 $, arkada şehir silueti — web sitesinin çizdiği sahnenin aynısı, telefon GPU'sunda
Belirli bir büyüklüğün ötesinde manzaralı ortamlar seçenek olmaktan çıkıyor: uygulama Minimal Grid'e kilitleniyor ve bunu açıkça söylüyor; çünkü paletlerle dolu bir otopark ne çizilebilir ne de okunabilir. Web tarafındaki deste üst sınırlarıyla aynı içgüdü — sahnenin neye dönüşeceğine, GPU sizin yerinize karar vermeden önce siz karar verin.
Minimal Grid üzerinde tuğlalanmış paletler hâlinde 500.000.000 $ — uygulamanın çok büyük tutarlar için kilitlendiği geri düşüş sahnesi
3B render işin vitrini; ama en uzun süren ve en çok önem taşıyan şey varlık kataloğu: gerçek fiziksel ölçüleriyle 82 para birimi, kupürler, metaller ve kripto, hepsi birbiriyle tutarlı. Render kodu platform başına yeniden yazılıyor; katalog tek kaynaktan üretiliyor. Yarın bütün renderer'ları kaybetsem yeniden yazarım. Asıl maliyet kataloğu yeniden kurmak olurdu.
Eklenti işe yarıyor çünkü ikinci bir ürün olmayı reddediyor. On dokuz commit, arama sonuçlarında ve alışveriş sayfalarında bir varlık satın aldı; çünkü zor olan her şeyi siteye devrediyor. Mobil uygulama ise tam tersi bir bahis — eksiksiz bir yerel port — 648 commit'e mal oldu ve hâlâ yayınlanmadı. İkisi de kendi amacı için doğruydu ama aradaki oran taşıyacağım bir ders: yeni bir platform için motoru yeniden kurmadan önce kullanıcılarla oldukları yerde ucuza buluş.
Mobil yeniden inşa, ancak her adım web sitesine karşı ölçüldüğü için işledi: parite testli üretilmiş bir katalog ve her ortam ile para katmanı için ekran görüntüsü referansları. Bu düzenek olmadan, bir 3B boru hattını farklı bir GL yığınına tek başına taşımak benzerine kaçan bir kopyaya savrulurdu. Düzenekle, iki ürün bir milyon doların neye benzediği konusunda anlaşmazlığa düşmeden bir ayda 516 commit indi.
Money Visualiser tek bir fikir — para miktarlarını fiziksel olarak okunur kılmak — sekiz ayda üç platforma taşındı: Next.js ve Cloudflare üzerinde 765 commit'lik bir sprintte kurulan web uygulaması, arama sonuçlarını ve fiyat etiketlerini giriş noktasına çeviren bilinçli olarak minik bir Chrome eklentisi ve bütün 3B boru hattını parite testlerine karşı yeniden üreten, şu an yayın QA'sındaki yerel mobil port.
Bütün bundan savunacağım kalıp şu: yeri doldurulamaz emeği koda değil veriye koy ve her yeni platform ondan üretsin. Renderer'ların hepsi farklı. Para her yerde aynı — ki bu ürün için bütün mesele zaten bu.