Audioscrape: Launching an MVP on a $7/month VM - Building in Rust When Everyone Said I Shouldn't
Hello, fellow Rustaceans!
I'm excited to share my journey of building Audioscrape, a podcast exploration platform, entirely in Rust. Despite the common wisdom of using Python or TypeScript for rapid MVP development, I chose Rust to level up my skills and keep hosting costs low. The result? A performant application running smoothly on a $7/month VM, or as we say in German, "schnurrt wie eine Katze" (purrs like a cat).
Why Rust for an MVP?
- Skill Development: Deepening my Rust expertise
- Cost-Efficiency: Low resource usage means cheaper hosting
- Performance: Handling audio processing and web serving efficiently
- Learning Experience: Proving Rust's viability for rapid development
Project Overview:
Audioscrape aggregates podcast RSS feeds, transcribes episodes, and provides an interactive interface for exploring and discussing podcast content. It's built with a Rust backend using Axum, SQLx, and various other crates from the Rust ecosystem.
Technical Highlights:
- Backend Framework: Axum for efficient, async request handling
- Database: SQLx with SQLite for type-safe queries
- RSS Parsing: Custom implementation
- Authentication: OAuth2 integration
- Social Media Preview Image Processing: Using
imageandimageproccrates - HTML Templating: Askama for type-safe, compile-time checked templates
- Error Handling: Custom types with
thiserror - Async Runtime: Powered by Tokio
Development Approach:
- 4k LoC in a single
main.rsfile (plus Askama HTML templates) - Clear naming structure for easy navigation (using Neovim)
- Rapid iteration despite Rust's reputation for slower development
Key Features:
- Podcast and episode management
- Transcription storage and retrieval
- User authentication and session management
- Comment system with nested replies
- Voting and bookmarking functionality
- Advanced search capabilities
- Dynamic social preview image generation
Rust-Specific Challenges and Solutions:
- Custom
FromRequesttraits for type-safe request parsing - Leveraging Rust's type system for complex database interactions
- Efficient memory management in audio processing
- Comprehensive error handling with custom types
Future Plans:
- Implement an API for third-party integrations - happy to see others building on top of it
- Explore WebAssembly for client-side audio processing / transcription / diarization
- Optimize for larger datasets (especially for the search feature)
- Email digest / personalised podcast compilations for users
I'd love to hear your thoughts on this approach. Has anyone else built web MVPs in Rust? How was your experience with iteration speed and deployment?
Check out Audioscrape at www.audioscrape.com and let me know what you think!