// --- Sections: Stats, About, Schedule, Games, VODs, Chat, Socials --- function StatsRow() { return (
{GRANDPA.stats.map((s, i) => (
{s.num}
{s.lbl}
))}
); } function About() { // Pension progress bar (blocks) const totalBlocks = 20; // Real age 38 -> retirement 65, 27 years left const pct = Math.max(0, Math.min(1, (GRANDPA.realAge - 20) / (65 - 20))); const filled = Math.max(0, Math.min(totalBlocks, Math.round(pct * totalBlocks))); const bar = '█'.repeat(filled) + '░'.repeat(totalBlocks - filled); return ( <>

◉ ID CARD

όνομα{GRANDPA.name}
πραγματ. ηλικία{GRANDPA.realAge}
ηλικία ψυχής{GRANDPA.personaAge}+
statusστο κάτεργο
διάθεσηήρεμη γκρίνια
θεραπείαstreaming
καύσιμοελληνικός καφές
πρόοδος προς σύνταξη:
[{bar}]
μένουν {GRANDPA.years_until_retirement} χρόνια

Είμαι ο παππούς. Στα χαρτιά 38, αλλά στην ψυχή έχω πατήσει τα 70.

Μέχρι στιγμής το κάτεργο δεν επιτρέπει τα προγραμματισμένα streams, αλλά μια στο τόσο θα γίνεται «η φασούλα» — έτσι, για την ψυχοθεραπεία.

MISSION: ψυχοθεραπεία μέσω streaming · αντίστροφη μέτρηση για σύνταξη

◉ RULES OF THE ΚΑΦΕΝΕΙΟ

  • 01. Σεβασμός στον παππού και στο chat.
  • 02. Όχι spoilers — ο παππούς ξεχνάει εύκολα.
  • 03. Ελληνικά ή Αγγλικά — όλα καλά.
  • 04. Χωρίς πολιτικά. Το κάτεργο αρκεί.
); } function Schedule() { return ( <>
Το κάτεργο δεν επιτρέπει προγραμματισμένα streams. Μια στο τόσο όμως, γίνεται η φασούλα — follow στο Twitch + join στο Discord για να δεις ειδοποίηση.
{GRANDPA.schedule.map((row, i) => (
{row.day}
{row.time}
{row.note}
))}
); } function Games() { return ( <>
{GAMES.map((g, i) => (
[ {g.title.toUpperCase()} ]
{g.title}
{g.hrs}h streamed
› {g.tag}
))}
); } function Vods() { return ( <>
{VODS.map((v, i) => (
{v.dur}
{v.title}
{v.views} views · {v.when}
))}
); } function ChatReplay() { const [msgs, setMsgs] = useState(() => CHAT_MSGS.slice(0, 6)); useEffect(() => { let i = 6; const id = setInterval(() => { setMsgs(prev => { const next = CHAT_MSGS[i % CHAT_MSGS.length]; const arr = [...prev, { ...next, _id: Math.random() }]; if (arr.length > 10) arr.shift(); return arr; }); i++; }, 1800); return () => clearInterval(id); }, []); return (
#chat · greekgrandpa REPLAY
{msgs.map((m, i) => (
{m.u}: {m.t}
))}
); } function Projects() { const projects = [ { title: 'PAPPOUDOBOT', sub: 'Twitch chat bot · κουμάντο στο chat', desc: 'Ο μικρός βοηθός του παππού: commands, alerts και δουλίτσες για το stream.', href: 'http://pappoudobot.greekgrandpa.gr/', tag: 'BOT', art: (
▮▮▮▮▮
), }, { title: 'JACKBOX-STYLE GAME', sub: 'Παιχνίδι για το stream · παίζεις με τον παππού', desc: 'Σύνδεσε το κινητό σου, μπες στο lobby και παίξε ζωντανά μαζί με το chat.', href: 'https://jackbox.greekgrandpa.gr/', tag: 'GAME', art: (
A B
), }, ]; return ( <> ); } function Socials() { return ( <>
{SOCIALS.map((s, i) => (
{s.ico}
{s.label}
{s.handle}
))}
); } Object.assign(window, { StatsRow, About, Schedule, Games, Projects, Vods, ChatReplay, Socials });