A personal book library app built with React Native and Expo. Search the Open Library catalog, add books to your collection, rate them, and track your reading progress.
- Personal Library — Add books manually or from Open Library search results
- Open Library Search — Search millions of books via the Open Library API with infinite scrolling
- Star Ratings — Rate books from 1 to 5 stars
- Reading Tracker — Mark books as read/unread
- Cover Images — Pick cover images from your device gallery
- Export / Import — Back up your library to a file and restore it on another device
- Internationalization — English and Portuguese (auto-detects device language, persists choice)
- Dark Mode — Toggle between light and dark themes
| Layer | Technology |
|---|---|
| Framework | Expo SDK 55 / React Native 0.83 |
| Navigation | Expo Router (file-based) |
| Database | Drizzle ORM + expo-sqlite |
| UI Components | Gluestack UI |
| Styling | NativeWind (Tailwind CSS for RN) |
| i18n | i18n-js + expo-localization |
| Icons | Lucide |
| Storage | AsyncStorage (settings), expo-file-system (export/import) |
# Clone the repo
git clone https://github.com/Alesc0/MyBookShelf.git
cd MyBookShelf
# Install dependencies
bun install
# Start the dev server
bun expo startScan the QR code with Expo Go or press a for Android / i for iOS.
app/ # Expo Router pages
_layout.tsx # Root layout (providers)
index.tsx # Home — book grid
search.tsx # Search with infinite scroll
add-book.tsx # Manual book entry form
settings.tsx # Settings (theme, language, data)
book/[id].tsx # Local book detail
ol-book.tsx # Open Library book detail
components/ # Reusable components
ui/ # Gluestack UI primitives
BookCard.tsx # Book card dispatcher
BookGrid.tsx # Grid layout for books
SearchBar.tsx # Search input with navigation
SettingsContext.tsx # App settings provider
db/ # Database layer
schema.ts # Drizzle table definitions
books.ts # CRUD operations
export.ts # Export/import database
DrizzleProvider.tsx # DB + migration provider
i18n/ # Translations
en.json # English
pt.json # Portuguese
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Auto-increment primary key |
title |
TEXT | Book title (required) |
author |
TEXT | Author name (required) |
coverUri |
TEXT | Local URI to cover image |
isRead |
INTEGER | 0 = unread, 1 = read |
rating |
INTEGER | 0–5 star rating |
The project includes a GitHub Actions workflow (.github/workflows/main.yml) that builds an unsigned iOS IPA on demand via workflow_dispatch.
MIT