Минус один каждый день.
Сайт для тех, у кого в «сохранённых» лежат сотни рилсов, «посмотреть позже» и статей, которые никто никогда не откроет. One Less выбирает один из них в день и даёт 30 минут, чтобы разобрать. Не разгребать свалку неделями — снимать по одному.
→ khurshidddbek.github.io/one-less
- Свалка. Переносите в бэклог всё накопленное — вручную, списком ссылок или импортом официальных выгрузок.
- Ритуал. Раз в день барабан выбирает платформу, затем контент из неё. Выбор детерминирован датой: перезагрузка страницы ничего не меняет, «перекрутить» нельзя.
- 30 минут. Таймер идёт, остаток переживает перезагрузку. Разобрали — «минус один», день закрыт, серия растёт.
Всё. Никаких очков, уровней и уведомлений — один шаг в день.
Платформы не отдают «сохранённое» по API, поэтому автоподключения нет. Зато есть импорт их официальных выгрузок:
| Источник | Формат |
|---|---|
saved_posts.html / .json — подписи становятся названиями |
|
| Telegram | result.json из Saved Messages |
| YouTube | CSV плейлистов из Takeout, имена папок восстанавливаются из индекса |
| Что угодно | режим «Списком» — платформа определяется по домену ссылки |
Дубли по ссылке пропускаются.
Работает целиком на бесплатных тарифах:
| Роль | Сервис |
|---|---|
| Фронтенд | React 19 + TypeScript + Vite, Tailwind v4, framer-motion |
| Хостинг | GitHub Pages |
| База и вход | Supabase — Postgres с Row Level Security, Google OAuth |
| Анти-пауза | UptimeRobot будит проект, чтобы Supabase его не усыпил |
- Без входа всё работает и хранится локально в браузере — можно попробовать, ничего не регистрируя.
- После входа данные уезжают в Supabase; накопленное гостем переносится автоматически.
- Каждый видит только свои строки — это проверяет сам Postgres через RLS, а не клиентский код.
npm install
npm run devПриложение поднимется на localhost:5173 в гостевом режиме. Чтобы включить вход,
создайте .env.local:
VITE_SUPABASE_URL=https://<project-ref>.supabase.co
VITE_SUPABASE_ANON_KEY=<anon key>
Схема базы — supabase/schema.sql, разовая настройка облака описана
в docs/SETUP.md.
npm test # vitest: диф, маппинг БД, миграция, локальное хранилище
npm run build # tsc + vite buildsrc/
store.tsx состояние и правила: выбор дня, серия, закрытие
StoreGate.tsx гость или облако, миграция при первом входе
auth.tsx Supabase Auth поверх Google
lib/repo.ts интерфейс хранилища + localStorage
lib/supabaseRepo облачное хранилище: точечная запись дифа
lib/importers.ts разбор выгрузок Instagram / Telegram / YouTube
views/ Сегодня · Бэклог · Прогресс
supabase/schema.sql таблицы, индексы, политики RLS
docs/ настройка, дизайн-система, спека и план
- docs/SETUP.md — настройка Supabase, Google OAuth, UptimeRobot
- DESIGN.md — токены, типографика, правила движения
- docs/superpowers/specs — решения по архитектуре и их причины