Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README

Welcome to Bookworm!

Bookworm is a personal book tracking app I built to manage my reading life. Track what you've read, maintain a want-to-read list, and discover new books with AI powered recommendations. Filter by genre, author, or what you've enjoyed—and let the app suggest your next read.

Table of Contents

Screenshots

Description

  • 100% SwiftUI
  • MVVM architecture with feature based organization (Library, Want to Read, Browse, Settings)
  • SwiftData for local persistence—your library stays on device
  • AI powered recommendations via OpenAI (GPT) based on books you've read or authors you love
  • Google Books API for book metadata, covers, and details
  • Genre filtering (Fantasy, Horror, Kids, Mystery, Poetry, Romance, Thriller) for tailored suggestions
  • Custom rating system with emoji and star views
  • Animated gradients and letter rain style loading animation
  • Playfair Display custom typography
  • Light and dark mode support
  • Swipe actions to move books between library and want-to-read

Frameworks

  • SwiftUI
  • SwiftData
  • OpenAI API (GPT 3.5) for recommendations
  • Google Books API
  • SDWebImageSwiftUI (async image loading)
  • AnimatedGradient
  • SwiftyJSON
  • Swift Package Manager

What I Learned

Bookworm started as a way to learn SwiftUI and SwiftData while solving a real problem: I kept forgetting what I wanted to read and had no good way to get personalized recommendations. Paper lists and generic "best of" lists weren't cutting it.

The biggest challenge was wiring up the AI recommendation flow. I needed GPT to return ISBNs so I could fetch full book details from the Google Books API. Getting the prompt right—returning only ISBNs, no extra text, handling edge cases like missing authors or genres—took a lot of iteration. The filter system (genre, subgenre, publication year) adds another layer so recommendations stay relevant.

I also learned a lot about SwiftData and the @Model / @Query patterns. Keeping the library and want-to-read lists in sync with predicates and model updates was a good exercise in reactive data flow.

Accomplishments

  • AI driven book discovery based on your reading history
  • Full library management with ratings, notes, and metadata
  • Want-to-read list with seamless move-to-library flow
  • Genre and filter based recommendation refinement
  • Built independently

Architecture

The project is organized by feature:

  • Main/ — App entry point, tab navigation, launch screen
  • Library/ — Read books, add/edit/delete, ratings, search
  • Want To Read/ — TBR list, add from browse, move to library
  • AI New Book/ — Browse tab: filters, OpenAI prompts, Google Books lookup, recommendation cards
  • Settings/ — Theme toggle, delete data, privacy policy, terms of service
  • Models/Book (SwiftData), Recommendation, NewBook
  • ViewModels/ — One per major view (Library, Filter, AddBook, etc.)
  • Misc/ — Colors, fonts, blur effects, shared utilities

How To Use

  1. Clone the repo
  2. Open Bookworm.xcodeproj in Xcode
  3. Add Secrets.swift with your API keys (see .gitignore—this file is not committed):
    • apiKey — OpenAI API key for recommendations
    • bookAPIKey — Google Books API key
  4. Build and run on a device or simulator

Available on the App Store

Acknowledgements

Contributors

Languages