İçeriğe atla
megapromotingHadi konuşalım

Uzmanlık · Oyunlar ve simülasyonlar

Bir bağlantıdan açılan, Three.js ile WebGL üzerinde kurulu oyunlar, simülasyonlar ve etkileşimli deneyimler.

Tarayıcıda etkileşimli deneyimler kuruyoruz: uygulanan kurallar, değişen bir durum ve insanın bir adım daha atması için bir neden. Aynı yığın üzerinde kurulan beş proje, bunların dördü şu anda herkese açık.

Zaten kurduklarımızCinci implementări proprii pe aceeași stivă, dintre care patru se pot deschide de oricine fără să ne întrebe pe noi: humanoid-sim.megapromoting.com, vision.megapromoting.com, www.megapromoting.com/satelit/ și relieva.vercel.app — toate 200 la verificarea din 06.09.2026. Three.js apare în 17 fișiere sursă scrise de noi, în cinci depozite. Rezerva care schimbă jumătate din pagină: Unity și Unreal NU apar nicăieri în codul nostru — nici într-un fișier, nici într-un proiect, nici măcar ca aplicație instalată. Partea aceea rămâne ofertă cu condiții și e scrisă ca atare, nu ca realizare.

Bir bağlantıdan açılan oyunlar, simülasyonlar ve etkileşimli deneyimler kuruyoruz. Kurulum yok, mağaza yok, eklenti yok: motor Three.js ile WebGL üzerindedir ve kullanıcı bir adresi açarak girer. Bu, gösterebildiğimiz yığın — yapılmış beş proje, bunların dördü herkese açık, hepsi kontrol etmek isteyen herkes tarafından açılabilir.

Bir oyun güzel bir sayfa değildir. Uygulanan kurallar, değişen bir durum ve insanın neden bir adım daha attığını açıklayan bir sebep vardır. Bizim soruşturma oyunumuzda bu sebep 72 saatlik bir saat: bir replik size 10 dakika, şehir içinde bir yolculuk 30 dakika mal olur; kapanış saatinde dossier sizle olsun ya da olmasın kapanır. Robot simülasyonunda sebep meraktır: aynı robot, aynı sıçrayış, farklı yerçekimi.

Ciddiye aldığımız kısım, alışıldığı gibi olmaktan çok kaynak kısmıdır. Bir simülasyonda en kolay yalan, güzel bir animasyonun kanıtlanmış fizik gibi geçmesine izin vermektir. Robot simülasyonunda arayüzdeki 15 işlemin tamamı kodda `cinematic` olarak işaretlenmiştir, uygulamanın kanıt paneli `actionValidation: "none"` beyan eder ve projenin yayın kapısı bugün “Release qualification: blocked” yanıtını verir. Destekleyemeyeceğimiz bir iddia yerine reddeden bir kapıyı yayınlamayı tercih ederiz.

Unity ve Unreal hakkında açık konuşuyoruz: onları sipariş üzerine alırız, ama onlarda teslim edilmiş hiçbir projemiz yok. Bu cümlenin ardından gelen her şey — koşullar, riskler ve nasıl başladığımız — aşağıda yazılıdır, dipnotta gizli değildir.

Neleri kapsıyor

Çalışma, bileşenlerine ayrılmış hâliyle

Önce kural, sonra grafik

Tekstürsüz ama doğru kuralı olan bir prototip, risksiz güzel bir sahneden daha çok şey söyler. Soruşturma oyununda kural, beş karakter, üçü sağlam delil olan sekiz ipucu, dört motiv, dört son ve her repliğin 10 dakika azalttığı, her hareketin 30 azalttığı 72 saatlik bir saat anlamına gelir. 00:00–07:00 saatleri otomatik olarak atlanır, böylece saat uykuda tüketilmez.

Browserda sahne, Three.js üzerinde

Aynı kütüphane beş depoda: Three.js 0.184–0.185, bazen `@react-three/fiber` ve `@react-three/drei` üzerinden, bazen doğrudan yazılmış. İki proje React sürümünü kullanıyor; diğer iki proje, buffer özniteliklerini elle yönettiğimiz düzeye kadar saf Three.js yazıyor. En büyük özel motor 1.824 satır ve tüm uyduları konum, renk, boyut ve şeffaflık öznitelikleri her karede yerinde güncellenen tek bir `THREE.Points` nesnesi olarak çiziyor.

Zayıf cihazlarda kendiliğinden düşen render

Bu sitedeki shader üç kademeye sahip: `low` için 24 raymarching yinelemesi ve 0,5 piksel oranı, `medium` için 40 ve 0,65, `high` için 80, `highp` hassasiyeti ve 2 ile sınırlı oran. Seçim otomatik: mobilde `low`a iner, 4 çekirdekli veya daha az çekirdeğe sahip her cihaz onu `high`tan `medium`a düşürür. WebGL yoksa bileşen hata fırlatmak yerine temizce kapanır. Diğer projelerde de aynı disiplin: şehir sahnesinde 1,6 ve arazi sahnesinde 1,75 üst sınır, dünya demonstratöründe mobilde 1,5; canvas ekrandan çıktığında render döngüsü durur.

Tek çizim olarak kalan büyük sahneler

9.506 binaya sahip bir şehir, 9.506 nesne demek değildir. OpenStreetMap’teki her ayak izi, pahsız ve `curveSegments: 1` ile bir `ExtrudeGeometry` olur, tepelerde doğrudan yazılan rengi alır, `uv` özniteliği silinir — ve sonra hepsi `mergeGeometries` ile tek bir geometriye birleştirilir. Kamu verilerindeki dejenerik geometrik halkalar `try`/`catch` ile atlanır, sayfayı yıkmalarına izin verilmez.

Yalan söyleyen, hatırlayan ve koşullarda çöken karakterler

Vakanın gerçeği sayfada durmaz. Beş karakterin dosyaları — biyografi, sır, hangi koşulda kırıldıkları — `import "server-only"` ile başlayan ve istemciden import edilemeyen bir dosyada durur. Karakter, oyuncunun görmediği bir etiketle açılmış bir ipucu bildirir ve sunucu bunu yalnızca o karakterin o ipucunu verme hakkı varsa kabul eder. Kendisine ait olmayan bir ipucu uyduran bir model yok sayılır, inanılmaz.

Çeviri değil, mekanik olarak dil

Bir karakter Rumence kısa ve savunmacı cevap verir, ama Rusçada konuşkan ve tehlikeli derecede dürüst olur — kural onun dosyasına yazılmıştır ve Rusçadaki ilk replik güvenini artırır. Mikrofon da aynı dili izler (`ru-RU` veya `ro-RO`). Yerelleştirmenin klasik olduğu yerde daha ileri gideriz: robot simülasyonu sekiz dile sahiptir, Arapça açıkça sağdan sola yazı olarak işaretlenmiştir.

İzlenimlerle değil, formüllerle simülasyon

Sıçrama yüksekliği yerçekimi oranıyla ölçeklenir, yürüme periyodu 2π√(L/g) ile, Froude sayısı v²/(g·L) ile, hava direnci ise gezegen atmosferinin yoğunluğuyla. Batarya ömrü, dört eşikli sıcaklığa bağlı bir azalma fonksiyonundan geçer: 20 °C üstünde değişmez, 0 °C üstünde `0,85 + 0,0075·T`, −20 °C üstünde `0,55 + 0,015·T`, −40 °C üstünde `0,12 + 0,02·T`, bunun altında %5. Yürüyüş, kosinüs yasasıyla çözülen iki segmentli ters kinematik olup, çevrim başına 0,6 destek faktörüyle çalışır.

İndirilen değil, kurulmuş ses ve seslendirme

Soruşturma oyununun atmosferinde hiçbir ses dosyası yok: yağmur, 1.400 Hz’de alçak geçiren ve 300 Hz’de yüksek geçiren filtreden geçirilmiş, döngüye alınmış pembe gürültüdür; plak çıtırtısı her 180 ms’de üretilen kısa darbelerdir; gök gürültüsü ise 18–48 saniyede bir zamanlanan, üstel sönümlü bir gürültü patlamasıdır. Görsel yağmur ayrı bir 2D canvas’tır, 180’e kadar eğik damla ile. Ses iki yönde çalışır: tarayıcı konuşma tanıma arayüzü üzerinden dikte ve ElevenLabs `eleven_multilingual_v2` ile karakter başına sentezlenen replikler, MP3 44,1 kHz / 128 kbps.

Hazır yükleyicisi olmayan 3D model formatı

Unitree G1 ve Go2 robotları MJCF ile gelir, Three.js için standart bir yükleyicisi olmayan MuJoCo formatı. Biz yazdık: XML’i okuyan, gövde hiyerarşisini yeniden kuran, her mafsalı ekseni ve aralığıyla çıkaran ve geometriyi `STLLoader` ve `OBJLoader` ile yükleyen 170 satır. Sahneye 67 mesh dosyası, 62 MB girer — humanoidde 29, dört ayaklıda 12 tahrikli mafsal, her modelin `<actuator>` bloğunda sayılmıştır.

Nasıl görünüyor

Süreç, adım adım.

01

Herhangi bir pikselden önce, kağıt üzerindeki kural

Oyuncunun ne kazandığını, ne kaybettiğini, bir eylemin ona neye mal olduğunu ve ne zaman bittiğini yazıyoruz. Kural belgesini ve durum listesini teslim ediyoruz — bir moodboard değil. Kural okunduğunda ayakta kalmıyorsa, çizildiğinde de ayakta kalmaz.

02

Anahtar ve maliyet olmadan oynanabilir prototip

Soruşturma oyunu eksiksiz ve hiçbir API anahtarı olmadan oynanır: rota, 237 satırlık betiklenmiş repliklerden oluşan bir sete dayanır ve sesler tarayıcının sesleri olur. Böylece ilk token için ödeme yapmadan önce oyun baştan sona görülebilir. Aynı mantığı her projeye uyguluyoruz: gösterim modu bir teslimat gereksinimidir, teselli değil.

03

İçerikten önce belirlenen render bütçesi

Başlangıçta hedefi belirliyoruz: hangi cihazın kabul edilebilir çalışması gerektiğini, piksel oranı üst sınırının ne olduğunu, kaç kalite kademesi bulunduğunu ve döngünün ne zaman durduğunu. Sonra içerik bu bütçeye yerleşiyor. Bu, normalde yapılış biçiminin tersidir ve sahnelerimizin telefonda çökmemesinin nedenidir.

04

Gösterilen şey etiketlenir, gösterilmeyen de aynı şekilde

Ekranda gösterilen her değere bir statü verilir: ölçülmüş, kaynaklardan çıkarılmış veya simüle edilmiş. Robot simülasyonundaki zemin, sahnede `visual_only` işaretini taşır; böylece kimse onu bir çarpışma yüzeyiyle karıştırmasın. Etiketi değerle birlikte teslim ediyoruz; bu, yapımda ek iştir ve biz gittikten sonra sayfayı dürüst tutan tek şeydir.

05

Eksik olanla birlikte teslim

Sonunda kodu, lisanslarıyla birlikte varlıkları ve tamamlanmamış olanların yazılı listesini teslim ediyoruz. Robot simülasyonu, Nginx tarafından servis edilen statik bir build olarak yayımlanır ve otomatik yayımlama pipeline’ı yoktur — bunu iç notta değil, kendi README’sinde yazar. Eksiklik listesinin bizden gelmesini tercih ederiz.

1Regula scrisă pehârtie2scena în browser peThree.js3treapta de randarecare coboară singurăpe dispozitiv slabAceeași ordine în toate cele cinci proiecte.
Traseul, în 3 pași

Veriler

Neye dokunuyoruz, nerede duruyorlar ve ne kadar kalıyorlar

Veri koruma sorumlusu olan herkesin soracağı sorular — o sormadan önce burada sorulmuş hâliyle.

Tarayıcıdan ne çıkar ve ne çıkmaz
Soruşturma oyununda kayıt, `localStorage` içinde `dosarul14-save-v1` anahtarı altında tutulur ve hiçbir yere gitmez. Sunucuya yalnızca konuşma gider; son 20 mesajla sınırlanır ve mesaj başına en fazla 600 karakter olur. Model ve ses anahtarları yalnızca sunucuda, API rotalarında bulunur; genel sayfa onları asla görmez. Dünya demonstratorunda sesli komut tarayıcı tarafından tanınır — ses hiçbir yere gönderilmez.
Veriler ve modeller nereden gelir
G1 ve Go2 robotları Google DeepMind MuJoCo Menagerie’den türetilmiştir ve modelin yanında bildirimle birlikte BSD-3-Clause lisansını korur. Kent sahnesindeki şehir, Copernicus DEM GLO-30 üzerinde OpenStreetMap’tir; anlık görüntünün tarihi veri dosyasında yazılıdır (2026-07-02). Sokak seviyesindeki fotoğrafların her biri yazarını, lisansını ve kaynak sayfasını taşır. Dünya demonstratorundaki araç ve robot simülasyonundaki tüm dekor, primitive’lerden üretilmiştir — satın alınmış varlıklar değildir.
Sadece uyulmuş değil, aynı zamanda gösterilmiş köken
Kent sahnesinde, OpenStreetMap’te beyan edilmiş yüksekliği olan binaların hangileri olduğunu ve kaç kat sayısından türetilenlerin hangileri olduğunu göstermek için şehri yeniden renklendiren bir mod vardır — 1.128 beyan edilmiş, 8.378 tahmin edilmiş, yani %11,9. ×3 dikey abartı, gerçek arazi aralığının yanında, 37,7–155,9 m, açıklamada yazılıdır. Dünya demonstratoru, sahnedeki her değişikliği dört kaynaktan biriyle etiketler ve yaratıcı katman kelimesi kelimesine „simüle edilmiş” olarak gösterilir.
Bizde „doğrulanmış” ne anlama gelir
Robot simülasyonunda bir eylem, ancak sürümlenmiş bir senaryo, yetkili bir fizik çalıştırması, bağımsız doğrulama, beyan edilmiş toleranslar ve yeniden üretilebilir bir artefakt sonrasında doğrulanmış olur. Bugün bunların hiçbiri beşinin tamamını karşılamıyor, bu yüzden 15’inin tümü `cinematic` olarak işaretlenmiştir ve arayüz bunu söyler. MuJoCo raporları vardır ve sürümlenmiştir: Dünya üzerinde humanoid’in pasif düşüşü MuJoCo 3.10.0 ve 1 ms zaman adımıyla, 31 gövdeli, 72 geometrili, 30 eklemli ve toplam kütlesi 33,341142 kg olan bir model üzerinde çalıştırılır; dosyanın `sha256` parmak izi de vardır. Serbest düşüşte ivme kontrolü −9,806650 m/s² ve 0,049033 toleransla geçer.
„Hayır” diyen gate
06.09.2026 tarihinde çalıştırılan proje kanıtı doğrulayıcısı şunu yanıtlar: determinism — geçti; fizik — geçti; kalibre edilmiş eklem durdurucu — yanlış; başlatma uygunluğu — engellendi. Neden yazılıdır: durdurucunun 5 ms yanıtı gerçek donanımda kalibre edilmemiştir. Gate, o olana kadar kırmızı kalır.

Bir vaka

Yalan söylemeyi reddeden bir eğitim simülasyonu

Durum

Bir ekip, teknik seyircinin bunun sadece bir animasyon olduğunu söyleyemeyeceği şekilde, bir robotun Ay’da Dünya’ya kıyasla nasıl davrandığını sunumlarda göstermek istiyor.

Ne kurduk

Robot modeli gerçek formatından yüklenir — MJCF, bizim yazdığımız yükleyici aracılığıyla, her eklem ve aralığıyla birlikte; humanoid için 29 tahrikli eklem devreye girer. Yürüme, iki segmentli ters kinematik ile, 0,6 destek faktörüyle yapılır. Yerçekimi, formüllerdeki değerleri değiştirir, bir animasyonun hızını değil: sıçrama yüksekliği yerçekimi oranına göre ölçeklenir, adım periyodu 2π√(L/g) ile, pil ömrü ise sıcaklığa bağlı düşüşle dört eşik üzerinden geçer. Arazi, gezegenin tohumundan deterministik olarak üretilir — 80 m kenar, Dünya’da 0,18 m ve Ay’da 0,58 m genlik — ve sahnede `visual_only` işaretini taşır, böylece kimse onu çarpışma yüzeyi sanmasın. Tarayıcıdan ayrı olarak, 1 ms adımla MuJoCo içinde sayısal bir doğrulama çalışır ve sonucunu model parmak iziyle birlikte sürümlenmiş bir JSON raporuna yazar.

Ne çıktı

Sahne bir bağlantıdan, sağdan sola yazı dahil sekiz dilde açılır. Arayüzdeki her eylem dürüstçe etiketlenir — bugün hepsi kinematik önizleme olarak — ve açılır bir panel tam olarak neyin sayısal olarak doğrulandığını, neyin doğrulanmadığını gösterir. Salondan biri “kanıtlandı mı?” diye sorduğunda, yanıt ekrandadır, konuşmada değil.

Vakanın söylemedikleri

Açık bir formatta, lisansı doğrulanmış bir robot modeli; gösterilmesi gereken değerlerin yazılı bir listesi; ve doğrulanmamış değerlerin, satış sunumları dahil olmak üzere, bu şekilde işaretli kalacağına dair onay. Üçüncü madde olmadan proje bu değildir.

Sorular

İnsanların aramadan önce bize sordukları

Hangi motor üzerinde kuruyorsunuz ve neden tam olarak onu?

Tarayıcıda, WebGL üzerinde Three.js. Neden pratik: teslim edilecek şey bir bağlantıdır. Kurulum yok, mağaza yok, inceleme süreci yok; bir düzeltme yayınlandığı anda herkese ulaşır. Bunu beş depoda kullanıyoruz — 0.184 ve 0.185 sürümleri — bazen `@react-three/fiber` ve `@react-three/drei` üzerinden, bazen doğrudan yazarak, manuel olarak buffer özniteliklerini yönettiğimiz seviyeye kadar. Dört proje şu anda herkese açık, dolayısıyla iddia bize sormadan doğrulanabilir.

Unity veya Unreal’da yapabilir misiniz?

Bunları sipariş üzerine alırız, ama dürüst cevap başka türlü başlar: Unity veya Unreal üzerinde teslim edilmiş hiçbir projemiz yok. Çalışma makinesindeki tüm kodu aradık — `UnityEngine` için hiçbir referans, `.uproject` dosyası yok, `.csproj` yok, Unreal makrosu yok. Motorlar hatta kurulu bile değil. Birini seçerseniz pratikte ne değişir: teslim edilecek şey bir web adresi değil, platform başına bir build olur; dağıtım mağaza veya yükleyici üzerinden geçer; ve lisans koşulları, proje tarihinde Unity ve Epic tarafından yayımlanan koşullardır, biz de onları o zaman doğrularız, varsaymayız. Nasıl ilerliyoruz: ücretli bir prototiple başlıyoruz ve proje bizim içeride sahip olmadığımız motor deneyimini gerektiriyorsa, bunu sözleşmeden önce söylüyoruz.

Telefonda çalışıyor mu?

Evet, ve bu bir umut değil, yapım sırasında alınmış bir karardır. Bu sitedeki shader üç kalite aşamasına sahiptir — 24, 40 ve 80 iterasyon — ve otomatik olarak düşer: мобilde en hafif olanla başlar, 4 çekirdekli veya daha az çekirdeğe sahip herhangi bir cihazda maksimum kademe orta kademe olur. Piksel oranı her yerde sınırlandırılmıştır: burada düşük kademede 0,5, dünya demonstratöründe mobilde 1,5, şehir haritasının iki sahnesinde ise 1,6 ve 1,75. Canvas ekran dışına çıktığında döngü durur. Size veremeyeceğim şey: belirli bir telefon için saniyedeki kare sayısı — yayımlanabilir böyle bir ölçümümüz yok, bu yüzden uydurmuyoruz.

Oyun tarayıcıda mı açılıyor yoksa kuruluyor mu?

Şimdiye kadar yaptığımız her şey tarayıcıda açılıyor. Projelerin üçü, sunucumuzda Nginx üzerinden servis edilen statik build’ler; biri Vercel üzerinde. Kurulabilir bir oyun — masaüstü, telefon veya konsol — farklı bir konudur: geliştirici hesabı, inceleme süreci, yaş derecelendirmesi ve büyük olasılıkla başka bir motor gerektirir. Projelerimizin hiçbiri bir mağaza üzerinden dağıtılmıyor, dolayısıyla bu, kendi adımları olan yeni bir yol olurdu.

Kodun ve varlıkların sonunda sahibi kimdir?

Projeniz için yazılan kod size aittir ve şartlar çalışma başlamadan önce sözleşmeye yazılır. Varlıklar için ayrım önemlidir: primitiflerden veya kamuya açık verilerden üretilenler ek kısıtlamalar olmadan gelir — dünya demonstratöründeki araba kutular, kapsüller ve silindirlerden yapılmıştır, kentsel sahnedeki şehir Copernicus DEM üzerine OpenStreetMap’tir. İçe aktarılanlar kendi lisanslarını korur: Unitree robotları MuJoCo Menagerie’den BSD-3-Clause lisanslıdır, bildirim modelin yanındadır. Sipariş üzerine oluşturulan grafiklere sahip bir projede, her varlığın kaynağı ve mülkiyeti listede, varlık varlık belirlenir.

Peki çok oyunculu mod ne olacak?

Bu, sahip olduğumuz en dürüst sınırdır. Beş projeden hiçbirinde oyuncular arasında paylaşılan durum yok: soruşturma oyunu her şeyi `localStorage` içinde tutar, robot simülasyonu durumu sayfa belleğinde tutar. Aynı anda birden fazla kişiyle oynanan bir oyun, durum için yetkili bir sunucu, senkronizasyon ve ağ gecikmesinin ele alınmasını gerektirir — yeni parçalar, işaretlenecek bir ayar değil. Kurulabilir, ancak ayrı bir alt sistem olarak projeye girer; kendi emeğiyle, bir seçenek olarak değil.

Bir şey oynanabilir hale gelene kadar ne kadar sürer?

Sana destekleyemeyeceğim bir sayı vermem. Sana sıralamayı veririm: ilk teslim, doğru kurallı ve минимал grafikli oynanabilir bir prototiptir, ve hiçbir API anahtarı olmadan çalışmalıdır — tıpkı soruşturma oyunumuzun tamamen betiklenmiş replikler üzerinden ilerlemesi gibi. Ancak kural tuttuğunda grafik, ses ve model eklenir. Bir sağlayıcı kuralı görmeden önce sana süre vaat ediyorsa, ölçmediği bir şeyi vaat ediyor demektir.

Karakterleri “canlı” tutmak, yani modeli çalıştırmak ne kadar tüketir?

Tüketimi umutla değil, koda yazılmış sınırlarla kontrol edersiniz. Soruşturma oyununda: modele gönderilen geçmiş son 20 mesaja kesilir, oyuncu mesajı 600 karaktere, yanıt 400 tokena, bekleme süresi ise 45 saniyeye ayarlanır. Sesli sentez metni 900 karaktere keser. Bu eşiklerin her biri birlikte hareket ettirebileceğimiz bir çizgidir; faturaya doğrudan etkisi olur. Ve anahtarsız mod kalır; burada oyun betiklenmiş repliklerle çalışır ve hiçbir şey tüketmez.

Ne yapmıyorsunuz?

Bir animasyonun fiziksel olarak kanıtlandığını iddia etmiyoruz. Robot simülasyonunda, 15 eylemin tümü kodda `cinematic` olarak işaretlenmiştir, kanıt paneli `actionValidation: "none"` beyan eder ve başlatma doğrulayıcısı bugün “Release qualification: blocked” yanıtını verir; çünkü eklem durdurucusunun 5 ms yanıtı gerçek donanıma göre kalibre edilmemiştir. Multiplayer’ı gizli bir seçenek olarak teslim etmiyoruz. Kendimizi Unity ya da Unreal stüdyosu olarak sunmuyoruz. Ve halka açık olup olmadığını söylemeden teklife demo koymuyoruz — örneğin soruşturma oyunumuz yalnızca yerelde çalışır ve adresi yoktur.

Yukarıdaki iddialar neye dayanıyor (25 kaynak)
  1. Cele patru demonstratoare publice răspund 200: humanoid-sim.megapromoting.com (974 B), vision.megapromoting.com (619 B), www.megapromoting.com/satelit/ (1.160 B), relieva.vercel.app (680.122 B)https://humanoid-sim.megapromoting.com/ · https://vision.megapromoting.com/ · https://www.megapromoting.com/satelit/ · https://relieva.vercel.app/ · 2026-09-06

Bunlardan 24 tanesi depolarımızdaki kod ve dosyalardır. Adlarını ya da satırlarını yayımlamıyoruz: hepsi bir arada, tek bir sayfada, yalnızca bize ait olmayan sistemlerin nasıl kurulduğunu fazla net anlatırdı. İstek üzerine, depoda sizinle birlikte gözden geçiriyoruz — doğrulama hâlâ mümkün, sadece bir görüşme içinde yapılıyor.

Neyin daha iyi çalışmasını isterdiniz?

Bize sürecinizi anlatın. Neyin kurulmaya değer olduğuna, neyi bağlayabileceğimize ve sonucu nasıl doğrulayacağımıza birlikte karar verelim.

Hadi konuşalım