KODA на смартфоне: схема, RLS и fallback для AI-ментора по коду

Если вы собираете персонального AI-наставника без команды и без monorepo, узкое место редко в промпте. Три слоя решают, выживет ли продукт: база с политиками доступа, цепочка облачных моделей и запасной офлайн-режим, когда API режут. В разборе двенадцатилетний автор KODA показывает, как это выглядит на POCO C55: Android-смартфон, где SQL пишут вручную, а клиент — один index.html без сборщика.
Схема и RLS: где живут диалоги AI-ментора
KODA — «AI coding mentor», собранный целиком на смартфоне. По запросу разработчика Artur автор раскрывает архитектуру: в фокусе шесть таблиц Supabase Postgres — profiles, conversations, chats, submissions, votes, files. ORM и миграционных инструментов нет: DDL для chats набирают с телефона, а «Supabase's editor is my IDE».
Позиция автора: «The frontend is a suggestion. The database is the law». На chats включён row-level security и политика select — пользователь видит только свои сообщения:
alter table public.chats enable row level security;
create policy "users see own chats"
on public.chats for select
using (auth.uid() = user_id);
Даже если убрать все проверки во фронтенде, чужие чаты не читаются. Senior-разработчик nyaomaru stress-тестил RLS и назвал паттерн «highly resilient». Для соло, который один тянет и UI, и агента, это не академия, а страховка от утечки истории диалогов.
Для vibe-coding workflow с персональным ментором база — не хранилище логов, а граница доверия: кто видит, что агент советовал вам по коду.
DDL остальных пяти таблиц в публикации не раскрыт, только имена. Это ограничение источника, не пробел редакции.
Цепочка моделей Groq и OFFLINE SENSEI
Онлайн-инференс идёт через Groq API со стримингом. В углублённом разборе перечислены четыре модели; при ошибке берётся следующая:
const MODELS = ['llama-3.3-70b-versatile', 'openai/gpt-oss-20b',
'llama-4-scout', 'qwen3-32b'];
// model fails → next model. ALL fail → OFFLINE SENSEI MODE.
Если падают все четыре, включается OFFLINE SENSEI MODE: локальный ментор без сети — keyword-routed уроки, анимированная математика KaTeX, задачи Codewars («zero network»). Это не on-device LLM, а rule-based запасной путь, но для пользователя агент не обрывается на белом экране.
Мотивация привязана к реальному сценарию: пользователь VP_xudon сообщил, что Groq блокируется за Great Firewall. KODA задуман так, чтобы работать «in a basement, on a bus, behind a firewall». Для соло-разработчика с одним облачным провайдером это ближе к практике, чем к красивой диаграмме.
Обзорная статья от 1 сентября согласуется: клиент → Supabase Auth/Postgres → Groq с четырёхмодельным fallback → Netlify. Точные таймауты HTTP и очереди запросов автор не описывает.
Z-index и badge хостинга: UI не должен перекрывать ментора
На мобильном клиенте badge хостинга Netlify «плавал» поверх интерфейса ментора. Три попытки починить stacking context не сработали. Решение — максимальный z-index и наблюдатель за DOM:
.modal-overlay { z-index: 2147483647; } /* the max integer. yes. */
Плюс MutationObserver, который снимает badge в момент инъекции. Автор честно называет эту войну «scar» кодовой базы; в обзорном посте та же история фигурирует как урок про z-index, а не как косметика.
Для AI-инструмента на телефоне это напоминание: агент может быть умным, но если overlay перекрывает поле ввода, сессия мертва. Инженерия доверия к ментору начинается с того, что пользователь вообще может задать вопрос.
Соло-стек: один HTML, деплой zip с телефона
Стек намеренно минимален, без webpack и node_modules:
| Слой | Технология |
|---|---|
| Устройство | POCO C55, Android |
| Клиент | один index.html, vanilla JS |
| Auth и данные | Supabase Auth + Postgres с RLS |
| AI online | Groq API, streaming, fallback по списку моделей |
| AI offline | OFFLINE SENSEI — keyword-router, не облако |
| Хостинг | Netlify, деплой «перетаскиванием zip» |
Предыдущая публикация автора обещала open source на 2 088 подписчиков, но код не выложен: из соображений безопасности детей на DOJO FEED и «шрамов» кодовой базы; углублённый разбор — продолжение по комментарию, а не релиз репозитория.
Для ру-соло без отдельного DevOps это читаемый эталон: production-агент по коду не обязан начинаться с monorepo. Сначала закон в базе, цепочка моделей с офлайн-запасом, UI, который не сдаётся badge хостинга. Semantic caching, referral graph и belt/XP автор обещает только «если Artur попросит» — в тексте их нет.
Проверьте свой ментор на той же тройке: RLS на диалогах, fallback при отказе API, клиент, который переживает чужой overlay.
Источники
- I'm 12. A dev asked me to expand my architecture — schema, RLS, fallback, z-index — доступ 2026-09-02
- I'm 12. FULL architecture (high-level, Sep 1) — доступ 2026-09-02