Моята библиотека (Books)

PHP Laravel 13 MySQL Tailwind Claude API Socialite

Личен читателски дневник на Laravel: търсене в Google Books и Читанка едновременно, рафтове „Чета / Прочетени / За четене“ с рейтинг и бележки, вграден четец за безплатните български книги от Читанка и AI препоръки от Claude според прочетеното и оценките. Вход с имейл/парола или с Google.

README: Laravel 13, PHP 8.3, MySQL, Breeze (Blade) + Tailwind, Socialite (Google), Claude API през database queue; Google Books + Читанка търсене, рафтове, четец, препоръки; тестове с Http::fake() и in-memory SQLite.

Проблем / контекст
Книгите, които чета, оценявам и искам да прочета, бяха разпилени между приложения и сайтове, а безплатните български книги от Читанка нямаха връзка с Google Books и с личен списък.
Моята роля
Цялостно: Laravel 13 приложение с Breeze + Tailwind, клиенти за Google Books и Читанка (HTTP client + кеш), рафтове през pivot таблица със статус/рейтинг/бележки, страничен четец за текстове от Читанка, вход с Google (Socialite), queued job за препоръки през официалния Anthropic PHP SDK, rate limiting и feature тестове.
Предизвикателство
Два външни източника с различни данни и лимити (Читанка ограничава клиентите), сдвояване на Google Books запис с издание в Читанка, и AI препоръки, които не блокират страницата и не предлагат вече прочетени книги.
Подход / решение
Отделни Service класове за GoogleBooks, Chitanka и Claude с 24-часов кеш — грешка в единия източник не чупи страницата. Пълните текстове от Читанка се теглят веднъж, пазят се на диска и се странират оттам. GenerateRecommendations job иска структуриран JSON от Claude, маха книгите от рафтовете и сменя старите препоръки в транзакция; таблото poll-ва, докато job-ът върви.
Табло — AI препоръки от Claude според прочетените книги и оценките
Табло — AI препоръки от Claude според прочетените книги и оценките
Търсене — Читанка (четене онлайн, FB2/EPUB/TXT) и Google Books един до друг
Търсене — Читанка (четене онлайн, FB2/EPUB/TXT) и Google Books един до друг
Моите книги — табове по статус, рейтинг и бележки
Моите книги — табове по статус, рейтинг и бележки