Skip to content

Repository files navigation

One Less

Минус один каждый день.

Сайт для тех, у кого в «сохранённых» лежат сотни рилсов, «посмотреть позже» и статей, которые никто никогда не откроет. One Less выбирает один из них в день и даёт 30 минут, чтобы разобрать. Не разгребать свалку неделями — снимать по одному.

khurshidddbek.github.io/one-less


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

  1. Свалка. Переносите в бэклог всё накопленное — вручную, списком ссылок или импортом официальных выгрузок.
  2. Ритуал. Раз в день барабан выбирает платформу, затем контент из неё. Выбор детерминирован датой: перезагрузка страницы ничего не меняет, «перекрутить» нельзя.
  3. 30 минут. Таймер идёт, остаток переживает перезагрузку. Разобрали — «минус один», день закрыт, серия растёт.

Всё. Никаких очков, уровней и уведомлений — один шаг в день.

Наполнение бэклога

Платформы не отдают «сохранённое» по API, поэтому автоподключения нет. Зато есть импорт их официальных выгрузок:

Источник Формат
Instagram 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 build

Структура

src/
  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 — решения по архитектуре и их причины

About

Минус один каждый день: разбираем накопленные «сохранёнки» по одной — Instagram, YouTube, Telegram

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages