Inspiration
Paul recently bought a Humble Bundle full of O'Rielly books that had audio transcriptions. They would play the books during commutes to gain insight on how to build larger systems. However, it was hard to retain knowledge after arriving to a study point. They wanted a way to recall systems easier, so they decided to build Nova.
What it does
Nova is a voice-guided reading app. Users log in, listen to EPUBs, and say “Hey Nova” to pause, navigate, highlight, or note passages. Gemini interprets smart commands on-device/frontend. Backend stores users/books/notes/highlights and manages EPUB/profile uploads via S3.
How we built it
Main language: Typescript
Frontend:
Package manager: Deno Frontend library: React Native Build tool: Vite Language: TypeScript / TSX Styling: CSS, Tailwind CSS Data fetching: TanStack React Query Validation: Zod
Backend:
- Package manager: Deno
- Web framework: Hono
- Authorization: auth0
- Validation: Zod
- ORM: MikroOrm
- Database: PostgresSql TigerData
- Object Storage Server: RustSF S3
- Containerization: Docker
- Development Environment: Nix
- Cloud: DigitalOcean Droplets
Challenges we ran into
Frontend: Getting "Hey Nova" to work while the narrator is talking was difficult, since the phone's microphone hears the book too. iOS also limits the microphone when the app is in the background, so only one voice command works outside the app for now. Running on a real iPhone brought issues the simulator never showed, like crashes from missing permissions and uploads that the new Expo networking rejected.
Backend: Initialization of all libraries were difficult to implement.
Accomplishments that we're proud of
Frontend: We are proud that Nova can be controlled completely by voice on a real iPhone, including from the lock screen. Any EPUB can be added from the phone, converted with its cover in under a second, and read aloud offline.
Backend: We are proud to finish the main MVP within time to spare.
What we learned
Frontend: Testing on a real device early matters, because many of our hardest bugs only showed up on the iPhone. We also learned how iOS handles audio, microphone access, and privacy, and how much those rules shape the app's design.
Backend: Better ways to create domain based software, cohesion between different libraries, saving and deploying more things to the cloud, more practice with generic usage between libraries.
What's next for Dodo
Create a social network based around where users can rate books and leave reviews. Install relational graphs for users that want to follow authors. Integrate a cache such as Valkey into the system.
Built With
- auth0
- deno
- digitalocean
- docker
- hono
- mikroorm
- nix
- postgresql
- react-native
- rustsf
- tailwind
- tanstack
- typescript
- vite
- zod
Log in or sign up for Devpost to join the conversation.