Skip to content

PaperPit/kar-dots

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

КАР-точки — self-hosted PWA с карточками и интервальным повторением

CI Deploy MIT TypeScript PWA Stars

Живое демо · Полная инструкция · Деплой за вечер · Roadmap · Участие · English

КАР-точки = ворона + карточки. Не сервис с подпиской, а репозиторий, который вы хостите сами — как личная Anki в браузере.

Разворачиваете свой инстанс на Cloudflare Pages, раздаёте ссылку друзьям — у каждого своя приватная коллекция. Внутри: FSRS, SM-2 и коробки Лейтнера, шесть режимов повторения, импорт карточек из YouTube, журнал повторений со статистикой и офлайн-PWA. TypeScript → vanilla JS: без фреймворка и без бандлера в разработке.


Для кого этот проект

КАР-точки — self-hosted open source для тех, кто хочет:

  • учить слова и термины без чужого SaaS и без установки десктоп-приложения;
  • развернуть на Cloudflare Pages (рекомендуется) или другом HTTPS-хостинге;
  • дать ссылку друзьям — каждый регистрируется на вашем инстансе и получает отдельную коллекцию;
  • при желании форкнуть и допилить под свой сценарий (MIT).

Это не коммерческий SaaS. Рекомендуем свой деплой на Cloudflare Pages и свой проект Supabase — тогда данные и инстанс полностью ваши.

Сценарий Что нужно Sync между устройствами
Только я, локально npm install && npm run dev Нет (данные в браузере)
Я + телефон, без сервера БД Cloudflare Pages + PWA, режим «без регистрации» + экспорт JSON Вручную через бэкап
Я + друзья, с аккаунтами Cloudflare Pages + ваш Supabase Да, у каждого свой аккаунт

Ищем идеи по развитию — если форкаете или разворачиваете, расскажите, чего не хватает: feature request или ROADMAP.md.


Возможности

Карточки и контент

  • Лицо / оборот с определением и описанием, rich-text (жирный, ссылка, подсветка)
  • Картинки на любой стороне, drag-and-drop; поиск стоковых фото и GIF (Openverse, Pixabay, Giphy)
  • Просмотр карточки перед сохранением (flip-превью в редакторе)
  • Папки с цветами и иконками, коробки для групп папок; перетаскивание папок в коробку и обратно
  • Массовый импорт (слово — перевод), автоперевод RU↔EN, экспорт/импорт JSON
  • Карточки из YouTube — субтитры + LLM (Gemini / Groq), см. docs/youtube-import-setup.md
  • Chrome-расширение — кнопка на YouTube → Side Panel без копирования ссылки, см. docs/chrome-extension.md
  • Готовые паки слов в packs/

Повторение (SRS)

  • Алгоритмы: SM-2, FSRS (желаемое удержание + fuzz), коробки Лейтнера
  • Режимы: классика, ввод ответа, пропуски (cloze), голос, пары, микс
  • Лимит новых и повторений в день, направление лицо↔оборот, календарь активности
  • Журнал повторений и экран статистики: удержание, повторения за 30 дней, прогноз нагрузки, разбивка по папкам
  • Озвучка: Web Speech API и опционально Orpheus TTS (Groq)

Платформа

  • Self-hosted на Cloudflare Pages (статика dist/ + Functions /api/*)
  • PWA: офлайн-кэш, установка на iOS/Android
  • Локальный режим (IndexedDB) и облако (ваш Supabase)
  • Светлая / тёмная тема; клавиатура и свайпы на review

Как это работает Путь карточки: новая → учится → повторение → журнал повторений → экран статистики

Каждая оценка пишется в журнал повторений (отдельная IndexedDB, при облачном режиме — синхронизация в ваш Supabase). Из журнала строится экран статистики: фактическое удержание, активность за 30 дней, прогноз нагрузки на 14 дней вперёд и разбивка по папкам. Журнал можно выгрузить в CSV для оптимизатора весов FSRS.


Быстрый старт
git clone https://github.com/PaperPit/kar-dots.git
cd kar-dots
npm install
npm run dev          # http://localhost:8080 — dev-сервер + API
npm run pages:dev    # эмуляция прод-сборки Cloudflare
npm test             # Vitest

Минимальный деплой: форк или клон → деплой на Cloudflare Pages (GitHub Action уже в репозитории) → раздать ссылку вида https://ваше-имя.pages.dev(опционально) подключить Supabase, чтобы у каждого был свой аккаунт.

Цель Куда идти
Развернуть и пользоваться docs/USER-GUIDE.md
Посмотреть UI локально npm installnpm run devhttp://localhost:8080
Деплой Cloudflare docs/cloudflare-pages-setup.md
Админ: Functions, миграции docs/DEPLOY.md
Править код CLAUDE.md

Важно: API-ключи YouTube / Gemini / Groq — ваши, в настройках приложения или в env на хостинге. Maintainer не предоставляет общий бэкенд для чужих инстансов.


Скриншоты
Главная — коробки, drag-and-drop Папка и карточки Режимы повторения Настройки SRS
Главная Папка Режимы Настройки

Стек и структура
Слой Технологии
UI HTML, CSS, TypeScript → vanilla JS (ES modules)
Dev tsc на место, без bundler (npm run dev)
Prod npm run build:bundle (esbuild → dist/)
Анимации Motion (vendor bundle)
Локальные данные IndexedDB
Облако Supabase (Auth, Postgres, Storage)
SRS SM-2, FSRS (ts-fsrs), Leitner
Serverless Cloudflare Pages Functions (functions/api/) + Workers KV
Деплой Cloudflare Pages + GitHub Action на main
Тесты Vitest + happy-dom
index.html              — точка входа PWA (dev)
js/**/*.ts              — исходники (компилируются в js/**/*.js)
js/screens/             — экраны (home, review, settings, stats, …)
functions/api/          — Cloudflare Pages Functions (YouTube, LLM, TTS, stock)
wrangler.toml           — Pages + KV YT_JOBS
dist/                   — прод-сборка (esbuild)
supabase/migrations/    — схема БД
.github/workflows/      — CI + deploy на Cloudflare Pages
tests/                  — unit-тесты

Деплой и облако
Задача Документ
Пошагово: деплой, ПК, телефон, друзья docs/USER-GUIDE.md
Cloudflare Pages (основной хостинг) docs/cloudflare-pages-setup.md
Functions, миграции SQL, troubleshooting docs/DEPLOY.md
YouTube-импорт (API-ключи) docs/youtube-import-setup.md
Chrome-расширение docs/chrome-extension.md
iOS / Xcode (нативная оболочка) docs/IOS.md

Участие и лицензия

Лицензия — MIT: разворачивайте для себя, форкайте, делитесь с друзьями, предлагайте улучшения в upstream.

Теги и поисковые запросы — по каким словам этот проект стоит находить

Topics репозитория (20/20): flashcards · spaced-repetition · fsrs · sm-2 · leitner-system · pwa · vanilla-js · self-hosted · language-learning · vocabulary · education · memorization · active-recall · cloze-deletion · youtube · offline-first · indexeddb · supabase · open-source · anki-alternative

Запрос Почему подходит
карточки для запоминания, флешкарты PWA для слов и терминов
интервальное повторение, SRS SM-2, FSRS, Лейтнер
альтернатива Anki / Quizlet веб, без установки, open source
изучение английского, vocabulary app паки, перевод, TTS, YouTube-импорт
cloze / пропуски в словах режим «Пропуски»
карточки из YouTube импорт по субтитрам + LLM
PWA офлайн service worker, локальный режим
self-hosted flashcards форк + Cloudflare Pages
личные карточки для друзей, не SaaS свой инстанс + опционально Supabase

English

KAR-dots is a self-hosted, open-source flashcard PWA. Live demo: kar-tochki.pages.dev. Deploy on Cloudflare Pages (recommended) — share the link; each person gets a private collection (optional Supabase). Not a commercial SaaS.

Features: SM-2, FSRS, Leitner; typing, cloze, voice and matching modes; YouTube import; stock images; daily review budget; review log and stats screen; light/dark theme; offline PWA. TypeScript → vanilla JS, MIT license.

See docs/cloudflare-pages-setup.md and docs/DEPLOY.md. Ideas: CONTRIBUTING.md, ROADMAP.md.


⭐ Star на GitHub помогает другим найти self-hosted альтернативу для карточек.
Развернули свой инстанс? Расскажите в Issues — интересно, как вы используете.

Releases

Packages

Contributors

Languages