尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Çok oyunculu bilgisayar şirketi tycoon oyunu. Şimdilik yalnızca web; mobil (Capacitor) ilk sürüm oturduktan sonra eklenecek.
Stack: Next.js 14 (App Router) · Supabase (auth + Postgres) · Tailwind
Supabase'de yeni proje aç. SQL Editor'de sırayla çalıştır:
supabase/schema.sqlsupabase/migrations/002_borsa.sqlsupabase/migrations/003_gorseller_gunluk.sqlsupabase/migrations/004_teklifler_posta.sqlsupabase/migrations/005_atolye_sosyal_hayat.sqlsupabase/migrations/006_sezonlar.sqlsupabase/migrations/007_finans.sqlsupabase/migrations/008_sosyal_profil.sqlsupabase/migrations/009_ihale_arge.sqlsupabase/migrations/010_tesis_kriz.sqlsupabase/migrations/011_halka_arz_operasyon.sqlsupabase/migrations/012_kulup_bahis.sqlsupabase/migrations/013_banka_kilit.sqlsupabase/migrations/014_bildirimler.sql (içindeki CRON_SECRET_BURAYA yerine kendi değerini yaz)supabase/migrations/015_sirlar_santaj.sqlMevcut bir veritabanını güncelliyorsan yalnızca henüz çalıştırmadığın migrations/ dosyalarını çalıştır.
.env.example dosyasını .env.local olarak kopyala, Supabase anahtarlarını gir.
npm install
npm run dev
Kayıt ol, sonra kendini yönetici yap (SQL Editor):
update public.profiles set is_admin = true
where id = (select id from auth.users where email = '[email protected]');
Oyun ekranının altında "Yönetici paneli" bağlantısı çıkar (/admin).
Hızlı test için Supabase > Authentication > Providers > Email altında "Confirm email" seçeneğini kapatabilirsin.
Vercel'e bağla, ortam değişkenlerini ekle: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY ve isteğe bağlı PIXELLAB_API_KEY.
/api/generate) seçimleri İngilizce bir tarife çevirip (src/lib/game/prompts.ts) PixelLab generate-image-pixflux uç noktasına gönderir.generated deposuna yazılır; adresi companies.portrait_url / logo_url sütunlarına kaydedilir.asset_generations tablosuna yazılır; yönetici panelinde bakiye ve son 24 saatin harcaması görünür.src/lib/game/config.ts). Erken kademeler 1 saatte, geç kademeler 3,5 saatte kendini öder.src/lib/server/offers.ts — 9 senaryo şablonu (bakım sözleşmesi, kamu ihalesi, acil müdahale, iflas stoğu, melek yatırımcı, fidye yazılımı krizi, banka konsorsiyumu, röportaj, yetenek transferi)./api/inbox ile güncellenir; nakit değişiklikleri accept_offer / settle_offer SQL fonksiyonlarıyla atomik ve tek seferliktir.src/lib/game/workshop.ts — 4 parça yuvası (işlemci, ekran kartı, bellek, depolama) × 3 kalite. Birim maliyet = parçalar + $60 montaj.loadMarket); fiyat/stok değişikliğinde önbellek temizlenir.settle_sales ile bir kez kasaya geçer.src/lib/server/tenders.ts: her 2 saatte bir yeni ihale, teklifler 4 saat açık (aynı anda iki ihale). Şartname (alıcı, adet, en düşük parça kaliteleri, tavan birim fiyat) ve kurgusal rakibin kapalı zarfı gizli tohumdan üretilir, ilk ihtiyaçta tenders tablosuna yazılır.settle_tender, tek işlem) kazananın deposundan teslimat yapılır: stok yoksa ya da model şartnameye uymuyorsa teminat yanar, itibar −6, sıra sonrakine geçer. Kazanan itibar +3 alır; diğer teminatlar iade edilir.src/lib/game/research.ts: 6 proje (montaj hattı, tedarikçi anlaşmaları, sessiz soğutma, endüstriyel tasarım, yapay zekâ hızlandırıcı, yeni nesil grafik mimarisi). Etkiler: parça maliyeti indirimi, hak edilen fiyat (fairValue premium) ve pazarda çekicilik.src/lib/game/facility.ts: garajdan teknoloji kampüsüne 6 seviye. Her seviye model sayısını, model başına depoyu ve tek seferde üretimi artırır; 3. seviyeden itibaren ölçek ekonomisi (üretim maliyeti −%3 … −%12). İnşaat 1–24 saat sürer, bedel peşin, her açılışta itibar +2 ve haber.facility_max_stock, facility_max_models; produce_pc ve toptan satış bunları kullanır). Yatırımın yarısı net değere sayılır.src/lib/server/offers.ts): grev (çalışanı ya da büyük tesisi olana), arızalı parti / geri çağırma (bir modelinden 30+ satan), tedarik krizi, vergi incelemesi (muhasebecisi olan daha rahat geçer), depo yangını, müşteri verisi sızıntısı. Yanıtsız kalan kriz kendi "görmezden gel" sonucuyla kapanır.company_effects tablosunda tutulur: halt (üretim durur), demand (PC çekiciliği; −1 satışı durdurur), parts (parça maliyeti artar). Ofis'te "Süren krizler" kartında görünür.src/lib/game/equity.ts, src/lib/server/equity.ts. Her şirket 1.000 kurucu hissesiyle başlar. Halka arzda (en az $100 bin şirket değeri, en az 50 hisse) yeni hisse basılır: kasaya fiyat × adet × 0,95 girer, kurucu payı oransal küçülür; kurucu %51'in altına inemez.src/lib/game/ops.ts, src/lib/server/ops.ts: karalama kampanyası, sahte yorum dalgası, endüstriyel casusluk (rakibin Ar-Ge'sini kopyala), ihale zarfını ele geçir (rakibin teklifini öğren), yönetici ayartma. Rakibin profil sayfasından yapılır.OPS_TEST_ROLLS ortam değişkeni zarları sabitler; canlıda tanımlama.src/lib/game/blackmail.ts kurallar, src/lib/server/blackmail.ts akış, 015_sirlar_santaj.sql kilitli fonksiyonlar (blackmail_send, blackmail_resolve).BLACKMAIL_TEST_ROLLS=0|1 (yayında tanımlama).src/lib/server/newspaper.ts: her gün (İstanbul) bir sayı. O günün haberlerinden en önemlisi manşet olur, diğerleri Ekonomi / Kulis / Teknoloji / Tüketici / Magazin bölümlerine ayrılır. Yan sütunda borsada yükselen-düşenler, sıralamada ilk beş, günün gündemi ve en çok beğenilen oyuncu paylaşımı. Gündem → Gazete; bugün, dün ve 2 gün öncesi.Hepsi oyun parasıyla; gerçek parayla hiçbir bağlantısı yoktur ve olmamalıdır (oyun içi satın alma eklenirse bu bölüm kaldırılmalı). Kasa her oyunda biraz öndedir; bu, ekonomideki fazla parayı yavaşça emer.
src/lib/game/casino.ts): Avrupa ruleti (kasa %2,7), iki zar (8+ / 6− ×2,35, tam 7 ×5,8), blackjack (krupiye 17'de durur, blackjack 3:2, ikiye katlama). Zarlar crypto.randomInt ile sunucuda atılır; blackjack destesi sunucuda saklanır, krupiyenin kapalı kartı el bitene kadar gönderilmez.upProbability), böylece çöküş sonrası "toparlanır" gibi bariz bahisler ucuzlamaz.src/lib/game/events.ts tanımlar, src/lib/server/events.ts takvim. Her 8 saatlik dilimin (İstanbul 00/08/16) olayı gizli tohumla seçilir; herkes aynı olayı görür, gelecek tahmin edilemez.EVENT_OVERRIDE=calm (yayında tanımlama).end_season tüm şirketleri ve oyun verisini tek işlemde siler, yeni sezonu açar. Hesaplar ve yönetici yetkileri kalır.src/lib/game/finance.ts kuralları, src/lib/server/finance.ts tembel hesaplamayı yapar (şirket ve posta isteklerinde çalışır)./sirket/[id]: şirketin künyesi, net değer, itibar, sıra, satıştaki ürünleri, hakkındaki paylaşımlar, partneri, ekibi ve mülkleri. Buradan posta gönderilir ve anlaşma teklif edilir.Oyuncular da paylaşım yapabilir (saatte 10), beğenebilir ve yorum yazabilir (saatte 30). Herkes kendi paylaşımını ve yorumunu silebilir; kurgusal hesapların haberlerini yalnızca yönetici siler.
src/lib/server/social.ts — kurgusal hesaplar (@fiyatavcisi, @donanimcanavari, @teknogundem, @magazinekspres, @piyasakulisi). Fahiş/pahalı/uygun etiket, maliyet altı satış, darboğaz, satış eşikleri, tükenme, ilişki olayları, fidye saldırısı ve ihale kazanımı paylaşım üretir.
Her paylaşımın itibar etkisi vardır (−5 … +3). İtibar 0–100, başlangıç 50; satış hızını ve hak edilen fiyatı etkiler. Fiyat tepkisi model başına 30 dakikada en fazla bir kez gelir.
Şablonlarda değişkenlere Türkçe ek eklenmez (ek, ismin sesine göre değişir).
src/lib/game/life.ts — 12 kurgusal yetişkin karakter; her birinin mesleği, sevdiği/sevmediği şeyler ve şirkete yararı var.Bir işlemin kontrolü (bakiye, sınır, "açık kredi var mı") ve para hareketi aynı veritabanı fonksiyonunda, satır kilidi altında yapılmalı. İstemciden okunan durumu JS'te değiştirip geri yazmak, aynı anda gönderilen isteklerde istismara açıktır. 013'te kapatılan örnekler: paralel kredi çekme (kasaya 12 kredi, kayda 1 kredi), mevduatın paralel olarak birden çok kez çekilmesi, gizli operasyon sınırlarının paralel isteklerle aşılması. Banka işlemleri artık bank_op, operasyonlar ops_reserve üzerinden yapılır. Vadede önce kasa, sonra mevduat tahsil edilir; yetmeyen kısım silinmez, borç olarak kalır.
Next.js 14, yalnızca GET içeren route'lardaki fetch isteklerini kalıcı olarak önbelleğe alır. Supabase istemcisi bu yüzden cache: "no-store" ile kurulur ve her API route'u fetchCache = "force-no-store" dışa aktarır. Yeni route eklerken bu satırı unutma.
src/lib/game/config.ts — tüm denge değerleri (ekipmanlar, başlangıç sermayesi, çevrimdışı sınır).src/lib/game/economy.ts — saf hesaplama fonksiyonları; hem sunucu hem istemci kullanır.src/app/api/* — sunucu yetkilidir: nakit ve gelir hesabını istemci değil sunucu yapar, hile yapılamaz.apply_purchase SQL fonksiyonuyla atomiktir; version alanı çifte harcamayı engeller.src/lib/game/market.ts — hisseler, komisyon (%0,5), ortak hesaplar.src/lib/server/market.ts — fiyat modeli (yalnızca sunucu). Fiyatlar veritabanına yazılmaz; gizli bir tohumdan dakikalık tikler halinde deterministik hesaplanır. 18 Ekim 2026 00:15'ten (İstanbul) önceki geçmiş eski 5 dakikalık modelden gelir; geçişte fiyat sıçramaz. Böylece herkes aynı fiyatı görür, cron gerekmez, gelecek fiyatlar tahmin edilemez.MARKET_SEED ortam değişkeninden okunur; yoksa service role anahtarından türetilir. Tohumu değiştirmek tüm fiyat geçmişini değiştirir, yayındayken dokunma.| Yol | İçerik |
|---|---|
/ | Giriş / kayıt |
/kurulus | Kurucu adı, şirket adı, logo ve karakter oluşturma |
/oyun | Ofis, Üretim, Borsa, Finans, Posta, Hayat, Gündem |
/sirket/[id] | Şirket profili |
/admin | Oyuncu listesi, nakit ekle/düş, askıya al, görselleri kaldır, şirket sil, sezonu bitir |
https://pctopia.vercel.apphttps://<proje>.supabase.co/auth/v1/callbackhttps://pctopia.vercel.app, Redirect URLs'e https://pctopia.vercel.app/** ekle.Sağlayıcı açılana kadar giriş ekranında Google butonu görünmez. Aynı e-postayla daha önce kayıt olmuş oyuncu Google ile girince aynı hesaba bağlanır.
public/sw.js bildirimleri gösterir; oyuncu Ofis'teki karttan ya da sayfa altındaki "Bildirimler" satırından açar.pg_cron ile 2 dakikada bir /api/cron/push üzerinden kontrol edilir (oyunun durumunu değiştirmez, yalnızca okur).NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT, CRON_SECRET.