// onboarding.jsx — анкета первого входа (CJM Насти, п. 3.2, на «ты»): имя и фамилия, сфера,
// компания, страна и город, о себе (до 300 знаков), цель (7 из data/goals.json + свой вариант).
// Сохраняется в app.profiles (PUT /api/profile). В ответ — 3 материала под цель и промокод
// на Хакку-коворк, если для участника есть свободный код. Экран «Спасибо!» — тут же.
const ERR_TEXT_PROFILE = {
bad_first_name: 'Напиши имя.', bad_last_name: 'Напиши фамилию.',
bad_sphere: 'Выбери, чем ты занимаешься.', bad_country: 'Укажи страну.', bad_city: 'Укажи город.',
about_too_long: 'Расскажи о себе короче — до 300 знаков.',
bad_goal: 'Выбери, чего хочешь достичь с помощью ИИ.', goal_custom_required: 'Опиши свою цель в паре слов.',
};
const ABOUT_MAX = 300;
const ABOUT_EXAMPLE = 'Я маркетолог, веду соцсети небольшого бренда. С ИИ пишу тексты и придумываю идеи. Хочу собрать ассистента для отчётов.';
// Имя из Hakku ID часто = начало почты (OTP-вход отдаёт пустое имя) — такое не предзаполняем
function nameParts(user) {
const n = String((user && user.name) || '').trim();
const local = String((user && user.email) || '').split('@')[0];
if (!n || n === local) return ['', ''];
const p = n.split(/\s+/);
return [p[0] || '', p.slice(1).join(' ')];
}
function CoworkingCode({ c }) {
if (!c) return null;
return (
{Icons.gift()}
Держи промокод на Хакку-коворк
{c.code} track('cowork:copy')}/>
Личный и одноразовый{c.expires ? `, действует до ${fmtDateShort(c.expires)}` : ''}. Промокод останется в профиле.
);
}
window.CoworkingCode = CoworkingCode;
function Thanks({ nav, goalId, goalCustom, rec, coworking }) {
const g = goalOf(goalId);
const title = goalId === 'other' ? goalCustom : g && g.title;
const proHint = g && g.pro_hint && ME().member.tier !== 'pro';
return (
Анкета сохранена
Спасибо!
Твоя цель — {title}. Николай уже написал тебе совет по ней, он на главной.
Ниже три материала, с которых стоит начать.
{rec.map(r => )}
Подключи Telegram
Уведомления о сообщениях и эфирах от бота hakku.ai. Без бота пришлём на почту.
Q&A с основателями, гость с сетапом, мастермайнд раз в месяц и офлайн-встречи.
{ME().member.tier === 'enthusiast' ? ' Для участников Enthusiast — 4 500 ₽/мес вместо 4 900 ₽.' : ''}