Fields & Floors Collectors
Search every numbered sports card on eBay by print run, autograph, rookie status and price, then save searches and get an email when a new card lists.
Translation pending
Що почитати далі: книжки з оцінками й нотатками читачів і новинки українських видавництв.
Translation pending
CommerceJavaScript · CSSGitHub @imaxOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Kindle-style reader with in-context Claude explanations plus a dedicated web space for book lovers in Ukraine.
Taken from the repository README
Loading the full README.
Read the full README ↗Читалка книжок у стилі Kindle, яка пояснює виділений текст за допомогою Claude прямо під час читання.
Виділяєш слово, фразу чи абзац, натискаєш «Пояснити», і пояснення з'являється саме в контексті цієї книжки. Модель бачить виділений фрагмент, кілька абзаців до і після, назву книжки й розділу.
Chytai має дві рівноправні версії з одним інтерфейсом:
app/, Expo): та сама веб-читалка в нативній оболонці, ставиться через TestFlight, оновлюється без ревʼю Apple. Як це влаштовано і як зібрати: app/README.md.Сервер server/index.js віддає інтерфейс із src/renderer/ і невеликий API, а src/renderer/web-bridge.js замінює місток Electron на HTTP-запити. Ключ Claude API лежить лише на сервері; телефон його ніколи не бачить. Бібліотека спільна для всієї родини, а позиції й налаштування в кожного свої (вхід за ім'ям і спільним паролем).
На iPhone відкрий адресу в Safari, увійди і додай на екран «Додому» (Поділитися → На Початковий екран), і далі Chytai відкривається як застосунок.
Як читати на телефоні:
state.json, файл не змінюється; «Як у файлі» повертає метадані з файлу) і видалити книжку з підтвердженням. Видалення прибирає файл для всіх разом із позиціями читання в ній.Посилання /demo (є також на сторінці входу) відкриває читалку без пароля: одна демо-книжка, без завантажень і видалень, із денним лімітом пояснень, щоб ключ Claude не можна було вичерпати. Позиції та налаштування гостя живуть лише в пам'яті сервера.
demo/. Будь-який EPUB/PDF у /data/demo на томі має пріоритет над вбудованим.GUEST_EXPLAIN_LIMIT пояснень на гостя за день (типово 15), GUEST_EXPLAIN_TOTAL на всіх гостей (типово 300); GUEST_MODE=off вимикає демо зовсім.Сторінка /admin (кнопка «Статистика» в налаштуваннях) показує, хто читає, скільки книжок у бібліотеці і скільки пояснень використано: сьогодні, за тиждень, усього, по днях і по моделях, із приблизною вартістю за тарифами API. Лічильники живуть у state.json (stats), гості на сторінку не потрапляють. День рахується за STATS_TZ (типово Europe/Kyiv).
cp .env.example .env # ANTHROPIC_API_KEY, READER_PASSWORD, READER_SECRET
npm install
npm run web # http://localhost:8080
Застосунок описано у fly.toml (книжки й позиції лежать на томі /data):
fly launch --copy-config --no-deploy # один раз
fly secrets set ANTHROPIC_API_KEY=… READER_PASSWORD=… READER_SECRET=…
fly deploy
node scripts/upload-books.mjs https://chytai.fly.dev "~/Library/Mobile Documents/com~apple~CloudDocs/Books"
Машина засинає, коли нею ніхто не користується, і прокидається на перший запит за кілька секунд.
Щоночі о 03:30 за Києвом .github/workflows/backup.yml знімає копію томів /data обох застосунків (chytai-web: база сайту; chytai: позиції, нотатки, книжки), перевіряє її, шифрує ключем age і зберігає як артефакт запуску на 90 днів. Друга копія: щоденні знімки томів у самому Fly (зберігаються 30 днів).
Приватний ключ у репозиторій не потрапляє: він лежить у ~/Projects/chytai/.backup-key на Маку Макса і в файлах проєкту (chytai-backup/backup-key.txt). Без нього копії не розшифрувати.
Відновлення (наприклад, бази сайту):
# 1. завантажити артефакт chytai-web-РРРР-ММ-ДД з GitHub Actions → Backup і розпакувати zip
age -d -i ~/Projects/chytai/.backup-key chytai-web-РРРР-ММ-ДД.tar.gz.age > backup.tar.gz
mkdir restore && tar xzf backup.tar.gz -C restore # restore/web/chytai.db
# 2. залити на том (машина має працювати) і перезапустити
fly ssh sftp shell -a chytai-web # put restore/web/chytai.db /data/web/chytai.db.new
fly ssh console -a chytai-web -C "sh -c 'cd /data/web && rm -f chytai.db-wal chytai.db-shm && mv chytai.db.new chytai.db'"
fly machine restart -a chytai-web
Або зі знімка Fly: fly volumes snapshots list <vol> і fly volumes create web_data --snapshot-id <id> -a chytai-web.
Тим самим запуском робиться копія бази сайту для тестів: справжні емейли замінено на <id читача>@test.invalid, сесії, коди входу, токени MCP і секрети з meta вирізано (scripts/test-db-scrub.py). Вона зашифрована тим самим ключем і лежить файлом у релізі test-db, щоночі новий. Узяти її в data/web/ (стара база збережеться поруч як chytai.db.bak-…):
scripts/fetch-test-db.sh
Увійти можна будь-яким читачем кодом з емейлу: без RESEND_API_KEY код пишеться в лог сервера.
Потрібен Node.js 20 або новіший (brew install node, якщо його ще немає).
npm install
npm start
Ключ Claude API можна покласти у файл .env поруч із package.json (рядок ANTHROPIC_API_KEY=sk-ant-…) або вставити в налаштуваннях (⌘,), де він шифрується через Keychain macOS. Ключ із налаштувань має пріоритет. Створити ключ можна на https://platform.claude.com, розділ API Keys.
Збірка .app:
npm run dist
Готовий .dmg з'явиться в dist/. Застосунок не підписаний, тож перший раз відкривай його через правий клік → «Відкрити».
Пояснення робить одна модель, за замовчуванням claude-opus-5-5 з effort low. У налаштуваннях можна вибрати claude-sonnet-5-5 або claude-haiku-5-5 (найдешевша). Для Opus і Sonnet увімкнено серверний fallback (fallbacks: "default"): якщо модель відмовиться відповідати на фрагмент, запит автоматично повториться на іншій моделі.
EPUB і PDF відкриваються напряму. У PDF текст виділяється так само, а як контекст береться текст поточної сторінки й сусідніх. Скановані PDF без текстового шару пояснювати не вийде, бо там немає тексту для виділення. У десктопній версії MOBI, AZW, AZW3, FB2, DOCX, RTF, TXT та інші читалка сама конвертує в EPUB через Calibre, якщо він встановлений (brew install --cask calibre або calibre-ebook.com). Конвертована копія кешується, тож вдруге книжка відкривається одразу.
Книжки, куплені в Kindle Store, зазвичай захищені DRM. Calibre такі файли не конвертує, і читалка покаже про це повідомлення. Книжки без DRM (наприклад, з Gutenberg чи Standard Ebooks, або ті, де видавець вимкнув DRM) працюють.
server/index.js — веб-сервер: вхід, бібліотека, позиції й налаштування кожного читача, запити до Claude.src/renderer/web-bridge.js — місток веб-версії замість Electron.src/renderer/ — спільний інтерфейс: renderer.js (читалка на epub.js і панель пояснень), context.js (вибирає текст навколо виділення), library-view.js (бібліотека), pdf-view.js і pdf-reflow.js (PDF), search.js, style.css (включно з мобільною версткою).src/main.js, src/preload.js — головний процес Electron і місток для десктопу.src/ai.js — запит до Claude API (промпт, модель, стрімінг).src/library.js — сканування папок і метадані книжок.src/convert.js — конвертація не-EPUB форматів через ebook-convert з Calibre.scripts/upload-books.mjs — завантаження книжок із папки до веб-бібліотеки.scripts/move-to-chytai.sh — разовий переїзд зі старого Fly-застосунку ai-reader-max на chytai.build/icon.svg, build/icon.png — іконка.