Inspiration
We've all been there — a book sitting on the shelf, half-read, because you forgot to bring it on the commute. Or a favorite novel you'd love to revisit, but it's buried in a box somewhere. Physical books are irreplaceable, but they're not always convenient. Bookeyman was born from a simple frustration: why can't I read my own books wherever I am? Not a store-bought digital copy — my copy, with my annotations in mind, from my shelf. We wanted to bridge the gap between the physical and digital reading experience without asking people to buy their books twice.
What it does
Bookeyman lets you turn any physical book into a personal e-book in minutes. You photograph the pages with your phone camera, and the app uses Google Gemini AI (via Firebase Vertex AI) to extract, clean, and format the text — removing page numbers, running headers, fixing hyphenation, and preserving chapter headings automatically. The result is a clean, readable digital book stored on your device. You can read it in a fully customizable reader (font, size, line spacing, dark/light theme), track your reading progress, get daily reading reminders, and even import EPUB files directly if you already have a digital copy. A built-in wishlist powered by the Google Books API lets you keep track of what you want to read next.
How we built it
The app is built with Flutter, targeting both iOS and Android from a single codebase.
- Camera scanning — cunning_document_scanner handles real-time document detection and perspective correction before the image reaches the AI.
- AI processing — Each scanned page is sent to Gemini through Firebase Vertex AI with a carefully engineered prompt that instructs the model to act as an e-book formatter: extract body text, detect chapter headings, strip artifacts, and return clean output only.
- Local storage — Books and pages are stored locally with Hive, keeping the reading experience fast and fully offline after processing.
- Backend — Firebase (Auth, Firestore, Remote Config) handles anonymous user sync, credit balance persistence across devices, and remote model configuration so we can swap AI models without a release.
- Monetization — RevenueCat manages Pro subscriptions and AI credit packs across both platforms.
- Analytics — Firebase Analytics tracks key user actions (books added, completed, credits used, purchases) with user properties for Pro status and library size.
Challenges we ran into
The single hardest part of building Bookeyman was the character animation. The app features a fully custom animated character that guides users through the experience. Every frame of that character was hand-drawn in Affinity Designer — each body part, each expression, each prop — then rigged, weighted, and animated state by state inside Spine 2D. Walking, reading, celebrating, scanning — each animation was built from scratch as a separate Spine skeleton and integrated into Flutter
via spine_flutter.
Accomplishments that we're proud of
- The AI formatter reliably produces clean, readable text from real-world book scans — including handling chapter titles, hyphenated words, and scanning artifacts.
- The end-to-end experience — scan → AI process → read — works in just a few minutes per book.
- A fully polished reader experience with font choices, themes, and reading progress that feels native on both platforms.
- Supporting 10 languages out of the box, making the app accessible to a global audience.
- EPUB import as a fallback for users who already have digital copies but want them in the same unified reading environment.
What we learned
Prompt engineering is a real discipline. The difference between a prompt that produces garbage and one that produces publication-quality output is often a single well-placed constraint. We learned to think of the AI as a contractor that needs precise, unambiguous instructions — not a magic box.
What's next for Bookeyman
- Highlights and notes — let users annotate their personal e-books just like they would with a pen in the physical version.
- Reading statistics — pages per day, reading streaks, books per month, all visualized.
Built With
- affinity
- dart
- flutter
- revenuecat
- spine

Log in or sign up for Devpost to join the conversation.