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

Uzmanlık · Otomatik içerik

Günün konularını kendi bulan, makaleyi yazan, onu on dokuz dile çeviren ve yayımlayan bir akış — ama yalnızca, doğrulayamadığında hiçbir şey yayımlamayan bir doğrulama kapısından geçtikten sonra.

Motor yazıldı, tamamlandı ve tam da bu sitenin deposunda duruyor: sekiz aşama, 1.706 satır, her gün 00:30 UTC’de başlayan bir sistem zamanlayıcısı. Önemli olan kısım üretim değil, geçittir: beş yerel doğrulama, on yasaklı ifade ve müşteri adlarını izinsiz, uydurma rakamları ve sahip olmadığımız ödülleri arayan ek bir kontrol. Geçit çalışamıyorsa, yayımlanmaz.

Zaten kurduklarımız„delivered”, pentru că lucrarea există ca fișiere pe care le puteți deschide, nu ca descriere: `scripts/content-engine/` din depozitul megapromoting.com, 17 fișiere, 1.706 linii de TypeScript, unitate systemd cu cronometru, opt etape legate cap la cap și jurnale ale rulărilor. Cu o rezervă pe care o spunem noi, nu o aflați voi: **singura rulare completă din jurnale nu a publicat niciun articol.** Poarta le-a oprit pe toate trei — două pentru că verificarea nu a putut rula deloc, a treia pentru un câmp lipsă din antet. `publish` a rămas gol, IndexNow a primit zero adrese. Rularea a fost locală, pe stația de lucru, și a durat două ore și jumătate, adică peste limita de 60 de minute pusă în unitatea systemd — deci pe server ar fi fost oprită. Nu putem confirma din exterior că motorul rulează azi pe server, și nu o pretindem.

Kendi yazıp kendi yayımlayan otomasyon, yapılması mümkün olmayanı en kolay vaat edilen yerdir. Bir model, olmamış şeyler de dahil olmak üzere, her şey hakkında ikna edici bin kelime yazar ve bunu aynı akıcılıkla yapar. Model ile yayınlama düğmesi arasında hiçbir şey yoksa, her gece yirmi dilde internete hata koyan bir makine kurmuş olursunuz. Bütün iş, arada duran şeydedir.

Akışımız sekiz aşamadan oluşur. Açık kaynaklardan konu toplar, uygunlukları için onlara 0’dan 100’e kadar not verir, 50’nin altındakilerin hepsini atar, on tane aynı şey hakkında makale çıkmaması için çeşitlilik kuralıyla ilk N’i seçer, makaleyi Rumence yazar, onu on dokuz dile çevirir, kapıdan geçirir ve ancak sonra yayımlar. Her aşama maliyetini ve sonucunu bir günlüğe yazar; böylece bir çalışma sonradan yeniden oluşturulabilir.

Geçidin iki katmanı vardır. Birincisi yereldir ve hiçbir maliyeti yoktur: üstbilgi bulunmalı ve başlık, açıklama ve anahtar kelimeler içermelidir; metin 1.200 kelimeyi geçmelidir; en az üç alt başlık, en az üç dahili bağlantı ve en az üç çiftten oluşan bir soru bölümü olmalıdır; ayrıca kara listeye aldığımız on pazarlama ifadesinden hiçbirini içermemelidir. İkinci katman ise başka şeyler arayan bir modeldir: onay kanıtı olmadan müşteri adı, uydurulmuş istatistikler, bizim neler yapabileceğimiz hakkında yanlış iddialar ve sahip olmadığımız ödüller — gerçek olanların listesi doğrulamada yazılıdır, geri kalan her şey işaretlenir.

İnsan onayı zincir içinde vardır ve bunu bir mazeret olarak değil, bir gerekçe olarak söylüyoruz. Sert kontrolleri geçemeyen makaleler atılır, yayımlanmaz. İkinci kontrolden sert geçip işaret alanlar ise bir insanın bakması için işaretli halde tutulur. Ve eğer doğrulama çalışamazsa — örneğin model hizmeti yanıt vermezse — makale başarısız sayılır. Fail-closed, fail-open değil. Günlüklerdeki tek tam çalıştırmada da bu olmuştu ve bu yüzden hiçbir şey yayımlanmadı.

Neleri kapsıyor

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

Konu başlıklarını açık kaynaklardan, paralel olarak, biri sessiz kalırsa düşmeden topla

Sekiz toplayıcı aynı anda başlar: Hacker News, Reddit, Product Hunt, GitHub trending üç kesitte, on dört RSS akışı seti ve Indie Hackers. Her birinin kendi hata yakalaması vardır, bu yüzden çöken bir kaynak boş bir liste döndürür ve çalıştırmayı durdurmaz. Sonuçlar birleştirilir, kimliğe göre tekrarlar kaldırılır, ardından her kaynak için sekiz konu üst sınırı uygulanır ve dolaşım hızına göre sıralanır — böylece gürültülü bir kaynak bir sonraki aşamayı basmasın.

Yazıya harcamadan önce not ver ve ayıkla

Her konuya uygunluk için 0 ile 100 arasında bir not, ayrıca önerilen açı, hedef sektör ve hedef hizmet verilir. 50’nin altındaki her şey atılır. Aşama, sonraki harcamayı belirleyen aşama olduğu için dört iş parçacığı paralel çalışan ucuz bir model üzerinde çalışır. Nihai seçimden bir katman daha çıkarılır: ilk geçiş her sektör için bir konu alır, böylece aynı hat üzerinde on varyasyon çıkmasın.

Makaleyi serbest değil, zorunlu yapıyla yaz

Oluşturucuya sıkı bir yapı verilir: Romence 1.500–2.200 kelime, en fazla 60 karakterlik başlık ve 155 karakterlik açıklama içeren YAML üstbilgi, bir H1 ve dört ila altı H2, sitede var olan bir adres listesinden seçilmiş üç ila beş dahili bağlantı, vurgulanmış bir alıntı, FAQPage şemasıyla uyumlu bir soru bölümü ve son bir çağrı. Üç iş parçacığı paralel çalışır, makale başına beş dakikalık bütçe ve çıktı için 5.000 jeton üst sınırı vardır.

Çevrilmeyen bir terimler sözlüğüyle on dokuz dile çevirir

Kaynak Romencedir; hedefler on dokuz tanedir, İngilizce, Rusça ve Ukraynacadan Arapça, İbranice, Hintçe, Japonca ve Basitleştirilmiş Çinceye kadar — buna sağdan sola yazılan iki yazı da dahildir. Kurallar promptta açıktır: üstbilgi yapısını korur, dahili bağlantı adresleri yeniden yazılmaz ve yerelleştirilmez, sayılar, birimler ve tarihler korunur, sözlükteki marka terimleri ise dokunulmadan kalır. Çeviri bilinçli olarak yalnızca iki iş parçacığıyla paralel yürür — model kapısı daha yüksek yük altında verimi sınırlar.

Sert kapı: beş koşul ve on yasak ifade

Yerel, hiçbir ücretli çağrı olmadan: üstbilgi bulunmalı ve başlık, açıklama ve anahtar kelimeler içermelidir; metin kod blokları ve etiketler çıkarıldıktan sonra sayıldığında 1.200 kelimeyi aşmalıdır; en az üç ikinci seviye alt başlık; sitede var olan bölümlere en az üç dahili bağlantı; en az üç çiftten oluşan bir soru bölümü. Artı kara liste: „game-changing”, „cutting-edge”, „world-class”, „revolutionize”, „synergy” ve beş tane daha. Tek bir geçiş bile makaleyi başarısız kılar.

İkinci kapı tam olarak bir sayacın göremediği şeyi arar

Düşük sıcaklık ve JSON yanıtıyla çalışan ikinci bir model, makaleyi alır ve beş şeyi arar: onay verdiğine dair kanıt olmadan müşteri adı, ölçüme dayanmayan bir yüzde kullanılabilirlik gibi halüsinasyonlu istatistikler, bizim neler yapabileceğimiz hakkında yanlış ifadeler, broşür dili ve sahipmişiz gibi izlenim veren üçüncü taraf araçlar hakkındaki iddialar; oysa biz yalnızca bunları entegre ediyoruz. Ayrıca gerçekten sahip olduğumuz ödüllerin listesi de vardır — listenin dışındaki her ödül işaretlenir.

Doğrulama çalışamazsa, makale başarısız sayılır

İkinci doğrulamanın çalıştırmayı kilitlememesi için açıkça 90 saniyelik bir bütçesi vardır. Süresi dolarsa veya model hizmeti yanıt vermezse, hata yakalanır ve yok sayılmak yerine negatif bir karara dönüştürülür. Sonuç önemlidir ve en çok hoşumuza giden de budur: bir makale, nöbetçi yok olduğu için kamuya çıkmaz. Bu zaten oldu, günlüklerdeki tek tam çalıştırmada — tamamen yazılmış iki makale, doğrulama yapılamadığı için yayımlanmadı.

Yayınlamanın tek bir koşulu ve üç adımı vardır

Yayınlama, sıfır makale eşiği geçtiyse hiç çağrılmaz. Çağrıldığında: yalnızca içerik dizinini ekler, commitleyecek bir şey yoksa durur, tarih, makale sayısı ve dil sayısıyla bir commit yapar ve push etmeyi dener. Push başarısız olursa commit yerelde kalır ve çalıştırma sürer — iş kaybolmaz ve yayınlandı denmez. Arama motoru bildirimi yalnızca push başarılıysa yapılır.

Her çalıştırma kendi hesabını bırakır

Sonunda günlük bir rapor yazılır: kaç konu toplandı, kaçının notu geçti, kaçının seçildiği, kaçının yazıldığı, kaç çevirinin çıktığı, kaçının eşiği geçtiği, neyin commit edildiği ve neyin push edildiği, arama motorlarının ne yanıt verdiği, ne kadar sürdüğü ve modele göre ayrılmış maliyet; çağrı sayısı ile giriş ve çıkış tokenlarıyla birlikte. Rapor bir dosyadır, pano değil — okunabilir, arşivlenebilir ve karşılaştırılabilir.

Nasıl görünüyor

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

01

Ne yazmaya yetkili olduğunu ve ne olmadığını belirliyoruz

Herhangi bir koddan önce: kapsadığımız konu listesi, dokunmadığımız konu listesi, ton ve ifade kara listesi. Buraya ayrıca motorun sizler hakkında söylemesine izin verilmeyen iddiaların listesi de yazılır — müşteriler, rakamlar, ödüller, karşılaştırmalar. Teslimat: doğrulamaya doğrudan girecek biçimde, ayrı bir belge olarak unutulacak şekilde değil, yazılı kurallar.

02

Yalnızca toplama ve not etmeyi başlatıyoruz, hiçbir şey yazmadan

Kuru modda çalışır: konular toplanır, not edilir, ilkleri seçilir, rapor yazılır ve üretimden önce çıkılır. Ucuzdur — günlüklerimizde böyle bir çalıştırmada 24 çağrı vardı, hepsi küçük modelde, toplamda yaklaşık bir sent ölçülmüş maliyetle. Motorun gün be gün neyi seçeceği tam olarak görülür, hiçbir metin olmadan. Teslimat: kuru çalıştırma raporları ve neyi seçtiğine dair mutabakat.

03

Yazıyoruz ve doğruluyoruz, ama yayınlamıyoruz

Üretim ve eşik başlatılır, yayın kapalıdır. Burada eşikler kalibre edilir: eğer tüm makaleler uzunlukta eleniyorsa, bu dahili bağlantılarda elenmesinden farklı bir ayardır. Burada ayrıca ikinci kontrolün ne işaret ettiği görülür; bu en öğretici kısımdır. Teslimat: üretilen makaleler, her reddin gerekçesiyle birlikte tam kararlar ve ayarlanmış eşikler.

04

Yayınlamayı açıyoruz, eşik yerinde

Sistem kronometresi ve yayınlama başlatılır. Saat, zirve dışında seçilir; çalıştırmaların birbirine çarpmaması için rastgele bir gecikmeyle birlikte; bizde 00:30 UTC, en fazla 30 dakika gecikmeyle ve o saatte sunucu kapalıysa kurtarma ile. Çalıştırma başına zaman sınırı konur. Teslimat: servis birimi ve kronometre, günlükler ve durdurma prosedürü.

05

Dilleri, birer birer ekliyoruz

Çeviri, en yüksek tüketimi olan ve kontrol dışına çıkması en kolay aşamadır. Diller, hepsi birden değil, öncelik bantları halinde eklenir ve her birinde ne çıktığı kontrol edilir — özellikle Latin olmayan yazılarda, marka terimlerinin Latin alfabede kalması kuraldır. Teslimat: sözlük, başlatılan diller ve çalıştırma günlüğünden dil başına ölçülen maliyet.

Opt etape1adunare din optculegători paraleli,fiecare cu prindereproprie de eroare2notare 0–100, aruncăsub 503alegere cudiversitate peindustrie4scriere în română,1.500–2.200 decuvinte5traducere în 19 limbicu glosar neatins6poarta dură, cincicondiții și zeceexpresii interzise7poarta a doua, carecaută clienți, cifreși premii inventate8publicare, doar dacăa trecut măcar unulCând poarta nu poate rula, nu se publică.
Opt etape

Veriler

Neye dokunuyoruz, nerede duruyorlar ve ne kadar kalıyorlar

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

Ne girer
Başlıklar, adresler ve herkese açık kaynaklardan kısa parçalar — açık API'ler ve RSS akışları. Kişisel veri toplanmaz, özel hesaplar okunmaz ve kimlik doğrulama sonrasında içeri girilmez. Her konu, bir makalenin nereden çıktığının izlenebilmesi için kaynağı, kanalı ve keşif anını korur.
Metinler nerede durur
Sitenin kod deposunda, `content/daily/{dil}/{tarih}/{slug}.mdx` altında MDX dosyaları olarak. Ayrı bir veritabanında değil. Bunun sonucu, tam geçmişin git geçmişi olmasıdır: kimin neyi, ne zaman yazdığı görülür ve bir komutla geri dönülebilir. Her makalenin kendi üst bilgisi vardır; kamuya açık sayfa yapılandırılmış verilerini bundan oluşturur.
Anahtarlar nerede duruyor
Başlangıçta systemd birimi tarafından okunan bir ortam dosyasında, kod deposunun dışında. Ortam yükleyicisi süreçte zaten tanımlı bir değişkeni üzerine yazmaz, bu yüzden çalışma yapılandırması dosyaya dokunmadan değiştirilebilir. Modellere yapılan çağrılar, yerel olarak sunucu üzerinde adreslenen iç kapımızdan geçer.
Günlükler ve ne kadar saklandıkları
Motorun günlük dizininde gün başına bir JSON dosyası, ayrıca systemd birimi aracılığıyla `/var/log` altında ayrı ayrı yazılan standart çıktı ve hata çıktısı. Günlük, her makale için kapının kararlarını, reddin tam nedenini ve sayılan kelime sayısını içerir. Makalelerin metnini içermez — onlar depodadır.
Neye dokunmaz
Sosyal medya hesaplarınıza dokunmaz, e-posta göndermez, CRM’e yazmaz. Yayınlama, site deposuna bir commit ve iki arama motoruna bir bildirim anlamına gelir. Başka kanallarda yayınlama isterseniz, aynı kuralla ayrı konuşulur: önce kapı, sonra değil.

Bir vaka

Motorun üç makale yazdığı ve hiçbirini yayınlamadığı gece

Durum

Tüm aşamaların başlatıldığı tam bir çalışma: açık kaynaklardan toplama, puanlama, seçme, Romence yazma, çeviri, kapı, yayınlama. Hedef bilinçli olarak küçüktü, üç makale; böylece bütün zincir fazla maliyet oluşturmadan görülebilsindi.

Ne kurduk

Toplama, kaynak başına üst sınır uygulandıktan ve tekrarlar kaldırıldıktan sonra 24 benzersiz konu getirdi. Puanlama 18’ini tuttu ve 50 eşiğinin altındaki 6’sını attı. Çeşitlilik kuralı, farklı sektörlerden 3 tanesini seçti. Üreteç Romence 3 makale yazdı. Çevirmen 57 dosya üretti. Sonra kapı devreye girdi.

Ne çıktı

Hiçbir makale geçmedi. İkisi, ikinci kontrolün hiç yapılamamasından dolayı elendi — model hizmeti 90 saniyelik bütçe içinde yanıt vermedi ve hata yok sayılmak yerine olumsuz karar olarak işlendi. Üçüncüsü tek bir koşulda elendi: başlıkta anahtar kelime alanı yoktu, buna karşın 2.478 kelimeye sahipti; yani asgari eşik değerinin iki katı. Hiçbir makale geçmediği için yayınlama da çağrılmadı: commit boş kaldı, gönderim yapılmadı, arama motorları sıfır adres aldı. 57 çeviri diskte kaldı, kullanılmadan.

Vakanın söylemedikleri

Çalışma istasyonda yapıldı, sunucuda değil — günlükteki yollardan bu görülüyor — ve iki buçuk saat sürdü, systemd biriminde konmuş 60 dakikalık sınırın üzerinde. Dolayısıyla aynı anda iki şeyi gösteriyor: kapının tuttuğunu ve günlük partinin yapılandırılmış zaman sınırı için fazla büyük olduğunu. İkisi de gerçek ve ikisi de söylenmeyi hak ediyor.

Sorular

İnsanların aramadan önce bize sordukları

Bir insan metni görmeden yayınlanıyor mu?

Evet, eğer böyle seçerseniz — ve hayır, eğer seçmezseniz. Motor tamamen otomatik çalışabilir ve bu modda kapının iki katmanını geçen makale, kimse okumadan yayına gider. Ama kapı dekoratif değildir: başlık alanı eksik olan makaleyi, 1.200 yerine 1.199 kelimeyi ya da kara listedeki tek bir ifadeyi düşürür. Ve her makalenin bir çift gözden geçmesini tercih ederseniz, otomatik yayınlama durdurulur ve her şey inceleme aşamasına kadar kalır, işaretler görünür şekilde. Başlangıçta bizim önerimiz ikinci seçenektir, ta ki işaretler sıkıcı hale gelene kadar.

Model bir gerçeği yanlış söylediğinde ne olur?

Bu, ne tür bir gerçek olduğuna bağlıdır ve dürüstçe söylemek gerekir ki hepsi yakalanmaz. Yakalanır: kanıtlanmış onay olmadan konulan müşteri adı, ölçüm olmaksızın uydurulan kullanılabilirlik yüzdesi türünden istatistik, sadece entegre ettiğimiz bir aracı sahipleniyormuşuz izlenimi verecek ifade, gerçekler listesinde olmayan ödül. Yakalanmaz: dış bir haberde yanlış bir takvim tarihi ya da üçüncü taraf bir ürün hakkında kulağa mantıklı gelen teknik ifade. Bunlar için insandan başka bekçi yoktur; bu yüzden her makale başlığında çıktığı kaynakları korur — yayın sonrası doğrulama mümkün kalır ve düzeltme bir commit’tir.

Akış nasıl durdurulur?

Hız sırasıyla üç yol. Sistem zamanlayıcısının durdurulması — yarın artık hiçbir şey başlamaz. Yayın anahtarını tutan değişkenin boşaltılması — motor yazar ve doğrular, ama arama motoru bildirimi günlükte uyarıyla atlanır. Ve konu seçiminden sonra duran ve hiçbir şey üretmeyen kuru çalışma modu. Ayrıca, tekil bir çalışmanın hizmet biriminde zaman sınırı vardır; önce yumuşak sinyal, sonra zorla durdurma.

Motor şu anda sunucuda mı çalışıyor?

Bunu dışarıdan doğrulayamıyoruz ve doğrulamayacağız. Gösterebileceğimiz şey kod, servis birimi, kronometre, kurulum prosedürü ve elimizdeki çalıştırma günlükleri. Günlüklere göre tam tamamlanan tek çalıştırma bir iş istasyonunda yapıldı, sunucuda değil — dosya yollarından bu görülüyor — ve iki saat buçuk sürdü; yani systemd birimindeki 60 dakikalık sınırı aştı. Kurulumumuzun bugünkü durumu sizi ilgilendiriyorsa, sorun ve birlikte kontrol edelim. Yanlış çıkan bir “evet”tense bu soruyu tercih ederiz.

Şimdiye kadar kaç makale yayımladı?

Elimizdeki günlüklerden: sıfır. Tam çalıştırma 24 konuyu topladı, puanlamadan sonra 18’ini tuttu, 3’ünü seçti, 3 makale ve 57 çeviri yazdı — ve gate bunların üçünü de durdurdu. İkisi, ikinci kontrolün hiç çalışamaması nedeniyle; biri ise 2.478 kelimeye rağmen başlıktaki eksik bir alan yüzünden, yani uzunluk eşiğini çoktan geçmiş olmasına rağmen. Yayın çağrılmadı, arama motorları hiçbir adres almadı. Bunu size söylemeyebilirdik. Söylüyoruz, çünkü hizmetin ihtiyaç duyduğu tam gösterim bu: gate gerçekten durduruyor.

Bu, sıralamayı bozan “AI içeriği” mi?

Doğru soru bunu kimin yazdığı değil, metnin birinin gerçekten aradığı bir şeye yanıt verip vermediği ve doğrulanabilir olup olmadığıdır. Bu yüzden gate’teki eşikler, stille değil faydayla ilişkili şeylere göre ayarlanır: asgari uzunluk, alt başlıklarla yapı, mevcut sayfalara iç bağlantılar, soru-cevap bölümü. Ve bu yüzden kara liste, tam da boşluk doldurmak için yazılmış metni işaret eden ifadeleri içerir. Size vaat etmediğimiz şey, sonuçlarda belirli bir konumdur — o, bizde olmayan birçok şeye bağlıdır.

Bir çalıştırmanın maliyeti nedir?

Maliyet tahmin edilmez, ölçülür: modele yapılan her çağrı giriş ve çıkış jetonlarını sayar ve günlük rapor, çağrı sayısıyla birlikte modeli bazında döküm verir. Günlüklerimizdeki kuru çalıştırmada: ucuz modelde 24 çağrı. Üç makale ve 57 çeviriyle yapılan tam çalıştırmada: 32 çağrı, bunların 3’ü pahalı modelde — ve maliyetin büyük kısmını onlar oluşturdu. Her aşamada kullanılan model bir ortam değişkenidir, bu yüzden koda dokunmadan bir aşama daha ucuz bir modele indirilebilir. Para cinsinden rakam, seçilen modellere ve çalıştırma anındaki tarifelerine bağlıdır.

Hangi dillerde yazar ve marka terimlerine ne olur?

Kaynak Romence, hedefler on dokuz tane — İngilizce, Rusça, Ukraynaca, Lehçe, Almanca, İtalyanca, Fransızca, İspanyolca, Hollandaca, Arapça, Türkçe, İbranice, Hintçe, Japonca, Korece, Endonezce, Basitleştirilmiş Çince, Brezilya Portekizcesi ve Çekçe. Her dil için, yapılandırmada neden orada olduğuna dair açıklama yazılıdır. Marka ve teknik terimler bir sözlükte tutulur ve Arapça, İbranice ve Asya yazılarında bile çevrilmeden kalır; kural açıkça belirtilmiştir: Latin alfabesiyle korunur. İç bağlantı adresleri hiçbir zaman yerelleştirilmez.

Anlattıklarınızdan ne hazır değil?

Üç şey, bunları şimdi söyleyelim ki siz tek başınıza keşfetmeyin. Kendi dokümantasyonumuz bazı yerlerde kodun önüne geçmiş — puanlama aşamasının başındaki yorum artık çağrılan model olmayan bir modelden söz ediyor ve kaynak kaydı listedekinden daha büyük bir RSS akışı kümesi anlatıyor. İkincisi: kayıtta yer alan iki kaynak aktif olarak işaretli, ama toplayıcıları hepsini bir araya getiren işlevde çağrılmıyor, dolayısıyla bugün hiçbir katkıları yok. Üçüncüsü: günlüklerdeki tam çalıştırma servis birimindeki zaman sınırını aştı; bu da mevcut ayarlarla sunucuda yarıda kesileceği anlamına geliyor — otomatik başlamadan önce sınır yükseltilmeli ya da günlük paket küçültülmeli.

Yukarıdaki iddialar neye dayanıyor (26 kaynak)

Bunlardan 26 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