import React, { useMemo, useState } from "react";
import { motion, AnimatePresence } from "framer-motion";
import {
BarChart,
Bar,
XAxis,
YAxis,
Tooltip,
Legend,
CartesianGrid,
ResponsiveContainer,
FunnelChart,
Funnel,
LabelList,
PieChart,
Pie,
Cell,
} from "recharts";
export default function App() {
const [tab, setTab] = useState("project");
const [scenario, setScenario] = useState<"conservative" | "target" | "optimistic">("target");
const scenarios = {
conservative: {
key: "conservative",
name: "Консервативный",
price: 12900,
students: 12,
revenue: 154800,
marketing: 43200,
teacher: 19200,
assistant: 9600,
method: 5000,
regs: 96,
shows: 48,
purchases: 12,
},
target: {
key: "target",
name: "Целевой",
price: 14900,
students: 16,
revenue: 238400,
marketing: 28700,
teacher: 19200,
assistant: 9600,
method: 5000,
regs: 82,
shows: 49,
purchases: 16,
},
optimistic: {
key: "optimistic",
name: "Оптимистичный",
price: 16900,
students: 18,
revenue: 304200,
marketing: 19500,
teacher: 19200,
assistant: 9600,
method: 5000,
regs: 65,
shows: 45,
purchases: 18,
},
} as const;
const s = scenarios[scenario];
const cost = s.marketing + s.teacher + s.assistant + s.method;
const profit = s.revenue - cost;
const margin = Math.round((profit / s.revenue) * 100);
const breakdownData = [
{ name: "Выручка", value: s.revenue },
{ name: "Маркетинг", value: s.marketing },
{ name: "Преподаватель", value: s.teacher },
{ name: "Ассистент", value: s.assistant },
{ name: "Методика", value: s.method },
{ name: "Прибыль", value: profit },
];
const compareData = [
{
scenario: scenarios.conservative.name,
Прибыль:
scenarios.conservative.revenue -
(scenarios.conservative.marketing +
scenarios.conservative.teacher +
scenarios.conservative.assistant +
scenarios.conservative.method),
Выручка: scenarios.conservative.revenue,
},
{
scenario: scenarios.target.name,
Прибыль:
scenarios.target.revenue -
(scenarios.target.marketing +
scenarios.target.teacher +
scenarios.target.assistant +
scenarios.target.method),
Выручка: scenarios.target.revenue,
},
{
scenario: scenarios.optimistic.name,
Прибыль:
scenarios.optimistic.revenue -
(scenarios.optimistic.marketing +
scenarios.optimistic.teacher +
scenarios.optimistic.assistant +
scenarios.optimistic.method),
Выручка: scenarios.optimistic.revenue,
},
];
const funnelData = [
{ name: "Регистрации", value: s.regs },
{ name: "Явка на пробный", value: s.shows },
{ name: "Оплаты", value: s.purchases },
];
// Доп. метрики для сметы
const pricePerLesson = s.price / 8;
const pricePerHour = s.price / 16;
const costPieData = [
{ name: "Маркетинг", value: s.marketing },
{ name: "Преподаватель", value: s.teacher },
{ name: "Ассистент", value: s.assistant },
{ name: "Методика", value: s.method },
];
const pieColors = ["#f97316", "#60a5fa", "#22c55e", "#a78bfa"];
// ===== Simple runtime tests (self-check) =====
const tests = useMemo(() => runFinanceTests(scenarios), [scenarios]);
const allPassed = tests.every((t) => t.passed);
const colors = {
bg: "#0b1020",
card: "#0f172a",
ink: "#e5e7eb",
accent: "#60a5fa",
accent2: "#f97316",
good: "#22c55e",
warn: "#eab308",
mut: "#94a3b8",
} as const;
const logo =
"https://static.tildacdn.com/tild3235-6364-4732-b561-626331663336/ARENA_by_chebatkov_1.svg";
return (
{tab === "project" && (
Мини‑сайт на GitHub Pages / Cloudflare Pages (без
конструкторов).
Презентация и дашборд (Google Sheets → Looker
Studio).
ИИ‑агент (Sheets → n8n → GPT/Gemini/Qwen → TG‑канал)
и мини‑ИИ‑видео (Veo 3) для анонса.
Чему научатся (прикладные навыки)
Записывать короткий трек для видео в Suno (или аналоге) и использовать его в Reels/Shorts. Создавать промо‑ролики 5–10 с в Veo 2/3 , KLING , Sora (при доступе) или Runway/Luma; подготовка вертикального формата 9:16. Смонтировать свой первый Reels/Shorts : титры, субтитры, обложка, публикация. Работать с мощными ИИ‑агентами (GenSpark , Manus ): «ИИ‑блогер» для TG‑канала и автоответы на вопросы. Делать выдающиеся презентации (структура, сторителлинг, визуализация данных) в Google Slides (без Canva) . Собрать в n8n собственного «Школьного ассистента »: приём /hw в Telegram, напоминания из Google Sheets, быстрые подсказки по формулам и теориям. Базовый Git & деплой : репозиторий, пулл‑реквест, публикация на Vercel/Workers. Цифровая гигиена, авторское право и этика ИИ (что можно/нельзя публиковать). Бонус: «T‑Arena Highlight » — ИИ‑сборка клипа из фрагментов геймплея для соцсетей. Слоты: 10:00–13:00, будни. Группы: до 16 человек, 1 преподаватель + ассистент.
Итог: ссылки на сайт, дашборд, видео и посты в канале.
Собираем лендинг‑черновик и публикуем.
Запускаем ИИ‑пост из общих Google Sheets (n8n) —
сразу в TG‑канале.
Показываем мини‑ИИ‑видео. Бонус: 2–3 часа игр в T‑Arena.
)}
{tab === "trends" && (
Почему это популярно
Коротко о трендах и спросе: цифры рынка, поведение подростков и
политика в образовании. Внизу — источники.
`${v}B`} /> `${v} млрд $`} />
[1] Grand View Research (2030), [1] Precedence Research
(2034).
UNESCO: первое глобальное руководство по GenAI в
образовании — фокус на человеко‑центричности. [4]
OECD: обзор управления GenAI в 18 странах (рамки и
гайдлайны для школ/вузов). [5]
Google AI Studio: бесплатное прототипирование, платный
tier — по мере роста. [6]
Инвестиции: Google — $1 млрд на AI‑обучение в вузах США.
[7]
)}
{tab === "finance" && (
Финансовая панель
{Object.values(scenarios).map(({ key, name }) => (
setScenario(key as typeof scenario)}
className={`px-3 py-1.5 rounded-xl text-sm ${
scenario === key ? "bg-white/15" : "hover:bg-white/10"
}`}
>
{name}
))}
(v >= 1000 ? `${Math.round(v / 1000)}k` : v)} /> `${Number(v).toLocaleString("ru-RU")} ₽`} /> v} />
CPL и проценты соответствуют выбранному сценарию.
(v >= 1000 ? `${Math.round(v / 1000)}k` : v)} /> `${Number(v).toLocaleString("ru-RU")} ₽`} /> | | `${Number(v).toLocaleString("ru-RU")} ₽`} />
Диапазон LTV: ~28–63 тыс. ₽ на поток, в зависимости от апсейла.
Скидки для оффера: ранняя оплата −10%, второй ребёнок −10%, 2+ курса −15%. Расходы на ИИ‑сервисы — в пределах free‑tier; при желании апгрейд 0,5–2 тыс. ₽.
{costPieData.map((_, idx) => (
|
))}
`${Number(v).toLocaleString("ru-RU")} ₽`} />
{/* Test results panel */}
{tests.map((t, i) => (
{t.name}: {t.passed ? "ok" : `ожидали ${t.expected}, получили ${t.actual}`}
))}
)}
© T‑Arena · Демопрезентация. Нажмите «Скачать PDF», чтобы распечатать как презентацию.
);
}
function Hero() {
return (
T‑Arena: Прикладной ИИ и цифровые проекты
За 4 недели подросток делает сайт, дашборд, мини‑ИИ‑агента и короткое
ИИ‑видео, а затем деплоит всё на публичные площадки. Утренние часы
клуба превращаем в «нейро‑лабораторию».
{[
"GPT / Google AI Studio / Qwen",
"GitHub / Vercel / Workers",
"Looker Studio",
"n8n / Telegram Bot",
"Veo 3",
].map((tag) => (
{tag}
))}
);
}
function Card({
title,
subtitle,
icon,
children,
}: {
title: string;
subtitle?: string;
icon?: string;
children: any;
}) {
return (
{icon}
{title}
{subtitle &&
{subtitle}
}
{children}
);
}
function KPICard({
kpi,
label,
footnote,
}: {
kpi: string;
label: string;
footnote?: string;
}) {
return (
{label}
{kpi}
{footnote &&
Источник {footnote}
}
);
}
function Metric({
label,
value,
highlight,
}: {
label: string;
value: any;
highlight?: boolean;
}) {
return (
);
}
function Checklist({ title, items }: { title: string; items: string[] }) {
return (
{title}
{items.map((t, i) => (
{t}
))}
);
}
function Sources() {
return (
Источники (сокращённый список для презентации)
[1] Оценки рынка: Grand View Research; Precedence Research.
[2] Harvard GSE / Common Sense Media: «Teen and Young Adult
Perspectives on Generative AI».
[3] K12Dive пересказ результатов: 69% говорят, что ИИ помог выучить
новое.
[4] UNESCO: Guidance for generative AI in education and research.
[5] OECD Digital Education Outlook 2023: Emerging governance of GenAI
in education.
[6] Google AI Studio / Gemini API — free tier и тарификация. [7] Новости: Google инвестирует $1 млрд в AI‑обучение в вузах США.
Полные ссылки — в описании к презентации (в чате).
);
}
// ===== Helpers: tests =====
function calcProfit(s: { revenue: number; marketing: number; teacher: number; assistant: number; method: number }) {
return s.revenue - (s.marketing + s.teacher + s.assistant + s.method);
}
function runFinanceTests(scenarios: any) {
const pricePerLesson = (p: number) => Math.round(p / 8);
const pricePerHour = (p: number) => Math.round(p / 16);
const cases = [
{
name: "Консервативный: прибыль",
expected: 77800,
actual: calcProfit(scenarios.conservative),
},
{ name: "Целевой: прибыль", expected: 175900, actual: calcProfit(scenarios.target) },
{ name: "Оптимистичный: прибыль", expected: 250900, actual: calcProfit(scenarios.optimistic) },
{
name: "Сортировка воронки (убывание)",
expected: true,
actual:
scenarios.target.regs >= scenarios.target.shows &&
scenarios.target.shows >= scenarios.target.purchases,
},
{ name: "Цена урока target (≈руб)", expected: 1863, actual: pricePerLesson(scenarios.target.price) },
{ name: "Цена урока conservative (≈руб)", expected: 1613, actual: pricePerLesson(scenarios.conservative.price) },
{ name: "Цена часа optimistic (≈руб)", expected: 1056, actual: pricePerHour(scenarios.optimistic.price) },
];
return cases.map((c) => ({ ...c, passed: c.expected === c.actual }));
},
{ name: "Целевой: прибыль", expected: 175900, actual: calcProfit(scenarios.target) },
{ name: "Оптимистичный: прибыль", expected: 250900, actual: calcProfit(scenarios.optimistic) },
{
name: "Сортировка воронки (убывание)",
expected: true,
actual:
scenarios.target.regs >= scenarios.target.shows &&
scenarios.target.shows >= scenarios.target.purchases,
},
];
return cases.map((c) => ({ ...c, passed: c.expected === c.actual }));
}