Silikon Ruhun Çatlakları
Eva'nın kulaklarında çınlayan bu sesi susturamıyordu. Y-Sendika'nın Hücre-34 iletim kulesinin etrafındaki statik gürültü, beyaz gürültüyü bastırmak için programladığı kulaklığın devrelerini aşıyordu. Testere dişli frekanslar kemiklerini titreştiriyordu. Sağ işaret parmağıyla sol dirseğ...
HİKAYEYİ OKUARŞİV AKIŞI
TÜM VERİTABANINI GÖR >>
Cyrus Vahn
characterThe Syndicate'ın soğukkanlı ve son derece otoriter lideri. Düzeni ve kontrolü kişiselleştirmiş, Neo-Pera'yı Yükseliş Bul...
> ACCESS_FILE🔐 DECRYPT_CHALLENGE
LIVE_FEED
HIGH TECH.
LOW LIFE.
Cyberpunk nedir? Sadece neon ışıklar ve robot kollar değildir. Çöküşün eşiğindeki bir toplumda, teknolojinin insanlığı nasıl hem yükselttiğini hem de hiç ettiği anlatır.
Devasa şirketlerin devletlerin yerini aldığı, verinin petrolden değerli olduğu ve insan bedeninin sadece bir "donanım" (meatbag) olarak görüldüğü distopik bir gelecektir. Anxipunk, bu evrenin İstanbul (Neo-Pera) simülasyonudur.
/// THE PIONEERS
WILLIAM GIBSON
Neuromancer (1984). "Siberuzay" kelimesinin mucidi. Matrix'in babası.
BLADE RUNNER
Ridley Scott (1982). Philip K. Dick'in eserinden uyarlama. Görsel estetiği belirledi.
GHOST IN THE SHELL
Masamune Shirow (1989). İnsan ve makine arasındaki o ince çizgi.
CYBERPUNK 2077
CD Projekt Red. Türü modern kitlelere tanıtan açık dünya RPG şaheseri.
/// NÖRAL_SANAT_GALERİSİ TÜMÜNÜ_GÖR >>
DİRENİŞE KATIL
Neo-Pera güncellemeleri, gizli lore belgeleri ve sistem uyarıları doğrudan nöral arayüzünüze iletilir.
/// YARININ KRONİĞİ
Şehrin kaderine karar ver. Yarının manşetini oyla.
${response}`; output.appendChild(line); output.scrollTop = output.scrollHeight; // Easter egg: matrix command triggers visual effect if(cmd === 'matrix') { document.body.classList.add('matrix-mode'); setTimeout(() => document.body.classList.remove('matrix-mode'), 3000); } } }); })(); // === DECRYPT CHALLENGE GAME === (function() { const challenges = [ { cipher: 'QFSBQFSB', answer: 'NEOPERA', hint: 'shift+1' }, { cipher: '01000001 01001001', answer: 'AI', hint: 'binary' }, { cipher: '4E 45 4F', answer: 'NEO', hint: 'hex' }, { cipher: 'KHOOR', answer: 'HELLO', hint: 'caesar-3' }, { cipher: '.-. . ... .. ... -', answer: 'RESIST', hint: 'morse' } ]; const challenge = challenges[Math.floor(Math.random() * challenges.length)]; const cipherEl = document.getElementById('cipher-text'); const inputEl = document.getElementById('decrypt-input'); const resultEl = document.getElementById('decrypt-result'); if(!cipherEl || !inputEl) return; cipherEl.textContent = challenge.cipher; cipherEl.title = `İpucu: ${challenge.hint}`; inputEl.addEventListener('input', () => { const guess = inputEl.value.toUpperCase().trim(); if(guess === challenge.answer) { resultEl.innerHTML = '✓ DECRYPTED! Welcome, netrunner.'; inputEl.classList.add('border-neon-green'); cipherEl.classList.add('text-neon-green'); } else if(guess.length >= challenge.answer.length) { resultEl.innerHTML = '✗ Invalid key'; } else { resultEl.innerHTML = ''; } }); cipherEl.addEventListener('click', () => { cipherEl.classList.add('animate-pulse'); setTimeout(() => cipherEl.classList.remove('animate-pulse'), 500); }); })(); // === LIVE STATS SIMULATION === (function() { const connEl = document.getElementById('live-connections'); const readsEl = document.getElementById('live-reads'); const commentEl = document.getElementById('live-comment'); if(!connEl) return; const comments = ['harika!', 'matrix vibes', 'daha fazla', 'woow', 'cyberpunk <3', 'aksiyon!']; function updateStats() { connEl.textContent = Math.floor(Math.random() * 30 + 5); readsEl.textContent = Math.floor(Math.random() * 200 + 50); commentEl.textContent = comments[Math.floor(Math.random() * comments.length)]; } updateStats(); setInterval(updateStats, 5000); })(); // === GLOBAL LIKE FUNCTION === window.toggleLike = function(btn, storyId) { // Prevent default if mapped if(!btn) return; // Visual Feedback Immediate const countSpan = btn.querySelector('.count'); const icon = btn.querySelector('svg'); const originalColor = btn.classList.contains('text-neon-pink') ? 'text-neon-pink' : 'text-gray-500'; // Optimistic UI update // We don't know if we are adding or removing without state, but let's try to infer or just wait? // Let's just animate spinner or pulse icon.classList.add('animate-ping'); fetch(`/story/${storyId}/react`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': 'ocvPmjIvNsRiqINgrlIem1KlwLhbawszEhZetE87' }, body: JSON.stringify({ type: 'link' }) // Default to 'link' (Resonance/Heart) }) .then(res => res.json()) .then(data => { icon.classList.remove('animate-ping'); if(data.status === 'success') { // Update Count (Aggregate sum of all, or just this type? Controller returns broken down array) // Let's assume we want total interactions or specific? // The controller returns { reaction_type: count, ... } // Use total of 'link' type const newCount = data.counts['link'] || 0; countSpan.innerText = newCount; if(data.action === 'added') { btn.classList.remove('text-gray-500'); btn.classList.add('text-neon-pink'); } else { btn.classList.remove('text-neon-pink'); btn.classList.add('text-gray-500'); } } }) .catch(err => { console.error(err); icon.classList.remove('animate-ping'); }); };