// v9 sections: Nav · Employees · HowItWorks · ActivityFeed · Approvals · Integrations · Security · FinalCta · Footer. // Pilot dropped (its 5-step list duplicated HowItWorks — TZ §12 recommends keeping HowItWorks only). function Nav() { const [scrolled,setScrolled] = React.useState(false); React.useEffect(()=>{ const onScroll = ()=>setScrolled(window.scrollY > 8); window.addEventListener('scroll', onScroll, { passive:true }); return ()=>window.removeEventListener('scroll', onScroll); },[]); const C = window.DT.color; const DT = window.DT; const links = [ ['Сотрудники','#employees'], ['Демо','#demo'], ['Как работает','#how'], ['Сравнение','#comparison'], ['Цена','#pricing'], ['Безопасность','#security'], ]; const tgUrl = 'https://t.me/digstaff_contact_bot'; return ( ); } function EmployeeCard({ e, idx, total }) { const C = window.DT.color; const DT = window.DT; return (
{'№ '}{String(idx+1).padStart(2,'0')}{' / '}{String(total).padStart(2,'0')}
онлайн
{e.emoji} {e.short}

{e.name}

{e.desc}

{/* Tools chips */}
{e.tools.slice(0,4).map(t=>( {t} ))}
{/* Current task — alive office signal */}
{'Сейчас в работе'}
{e.now}
{'Примеры задач'}
{e.examples.slice(0,3).map((x,i)=>(
{x}
))}
); } // "+11" placeholder card — new roles without extra fees. function EmployeeMoreCard() { const C = window.DT.color; const DT = window.DT; const tgUrl = 'https://t.me/digstaff_contact_bot'; return (
+ новая роль

Новые роли — без доплат

Появилась новая роль или интеграция в продукте — она доступна всем клиентам в рамках текущей подписки. Не покупаете «модули» отдельно.

Поговорить с агентом
); } function Employees() { const C = window.DT.color; const DT = window.DT; const total = window.EMPLOYEES.length; return (
Команда · 10 специалистов

10 разных специалистов ,
а не один универсальный бот.

У каждого — своя должностная инструкция, свой набор инструментов и своё место в чате компании. В базовый офис подключаем 2–3, в полный — всех.

{window.EMPLOYEES.map((e,i)=>( ))}
); } function HowSide({ kind }) { const C = window.DT.color; const DT = window.DT; if (kind === 'agent') { return (
🎯
digstaff контакт
агент в Telegram · 10:14
Привет! Я ваш digstaff-агент. Расскажите про бизнес — покажу, что под вас умеют сотрудники.
{[0,1,2].map(i=>( ))} печатает…
); } if (kind === 'setup') { const items = [ ['Сервер развернут', true], ['Mini App в Telegram создан', true], ['Боты-сотрудники подключены к Guest Mode', true], ['1С подключён через HTTP-сервис', true], ['amoCRM авторизован', true], ['ЕГРЮЛ-токен · ждёт от вас', false], ]; return (
Чек-лист подключения
{items.map(([t, done], i)=>(
{done ? ( ) : ( )} {t}
))}
); } if (kind === 'pricing') { return (
−50%
Базовый офис · первый месяц
5 000 ₽ 10 000 ₽

При привязке карты. Не зашло — отписываетесь до конца месяца, ничего больше не списываем.

); } return null; } function HowItWorks() { const C = window.DT.color; const DT = window.DT; const steps = [ { n:'01', title:'Поговорите с агентом', body:'В Telegram, прямо сейчас. Он покажет, что умеет команда, спросит про вашу систему, прикинет конфигурацию. ≈ 10 минут.', side:'agent' }, { n:'02', title:'За 1–2 дня — ваш офис', body:'Поднимаем отдельный сервер, разворачиваем Mini App вашего AI-офиса в Telegram, подключаем 12 ботов-сотрудников для @-упоминания в любом чате, авторизуем 2–3 ваших сервиса (1С, CRM, банк — на выбор).', side:'setup' }, { n:'03', title:'Месяц — со скидкой 50%', body:'Платите половину при привязке карты, оцениваете на своей реальной работе. Зашло — продолжаем по обычной цене. Нет — отписываетесь, сервер сносим.', side:'pricing' }, ]; return (
Запуск

Дни , не недели.

Поговорите с агентом сейчас. Через 1–2 дня — ваш офис в работе. Первый месяц — со скидкой.

{steps.map((s,i)=>(
{s.n}

{s.title}

{s.body}

))}
Поговорить с агентом открывается в Telegram · 10 минут
); } function ActivityFeed() { const C = window.DT.color; const DT = window.DT; const events = window.ACTIVITY; return (
Один общий чат · десять специалистов

Вы видите работу,
а не верите в магию.

Внутри Mini App — общий чат, где сотрудники подключаются последовательно. В любом групповом чате — упомяните @digstaff_lawyer_bot и он включится прямо в обсуждение. Видно, кто что делает, что ждёт вашего «ок», где ошибка. Без чёрного ящика.

{/* Main feed */}
🏢
AI-офис · ООО «Ромашка»
Mini App · сегодня · вторник
{[['В работе','#3970C2'],['Выполнено',C.grass],['Подтвердить',C.accent],['Внимание',C.warn]].map(([l,c])=>( {l} ))}
{/* Pinned */}
📌 Закреплено: Все внешние действия — через подтверждение в /tasks
{events.map((ev,i)=>())}
{/* Topics list */}
Топики · 10 + Общий + Задачник
Каждый специалист — отдельный канал
); } function Approvals() { const C = window.DT.color; const DT = window.DT; const items = window.APPROVALS; return (
Подтверждения · доверие

AI не действует
без вашего одобрения.

Перед каждым внешним действием — карточка подтверждения в чате. Внутри: что собираемся сделать, на сколько денег, к кому. Жмёте «подтвердить» / «изменить» / «отклонить».

{[ ['Внешние действия (письмо, счёт, заказ, звонок) —','всегда подтверждение'], ['Внутренние действия (посмотреть, посчитать, найти) —','без подтверждения, иначе AI бесполезен'], ['Журнал всех действий —','в топике «Задачник», аудит-ready'], ].map(([a,b],i)=>(
{a} {b}
))}
{items.map((a,i)=>{ const r = window.EMPLOYEES.find(e=>e.id===a.role); return (
{r.emoji} {r.short}
{a.title}
{a.preview}
Риск: {a.risk} · {a.meta}
); })}
); } function Integrations() { const C = window.DT.color; const DT = window.DT; const groups = window.INTEGRATIONS; const messengers = [ ['Telegram', 'Mini App + @-упоминание ботов', 'дефолт'], ['MAX', 'российский мессенджер', 'по запросу'], ['VK Teams', 'корпоративный VK', 'по запросу'], ['WhatsApp Business','через Wazzup24', 'по запросу'], ['Веб-клиент', 'наш собственный', 'по запросу'], ]; return (
Интеграции · русский стек

Полный русский деловой стек {' '}— в одном продукте.

Не «есть API на будущее». Работает сейчас, в продакшене, через единый интерфейс чата.

{[...window.INTEGRATIONS.flatMap(g=>g.items), ...window.INTEGRATIONS.flatMap(g=>g.items)].map((name,i)=>( {name} ))}
{groups.map(g=>(
{g.group}
{g.items.length}
{g.items.map(name=>(
{name}
))}
))}
{/* Where works subblock */}
Где работает офис

Дефолт — Telegram. По запросу — любой мессенджер вашей команды.

Меняется политика — переедем в другой канал без переноса данных, сервер остаётся ваш. Это ваша инфраструктура, мы только настраиваем и сопровождаем.

{messengers.map(([name, sub, tag])=>(
{name} {tag}

{sub}

))}

Не обещаем, что все интеграции работают сразу из коробки. На пилоте подключаем те, что нужны вашему сценарию, — и расширяем список по ходу.

); } function Security() { const C = window.DT.color; const DT = window.DT; const items = [ { icon:'Shield', t:'Отдельный сервер под клиента', b:'Своя инсталляция, свои данные, свои ключи. Ваше пространство физически не пересекается с чужим.' }, { icon:'Lock', t:'152-ФЗ совместимо', b:'Серверы в РФ. Архитектура построена под локализацию персональных данных с самого начала.' }, { icon:'Eye', t:'Подтверждение на каждое внешнее действие', b:'Письмо, счёт, заказ, звонок — только с вашего «да». Внутренние действия (посмотреть, посчитать) — без подтверждения.' }, { icon:'AlertTriangle', t:'Журнал всех действий', b:'Кто что сделал, когда, по какой задаче, с каким результатом. Полный экспорт за период в CSV — бухгалтеру или аудитору.' }, ]; const legal = [ ['Договор-оферта', '/legal/offer.html'], ['Политика обработки ПДн', '/legal/personal-data-policy.html'], ['DPA (Enterprise)', '/legal/dpa.html'], ['NDA', '/legal/nda.html'], ]; return (
Безопасность · контроль

Контроль остаётся
у вас.

AI помогает выполнять работу, но важные действия проходят через правила, подтверждения и журнал событий.

{items.map((it,i)=>(

{it.t}

{it.b}

))}
Документы
{legal.map(([t,h])=>( e.currentTarget.style.color=C.ink} onMouseLeave={e=>e.currentTarget.style.color=C.inkSoft}> {t} ))}
); } function FinalCta() { const C = window.DT.color; const DT = window.DT; const tgUrl = 'https://t.me/digstaff_contact_bot'; const [formOpen, setFormOpen] = React.useState(false); const [submitting, setSubmitting] = React.useState(false); const [submitted, setSubmitted] = React.useState(false); const [error, setError] = React.useState(''); const [form, setForm] = React.useState({name:'', contact:'', company:'', message:''}); async function submitLead(e) { e.preventDefault(); setError(''); setSubmitting(true); try { const contact = form.contact.trim(); // detect: phone vs email const isEmail = contact.includes('@'); const payload = { name: form.name.trim() || 'Без имени', phone: isEmail ? null : contact || null, email: isEmail ? contact : null, company: form.company.trim() || null, message: (form.message || 'Заявка с лендинга digstaff.ru').slice(0, 2000), source: 'landing_v9_form', utm_source: 'landing', utm_medium: 'final_cta', }; const r = await fetch('/v1/public/pilot-request', { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(payload), }); if (!r.ok) { const err = await r.json().catch(()=>({})); throw new Error(err.detail || ('http_'+r.status)); } setSubmitted(true); } catch (e) { setError(String(e.message || e)); } finally { setSubmitting(false); } } return (
digstaff.ru · попробовать

Команда,
которая работает {' '}с вашими системами.
Прямо сейчас.

Откройте Telegram и поговорите с агентом digstaff. Он покажет, что умеют сотрудники под вашу сферу, ответит на вопросы — и подведёт к подписке. Или просто покажет.

Попробовать с агентом setFormOpen(o=>!o)}> {formOpen ? 'Свернуть форму' : 'Оставить заявку без Telegram'}
{formOpen && !submitted && (
setForm({...form, name:e.target.value})} className="w-full px-3 py-2 text-[15px]" style={{ background:'rgba(247,244,236,0.08)', color:C.cream, border:'1px solid rgba(247,244,236,0.18)', borderRadius:8, outline:'none' }}/>
setForm({...form, contact:e.target.value})} className="w-full px-3 py-2 text-[15px]" style={{ background:'rgba(247,244,236,0.08)', color:C.cream, border:'1px solid rgba(247,244,236,0.18)', borderRadius:8, outline:'none' }}/>
setForm({...form, company:e.target.value})} className="w-full px-3 py-2 text-[15px]" style={{ background:'rgba(247,244,236,0.08)', color:C.cream, border:'1px solid rgba(247,244,236,0.18)', borderRadius:8, outline:'none' }}/>