Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Celcini'nin ana gövdesi Fabricakit: tarayıcıda oynanan fabrika simülatörü (/fabricakit/).
Excel dosyaları "Dosyalar" altında üç rafta durur (/fabrika/, /excel-klinigi/, /datakit/); Datakit'in açılış sayfası
rehberli dersleri de taşır (/datakit/<ders>/: Excel sayfası sitede, notlarıyla); Fabrika Motoru'nun dersleri /motor/ altında
(Fabrika rafından ve ürün sayfasından bağlanır);
tarayıcı araçları /uzay/ altında (ROTA 3D /uzay/rota/, Fabrika İkizi /uzay/ikiz/). Üretim Arşivi (/arsiv/) fabrikada
sık görülen sorunları belirti, kök neden ve çözüm adımlarıyla konu konu toplar. Mülakat Testi (/mulakat/) en sık sorulan
30 mülakat sorusunu Ajan GM'in ağzından sorar ve sonunda raporu yazar.
Celcini sitesinin kaynağı (yayın adresi https://celcini.vercel.app; alan adı alınınca scripts/derle.py → SITE değiştirilir): saf HTML, CSS ve JS. Çerçeve yok. Sayfalar data/urunler.json'dan
scripts/derle.py ile üretilir ve derlenmiş HTML depoda durur; Vercel'de derleme adımı yoktur.
Fabricakit ES modülleriyle yazılmıştır, o da derleme istemez.
data/urunler.json Tüm ürünler (tek kaynak)
data/arsiv.json Üretim Arşivi: bölüm → konu → kart (belirti, kök neden, 3 çözüm adımı, ilke)
data/mulakat.json Mülakat Testi: 30 soru, şıklar (puan, tarz, Ajan GM yorumu), örnek cevaplar, rapor şablonları
data/karne-ornegi.json Ana sayfadaki karne örneği (scripts/karne-ornegi.mjs üretir; elle düzenlenmez)
data/datakit/ Datakit rehberli dersleri: dersler.json (notlar, sorular, açılış metinleri), sayfalar/<id>.json (Excel dışa aktarımı)
data/motor/ Motor (Fabrika Motoru) rehberli dersleri, aynı yapı
assets/js/rehber/ Rehberli dersler: rehber.js (sayfa, notlar, kilit, soru), tablo.js (Excel ızgarası), grafik.js (SVG grafikler)
assets/css/rehber.css Rehberli derslerin stili
assets/js/mulakat/ Mülakat Testi: mulakat.js (sorular, rapor, kilit), motor.js (puanlama ve rapor metni; Node'da da çalışır)
assets/css/mulakat.css Mülakat Testi'nin stili
api/_dersler/<urun>/ Kilitli dersler (derle.py yazar; statik yayınlanmaz, yalnızca api/ders.js okur)
api/_mulakat/ Mülakat raporunun kilitli metinleri (derle.py yazar; statik yayınlanmaz, yalnızca api/mulakat.js okur)
mulakat/veri/ Mülakat Testi'nin herkese açık verisi: sorular, şıklar, puanlar (derle.py yazar)
datakit/veri/, motor/veri/ Herkese açık ders dizini ve ücretsiz dersler (derle.py yazar)
fabricakit/js/odalar.js Fabricakit'in dokuz odası (tek liste; ana sayfadaki oda şeridi de buradan)
fabricakit/ Simülatör: css/, js/, img/ (index.html kabuğu derle.py üretir)
api/ Vercel işlevleri: erisim-kodu.js, ajan-gm.js, ders.js, mulakat.js (_ortak.js işlev değildir)
uzay/araclar/_sablon/ Uzay aracı iskeleti (app.js, app.css)
uzay/rota/ ROTA 3D depo toplama rotası: js/ (layout, router, scene3d, ui; ES modülü), css/rota.css (index.html derle.py üretir)
uzay/ikiz/ Fabrika İkizi: js/ (veri, hesap, sahne, arayuz; ES modülü), css/ikiz.css (index.html derle.py üretir)
assets/js/vendor/three/ Three.js r128 (npm [email protected]: build/three.min.js, examples/js/controls/OrbitControls.js) ve LICENSE (MIT)
scripts/derle.py JSON → HTML sayfaları + sitemap.xml (yalnızca Python standart kütüphanesi)
scripts/ikonlar.py Lucide çizgi ikonları (inline SVG)
scripts/gorsel-uret.py favicon ve og-cover.png üretimi (Pillow gerekir, yalnızca logo değişince)
scripts/check.js Yayın öncesi kontrol (SEO etiketleri, kırık link, örnek kayıt sızıntısı, dil kuralları)
scripts/sim-test.mjs Fabricakit motor testi: 3 oyuncu tipi × 5 gün, kayıt-yükleme, tohum, 1. gün puan dağılımı
scripts/karne-ornegi.mjs Motorun 1. gün karnesinden ana sayfa örneğini üretir (senaryo dosyanın başında)
scripts/rota-test.mjs ROTA 3D yönlendirici testi: engel dolanma, erişilemeyen göz, optimum ≤ sıralı, Held-Karp = kaba kuvvet
scripts/ikiz-test.mjs Fabrika İkizi model testi: veri bütünlüğü, 1. gün plan yükü = dosya, akış korunumu, kolların yönü
scripts/ikiz-veri.py Fabrika Motoru'nun örnekli dosyasından uzay/ikiz/js/veri.js üretir (openpyxl; derlemenin parçası değildir)
scripts/api-test.mjs api/ işlevlerinin ağsız testi (Claude API sahte fetch ile taklit edilir)
scripts/kod-hash.mjs Erişim kodu üretimi ve SHA-256 listesi
scripts/mulakat-test.mjs Mülakat Testi: veri ayrımı (açık / kilitli), karar eşikleri, profil, duraksama, rapor metni
scripts/rehber-disa-aktar.py Excel sayfalarını rehber JSON'una çevirir (openpyxl gerekir; derlemenin parçası değildir)
scripts/excel-klinigi/ Excel Kliniği'nin 43 ücretsiz dosyasının derleme betikleri; uret.py hepsini dosyalar/excel-klinigi/'ye üretir
scripts/ses-*.mjs Ajan GM sesi: ses-cumleler (→ data/ses/cumleler.json), ses-test (liste, JSON, dosyalar)
scripts/ses-piper.py Ajan GM ses dosyaları, Piper ile (Linux/macOS; model huggingface.co'dan bir kez iner)
scripts/ses-tolga.ps1 Ajan GM ses dosyaları, Windows'ta "Microsoft Tolga" ile
data/ses/cumleler.json Ajan GM'nin ses dosyası olan 40 sabit cümlesi (ses-cumleler üretir; elle düzenlenmez)
assets/ses/ajan-gm/ Ajan GM ses dosyaları (<id>.mp3; üretim betikleri yazar)
assets/css/style.css Tüm stiller; palet ve ölçüler :root'ta
assets/js/config.js Dış bağlantılar (Shopier mağaza, Google Form, e-posta, Instagram)
assets/js/main.js Mobil menü, bağlantıları uygulama, raf ve arşiv araması (kelime başından), galeri
assets/img/ Logolar (beyaz, şeffaf), favicon'lar, og-cover.png
dosyalar/<raf>/ Ücretsiz indirilen dosyalar (data/urunler.json: ucretsiz_dosya); Excel Kliniği'nde 43 xlsx
index.html, fabricakit/index.html, mulakat/, fabrika/, excel-klinigi/, datakit/ (ve datakit/<ders>/), motor/ (ve motor/<ders>/), urun/<slug>/, uzay/, uzay/rota/index.html, uzay/ikiz/index.html,
uzay/araclar/_sablon/index.html, arsiv/ (ve arsiv/<konu>/), hakkinda/, iletisim/, sss/, gizlilik/, teslimat-ve-iade/,
404.html, sitemap.xml ← derlenmiş çıktı, elle düzenlenmez
python3 scripts/derle.py # üretim derlemesi (depo köküne yazar)
python3 scripts/derle.py --onizleme # önizleme: _onizleme/ klasörüne, örnek kayıtlar "ÖRNEK" etiketiyle
npm install # yalnızca api/ için gereken @anthropic-ai/sdk (api-test'in tamamı için)
npm run check # üretim çıktısı + sim-test + rota-test + ikiz-test + api-test + ses-test + mulakat-test
npm run ses-cumleler # Ajan GM cümle listesi değişince data/ses/cumleler.json'ı yenile (sonra sesleri üret)
node scripts/karne-ornegi.mjs # oyun kuralı ya da Ajan GM şablonu değişince karne örneğini yenile, sonra derle
npm run check:onizleme # önizleme çıktısını kontrol et
npm run dev # http://localhost:3000 (üretim)
npm run onizleme # önizlemeyi derle ve http://localhost:3001'de aç
_onizleme/ git'e girmez ve yayınlanmaz.
Ürün görselleri (assets/img/urun/<slug>/): 1600 px genişlik, PNG + yanında WebP. Excel sayfasının görseli için sayfa
scripts/rehber-disa-aktar.py ile JSON'a çevrilip sitenin ızgarasıyla (assets/js/rehber/tablo.js) çizilir ve ekran görüntüsü
alınır; Excel Kliniği'ndeki yedi analiz motorunun görselleri böyle üretildi.
data/urunler.json'a bir kayıt ekle. Alanlar:
| Alan | Açıklama |
|---|---|
slug | Adres: /urun/<slug>/. Küçük harf, rakam, tire. |
ad, kisa, aciklama | Ürün adı, tek cümle özet, paragraf. |
raf | fabrika (Fabrika Dosyaları) · excel-klinigi · datakit |
ozellikler[] | "Ne yapar" maddeleri. |
kimin_icin | Tek paragraf. |
etiketler[] | Raf sayfasındaki etiket süzgecine girer. yapay zeka etiketi turuncu rozet olur. |
fiyat, liste_fiyat | TL, tam sayı. Açılış fiyatı ve üstü çizili liste fiyatı. fiyat null ise fiyat yazmaz ("Shopier'de yakında" / "Fiyatı Shopier'de"); liste_fiyat null ise üstü çizili fiyat çıkmaz. Üstü çizili fiyat yalnızca ürün o fiyattan indirimden önceki son 10 günde gerçekten satıldıysa yazılır (Ticari Reklam ve Haksız Ticari Uygulamalar Yönetmeliği md. 14, 1.8.2026'dan beri). |
sayfa_basligi | İsteğe bağlı. Ücretli ürün sayfasının <title>'ı; yoksa "Ad · Raf". Aranan kelimeyi içersin (ör. "PLANLA: Excel'de MRP ve sipariş takvimi"). |
shopier_url | Shopier ürün bağlantısı. Boşsa ürün üretimde görünmez (yakinda: true değilse). |
yakinda | İsteğe bağlı. true ise bağlantı boşken de sayfa çıkar: pasif "Shopier'de yakında" düğmesi ve mağaza ana sayfası bağlantısı (config.js). Bağlantı gelince yalnızca shopier_url doldurulur. |
ucretsiz_dosya | İsteğe bağlı. Sitede duran ücretsiz dosya: "/dosyalar/<raf>/<dosya>.xlsx". Doluysa shopier_url ve fiyat boş olmalı. Sayfada "Ücretsiz indir" düğmesi ve dosya boyutu çıkar. Rafta bu ürünler "Ücretsiz dosyalar" bölümünde, "ücretsiz" süzgeciyle görünür. |
gorseller[] | "/assets/img/urun/<slug>/1-panel.png" ya da . Yanında aynı adlı varsa önce o yüklenir; boyut PNG'den okunur. Boşsa "Ekran görüntüleri hazırlanıyor" kutusu çıkar. |
Üretim derlemesi; ornek: true olan ve shopier_url'si boş (yakinda ya da ucretsiz_dosya olmayan) kayıtların sayfasını üretmez,
raf sayılarına, öne çıkanlara ve sitemap'e katmaz, eski sayfası varsa urun/ altından siler.
Ücretsiz dosyalar dosyalar/<raf>/ altında durur (önizleme derlemesine de kopyalanır). Excel Kliniği'nin 43 ücretsiz dosyası
5 Ekim 2026 sohbetindeki derleme betiklerinden üretildi; betikler scripts/excel-klinigi/ altında. Örnek kişi ve firma adları
"Müşteri Alfa, Beta, Gama…" biçimindedir. Yeniden üretmek için python3 scripts/excel-klinigi/uret.py. Bunun için openpyxl,
LibreOffice, recalc.py (RECALC ortam değişkeni) ve libfaketime gerekir. Betikler örnek veriyi 4 Ekim 2026'ya göre doğrular;
tarih o güne sabitlenir. Her dosyanın sayfası rehber-disa-aktar.py ve tablo.js ile tek görsel (1-ozet) olarak çizildi.
Bir rafta hem Shopier'deki hem ücretsiz ürün varsa raf iki bölümle çıkar. Rafın RAFLAR kaydında ucretli_baslik üst bölümün
başlığını, etiket_esigi süzgeç düğmesi olacak etiketin en az kaç üründe geçmesi gerektiğini belirler (Excel Kliniği'nde 2).
assets/js/config.js tek yerdir. Boş bırakılan bağlantının bölümü sayfada gizlenir (örneğin google_form
boşsa e-posta listesi bölümü ve satışta olmayan ürünlerdeki "Açılınca haber ver" düğmeleri, eposta boşsa iletişimdeki
e-posta satırı). JavaScript kapalıyken de bu öğeler gizli kalır; kırık link oluşmaz. config.js değişince yeniden
derlemek gerekmez. fabricakit_kod Fabricakit erişim kodu ürününün Shopier bağlantısıdır (boşsa kilit ekranı mağazaya
gider); fabricakit_kod_fiyat (ör. "199 TL") yalnızca fabricakit_kod doluyken kilit ekranındaki düğmede yazar.
Ücretsiz dosya sayfalarında <title> ve başlık aranan işle başlar ("Gelir Gider Defteri Excel Şablonu · Ücretsiz İndir ·
NABIZ"); kod adı rozet olarak kalır. Rafta satışta olmayan ("Shopier'de yakında") ürünler sona dizilir; iki bölümlü rafta
ücretli dosyaların hiçbiri satışta değilse ücretsiz bölüm önce gelir. Sitenin Instagram ya da Facebook'un uygulama içi
tarayıcısında açıldığını main.js algılar; dosya indirilen sayfalarda (a[download]) üstte "tarayıcıda açın" uyarısı
gösterir (Android'de "Chrome'da aç" düğmesiyle). Kapatılınca o oturumda bir daha çıkmaz (sessionStorage).
Tarayıcıda çalışan tek sayfalık uygulama: fabricakit/index.html kabuğu, fabricakit/css/, fabricakit/js/.
Harici kütüphane ve derleme yok; motor arayüzden bağımsızdır ve Node'da da çalışır (npm run sim-test).
fabricakit/js/ayarlar.js Oyunun kural ve denge sayıları: puanlar, sayaçlar, tedarik süreleri, oyun saati, eşikler, tohumlar, Ajan GM ayarları
fabricakit/js/odalar.js Dokuz oda ve fabrika adı (kod adı "" yapılırsa her yerde gerçek ad görünür)
fabricakit/js/veri/ Tohumlu rastgelelik, katalog, sipariş ve olay üretimi
fabricakit/js/motor/ Tek store, eylemler, MRP, satın alma, üretim, olaylar, gün sonu, karne, kayıt
fabricakit/js/ajan-gm/ Kural şablonları (yorumlar.js) ve yapay zeka kaynağı (kaynak.js)
fabricakit/js/arayuz/ Harita, paneller, görev notu, sayaçlar, bildirimler, karne, kilit ekranı, sesler (ses.js)
fabricakit/js/uygulama.js Tarayıcı giriş noktası
fabricakit-kayit (oyun, KAYIT_SURUMU alanıyla), fabricakit-oyuncu (hitap, açılan kilit)
ve fabricakit-ses (ses açık/kapalı).
Kayıt yapısını bozan bir değişiklikte KAYIT_SURUMU'nu bir artırın; eski kayıtlar sıfırlanır ve oyuncuya söylenir.arayuz/ses.js'te Web Audio API ile üretilir. Ses motoru askıdayken (iPhone'da ilk dokunuştan hemen
sonra) gelen efekt atlanmaz, motor açılınca çalar. Ses kapalıyken hiçbir ses çalmaz (Ajan GM dahil).ajan-gm/cumleler.js) assets/ses/ajan-gm/<id>.mp3'ten sabit
erkek sesle çalar, aradaki değişken parçalar (hitap, sayı, ürün adı) tarayıcının SpeechSynthesis API'siyle cihazdaki erkek
Türkçe sesle okunur (tr-TR, hız 0,95, perde 0,85). Ajan GM yalnızca erkek sesle konuşur: cihaz sesi, adı ayarlar.js'teki
ERKEK_SESLER listesinden birini içeren yerel sestir (başlangıçta yalnızca "Tolga"); iPhone'daki Yelda gibi sesler kullanılmaz.
Böyle bir ses yoksa değişken parça atlanır; ses dosyaları henüz üretilmediyse (ajan-gm/ses-dosyalari.js) sabit cümleler de
cihazdaki erkek sesle okunur. Ne ses dosyası ne yerel erkek ses varsa "Sesli oku" ve "Ajan GM konuşsun" düğmeleri görünmez
(yazı zaten ekranda); efektler ve hoparlör düğmesi bundan etkilenmez.
Cümle listesi değişince: npm run ses-cumleler (→ data/ses/cumleler.json), sonra sesleri yeniden üretin:
scripts/ses-piper.py (Piper, Türkçe erkek ses; modeli bir kez huggingface.co'dan indirir) ya da Windows'ta
powershell -ExecutionPolicy Bypass -File scripts\ses-tolga.ps1 ("Microsoft Tolga" + ffmpeg). İkisi de aynı dosya adlarını
yazar, sesi -30 LUFS'a eşitler (oyunun en yüksek efektleri yaklaşık -35 LUFS; değiştirmek için --duzey / -Duzey) ve
ses-dosyalari.js'i günceller. npm run check (scripts/ses-test.mjs) liste, JSON ve dosyaların birebir eşleştiğini denetler.
Metin okunmadan önce sese hazırlanır: sayı, tutar, yüzde ve saat yazıya çevrilir ("135.200 TL" → "yüz otuz beş bin iki yüz lira",
"08:00'de" → "saat sekizde"); npm run sim-test Ajan GM metinlerinde okunmamış rakam kalmadığını denetler.assets/img/ altında: büyük portre ajan-gm.webp / ajan-gm.png (ana sayfanın açılışı) ve daire
avatar ajan-gm-avatar.webp / ajan-gm-avatar.png (giriş, karne, sorgula, kilit ekranı ve ana sayfadaki karne örneği). Tarayıcı WebP destekliyorsa
WebP, değilse PNG yüklenir (<picture>). Görsel değişirse python3 scripts/derle.py ana sayfadaki sürüm etiketini yeniler.Ayar (ayarlar.js) | Değerler |
|---|---|
AJAN_GM_KAYNAK | "kural" (varsayılan; şablonlar, sunucuya istek yok) · "yapay-zeka" (api/ajan-gm.js) |
AJAN_GM_YAPAY_ZEKA_KIME | "kodlu" (varsayılan; yalnız geçerli erişim kodu girenler, kod her istekte yeniden doğrulanır) · "herkes" |
Yapay zeka modunda sağlayıcıya yalnızca günün karnesinden seçilen oyun verisi ve oyuncunun kısa sorusu gider;
hitap gönderilmez. Anahtar yoksa, süre dolarsa ya da yanıt kurallara uymazsa Ajan GM sessizce şablonlara döner.
Sunucu da ayarlar.js'i okur: ayar "kural"sa işlev sağlayıcıyı hiç çağırmaz.
node scripts/kod-hash.mjs --uret 20 20 yeni kod ve hash'lerini yazar (var olan kodlar için:
node scripts/kod-hash.mjs KOD1 KOD2). Büyük-küçük harf, boşluk ve tire fark etmez.ERISIM_KOD_HASHLERI değerine yapıştırın (yeni kodları virgülle sona ekleyin),
ardından yeniden yayınlayın.ERISIM_KOD_HASHLERI boşsa kilit ekranı "Erişim kodları henüz satışta değil." der. Kilit tarayıcıda tutulur;
bu statik bir oyun için yumuşak bir kilittir (günlerin verisi tarayıcı kodundadır).
| Ad | Gerekli mi | Açıklama |
|---|---|---|
ERISIM_KOD_HASHLERI | Kod satışı için | Virgülle ayrılmış SHA-256 listesi (scripts/kod-hash.mjs) |
DATAKIT_KOD_HASHLERI | Datakit kodu için | Datakit'in kilitli derslerini açan kodların listesi (Fabricakit'inkinden ayrı; aynı betikle) |
MOTOR_KOD_HASHLERI | Motor kodu için | Motor'un kilitli derslerini açan kodların listesi (Datakit'inkinden ayrı; aynı betikle) |
MULAKAT_KOD_HASHLERI | Mülakat kodu için | Mülakat raporunun kilitli metinlerini açan kodların listesi (diğerlerinden ayrı; aynı betikle) |
ANTHROPIC_API_KEY | Yalnız yapay zeka modunda | Claude API anahtarı. Koda ya da repoya yazılmaz. |
AJAN_GM_MODEL | Hayır | Varsayılan claude-haiku-5-5 (en ucuz güncel Claude modeli) |
npm run dev yalnızca statik dosyaları sunar; /api işlevlerini yerelde denemek için Vercel CLI ile vercel dev.
İki ürünün dersleri aynı kodla çalışır: Datakit (/datakit/, 12 ders, ilk 4 ücretsiz) ve Motor (/motor/, Fabrika Motoru'nun
12 ana sayfası, ilk 4 ücretsiz). scripts/derle.py'deki REHBERLER listesi ürünü, rafını ve adresini tanımlar; adres rafın
adresiyle aynıysa (Datakit) raf sayfası açılış sayfasına dönüşür, değilse (Motor) raf sayfası olduğu gibi kalır ve derslere
bir kutuyla bağlanır.
Excel dosyasının sayfaları sitede dosyadaki değerleri, renkleri, birleşik hücreleri, dondurulmuş bölmeleri ve grafikleriyle açılır.
Notlu alanın sağ üst köşesinde turuncu üçgen durur; alandaki bir hücreye dokununca Ajan GM'nin notu açılır (masaüstünde yanında,
telefonda alttan, yatay tutulan telefonda ekranın yarısında yanda; alan kartın örtmediği yere kaydırılır). "Notları sırayla gez"
notları sırayla dolaşır, ad kutusu tıklanan hücrenin değerini ve formül sonucu olup olmadığını gösterir, her dersin sonunda tek soru
vardır (cevap tarayıcıda hatırlanır: celcini-rehber). Site veri almaz. Dondurulmuş sütunlar ızgaranın yarısından genişse
(dar telefon) yalnızca sığan kadarı dondurulur; uzaklaştırınca ya da ekran genişleyince (telefon yan çevrilince) yer yettiği
ölçüde dosyadaki dondurma geri gelir (tablo.js → donukSutunAyarla).
data/<urun>/dersler.json (data/datakit/, data/motor/). Her ders: id, sira, sayfa_adi, baslik, ozet,
ucretsiz, ajan_gm (isteğe bağlı ajan_gm_ses), notlar[] ve soru; isteğe bağlı veri_notu dersin sayfasının altındaki
açıklamayı değiştirir (yoksa acilis.ders_veri_notu). Not: aralik ("B7:M9"), baslik, metin, karar ("Ne yapmalı?"),
isteğe bağlı ses (metinde okunuşu bozan işaret ya da kısaltma varsa sesli okuma bunu okur). Soru: metin, secenekler[],
dogru (sıfırdan başlayan sıra), aciklama. acilis açılış sayfasının metinleridir. Değiştirince
python3 scripts/derle.py ve npm run check.ucretsiz_ders ders herkese açıktır (<urun>/veri/ders/<id>.json); kalanların notu, sorusu ve sayfası yalnızca
api/_dersler/<urun>/<id>.json'dadır ve POST /api/ders/ { urun, id, kod } geçerli kodla döndürür. Kod listesi Vercel'de
üründen ürüne ayrıdır (api/ders.js → KOD_LISTESI): Datakit DATAKIT_KOD_HASHLERI, Motor MOTOR_KOD_HASHLERI
(node scripts/kod-hash.mjs --uret 20; bir ürünün kodu ötekini, Fabricakit'in kodları hiçbirini açmaz). Kod tarayıcıda
celcini-kod-<urun> olarak saklanır; sunucu saklamaz. npm run check kilitli bir dersin herkese açık dosyalara
sızmadığını denetler. Liste boşsa kilit paneli "Erişim kodları henüz satışta değil." der.pip install openpyxl, sonra
python3 scripts/rehber-disa-aktar.py <dosya.xlsx> data/datakit/sayfalar "Dashboard=dashboard" "Otomatik Yorum=otomatik-yorum" ….
Büyük sayfanın yalnız dolu bölümünü göstermek için seçime satır ve son sütun eklenir:
"MPS=mps:satir=1-45,328:sutun=CQ" (Motor'un 12 sayfası böyle aktarıldı; seçim dışında kalan grafik disarida olur).
Son sütun dolu alandan genişse araya boş sütunlar eklenir (taşan metin ve dolu alanın sağındaki grafik görünsün diye).
Hücrelerin önbellekteki değerleri okunur (dosya Excel'de hesaplanıp kaydedilmiş olmalı); sayı biçimleri Türkçeye (bölümlü ve
koşullu biçimler dahil), koşullu biçimler renge ve veri çubuğuna çevrilir; çubuk, halka ve pasta grafikler SVG ile çizilir.
Excel dosyası repoda durmaz./uzay/ikiz/)Fabrika Motoru'nun örnekli dosyasındaki kurgusal tesis ("Örnek Isıtma-Soğutma Yan Sanayi Tesisi": 3 hat, 11 iş merkezi, 20 mamul, 20 iş günlük MPS) 3D'de gün gün oynar; hazır senaryolar (SİMÜLASYON sayfasındaki dört senaryo) ve kollar (talep, kapasite, üçüncü vardiya, fason, arıza) sonucu Baz ile karşılaştırır. Gerçek bir firmanın verisi değildir; başka bir tesisin verisi eklenmez.
uzay/ikiz/js/veri.js — python3 scripts/ikiz-veri.py <FABRICAKIT_MOTOR_ORNEKLI.xlsx> üretir (openpyxl; Excel
dosyası repoda durmaz). HAT, MAMUL, STD_SÜRE, MPS (G01–G20 ve 20 iş günlük net talep), KAPASİTE (plan günleri ve dosyadaki
yük oranları), SİMÜLASYON (senaryolar) ve RAF (bölge göz sayıları) sayfalarından okur.hesap.js, DOM'suz): iş merkezi yükü = Σ plan × standart süre + hazırlık; günlük kapasite = istasyon × 900 dk ×
verim (iki vardiya; üçüncü vardiya ×1,5; fason, fason mümkün iş merkezine dosyadaki günlük fason dakikasını ekler; arıza
kapasiteyi sıfırlar). İş merkezleri proses sırasıyla işlenir; parça aynı gün rotanın tamamından geçer, kapasite yetmeyince
darboğazın önünde bekler ve ertesi güne devreder; toplam aşım ve en yüksek yük bu devreden işi içerdiği için dosyadaki
statik değerlerden farklıdır. Sevk = 20 iş günlük net talebin eşit dağılımı (birikimli yuvarlama); karşılanmayan sevk ertesi
güne kalır (OTD). Üçüncü vardiya personel ihtiyacını birinci vardiya kadar artırır (dosyada üçüncü vardiya personeli 0). İlk günün plan yükü oranları dosyanın KAPASİTE sayfasıyla aynıdır (scripts/ikiz-test.mjs denetler).sahne.js): Three.js r128 (ROTA 3D ile aynı vendor dosyaları). İş merkezi rengi günün yük oranına göre (normal /
dolu >%85 / aşım >%100 / arıza), darboğazın önünde palet yığını (bekleyen iş), hat boyunca akan parçalar günün üretimiyle
hızlanır, gün sonunda kamyon çıkar. WebGL yoksa tablo, karşılaştırma ve öneriler yine çalışır.arayuz.js): oynatıcı (gün; hız düğmeleri masaüstünde), kamera (genel / üst / hat), sekmeler Senaryo · Gün · Sonuç · Model; telefonda
kontroller Fabricakit görev notunun çekmecesinde. "Ne yapmalı?" önerileri aynı modelle kolları tek tek deneyerek bulunur;
yapay zeka çağrısı yoktur. Sayfa veri almaz./arsiv/)Kaynak data/arsiv.json; içerik Fabricakit Üretim Arşivi sunumlarından aktarıldı ve site için düzenlendi (sunum dosyaları
repoda durmaz). scripts/derle.py /arsiv/ dizinini (arama kutusu, bölüm bölüm konu kartları ve sorun başlıkları) ve konu
başına /arsiv/<konu>/ sayfasını üretir, adresleri sitemap'e ekler. Bir sorunun adresi /arsiv/<konu>/#<kart>.
bolumler[] (slug, ad) → kategoriler[] (slug, ad) → kartlar[]. Kart alanları: slug, baslik,
belirti, kok_neden, cozum[] (tam üç adım), ilke (tek cümle), isteğe bağlı ilgili (ürün slug'ı).ilgili yalnızca üretimde görünen bir ürünü gösterebilir. Kartın altında "İlgili dosya" bağlantısı,
ürün sayfasında "Üretim Arşivi'nde" listesi çıkar. Bağlantı yalnızca dosya o sorunu gerçekten çözüyorsa verilir.ilgili ürünün varlığını denetler;
hata varsa durur. Üretim derlemesi data/arsiv.json'da artık olmayan /arsiv/<konu>/ klasörünü siler.main.js, raflarda da aynı): kelime başından eşleşir ("kalite" "kalitesi"ni bulur, "lanla" "PLANLA"yı bulmaz).
Sorguda Türkçe harf yoksa metnin harfleri de sadeleşir ("sayim" → "sayım"); Türkçe harfle yazılan sorgu harfi harfine aranır
("kâr" "karar"ı bulmaz), şapkasız yazılan sorgu şapkalı yazımı da bulur ("şikayet" → "şikâyet"). Tek başına "İ" sorguyu
Türkçe saymaz (telefon baştaki "i"yi "İ" yapar). Dizinde kartın başlığı, belirtisi, kök nedeni, çözümü, ilkesi, konu ve bölüm adı aranır; arama
sürerken bölüm kısayolları ve konu sayıları (data-arama-gizle) gizlenir./mulakat/)Kaynak data/mulakat.json (genel set v1: gerçek mülakatlarda en sık sorulan 30 soru). Ajan GM soruyu sorar, her soruda 4 şık
vardır; şık işaretlenince sıradaki soru gelir, sonunda rapor tarayıcıda hesaplanır. Cevaplar hiçbir yere gönderilmez.
G, 3 puan) ve üç hata tarzından üç şık (E kalıp, F filtresiz, C çekingen,
A iddialı; 0–2 puan, 0 kırmızı bayrak). Karar: teklif ≥ 85 ve kırmızı bayrak yok; ikinci görüşme ≥ 70 ve en fazla 1;
beklemede ≥ 50 ve en fazla 3; altı olumsuz. Kurallar assets/js/mulakat/motor.js'te; scripts/mulakat-test.mjs denetler.api/_mulakat/kilitli.json'a yazar, api/mulakat.js geçerli kodla verir. scripts/check.js bu metinlerin herkese açık
dosyalarda geçmediğini denetler.node scripts/kod-hash.mjs --uret 20 ile üretin, hash listesini Vercel'de MULAKAT_KOD_HASHLERI
değerine yazın, Shopier'deki kod ürününün bağlantısını ve fiyatını assets/js/config.js'te mulakat_kod ve
mulakat_kod_fiyat'a girin. Liste boşken kilit kartı "Erişim kodları henüz satışta değil." der.#CBE6F6, kart #FFFFFF, çizgi #9CCBEA, okyanus mavisi #0096C7, koyu okyanus #005F93,
metin #0B1F3A / #46586D, turuncu çizgi #F4A27A, turuncu zemin #FDEBDD.#0096C7 üstünde beyaz yazı yalnızca ≥ 20px kalın (kontrast 3,39). Açık zeminde link ve ikon #005F93.#0096C7 zemin üstünde. Yeniden çizilmez, yalnızca boyutlandırılır.Framework Preset: Other. Build Command ve Output Directory boş. Depo kökü doğrudan yayınlanır.
package.json'daki tek bağımlılık (@anthropic-ai/sdk) yalnızca api/ işlevleri içindir; Vercel kurar.
vercel.json temiz URL'leri, güvenlik başlıklarını ve Content-Security-Policy'yi tanımlar
(yalnızca kendi alan adından script, stil ve görsel; satır içi script/stil yok).
.vercelignore derleme kaynaklarını, önizlemeyi ve Claude çalışma dosyalarını yayından çıkarır.
Tüm hakları saklıdır © Celcini. İkonlar: Lucide (ISC lisansı).
{"src": "...", "alt": "..."}.webpexcel_surum, makro, sayfa_sayisi | Teknik bilgi. |
one_cikan | true ise ana sayfada "Öne çıkan" bölümüne girer. |
ornek | true ise yalnızca önizlemede görünür. |
soz, icindekiler[], adimlar[], teknik_not, sss[] | İsteğe bağlı, genişletilmiş ürün sayfası: tek cümlelik söz (yoksa kisa), "İçinde ne var" ({"sayfa", "aciklama"}), "Nasıl kullanılır" adımları, teknik not, ürün SSS'si ({"soru", "cevap"}). |
python3 scripts/derle.py çalıştır, npm run check ile kontrol et, commit et.
npm run check ikisinin uyumunu denetler.ERKEK_SESLER) varsa görünür; derslerde ses dosyası kullanılmaz.scripts/derle.py'deki REHBERLER listesine kayıt, api/ders.js'teki KOD_LISTESI'ne ürün,
scripts/check.js'teki REHBERLER'e satır ve data/<urun>/.