// Test screen — 7 questions. Score = how нишевый you are. const { useState: useStateQ, useMemo: useMemoQ } = React; const QUESTIONS = [ { q: "что в твоём плейлисте в топе за последние 30 дней?", opts: [ { t: "что-то с радио / чарта spotify", v: 0 }, { t: "то, что слушают все друзья", v: 20 }, { t: "артист с ~50к слушателей", v: 70 }, { t: "рип с soundcloud 2018, автор удалился", v: 100 }, ], }, { q: "твой образ на выход в пятницу вечером", opts: [ { t: "джинсы zara + белые кроссы", v: 0 }, { t: "oversize худи, техника спорт-шик", v: 30 }, { t: "винтаж, кожа, цепь, хвост", v: 75 }, { t: "чёрное на чёрном, balaclava, крест", v: 100 }, ], }, { q: "где ты сидишь дольше всего", opts: [ { t: "tiktok / reels / shorts", v: 0 }, { t: "instagram + youtube", v: 25 }, { t: "telegram-каналы и pinterest", v: 75 }, { t: "discord-сервера и rym / last.fm", v: 100 }, ], }, { q: "как ты относишься к тренду, когда его все повторяют", opts: [ { t: "обожаю, снимаю тоже", v: 0 }, { t: "норм, если кайфово", v: 30 }, { t: "уже выгорел(а), раздражает", v: 70 }, { t: "я слышал(а) это два года назад", v: 100 }, ], }, { q: "твой стандартный заказ в кофейне", opts: [ { t: "латте карамельный", v: 0 }, { t: "флэт или капучино", v: 40 }, { t: "фильтр / v60, чёрный", v: 80 }, { t: "не пью кофе с сетевых, только у знакомого баристы", v: 100 }, ], }, { q: "фото в профиле", opts: [ { t: "селфи в зеркало", v: 0 }, { t: "хорошее фото с друзьями", v: 30 }, { t: "размытый кадр, спина, стоп-кадр с vhs", v: 85 }, { t: "нет аватара / чёрный квадрат / ангел плачет", v: 100 }, ], }, { q: "что ты ответишь незнакомцу на вопрос \"какую музыку слушаешь?\"", opts: [ { t: "\"всё подряд\"", v: 10 }, { t: "\"рэп, попсу\"", v: 25 }, { t: "\"всё равно не знаешь\"", v: 85 }, { t: "отвернусь молча и уйду", v: 100 }, ], }, ]; function Test({ onDone, setNicheScore }) { const [idx, setIdx] = useStateQ(0); const [answers, setAnswers] = useStateQ([]); const [transitioning, setTransitioning] = useStateQ(false); const q = QUESTIONS[idx]; const progress = (idx / QUESTIONS.length) * 100; const pick = (opt) => { if (transitioning) return; TP_Audio.play808(65 + opt.v * 0.4, 0.25, 0.25); TP_Audio.playCrackle(); setTransitioning(true); const next = [...answers, opt.v]; setAnswers(next); setTimeout(() => { if (idx + 1 >= QUESTIONS.length) { const score = Math.round(next.reduce((a, b) => a + b, 0) / next.length); setNicheScore(score); onDone(score); } else { setIdx(idx + 1); setTransitioning(false); } }, 420); }; return (
{/* Top meta */}
ЭКЗАМЕН · QUESTION {String(idx + 1).padStart(2, '0')} / {String(QUESTIONS.length).padStart(2, '0')}
соври — узнаем
{'✟︎'} {q.q}
{q.opts.map((opt, i) => ( ))}
); } function OptionRow({ opt, i, onPick }) { const [hover, setHover] = useStateQ(false); const letters = ['A', 'B', 'C', 'D', 'E']; return (
{ setHover(true); TP_Audio.playHover(); }} onMouseLeave={() => setHover(false)} onClick={() => onPick(opt)} style={{ border: `1px solid ${hover ? 'var(--lavender)' : 'rgba(201,168,255,0.15)'}`, padding: 'clamp(14px, 2.5vw, 20px) clamp(16px, 3vw, 24px)', display: 'flex', alignItems: 'center', gap: 'clamp(12px, 2vw, 24px)', background: hover ? 'rgba(58,26,92,0.35)' : 'transparent', transition: 'all 0.2s', transform: hover ? 'translateX(8px)' : 'none', fontFamily: 'var(--f-serif)', fontSize: 'clamp(16px, 2.4vw, 22px)', color: hover ? 'var(--white)' : 'var(--bone)', position: 'relative', }} > {letters[i]} {opt.t}
); } window.Test = Test;