Надёжные мультиканальные личные напоминания. Поставил напоминание — оно придёт всегда и вовремя: через Telegram, email (далее — SMS, push, WhatsApp, звонок). Главный принцип продукта: пользователь не должен пропустить важное из-за того, что у нас что-то пошло не так.
Имя «Remblo» — рабочее/брендовое (coined от remind). Финальная проверка домена/товарного знака — перед публичным запуском.
- Backend: Java 21, Spring Boot 3.5, Postgres 16, Liquibase,
JdbcTemplate (durable-очередь на
SELECT … FOR UPDATE SKIP LOCKED), Testcontainers. Modular monolith со швами под будущие сервисы. - Client: Flutter (один кодбейс на web + Android + iOS + desktop; в v1 собирается только web-таргет).
- Инфра: Docker Compose (Postgres) локально.
- Оркестрация работы с ИИ: плагин OMC (oh-my-claudecode).
remblo/
backend/ - Java модуль (Spring Boot, modular monolith)
client/ - Flutter клиент (web сейчас, мобилки/десктоп потом)
docs/ - вся документация (см. docs/ ниже)
Точка входа для новой сессии — CLAUDE.md, затем runbook первого
запуска docs/first-session.md. Карта документов:
docs/vision.md— что и зачем строим, для кого, как монетизируемdocs/roadmap.md— активные срезы и порядок работdocs/decisions.md— ADR (фундаментальные решения)docs/architecture.md— целевая архитектураdocs/api-contract.md— источник истины REST-контрактаdocs/glossary.md— доменные терминыdocs/gotchas.md— ловушки и обходыdocs/backlog.md— идеи без привязки к срезуdocs/progress.md— журнал сессийdocs/doc-hygiene.md— правила поддержания доков в порядкеdocs/specs/— дизайн-спеки крупных работdocs/design-reference.md— дизайн-токены + лог бандлов claude.ai/designdocs/first-session.md— runbook первого запуска в новой сессииdocs/deploy.md— dev-стенд: процедуры (деплой, секреты, restore)docs/infra-guide.md— гид по инфраструктуре: как всё работает + диагностика «когда сломалось»docs/prompts/— исторические промты сессий (помечены хедером «Исторический документ»)docs/archive/— архив журнала сессий (progress.md до 2026-06-07)
Срез 1 (MVP-ядро): движок надёжной доставки + Telegram + Email + минимальный web + auth. Режим — догфудинг (первый пользователь — автор).
Единый список env-переменных для VPS-догфудинга. Все ключи имеют
dev-дефолты в backend/src/main/resources/application.yml; на публичном
стенде задать:
| Env | Ключ | Зачем |
|---|---|---|
REMBLO_DB_URL / _USER / _PASSWORD |
spring.datasource.* |
Postgres |
REMBLO_TELEGRAM_BOT_TOKEN |
remblo.telegram.bot-token |
токен бота; пусто → TG-канал и поллер неактивны |
REMBLO_TELEGRAM_BOT_USERNAME |
remblo.telegram.bot-username |
@username бота для deep-link t.me/<bot>?start=… |
SPRING_MAIL_HOST / _PORT / _USERNAME / _PASSWORD |
spring.mail.* |
SMTP email-канала (+ mail.smtp.auth, starttls — см. props) |
REMBLO_EMAIL_FROM |
remblo.email.from |
адрес отправителя писем |
REMBLO_PUBLIC_BASE_URL |
remblo.public-base-url |
внешний URL деплоймента — хост email-ack-ссылок эскалации |
REMBLO_ESCALATE_ACK_SECRET |
remblo.escalate.ack-secret |
HMAC-секрет ack-ссылок; пусто → random per boot, ссылки умирают на рестарте |
REMBLO_CORS_ALLOWED_ORIGINS |
remblo.cors.allowed-origins |
origins web-клиента через запятую (dev-дефолт *) |
REMBLO_AUTH_REGISTRATION_ENABLED |
remblo.auth.registration-enabled |
false = регистрация закрыта независимо от mode (старый гейт сильнее) |
REMBLO_AUTH_REGISTRATION_MODE |
remblo.auth.registration-mode |
closed | invite | open (ADR-018); стенд для друзей = invite |
REMBLO_AUTH_EMAIL_CONFIRMATION_REQUIRED |
remblo.auth.email-confirmation-required |
код из письма для активации (дефолт true; локальный dev без SMTP → false) |
REMBLO_AUTH_CONFIRMATION_TTL |
remblo.auth.confirmation-ttl |
TTL неподтверждённой регистрации (48h) |
REMBLO_AUTH_RATE_LIMIT_ENABLED / _LIMIT / _WINDOW |
remblo.auth.rate-limit.* |
per-IP лимит auth-эндпоинтов (20/мин) |
REMBLO_AUTH_RATE_LIMIT_TRUST_FORWARDED |
remblo.auth.rate-limit.trust-forwarded |
true за Traefik: IP из последнего X-Forwarded-For |
REMBLO_SCHEDULING_PAST_GRACE |
remblo.scheduling.past-grace |
grace-окно born-in-past one-time (120s) |
REMBLO_BILLING_STARS_PRICE |
remblo.billing.stars-price |
цена подписки в Stars/мес (250, ADR-019) |
REMBLO_BILLING_GRACE |
remblo.billing.grace |
grace после конца оплаченного периода (72h) |
REMBLO_NL_API_KEY |
remblo.nl.api-key |
ключ LLM-провайдера NL-парсера (DeepSeek; пусто → 503, клиент на rule-based) |
REMBLO_CANARY_ENABLED |
remblo.canary.enabled |
самомониторинг доставки (канарейка) |
REMBLO_CANARY_ADMIN_CHAT_ID |
remblo.canary.admin-chat-id |
TG-чат для канарейки и алертов (пусто → log-only) |
remblo.http.proxy.* на VPS не задавать — это локальный обход
недоступности api.telegram.org (см. комментарий в application.yml).