[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fweb-development":167,"service-parent:\u002Fservices\u002Fweb-development":503,"service-children:\u002Fservices\u002Fweb-development":510,"glossary":538},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Каждое наше приложение выходит и на Android — платформенные API, фоновое выполнение, разрешения и требования магазина вместе с ними.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Фронтенд-фреймворк, в котором мы работаем, когда продукт уже на Angular, — строгая структура, подходящая большим долгоживущим приложениям.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","Язык, на котором написано каждое наше Flutter-приложение, — строгая null safety, полноценный pattern matching и компиляция в нативный код и веб.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Python-фреймворк, который мы берём, когда продукту нужны админка, аутентификация и модель данных в первый же день, а не самописный сервис.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Каждый наш сервис поставляется в виде контейнера, поэтому на ноутбуке, в CI и в продакшене работает один и тот же артефакт, а не три разных.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","Автоматизация релизов в нашей мобильной разработке — подпись, сборки и загрузка в сторы идут из CI, а не с ноутбука одного инженера в день релиза.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Наш основной мобильный стек с 2018 года — одна кодовая база на Dart для iOS, Android, веба и десктопа без отдельной команды под каждую платформу.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Все проекты, к которым мы прикасаемся, живут в Git — ревью пул-реквестов, CI на каждой ветке и история, понятная и спустя месяцы.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Наш бэкенд-язык для real-time API и сервисов под нагрузкой — маленькие бинарники, быстрая сборка и конкурентность, которая остаётся читаемой.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","Облако, в котором работают наши продакшен-нагрузки, — управляемый Kubernetes, хранилище и сеть без серверов, которые надо обслуживать руками.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Система сборки, через которую проходит каждый Android-релиз, — флейворы, конфигурации подписи и вся обвязка зависимостей под Flutter-приложением.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Так мы упаковываем деплой в Kubernetes — сервис, конфигурация, секреты и ingress как одна версионируемая единица, которую можно выкатить и откатить.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","То, что мы берём, когда Flutter-приложению нужен настоящий Android под ним, — platform channels, фоновые задачи и интеграции с нативными SDK.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Общая бизнес-логика для iOS и Android, а нативный интерфейс у каждой платформы свой, — альтернатива, когда Flutter не подходит.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Так мы запускаем сервисы в продакшене — деплой в Helm-чартах, откатываемые выкатки и масштабирование, для которого не нужен человек в три ночи.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Лёгкий обмен сообщениями между сервисами — publish\u002Fsubscribe и request\u002Freply без эксплуатационного веса полноценного кластера брокера.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue с серверным рендерингом, роутингом и SEO из коробки — так мы делаем сайты и веб-приложения, которые должны быстро грузиться и индексироваться.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Там, где PHP-бэкенд уже есть: дорабатываем его, интегрируемся с ним и делаем мобильные и веб-клиенты, которые он обслуживает.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Наша база данных по умолчанию — от проектирования схемы до настройки индексов мы берём её, если у продукта нет конкретной причины взять другую.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Наш язык для бэкендов, работы с данными и AI-интеграций — включая Python-биндинги, которые мы выпускаем к собственным инструментам на Rust.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","Фронтенд-библиотека, в которой мы работаем, когда продукт уже на React, — компоненты, хуки и выросшая вокруг них экосистема.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Место для данных, которые должны быть быстрыми и которые не жалко пересчитать, — кэши, сессии, лимиты и очереди фоновых задач.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","Язык, на котором написана автоматизация наших мобильных релизов, — лейны Fastlane, кастомные действия и связка с CI, доставляющая сборки в сторы.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Куда мы идём, когда важны и скорость, и корректность, — рендеринг документов, CLI-инструменты и сервисы, которые обязаны оставаться быстрыми и предсказуемыми.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","База данных, которая поставляется внутри приложения, — локальные кэши, offline-first хранилище и всё, что должно работать без сети.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Headless CMS, к которой мы обращаемся, когда контент должны вести сами редакторы, — готовая админка и чистый API вместо самописных.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","То, что мы берём, когда Flutter-приложению нужен настоящий iOS под ним, — platform channels, интеграции нативных SDK, виджеты и App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","UI-фреймворк Apple, на котором мы делаем нативные поверхности, недоступные Flutter-приложению, — виджеты, App Clips и расширения.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Так мы стилизуем весь фронтенд — утилитарные классы и дизайн-токены вместо таблицы стилей, которая только растёт и никогда не чистится.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","Стандарт для всего, что мы пишем для браузера и для Node-сервисов, — типы ловят ошибки интеграции раньше, чем код доходит до ревью.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Наш фронтенд-фреймворк для админок, дашбордов мерчантов и веб-приложений, которые должны оставаться поддерживаемыми годами, а не спринтами.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Открытая модель распознавания речи от OpenAI — движок транскрипции для голосового ввода, который работает и как бэкенд-сервис, и прямо на устройстве в приложении.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":472,"extension":473,"footerCta":474,"headingCta":489,"image":495,"meta":498,"metaDescription":499,"metaTitle":500,"navigation":501,"ogDescription":502,"parent":503,"path":504,"seo":505,"slug":506,"stem":507,"updated":508,"__hash__":509},"services_ru\u002Fservices\u002Fweb-development.md","Веб-разработка",{"type":171,"value":172,"toc":457},"minimark",[173,178,182,207,211,215,218,223,226,230,233,237,247,251,264,269,282,286,289,340,344,347,353,359,370,400,404,407,411,418,422,425,454],[174,175,177],"h2",{"id":176},"современная-веб-разработка-на-nuxt-и-ssr","Современная веб-разработка на Nuxt и SSR",[179,180,181],"p",{},"Мы создаём быстрые, понятные поисковикам веб-приложения на современном стеке с серверным рендерингом. Не конструктор сайтов и не раздутый single-page app, который отдаёт Google пустой экран, — настоящие приложения, которые рендерятся на сервере, быстро грузятся на телефоне и ранжируются.",[179,183,184,185,189,190,195,196,201,202,206],{},"Насколько мы уверены в этом стеке? ",[186,187,188],"strong",{},"Этот самый сайт собран на нём"," — Nuxt 4, ",[191,192,194],"term",{"slug":193},"server-side-rendering","серверный рендеринг",", Tailwind CSS и Nuxt Content. Мы выбрали эти инструменты не для лендинга — мы ведём на них собственный бизнес. И делали на них проекты для клиентов, включая ",[197,198,200],"a",{"href":199},"\u002Fportfolio\u002Fformtastic","Formtastic",", платформу для создания форм на Nuxt, и ",[197,203,205],{"href":204},"\u002Fportfolio\u002Fcashback-loyalty-platform","платформу лояльности с кешбэком",", чья админка на Nuxt запускает брендированные приложения поверх PHP-сервисов.",[208,209],"statistics-grid",{":items":210},"[{\"icon\": \"lucide:search\", \"value\": \"SSR\", \"label\": \"Индексируется сразу\", \"description\": \"Серверный HTML, который краулеры читают без запуска JavaScript\"}, {\"icon\": \"lucide:gauge\", \"value\": \"90+\", \"label\": \"Цель по Lighthouse\", \"description\": \"Мы строим под Core Web Vitals, а не против них\"}, {\"icon\": \"lucide:smartphone\", \"value\": \"Mobile-First\", \"label\": \"Адаптивно везде\", \"description\": \"Сначала под телефоны, затем — десктоп\"}, {\"icon\": \"lucide:code\", \"value\": \"Type-Safe\", \"label\": \"TypeScript насквозь\", \"description\": \"От слоя API до пропсов компонентов\"}]",[174,212,214],{"id":213},"наш-стек-и-почему-nuxt-ssr","Наш стек — и почему Nuxt + SSR",[179,216,217],{},"Выбор фреймворка — это разница между сайтом, который Google читает мгновенно, и тем, который он с трудом рендерит. Вот на чём мы строим и почему.",[219,220,222],"h3",{"id":221},"серверный-рендеринг-для-seo","Серверный рендеринг для SEO",[179,224,225],{},"Классический single-page app отдаёт пустую HTML-оболочку и просит браузер собрать страницу с помощью JavaScript. От этого страдают краулеры, превью ссылок и медленные устройства. Nuxt рендерит полный HTML на сервере, поэтому контент присутствует уже в первом ответе — мета-теги, заголовки, структурированные данные и текст, всё до того, как выполнится хоть строка клиентского JavaScript. Это самый мощный рычаг внутренней SEO-оптимизации, который может дать фреймворк, и здесь он по умолчанию, а не как надстройка.",[219,227,229],{"id":228},"tailwind-для-быстрого-единообразного-ui","Tailwind для быстрого, единообразного UI",[179,231,232],{},"Мы стилизуем на Tailwind CSS — utility-first, без хаотичных глобальных стилей, без мёртвого CSS, который грузится пользователю. Он держит дизайн-систему единой на всех страницах, делает адаптивные брейкпоинты явными и отгружает только реально используемые классы. Результат — UI, который быстро собирать, легко поддерживать и который мало весит.",[219,234,236],{"id":235},"nuxt-content-для-контентных-сайтов","Nuxt Content для контентных сайтов",[179,238,239,240,246],{},"Для маркетинговых сайтов, документации и блогов ",[197,241,245],{"href":242,"rel":243},"https:\u002F\u002Fcontent.nuxt.com",[244],"nofollow","Nuxt Content"," превращает Markdown в полностью отрендеренные на сервере страницы с типобезопасными схемами — ровно так работают блог и страницы услуг этого сайта. Редакторы пишут Markdown; сайт остаётся быстрым и индексируемым; разработчики держат всё под контролем версий. База данных не нужна.",[219,248,250],{"id":249},"strapi-когда-нужна-headless-cms","Strapi, когда нужна headless CMS",[179,252,253,254,258,259,263],{},"Когда контентом должны владеть нетехнические редакторы — товары, объявления, кампании, — мы подключаем ",[197,255,134],{"href":256,"rel":257},"https:\u002F\u002Fstrapi.io",[244],", open-source ",[191,260,262],{"slug":261},"headless-cms","headless CMS",". Ваша команда получает удобную админку; фронтенд на Nuxt получает данные через чистый API и рендерит их на сервере. Вы получаете редакторскую свободу без потери производительности и SEO, а данные и хостинг остаются вашими.",[265,266],"features",{":items":267,":title":268},"[{\"label\": \"Мобильная совместимость\", \"description\": \"Mobile-first, адаптивные макеты, которые работают на любом экране от телефона до широкоформатного — протестировано, а не на авось\"}, {\"label\": \"Правильная аутентификация\", \"description\": \"Сессии, OAuth и JWT с реальными серверными проверками авторизации — а не экран входа с открытым бэкдором\"}, {\"label\": \"Безопасные cookie и согласие\", \"description\": \"httpOnly, secure, SameSite cookie для сессий плюс обработка согласия по GDPR для аналитики и трекинга\"}, {\"label\": \"SEO встроено\", \"description\": \"Серверные мета-теги, Open Graph, canonical и hreflang, структурированные данные JSON-LD на каждой странице\"}, {\"label\": \"Производительность и Core Web Vitals\", \"description\": \"Оптимизация изображений, code splitting и кеширование, настроенные под прохождение Core Web Vitals на реальных устройствах\"}, {\"label\": \"Интеграция headless CMS\", \"description\": \"Nuxt Content или Strapi, чтобы команда публиковала контент, не трогая код\"}]","Что мы делаем правильно",[270,271,274],"info-box",{":leading-icon":272,":title":273},"lucide:shield-check","Безопасность — часть сборки",[179,275,276,277,281],{},"Аутентификация, cookie и работа с данными — именно здесь большинство веб-приложений незаметно даёт утечки. Мы делаем это правильно с самого начала — а если вам досталось приложение, в котором вы не уверены, наш ",[197,278,280],{"href":279},"\u002Fservices\u002Fai-code-audit","аудит AI-кода"," проверит аутентификацию, безопасность сессий и утечки данных, пока они не стали инцидентом.",[174,283,285],{"id":284},"что-мы-строим","Что мы строим",[179,287,288],{},"Четыре вида веб-работы возвращаются в наших проектах снова и снова, и теперь у каждого есть собственная страница с доказательствами за ней:",[290,291,292,306,318,327],"ul",{},[293,294,295,301,302,305],"li",{},[186,296,297],{},[197,298,300],{"href":299},"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards","Админ-панели и дашборды"," — бэк-офисы, стоящие за продуктами: ролевой доступ, формы, которые управляют реальной машинерией, таблицы, остающиеся удобными на любом объёме. Опорный пример — админка, запускающая брендированные приложения нашей ",[197,303,304],{"href":204},"платформы кэшбэка и лояльности",".",[293,307,308,314,315,317],{},[186,309,310],{},[197,311,313],{"href":312},"\u002Fservices\u002Fweb-development\u002Fnuxt-development","Разработка на Nuxt"," — маркетинговые сайты, контентные платформы и миграции на серверный рендеринг, как переезд ",[197,316,200],{"href":199}," с шаблонов Django на Nuxt. Этот сайт — постоянная демонстрация.",[293,319,320,326],{},[186,321,322],{},[197,323,325],{"href":324},"\u002Fservices\u002Fweb-development\u002Fcompanion-web-app","Парные веб-приложения"," — браузерная сторона продукта, который живёт прежде всего в мобильном приложении и делит с ним один API и один бэкенд.",[293,328,329,335,336,305],{},[186,330,331],{},[197,332,334],{"href":333},"\u002Fservices\u002Fweb-development\u002Fembeddable-widgets","Встраиваемые виджеты и скрипты"," — JavaScript, работающий внутри страниц, которые вы не контролируете, без зависимостей и защищённый по замыслу, как сборщик за нашей ",[197,337,339],{"href":338},"\u002Fportfolio\u002Frealtime-bot-detection-platform","платформой детекции ботов",[174,341,343],{"id":342},"flutter-для-веба-плюсы-и-минусы","Flutter для веба — плюсы и минусы",[179,345,346],{},"Flutter умеет компилироваться в веб, и клиенты с мобильным приложением на Flutter часто спрашивают, не переиспользовать ли его и для сайта. Честный ответ: иногда — но редко для публичного, контентного веба. Вот в чём компромисс.",[348,349],"features-table",{":heading":350,":rows":351,":top-left-label":352},"[{\"label\": \"Nuxt + SSR\", \"hightlightLabel\": \"Публичный веб\"}, {\"label\": \"Flutter Web\"}, {\"label\": \"Классический SPA\"}]","[{\"label\": \"SEO \u002F индексация\",\"cells\": [{\"text\": \"Отлично (SSR)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Плохо (canvas)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Слабо (пустая оболочка)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Размер первой загрузки\",\"cells\": [{\"text\": \"Маленький\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Тяжёлый бандл\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Средний\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Общий код с мобильным\",\"cells\": [{\"text\": \"Нет\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Почти 100%\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Частично (React Native)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"UI как в приложении\",\"cells\": [{\"text\": \"Хорошо\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Отлично\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Хорошо\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Контентные \u002F маркетинговые сайты\",\"cells\": [{\"text\": \"Идеально\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Плохо подходит\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Сносно\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Доступность\",\"cells\": [{\"text\": \"Нативный HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Улучшается, ограничена\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Нативный HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Лучше всего для\",\"cells\": [{\"text\": \"Сайты и веб-приложения\", \"color\": \"success\"},{ \"text\": \"Внутренние инструменты в духе приложения\", \"color\": \"warning\"},{ \"text\": \"Дашборды\", \"color\": \"warning\"}]}]","Аспект",[179,354,355,358],{},[186,356,357],{},"Где Flutter web силён:"," продукт, который ведёт себя как приложение, где у вас уже есть мобильная кодовая база на Flutter и вы хотите, чтобы одна команда выпускала продукт на всех платформах — внутренние дашборды, инструменты за логином, сильно интерактивные или canvas-ориентированные интерфейсы за стеной авторизации, где SEO не важно, а пользователи ждут приложение, а не страницу.",[179,360,361,364,365,369],{},[186,362,363],{},"Где он подводит:"," всё, что нужно находить в Google. Flutter web рендерит в canvas, который краулеры читают с трудом, отгружает тяжёлый стартовый бандл и конфликтует с браузером в части доступности и ",[191,366,368],{"slug":367},"deep-linking","диплинков",". Для маркетинговых сайтов, блогов, e-commerce и лендингов это дисквалифицирующий недостаток.",[270,371,372],{},[179,373,374,377,378,381,382,385,386,390,391,395,396,305],{},[186,375,376],{},"Итог:"," используйте ",[186,379,380],{},"Nuxt + SSR"," для всего публичного и SEO-зависимого — маркетинговых сайтов, контента, e-commerce, маркетинговых страниц SaaS. Используйте ",[186,383,384],{},"Flutter web",", когда расширяете мобильное Flutter-приложение в веб-инструмент, который ведёт себя как приложение, а охват через поиск не цель. Мы делаем и то, и другое и честно подскажем, что нужно вашему проекту. Если на повестке и мобильное приложение, посмотрите услугу ",[197,387,389],{"href":388},"\u002Fservices\u002Fflutter-app-development","разработки на Flutter"," и разбор компромиссов в ",[197,392,394],{"href":393},"\u002Fblog\u002Fflutter-vs-react-native-2026","Flutter против React Native в 2026"," и ",[197,397,399],{"href":398},"\u002Fblog\u002Fflutter-vs-native-2026","Flutter против нативной разработки",[174,401,403],{"id":402},"стоимость-веб-разработки","Стоимость веб-разработки",[179,405,406],{},"Прозрачные диапазоны на основе объёма и сложности",[408,409],"pricing-table",{":items":410},"[{\"title\": \"Маркетинговый сайт \u002F лендинг\", \"subtitle\": \"Быстрый, готовый к SEO, контентный\", \"price\": \"web-development\u002Flanding\", \"terms\": \"2-4 недели\", \"lines\": [\"Nuxt + SSR для полной индексации\", \"Адаптивный, mobile-first дизайн\", \"SEO-мета, Open Graph и структурированные данные\", \"Nuxt Content или Markdown-CMS\", \"Формы обратной связи и аналитика\", \"Настройка под Core Web Vitals\", \"Деплой и настройка домена\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"highlight\": \"Популярно\",\"title\": \"Веб-приложение\", \"subtitle\": \"Интерактивный продукт с авторизацией\", \"price\": \"web-development\u002Fapp\", \"terms\": \"1-3 месяца\", \"lines\": [\"Всё из маркетингового сайта\", \"Аутентификация пользователей (OAuth \u002F JWT)\", \"Безопасные сессии и работа с cookie\", \"Интеграция REST или GraphQL API\", \"Ролевой контроль доступа\", \"Проектирование и интеграция БД\", \"Админ-панель\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"title\": \"Платформа на headless CMS\", \"subtitle\": \"Контент в руках редакторов, в любом объёме\", \"price\": \"web-development\u002Fheadless-cms\", \"terms\": \"2-4 месяца\", \"lines\": [\"Бэкенд на Strapi или Nuxt Content\", \"Кастомная редакторская админка\", \"Поддержка многоязычного контента\", \"Индексируемые страницы с серверным рендерингом\", \"Управление медиа и ассетами\", \"Процесс превью и публикации\", \"Архитектура API-first\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"title\": \"SaaS \u002F E-commerce\", \"subtitle\": \"Сложный, масштабируемый веб-продукт\", \"price\": \"web-development\u002Fsaas\", \"terms\": \"4+ месяца\", \"lines\": [\"Все платформы и интеграции\", \"Платежи и подписки\", \"Мультитенантная архитектура\", \"Продвинутая безопасность и комплаенс\", \"Масштабируемая инфраструктура бэкенда\", \"Мониторинг и наблюдаемость\", \"Выделенная поддержка\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}}]",[270,412,415],{":leading-icon":413,":title":414},"lucide:dollar-sign","Доступна индивидуальная оценка",[179,416,417],{},"Каждый проект уникален. Эти диапазоны приблизительны и основаны на типовом объёме. Мы подготовим детальную оценку, когда разберёмся в ваших требованиях, интеграциях и сроках. Свяжитесь с нами для бесплатной консультации и точной оценки.",[174,419,421],{"id":420},"частые-вопросы","Частые вопросы",[179,423,424],{},"Распространённые вопросы о наших услугах веб-разработки",[426,427,429],"questions",{":items":428},"[{\"title\":\"Почему вы строите на Nuxt, а не на WordPress или конструкторе сайтов?\",\"text\":\"Nuxt даёт серверный рендеринг — это значит, что поисковики и превью ссылок видят полностью собранный HTML в первом ответе, а не пустую оболочку. Вы получаете скорость и индексируемость статического сайта с мощью настоящего приложения, полный контроль версий над кодом — и никакой раздутости от плагинов и поверхности атаки, свойственных типичной установке WordPress. Для контентных сайтов мы соединяем Nuxt с headless CMS, чтобы у редакторов всё равно была удобная админка.\"},{\"title\":\"Действительно ли серверный рендеринг улучшает SEO?\",\"text\":\"Да, существенно. При SSR контент страницы, мета-теги, данные Open Graph и структурированные данные присутствуют в HTML, который отдаёт сервер, поэтому краулеры читают их без выполнения JavaScript. Single-page приложения, которые рендерятся целиком в браузере, индексируются медленнее, а некоторые краулеры и превью ссылок в соцсетях могут вовсе их пропустить. SSR — самое значимое решение на уровне фреймворка, которое можно принять ради органического поиска.\"},{\"title\":\"Можете ли вы сделать моё веб-приложение на Flutter для веба?\",\"text\":\"Можем, и для подходящего проекта это отличный вариант. Flutter web хорош для продуктов, которые ведут себя как приложение, и внутренних инструментов за логином, особенно когда у вас уже есть мобильное приложение на Flutter и вы хотите общую кодовую базу. Он плохо подходит для всего, что должно ранжироваться в Google, потому что рендерит в canvas, который краулеры читают с трудом, и отгружает тяжёлый стартовый бандл. Для публичных, контентных или e-commerce сайтов мы рекомендуем Nuxt с серверным рендерингом.\"},{\"title\":\"Как вы обеспечиваете безопасность аутентификации и данных?\",\"text\":\"Мы реализуем реальную серверную авторизацию, а не просто экран логина. Сессии используют httpOnly, secure, SameSite cookie, чтобы токены нельзя было украсть клиентскими скриптами, и мы поддерживаем потоки OAuth и JWT с ролевым контролем доступа. Согласие на cookie обрабатывается по GDPR. Если у вас есть готовое приложение, наш аудит AI-кода отдельно проверяет аутентификацию, работу с сессиями и утечки данных.\"},{\"title\":\"Что выбрать — Nuxt Content или Strapi?\",\"text\":\"Зависит от того, кто редактирует контент. Nuxt Content идеален, когда контентом управляют разработчики или технические авторы в Markdown под контролем версий, например блог или документация, без базы данных. Strapi — правильный выбор, когда нетехническим редакторам нужна удобная админка для управления товарами, объявлениями или кампаниями. Оба рендерятся на сервере через фронтенд на Nuxt, так что в любом случае сайт остаётся быстрым и индексируемым. Мы поможем выбрать под вашу команду.\"},{\"title\":\"Сколько стоит проект веб-разработки?\",\"slot\":\"cost\",\"text\":\"Быстрый маркетинговый или контентный сайт обычно стоит от 400 000 до 960 000 рублей, веб-приложение с авторизацией от 1 200 000 до 3 200 000, платформа на headless CMS от 1 600 000 до 4 000 000, а сложный SaaS или e-commerce продукт свыше 4 000 000. Итоговая сумма зависит от числа функций, интеграций и объёма дизайна. Мы даём фиксированную оценку после бесплатной консультации.\"}]",[430,431,433],"template",{"v-slot:cost_body":432},"",[179,434,435,436,441,442,445,446,449,450,453],{},"Быстрый маркетинговый или контентный сайт обычно стоит ",[437,438],"service-price",{"format":439,"service":440},"full","web-development\u002Flanding",", веб-приложение с авторизацией ",[437,443],{"format":439,"service":444},"web-development\u002Fapp",", платформа на headless CMS ",[437,447],{"format":439,"service":448},"web-development\u002Fheadless-cms",", а сложный SaaS или e-commerce продукт — ",[437,451],{"format":439,"service":452},"web-development\u002Fsaas",". Итоговая сумма зависит от числа функций, интеграций и объёма дизайна. Мы даём фиксированную оценку после бесплатной консультации.",[179,455,456],{},"::",{"title":432,"searchDepth":458,"depth":458,"links":459},2,[460,461,468,469,470,471],{"id":176,"depth":458,"text":177},{"id":213,"depth":458,"text":214,"children":462},[463,465,466,467],{"id":221,"depth":464,"text":222},3,{"id":228,"depth":464,"text":229},{"id":235,"depth":464,"text":236},{"id":249,"depth":464,"text":250},{"id":284,"depth":458,"text":285},{"id":342,"depth":458,"text":343},{"id":402,"depth":458,"text":403},{"id":420,"depth":458,"text":421},"Быстрые, готовые к SEO веб-приложения на Nuxt, SSR и Tailwind","md",{"heading":475,"text":476,"buttons":477},"Готовы сделать веб-приложение, которое ранжируется и быстро работает?","Расскажите о задаче — соберём быстрое веб-приложение, удобное пользователям и понятное поисковикам.",[478,484],{"to":479,"label":480,"leadingIcon":481,"color":482,"variant":483},"\u002Fcontact","Начать проект","lucide:message-circle","neutral","outline",{"to":485,"label":486,"color":487,"variant":488},"\u002Fportfolio","Наши работы","primary","solid",[490,492],{"to":479,"label":491,"leadingIcon":481,"color":487,"variant":488},"Бесплатная консультация",{"to":493,"label":494,"color":482,"variant":483},"#стоимость-веб-разработки","Посмотреть цены",{"url":496,"alt":169,"text":497},"\u002Fservices\u002Fweb-development.webp","Собрано на том же стеке, что и этот сайт",{},"Веб-разработка на Nuxt, SSR и Tailwind: быстрые, готовые к SEO, мобильные веб-приложения с аутентификацией, headless CMS и Strapi. Бесплатная консультация.","Веб-разработка — Nuxt, SSR и SEO",true,"Веб-приложения на Nuxt и SSR, которые быстро грузятся и хорошо индексируются: авторизация, headless CMS и mobile-first вёрстка, не воюющая с браузером.",null,"\u002Fservices\u002Fweb-development",{"title":169,"description":472},"web-development","services\u002Fweb-development","2026-09-05","sc_PnwHiO-YqVwRhGTp1eA5fuAk0LTgq1mdlIiW3J8A",[511,518,525,532],{"title":300,"description":512,"slug":513,"image":514},"Бэк-офисы, стоящие за продуктами, — ролевой доступ, формы, которые управляют реальной машинерией, и таблицы, остающиеся удобными на любом объёме, от команды, чья админка запускает целые парки приложений","admin-dashboards",{"url":515,"alt":516,"text":517},"\u002Fservices\u002Fadmin-dashboards.webp","Разработка админ-панелей и дашбордов","Бэк-офис, из которого ваша команда ведёт бизнес",{"title":325,"description":519,"slug":520,"image":521},"Браузерная сторона mobile-first продукта — один API, один бэкенд и два интерфейса, которые не расходятся, от команды, которая выпускает и приложения, и веб, и сервисы за ними","companion-web-app",{"url":522,"alt":523,"text":524},"\u002Fservices\u002Fcompanion-web-app.webp","Разработка парных веб-приложений для мобильных продуктов","Один продукт, один API — приложение и браузер в ногу",{"title":334,"description":526,"slug":527,"image":528},"JavaScript, который работает внутри чужих страниц, — без зависимостей, защищённый и маленький, от команды, чей сборщик встроен в тысячи сторонних сайтов","embeddable-widgets",{"url":529,"alt":530,"text":531},"\u002Fservices\u002Fembeddable-widgets.webp","Разработка встраиваемых виджетов и сторонних скриптов","Ваш код — в чужих страницах",{"title":313,"description":533,"slug":534,"image":535},"Маркетинговые сайты, контентные платформы и миграции на серверный рендеринг — от команды, которая ведёт на Nuxt собственный бизнес и переводила на него клиентские фронтенды под нагрузкой","nuxt-development",{"url":536,"alt":313,"text":537},"\u002Fservices\u002Fnuxt-development.webp","Фреймворк, на котором работает этот сайт",[539,554,566,581,595,610,626,639,652,669,682,693,703,714,726,737,746,760,773,780,794,809,822,835,848,859,870,881,894,904,917,929,943,954,968,977,988,1001,1014,1027,1040,1052,1064,1076,1088,1100,1111,1125,1136,1148,1159,1172,1184],{"slug":540,"term":541,"definition":542,"category":543,"aliases":544,"links":546,"related":550,"readMore":-1,"target":552,"hasArticle":553},"aosp","AOSP","Android Open Source Project — Android без надстройки Google, который может форкнуть кто угодно. На его форках работают кассовые терминалы, киоски и автомобильные системы, а работа на этом уровне открывает части ОС, которых прикладной разработчик не видит.","platform",[545],"Android Open Source Project",[547],{"kind":548,"url":549},"website","https:\u002F\u002Fsource.android.com\u002F",[551],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":555,"term":556,"definition":557,"category":543,"aliases":558,"links":559,"related":563,"readMore":-1,"target":565,"hasArticle":553},"app-clips","App Clips","Функция Apple, позволяющая запустить небольшую часть iOS-приложения — до 15 МБ — не устанавливая его целиком. Вызывается по QR-коду, NFC-метке или ссылке: для случаев, когда первое действие пользователя не должно требовать похода в App Store.",[],[560],{"kind":561,"url":562},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[367,564],"install-referrer","\u002Fglossary#app-clips",{"slug":567,"term":568,"definition":569,"category":543,"aliases":570,"links":571,"related":577,"readMore":-1,"target":580,"hasArticle":553},"bigquery","BigQuery","Аналитическое хранилище Google Cloud. Вы запускаете SQL по миллиардам строк, и они сканируются за секунды, а данные при этом лежат отдельно от машин, выполняющих запросы. Именно это снимает отчётность и исследование данных с базы, обслуживающей живой трафик.",[],[572,574],{"kind":548,"url":573},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":575,"url":576},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[578,579],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":582,"term":583,"definition":584,"category":585,"aliases":586,"links":590,"related":593,"readMore":-1,"target":594,"hasArticle":553},"ci-cd","CI\u002FCD","Автоматизация, которая собирает, тестирует и выкладывает каждое изменение без ручного запуска команд. В мобильной разработке это то, что превращает релиз в нажатие кнопки вместо полудня ожидания, пока освободится нужный человек.","practice",[587,588,589],"CI","непрерывная интеграция","непрерывная поставка",[591],{"kind":575,"url":592},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":596,"term":597,"definition":598,"category":599,"aliases":600,"links":603,"related":606,"readMore":-1,"target":609,"hasArticle":553},"crud","CRUD","Create, read, update, delete — четыре операции, стоящие почти за каждой формой и админкой. Собирательное название для рутинной половины приложения, которая управляет данными, в отличие от частей с реальной предметной логикой.","architecture",[601,602],"Create, Read, Update, Delete","создание, чтение, обновление, удаление",[604],{"kind":575,"url":605},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[607,608],"rest","graphql","\u002Fglossary#crud",{"slug":611,"term":612,"definition":613,"category":585,"aliases":614,"links":618,"related":623,"readMore":-1,"target":625,"hasArticle":553},"dev-container","Dev Container","Среда разработки, описанная один раз в devcontainer.json — ОС, инструменты и версии рантаймов, которые нужны проекту, — и открываемая одинаково внутри контейнера в редакторе любого участника, вместо инструкции по установке, которую каждый понимает по-своему.",[615,616,617],"devcontainer.json","Dev Containers","VS Code Dev Containers",[619,621],{"kind":548,"url":620},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":561,"url":622},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[624],"container-registry","\u002Fglossary#dev-container",{"slug":579,"term":627,"definition":628,"category":543,"aliases":629,"links":632,"related":637,"readMore":-1,"target":638,"hasArticle":553},"Elasticsearch","Поисковый и аналитический движок, который индексирует записи, чтобы их можно было интерактивно фильтровать и искать, а не сканировать. К нему обращаются, когда вопрос звучит как «покажи вот эти сессии с шестью фильтрами», а не «просуммируй колонку».",[630,631],"Elastic","ELK",[633,635],{"kind":548,"url":634},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":575,"url":636},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[567],"\u002Fglossary#elasticsearch",{"slug":640,"term":641,"definition":642,"category":599,"aliases":643,"links":646,"related":647,"readMore":-1,"target":651,"hasArticle":553},"fan-out","Fan-out","Чтение источника один раз и доставка каждого обновления всем подписанным на него клиентам. Наивная версия пишет подписчикам в цикле и встаёт, как только один из сокетов начинает тормозить; рабочая — держит отдельный буфер на каждого клиента и отключает тех, кто не успевает.",[644,645],"веерная рассылка","фан-аут",[],[648,649,650],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":653,"term":654,"definition":655,"category":585,"aliases":656,"links":659,"related":664,"readMore":-1,"target":668,"hasArticle":553},"gdpr","GDPR","Регламент ЕС о персональных данных людей в ЕС: законное основание для сбора, настоящее согласие на трекинг, право увидеть и удалить свои данные. Он следует за вашими пользователями, а не за вашими серверами: где зарегистрирована компания, значения не имеет.",[657,658],"Общий регламент по защите данных","General Data Protection Regulation",[660,662],{"kind":548,"url":661},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":575,"url":663},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[665,666,667],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":670,"term":671,"definition":672,"category":585,"aliases":673,"links":677,"related":680,"readMore":-1,"target":681,"hasArticle":553},"golden-test","Golden-тест","Тест, который отрисовывает виджет и сравнивает результат попиксельно с эталонным изображением. Во Flutter это самый дешёвый способ узнать, не сломал ли редизайн пустое состояние на 320pt, в тёмной теме, при 200% масштабе текста.",[674,675,676],"golden test","золотой тест","скриншотный тест",[678],{"kind":561,"url":679},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[582],"\u002Fglossary#golden-test",{"slug":608,"term":683,"definition":684,"category":599,"aliases":685,"links":686,"related":691,"readMore":-1,"target":692,"hasArticle":553},"GraphQL","Язык запросов к API, где клиент сам перечисляет нужные поля и получает один ответ ровно такой формы. Он снимает избыточную выдачу, к которой дрейфуют REST-эндпоинты, и добавляет собственный режим отказа: неограниченный запрос, обходящий всю модель данных.",[],[687,689],{"kind":548,"url":688},"https:\u002F\u002Fgraphql.org\u002F",{"kind":575,"url":690},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[607],"\u002Fglossary#graphql",{"slug":667,"term":694,"definition":695,"category":585,"aliases":696,"links":698,"related":701,"readMore":-1,"target":702,"hasArticle":553},"HIPAA","Закон США о защищённой медицинской информации: как её можно хранить, передавать, логировать и раскрывать. Как и PCI-DSS, это архитектурное ограничение, которое выбирают в начале, а не документ, который дописывают перед запуском.",[697],"Health Insurance Portability and Accountability Act",[699],{"kind":575,"url":700},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[665,653,666],"\u002Fglossary#hipaa",{"slug":261,"term":704,"definition":705,"category":599,"aliases":706,"links":709,"related":712,"readMore":-1,"target":713,"hasArticle":553},"Headless CMS","Система управления контентом с админкой и API, но без собственного фронтенда. Редакторы публикуют в одном месте, а сайт или приложение отрисовывает контент само — слой представления принадлежит вам, а не вендору CMS.",[707,708],"безголовая CMS","контентное API",[710],{"kind":575,"url":711},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[193,607],"\u002Fglossary#headless-cms",{"slug":551,"term":715,"definition":716,"category":543,"aliases":717,"links":721,"related":724,"readMore":-1,"target":725,"hasArticle":553},"Host Card Emulation","Режим, в котором Android-телефон программно эмулирует бесконтактную карту по NFC, без аппаратного защищённого элемента. Так платит приложение-кошелёк на терминале: телефон говорит с ним по тому же протоколу EMV Contactless, что и пластиковая карта.",[718,719,720],"HCE","EMV Contactless","бесконтактные платежи",[722],{"kind":561,"url":723},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[665,540],"\u002Fglossary#host-card-emulation",{"slug":727,"term":728,"definition":729,"category":543,"aliases":730,"links":731,"related":734,"readMore":-1,"target":736,"hasArticle":553},"impeller","Impeller","Движок рендеринга, на котором Flutter работает сегодня: по умолчанию на iOS с 2023 года и на Android с 2024-го. Он компилирует шейдеры заранее, а не во время первой анимации, что убрало главную видимую проблему Flutter в проде — джанк на компиляции шейдеров.",[],[732],{"kind":561,"url":733},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[735],"skia","\u002Fglossary#impeller",{"slug":564,"term":738,"definition":739,"category":543,"aliases":740,"links":741,"related":744,"readMore":-1,"target":745,"hasArticle":553},"Install Referrer","API Google Play, который передаёт только что установленному Android-приложению параметры кампании из ссылки, приведшей к установке. Android-половина отложенного диплинкинга и надёжный способ понять, откуда пришёл пользователь.",[],[742],{"kind":561,"url":743},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[367,555],"\u002Fglossary#install-referrer",{"slug":747,"term":748,"definition":749,"category":750,"aliases":751,"links":753,"related":758,"readMore":-1,"target":759,"hasArticle":553},"jwt","JWT","Подписанный токен, несущий свои данные внутри: сервер понимает, кому принадлежит запрос, не обращаясь к хранилищу сессий. Стандарт мобильной аутентификации. Подпись доказывает, что токен не меняли, но не скрывает его содержимое.","protocol",[752],"JSON Web Token",[754,756],{"kind":548,"url":755},"https:\u002F\u002Fjwt.io\u002F",{"kind":575,"url":757},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[665],"\u002Fglossary#jwt",{"slug":761,"term":762,"definition":763,"category":585,"aliases":764,"links":768,"related":771,"readMore":-1,"target":772,"hasArticle":553},"kyc","KYC","Know Your Customer — проверки личности, которые регулируемый финансовый продукт проводит, прежде чем разрешить переводить деньги: съёмка документов, liveness, санкционный и антиотмывочный скрининг. На онбординг это влияет сильнее любого дизайн-решения.",[765,766,767],"Know Your Customer","AML","KYC\u002FAML",[769],{"kind":575,"url":770},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[665,653],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":774,"category":543,"aliases":775,"links":777,"related":778,"readMore":779,"target":779,"hasArticle":553},"Переиспользование бизнес-логики на Kotlin между Android, iOS и сервером, при этом интерфейс на каждой платформе остаётся нативным. Альтернатива Flutter, когда UI обязан быть нативным, а правила за ним — нет.",[776],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":781,"term":782,"definition":783,"category":784,"aliases":785,"links":788,"related":791,"readMore":-1,"target":793,"hasArticle":553},"mvp","MVP","Минимальная версия продукта, которую можно показать реальным пользователям и которая при этом отвечает на вопрос, ради которого его делали. Решение об объёме, а не о качестве: MVP всё равно обязан работать.","business",[786,787],"минимально жизнеспособный продукт","minimum viable product",[789],{"kind":575,"url":790},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[792],"white-label","\u002Fglossary#mvp",{"slug":795,"term":796,"definition":797,"category":750,"aliases":798,"links":802,"related":807,"readMore":-1,"target":808,"hasArticle":553},"oauth","OAuth","Стандарт, на котором держатся «Вход через Apple», Google и остальные: пользователь авторизует ваше приложение у провайдера, которому уже доверяет, а приложение получает токен вместо пароля. Никто не заводит новый пароль, и вы его не храните.",[799,800,801],"OAuth 2.0","вход через соцсети","Sign in with Apple",[803,805],{"kind":548,"url":804},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":575,"url":806},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[747],"\u002Fglossary#oauth",{"slug":665,"term":810,"definition":811,"category":585,"aliases":812,"links":815,"related":820,"readMore":-1,"target":821,"hasArticle":553},"PCI-DSS","Стандарт безопасности карточной индустрии, обязательный для всех, кто хранит, обрабатывает или передаёт данные карт. Большинство приложений намеренно остаются вне зоны его действия, отдавая ввод карты сертифицированному платёжному провайдеру.",[813,814],"PCI DSS","Payment Card Industry Data Security Standard",[816,818],{"kind":548,"url":817},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":575,"url":819},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[747],"\u002Fglossary#pci-dss",{"slug":823,"term":824,"definition":825,"category":784,"aliases":826,"links":829,"related":832,"readMore":-1,"target":834,"hasArticle":553},"product-market-fit","Product-market fit","Момент, когда продукт доказуемо нашёл своих людей: они им пользуются, возвращаются и платят. До него разработка отвечает на вопрос, после — на спрос.",[827,828],"PMF","соответствие продукта рынку",[830],{"kind":575,"url":831},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[781,833],"time-to-market","\u002Fglossary#product-market-fit",{"slug":836,"term":837,"definition":838,"category":585,"aliases":839,"links":842,"related":845,"readMore":-1,"target":847,"hasArticle":553},"prompt-injection","Prompt injection","Атака, при которой текст от пользователя языковая модель читает как инструкции, а не как данные, и уходит в обход собственных правил. Родственник SQL-инъекции в эпоху LLM: возникает везде, где пользовательский ввод склеивается в промпт.",[840,841],"инъекция промпта","инъекция в промпт",[843],{"kind":575,"url":844},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[846],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":649,"term":849,"definition":850,"category":599,"aliases":851,"links":854,"related":857,"readMore":-1,"target":858,"hasArticle":553},"Pub\u002FSub","Шаблон обмена сообщениями: производитель публикует событие, а любое число потребителей независимо читает его через стоящий между ними брокер. Производитель никогда их не ждёт — так путь запроса остаётся быстрым, а более медленная работа выполняется в фоне.",[852,853],"публикация\u002Fподписка","Google Cloud Pub\u002FSub",[855],{"kind":575,"url":856},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":607,"term":860,"definition":861,"category":599,"aliases":862,"links":865,"related":868,"readMore":-1,"target":869,"hasArticle":553},"REST","Общепринятый стиль HTTP-API: URL называет ресурс, а HTTP-метод говорит, что с ним сделать. Способ по умолчанию, которым приложение общается с бэкендом, и то, что ожидает найти большинство сторонних интеграций.",[863,864],"REST API","Representational State Transfer",[866],{"kind":575,"url":867},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[648,650],"\u002Fglossary#rest",{"slug":666,"term":871,"definition":872,"category":585,"aliases":873,"links":876,"related":879,"readMore":-1,"target":880,"hasArticle":553},"SOC 2","Отчёт внешнего аудитора о том, как компания обращается с данными клиентов — безопасность, доступность, конфиденциальность, — а не сертификат, который можно купить. Корпоративные заказчики его требуют, а архитектуру он ограничивает задолго до самого аудита.",[874,875],"SOC2","System and Organization Controls",[877],{"kind":575,"url":878},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[665,653,667],"\u002Fglossary#soc-2",{"slug":882,"term":883,"definition":884,"category":784,"aliases":885,"links":888,"related":891,"readMore":-1,"target":893,"hasArticle":553},"saas","SaaS","Софт, который продают как постоянную подписку на размещённый у поставщика продукт, а не как разовую лицензию для установки у себя. Поставщик держит серверы, непрерывно выкатывает обновления и берёт плату за пользователя или за объём.",[886,887],"Software as a Service","ПО как услуга",[889],{"kind":575,"url":890},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[892,792],"multi-tenancy","\u002Fglossary#saas",{"slug":650,"term":895,"definition":896,"category":750,"aliases":897,"links":899,"related":902,"readMore":-1,"target":903,"hasArticle":553},"Server-Sent Events","Односторонний поток от сервера к клиенту поверх обычного HTTP-соединения. Проще, чем WebSocket, и достаточен там, где только серверу есть что сказать: прогресс операции, ответ AI, приходящий токен за токеном.",[898],"SSE",[900],{"kind":575,"url":901},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[648,607],"\u002Fglossary#server-sent-events",{"slug":735,"term":905,"definition":906,"category":543,"aliases":907,"links":910,"related":915,"readMore":-1,"target":916,"hasArticle":553},"Skia","Открытая 2D-графическая библиотека Google, которая рисует Chrome, Android и — до появления Impeller — каждый кадр Flutter. Она умеет выводить не только на экран, но и в PDF: именно это делает «печать в PDF» в Chrome.",[908,909],"Skia Graphics Engine","skia-safe",[911,913],{"kind":548,"url":912},"https:\u002F\u002Fskia.org\u002F",{"kind":575,"url":914},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[727],"\u002Fglossary#skia",{"slug":918,"term":919,"definition":920,"category":784,"aliases":921,"links":925,"related":926,"readMore":-1,"target":928,"hasArticle":553},"staff-augmentation","Staff augmentation","Модель найма, при которой инженеры внешнего партнёра входят в вашу команду и работают под вашим управлением — в вашем репозитории, ваших спринтах, вашем процессе, — а не сдают отдельный проект. Вы покупаете ресурс; код и контекст остаются у вас.",[922,923,924],"аутстаффинг","расширение команды","выделенные разработчики",[],[927,833],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":930,"term":931,"definition":932,"category":750,"aliases":933,"links":937,"related":940,"readMore":-1,"target":942,"hasArticle":553},"tls","TLS","Слой шифрования под HTTPS. Он подтверждает, что сервер именно тот, о ком говорит его сертификат, согласует свежий ключ на сессию и шифрует всё дальнейшее — сеть между вами видит шифртекст и не может незаметно его изменить.",[934,935,936],"SSL","HTTPS","Transport Layer Security",[938],{"kind":575,"url":939},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[941,747],"end-to-end-encryption","\u002Fglossary#tls",{"slug":833,"term":944,"definition":945,"category":784,"aliases":946,"links":949,"related":952,"readMore":-1,"target":953,"hasArticle":553},"Time to market","Время от решения строить продукт до момента, когда им пользуются настоящие люди. Большинство споров о стеке и объёме работ — на самом деле споры об этом числе: каждая сэкономленная неделя — это неделя выручки, обратной связи и позиции на рынке.",[947,948],"TTM","время выхода на рынок",[950],{"kind":575,"url":951},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[781,927],"\u002Fglossary#time-to-market",{"slug":955,"term":956,"definition":957,"category":750,"aliases":958,"links":960,"related":965,"readMore":-1,"target":967,"hasArticle":553},"webrtc","WebRTC","Браузерный и мобильный стандарт для передачи аудио, видео и данных напрямую между двумя устройствами; серверы участвуют только в том, чтобы их познакомить. На нём строят видеозвонок внутри приложения, когда не берут готовый SDK.",[959],"Web Real-Time Communication",[961,963],{"kind":548,"url":962},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":575,"url":964},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[966,648],"xmpp","\u002Fglossary#webrtc",{"slug":648,"term":969,"definition":970,"category":750,"aliases":971,"links":972,"related":975,"readMore":-1,"target":976,"hasArticle":553},"WebSocket","Протокол, который держит одно соединение между клиентом и сервером открытым, чтобы любая сторона могла отправить данные в любой момент, а не клиент спрашивал снова и снова. На нём работают живые котировки, чаты и статусы присутствия.",[],[973],{"kind":575,"url":974},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[650,607],"\u002Fglossary#websocket",{"slug":792,"term":978,"definition":979,"category":784,"aliases":980,"links":983,"related":986,"readMore":987,"target":987,"hasArticle":501},"White-label","Один продукт, выпускаемый под многими брендами. White-label платформа собирает каждому клиенту готовое к публикации приложение со своим названием, оформлением и контентом из общей кодовой базы, а не форкает проект под заказчика.",[981,982],"белый лейбл","мультитенантное приложение",[984],{"kind":575,"url":985},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[781],"\u002Fglossary\u002Fwhite-label",{"slug":966,"term":989,"definition":990,"category":750,"aliases":991,"links":994,"related":999,"readMore":-1,"target":1000,"hasArticle":553},"XMPP","Открытый федеративный протокол обмена сообщениями и давняя альтернатива тому, чтобы писать чат-бэкенд самому или арендовать чужой. Он покрывает статусы присутствия, индикаторы набора и передачу файлов, а зрелые клиентские библиотеки есть под любую платформу.",[992,993],"Jabber","Extensible Messaging and Presence Protocol",[995,997],{"kind":548,"url":996},"https:\u002F\u002Fxmpp.org\u002F",{"kind":575,"url":998},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[955,648],"\u002Fglossary#xmpp",{"slug":1002,"term":1003,"definition":1004,"category":784,"aliases":1005,"links":1009,"related":1012,"readMore":-1,"target":1013,"hasArticle":553},"in-app-purchase","Встроенные покупки","Продажа цифровых товаров и подписок через биллинг Apple и Google, который оба стора требуют для цифрового контента и с которого берут комиссию. Сложность никогда не в самой покупке, а в её восстановлении на новом устройстве и в честном учёте прав доступа.",[1006,1007,1008],"in-app purchase","IAP","внутренние покупки",[1010],{"kind":561,"url":1011},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[823],"\u002Fglossary#in-app-purchase",{"slug":367,"term":1015,"definition":1016,"category":543,"aliases":1017,"links":1022,"related":1025,"readMore":1026,"target":1026,"hasArticle":501},"Диплинкинг","Ссылка, которая открывает конкретный экран внутри установленного приложения, а не его главную или веб-страницу. Отложенный диплинкинг переживает установку: нажатие, прошедшее через магазин приложений, всё равно приводит на нужный экран.",[1018,1019,1020,1021],"deep linking","отложенный диплинкинг","Universal Links","Android App Links",[1023],{"kind":575,"url":1024},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[555,564],"\u002Fglossary\u002Fdeep-linking",{"slug":1028,"term":1029,"definition":1030,"category":599,"aliases":1031,"links":1035,"related":1038,"readMore":-1,"target":1039,"hasArticle":553},"multi-arch-image","Мультиархитектурный образ","Один тег образа, который разрешается в разные бинарники для каждой архитектуры процессора — обычно это пара linux\u002Famd64 и linux\u002Farm64, — так что один и тот же docker pull работает без изменений и на серверах Intel\u002FAMD, и на ноутбуках с Apple Silicon.",[1032,1033,1034],"мультиарх-сборка","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[1036],{"kind":561,"url":1037},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[624],"\u002Fglossary#multi-arch-image",{"slug":892,"term":1041,"definition":1042,"category":599,"aliases":1043,"links":1046,"related":1049,"readMore":-1,"target":1051,"hasArticle":553},"Мультитенантность","Один развёрнутый бэкенд обслуживает много клиентов, и каждый видит только свои данные, конфигурацию и включённые функции, потому что контекст тенанта определяется для каждого запроса. Именно это делает линейку брендированных приложений одним продуктом, а не набором форков.",[892,1044,1045],"мультиарендность","тенант",[1047],{"kind":575,"url":1048},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[792,1050],"feature-flags","\u002Fglossary#multi-tenancy",{"slug":578,"term":1053,"definition":1054,"category":599,"aliases":1055,"links":1059,"related":1062,"readMore":-1,"target":1063,"hasArticle":553},"Объектное хранилище","Хранилище, которое держит файл целиком под ключом, а не в дереве файловой системы, — Amazon S3 и множество сервисов, совместимых с его API. Дешёвое, практически безграничное, привычное место для сырых событий, бэкапов и медиа: пишется один раз, читается редко, хранится вечно.",[1056,1057,1058],"S3","S3-совместимое хранилище","блоб-хранилище",[1060],{"kind":575,"url":1061},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[567],"\u002Fglossary#object-storage",{"slug":846,"term":1065,"definition":1066,"category":585,"aliases":1067,"links":1071,"related":1074,"readMore":-1,"target":1075,"hasArticle":553},"Ограничение частоты запросов","Предел на число запросов от одного клиента за заданный интервал. Именно он не даёт одному увлечённому пользователю, скраперу или боту потратить месячный бюджет платного API за вечер, и стоять он должен на вашей стороне интеграции.",[1068,1069,1070],"rate limiting","рейт-лимит","троттлинг",[1072],{"kind":575,"url":1073},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[836],"\u002Fglossary#rate-limiting",{"slug":1077,"term":1078,"definition":1079,"category":543,"aliases":1080,"links":1083,"related":1086,"readMore":-1,"target":1087,"hasArticle":553},"platform-channels","Платформенные каналы","Мост, через который Flutter-приложение вызывает нативный код iOS и Android — Keychain и Keystore, биометрию, платёжные шторки, любой SDK без Dart-пакета. Работа рутинная, но настоящая, и первое место, где споткнётся инженер, не выходивший за пределы Dart.",[1081,1082],"platform channels","method channel",[1084],{"kind":561,"url":1085},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1089,"term":1090,"definition":1091,"category":750,"aliases":1092,"links":1095,"related":1098,"readMore":-1,"target":1099,"hasArticle":553},"post-quantum-cryptography","Постквантовая криптография","Алгоритмы шифрования, рассчитанные на устойчивость к будущему квантовому компьютеру; стандарты уже финализированы NIST. Мигрировать нужно до появления железа: трафик, записанный сегодня, расшифруют, когда такая машина появится.",[1093,1094],"PQC","постквантовое шифрование",[1096],{"kind":575,"url":1097},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[930,941],"\u002Fglossary#post-quantum-cryptography",{"slug":1101,"term":1102,"definition":1103,"category":585,"aliases":1104,"links":1108,"related":1109,"readMore":-1,"target":1110,"hasArticle":553},"staged-rollout","Поэтапная раскатка","Релиз сначала на небольшой процент пользователей и расширение только тогда, когда доля сессий без падений держится. Плохая сборка, пойманная на десяти процентах, — испорченный вечер; она же на ста процентах — испорченная неделя.",[1105,1106,1107],"staged rollout","phased release","канареечный релиз",[],[1050,582],"\u002Fglossary#staged-rollout",{"slug":624,"term":1112,"definition":1113,"category":599,"aliases":1114,"links":1120,"related":1123,"readMore":-1,"target":1124,"hasArticle":553},"Реестр контейнеров","Хранилище образов контейнеров, адресуемых по имени и тегу, — Docker Hub, GitHub Container Registry или собственный реестр облачного провайдера. Публикация сборки в реестр превращает «у меня работает» в образ, который любой может скачать и запустить без изменений.",[1115,1116,1117,1118,1119],"реестр образов","Docker registry","GHCR","ghcr.io","container registry",[1121],{"kind":561,"url":1122},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[611,1028],"\u002Fglossary#container-registry",{"slug":193,"term":1126,"definition":1127,"category":599,"aliases":1128,"links":1131,"related":1134,"readMore":-1,"target":1135,"hasArticle":553},"Серверный рендеринг","Сборка страницы в готовый HTML на сервере, чтобы первый же ответ содержал контент, заголовки, метатеги и структурированные данные. Краулеры, превью ссылок и медленные устройства читают это, не выполняя JavaScript.",[1129,1130],"SSR","server-side rendering",[1132],{"kind":575,"url":1133},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[261],"\u002Fglossary#server-side-rendering",{"slug":941,"term":1137,"definition":1138,"category":599,"aliases":1139,"links":1143,"related":1146,"readMore":-1,"target":1147,"hasArticle":553},"Сквозное шифрование","Шифрование, которое накладывается на устройстве отправителя и снимается только на устройстве получателя, так что сервис, передающий сообщение, не может его прочитать — ни по решению суда, ни после взлома. Оно защищает содержимое, но никогда — метаданные.",[1140,1141,1142],"E2EE","end-to-end encryption","оконечное шифрование",[1144],{"kind":575,"url":1145},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[930,747],"\u002Fglossary#end-to-end-encryption",{"slug":927,"term":1149,"definition":1150,"category":784,"aliases":1151,"links":1154,"related":1157,"readMore":-1,"target":1158,"hasArticle":553},"Совокупная стоимость владения","Во что продукт обходится за всю жизнь, а не только на этапе разработки: поддержка, обновления, ежегодные миграции на новые ОС и правила сторов, вторая команда, чтобы две кодовые базы не расходились. Обычно больше сметы на разработку и почти никогда в неё не входит.",[1152,1153],"TCO","total cost of ownership",[1155],{"kind":575,"url":1156},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[833],"\u002Fglossary#total-cost-of-ownership",{"slug":1160,"term":1161,"definition":1162,"category":599,"aliases":1163,"links":1167,"related":1170,"readMore":-1,"target":1171,"hasArticle":553},"state-management","Управление состоянием","То, как приложение решает, где живёт значение, кому позволено его менять и какие части экрана перерисовываются, когда оно меняется. Во Flutter выбор между Riverpod, BLoC и Provider — одно из первых архитектурных решений и одно из самых трудных для пересмотра.",[1164,1165,1166],"state management","BLoC","Riverpod",[1168],{"kind":561,"url":1169},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[670],"\u002Fglossary#state-management",{"slug":1050,"term":1173,"definition":1174,"category":585,"aliases":1175,"links":1179,"related":1182,"readMore":-1,"target":1183,"hasArticle":553},"Фиче-флаги","Переключатели, которые включают и выключают функциональность из конфигурации, а не из релиза. Один бинарник ведёт себя по-разному для разных брендов, рынков и пользователей, а рискованную фичу можно погасить, не отправляя новую сборку на ревью.",[1176,1177,1178],"feature flags","фиче-флаги","feature toggle",[1180],{"kind":575,"url":1181},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[1101,792,892],"\u002Fglossary#feature-flags",{"slug":1185,"term":1186,"definition":1187,"category":599,"aliases":1188,"links":1192,"related":1195,"readMore":-1,"target":1196,"hasArticle":553},"floating-point","Числа с плавающей точкой","Двоичный формат IEEE 754, стоящий за double и float. Он не хранит 0.1 точно, поэтому 0.1 + 0.2 даёт 0.30000000000000004 — незаметно в графике и фатально в деньгах, которым место в целых минорных единицах или в decimal-типе.",[1189,1190,1191],"IEEE 754","double","плавающая запятая",[1193],{"kind":575,"url":1194},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point"]