hostim backend
В разработке

Бэкенд без бэкенда
для MVP и SaaS

База данных, авторизация, хранилище файлов, серверные функции, отправка писем и приём платежей через ЮKassa. Приложение подключается через SDK, писать и размещать собственный бэкенд не требуется

Отправка заявки означает согласие с политикой конфиденциальности. Одно письмо о запуске, без рассылок

app.ts
import { createClient } from "@supabase/supabase-js";

// адрес и публичный ключ из панели Hostim Backend
const db = createClient(
  "https://myapp.backend.hostim.app",
  import.meta.env.VITE_BACKEND_ANON_KEY,
);

// письмо со ссылкой для входа
await db.auth.signInWithOtp({ email });

// после входа: файлы и данные пользователя
await db.storage.from("docs").upload(path, file);
const { data } = await db.from("invoices").select("*");
Бесплатно до запуска

Бесплатный тариф без ограничения срока: в пределах лимитов, с тестовым режимом ЮKassa и адресом на поддомене Hostim. Платный тариф от 990 ₽ в месяц нужен для приёма реальных платежей и собственного домена

Совместимость с Supabase SDK

Код на supabase-js, в том числе из Lovable, Bolt и Cursor, работает без изменений: в настройках меняются адрес и ключ. Данные переносятся отдельно

Хранение данных в России

Серверы в дата-центре на территории РФ. Оплата в рублях, закрывающие документы для ИП и юрлиц

Кому

Подойдёт и не подойдёт

Подойдёт, если
  • Нет бэкенд-разработчика или времени на серверную часть
  • Приложение создано в Lovable, Bolt или Cursor и использует supabase-js
  • SaaS с подпиской и оплатой в рублях через ЮKassa
  • Персональные данные пользователей необходимо хранить в РФ
Не подойдёт, если
  • Требуется база данных в нескольких регионах или реплики для чтения
  • Требуются отдельные копии базы данных для веток разработки (branching)
  • Требуются массовые email-рассылки
База данных

База данных PostgreSQL

Приложение работает с данными через SDK, без собственного API. Права доступа задаются правилами на уровне строк

  • Таблицы создаются в табличном редакторе панели, через SQL или ИИ-агентом
  • Правила доступа к строкам (RLS)
  • Прямое подключение для миграций, psql и ORM
  • Realtime: изменения таблиц передаются в приложение по WebSocket
  • Бэкап базы данных ежедневно. Восстановление на любую секунду за последние 7 дней на тарифе «Стартап» и 30 дней на тарифе «Профи»
schema.sql
create table public.notes (
  id bigint generated always as identity primary key,
  user_id uuid not null default auth.uid()
    references auth.users on delete cascade,
  body text not null
);

alter table public.notes enable row level security;

create policy "свои заметки" on public.notes
  for all to authenticated
  using ((select auth.uid()) = user_id)
  with check ((select auth.uid()) = user_id);
Вход пользователей

Регистрация и вход пользователей

Готовые сценарии входа, подтверждения почты и восстановления пароля. Письма для входа отправляются сразу, без настройки SMTP

  • Email и пароль, вход по ссылке, коды на почту
  • Google, GitHub, Яндекс ID, VK ID, Telegram
  • Сессии с автоматическим обновлением токенов
  • Идентификатор пользователя доступен в правилах базы данных через auth.uid()
auth.ts
// вход через Google
await db.auth.signInWithOAuth({ provider: "google" });

// ссылка для входа на почту
await db.auth.signInWithOtp({ email });

// восстановление пароля
await db.auth.resetPasswordForEmail(email, {
  redirectTo: "https://app.example.ru/new-password",
});

// текущий пользователь
const { data: { user } } = await db.auth.getUser();
Файлы

Хранилище файлов

Хранение документов, изображений и вложений. Доступ к файлам задаётся такими же правилами, как доступ к данным

  • Загрузка из браузера и мобильного приложения
  • Временные ссылки на приватные файлы
  • Уменьшенные копии изображений по запросу
  • Ограничения на размер и тип файла
  • Резервная копия файлов раз в сутки
files.ts
const path = `${user.id}/contract.pdf`;

await db.storage.from("documents").upload(path, file);

// ссылка на 1 час
const { data } = await db.storage
  .from("documents")
  .createSignedUrl(path, 3600);
Функции

Серверные функции

Код, который нельзя выполнять в браузере: обработка вебхуков, запросы к внешним API с секретными ключами, формирование документов

  • TypeScript в среде Deno, как Edge Functions в Supabase
  • Секреты хранятся в панели, а не в коде
  • Лог каждого вызова, уведомление об ошибке в Telegram
  • Вызов из приложения через SDK, по HTTP-запросу или по расписанию
functions/create-invoice/index.ts
const cors = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Headers":
    "authorization, x-client-info, apikey, content-type",
};

Deno.serve(async (req) => {
  if (req.method === "OPTIONS") {
    return new Response("ok", { headers: cors });
  }

  const { orderId } = await req.json();
  const token = Deno.env.get("PARTNER_API_TOKEN");

  const url = "https://api.example.com/invoices";
  const res = await fetch(url, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${token}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ orderId }),
  });

  return Response.json(await res.json(), {
    status: res.status,
    headers: cors,
  });
});

// вызов из приложения:
// db.functions.invoke("create-invoice", {
//   body: { orderId },
// })
Письма

Отправка писем

Транзакционные письма с домена приложения: подтверждения, счета, уведомления. Для домена панель показывает готовые DNS-записи и проверяет их

  • Письма входа без настройки
  • Отправка из функций по SMTP
  • Статусы доставки: отправлено, принято сервером получателя, отклонено, жалоба на спам
  • Только письма приложения, рассылки запрещены
письма · example.ru
DNS-записи домена
✓@TXTv=spf1 include:_spf.backend.hostim.app ~all
✓hb1._domainkeyTXTv=DKIM1; k=rsa; p=MIIBIjANBgkqh…
Журнал доставки
14:02anna@example.ru
Счёт № 1042 · принято сервером получателя
14:03oleg@example.ru
Подтверждение email · принято сервером получателя
14:05ivan@exmaple.ru
Подтверждение email · отклонено: домена не существует
ИИ-агенты

Подключение ИИ-агентов

MCP-сервер позволяет Cursor, Claude Code и другим агентам читать схему базы данных и логи, создавать таблицы, правила доступа и функции

  • Подключение командой в Claude Code или файлом настроек в Cursor
  • Агент видит схему базы данных и логи ошибок
  • Cursor, Claude Code и другие клиенты MCP
терминал
# Claude Code
claude mcp add --transport http hostim-backend \
  https://mcp.backend.hostim.app/myapp

# дальше обычной просьбой агенту:
# «создай таблицу заказов, где каждый
#  пользователь видит только свои заказы»
Платежи

Платежи и подписки через ЮKassa

Договор с ЮKassa заключает владелец приложения. В панели указываются shopId и секретный ключ. Продление подписок, повторные списания, чеки и возвраты обрабатываются автоматически

  • Тарифы подписки для пользователей приложения: цена, период оплаты, пробный период
  • Повтор неудачного списания через 1, 3 и 5 дней с уведомлением пользователя
  • Данные для чека в каждом платеже, возврат из панели
  • Готовая функция checkout и таблица subscriptions

Автоплатежи включает ЮKassa по заявке. Чеки работают при подключённой кассе или сервисе «Чеки от ЮKassa». Смена тарифа подписки пользователем действует со следующего периода оплаты

billing.ts
// ссылка на оплату тарифа «Pro»
const { data, error } = await db.functions
  .invoke("checkout", { body: { plan: "pro" } });
if (error) throw error;
window.location.href = data.url;

// подписка текущего пользователя:
// правило доступа отдаёт только его строку
const { data: sub } = await db
  .from("subscriptions")
  .select("plan, status")
  .maybeSingle();

if (sub?.plan === "pro" && sub.status === "active") {
  showReports();
}
Ещё

Дополнительно

Задачи по расписанию

Запуск функций по расписанию: отчёты, напоминания, очистка устаревших данных

Логи и ошибки

Логи функций и запросов. Уведомление об ошибке функции в Telegram с текстом ошибки и строкой кода

Проверка безопасности

Отчёт о таблицах без правил доступа и публичных хранилищах файлов с пояснением риска

Подключение

Как это работает

  1. 01
    Проект

    Создание проекта в панели. Адрес, ключи и блок .env доступны сразу

  2. 02
    Подключение

    Официальный Supabase SDK для JavaScript, Flutter, Swift, Kotlin, Python или прямое подключение к PostgreSQL

  3. 03
    Функции

    Публикация через CLI или ИИ-агента по MCP. Секреты задаются в панели

  4. 04
    Запуск

    Переход на тариф «Стартап» включает боевой режим ЮKassa и собственный домен

Стоимость

Бесплатно до запуска

Тарификация по числу пользователей и объёму данных, без выбора мощности сервера. Списание посуточно из кошелька Hostim

Тариф
Бесплатный
0 ₽
без ограничения срока
  • ·2 проекта на аккаунт
  • ·500 активных пользователей в месяц
  • ·База данных 500 МБ, файлы 1 ГБ, трафик 5 ГБ в месяц
  • ·100 000 вызовов функций в месяц
  • ·100 писем входа в месяц
  • ·Платежи ЮKassa в тестовом режиме
  • ·Бэкап базы данных раз в сутки, хранение 1 день
  • ·Пауза после 7 дней без запросов, возобновление при следующем запросе
Тариф
Стартап
990 ₽
в месяц за проект, 32 ₽ в сутки
  • ·10 000 активных пользователей в месяц
  • ·База данных 5 ГБ, файлы 25 ГБ, трафик 100 ГБ в месяц
  • ·1 млн вызовов функций в месяц
  • ·5 000 писем в месяц
  • ·Платежи ЮKassa в боевом режиме
  • ·Восстановление базы данных на любую секунду за 7 дней
  • ·Собственный домен, без паузы
Тариф
Профи
2 990 ₽
в месяц за проект, 96 ₽ в сутки
  • ·50 000 активных пользователей в месяц
  • ·База данных 20 ГБ, файлы 100 ГБ, трафик 250 ГБ в месяц
  • ·5 млн вызовов функций в месяц
  • ·25 000 писем в месяц
  • ·Платежи ЮKassa в боевом режиме
  • ·Восстановление базы данных на любую секунду за 30 дней
  • ·Собственный домен, без паузы
Сверх лимита

Цена за месяц сверх лимита тарифа. Только на платных тарифах и только если владелец проекта включил доплаты и задал потолок расходов. По умолчанию доплаты отключены

1 000 активных пользователей100 ₽
1 ГБ базы данных10 ₽
1 ГБ файлов2 ₽
1 ГБ трафика5 ₽
1 млн вызовов функций100 ₽
1 000 писем50 ₽
Что считается
Активный пользователь
вошёл или продлил сессию хотя бы раз за календарный месяц
База данных
таблицы и индексы на диске, без журнала транзакций и бэкапов
Файлы
суммарный размер загруженных файлов без уменьшенных копий изображений
Трафик
данные, переданные пользователям из API, хранилища файлов и функций. Входящий трафик не учитывается
Вызов функции
каждый запуск функции: HTTP-запрос, вебхук, задача по расписанию или повторная попытка
Ограничения

Что важно знать заранее

  • !Функции работают в среде Deno, как Edge Functions в Supabase
  • !Восстановление базы данных на момент времени создаёт её копию на выбранную секунду. При аварии сервера возможна потеря изменений за последнюю минуту. Файлы хранилища восстанавливаются только на конец суток
  • !Telegram не передаёт email, VK передаёт не всегда. Вход через них создаёт отдельный аккаунт до привязки почты
  • !Отправляются только письма входа и уведомления приложения, рассылки запрещены. Для собственного домена нужны записи SPF и DKIM
  • !Проверка безопасности охватывает базу данных и настройки хранилища, код фронтенда не анализируется
  • !Нет копий базы данных для веток разработки (branching) и Management API Supabase
  • !Технические пределы на тарифах «Бесплатный», «Стартап» и «Профи»: одновременных подключений к базе данных 20, 60 и 120; время выполнения функции 30, 150 и 150 секунд
Вопросы

Частые вопросы

Это Supabase?

В основе открытый движок Supabase, поэтому официальный SDK и код на supabase-js работают без изменений. Hostim не связан с компанией Supabase.

Когда нужен платный тариф?

Платный тариф нужен для боевого режима ЮKassa и собственного домена, переход выполняет владелец проекта. Без перехода проект остаётся на бесплатном тарифе: при выходе за лимиты деньги не списываются, проект работает с ограничениями.

Что будет при достижении лимита?

Уведомления приходят при 80% и 100% лимита. После этого база данных переходит в режим только для чтения, новые загрузки файлов и вызовы функций отклоняются, письма остаются в очереди. На платных тарифах с включёнными доплатами превышение оплачивается в пределах потолка расходов.

Что такое потолок расходов?

Максимальная сумма доплат за месяц, которую устанавливает владелец проекта. По умолчанию доплаты отключены.

Как перенести проект с Supabase?

Схема, данные, пользователи и файлы переносятся с помощью поддержки. В коде меняются адрес и ключи. Пользователям потребуется повторный вход.

Можно ли использовать вместе с хостингом Hostim?

Да, но это не обязательно: Hostim Backend работает с приложениями на любом хостинге. Оплата из общего кошелька Hostim.

Где хранятся данные?

В дата-центре в России.

Когда откроется доступ?

По мере готовности, в первую очередь по заявкам с этого сайта. Письмо придёт на указанный email.

Заявка на доступ к Hostim Backend

Приглашение придёт на email. Первые проекты подключаются и переносятся с помощью поддержки

Отправка заявки означает согласие с политикой конфиденциальности. Одно письмо о запуске, без рассылок