7 ms·
Audioscrape: Building in Rust When Everyone Said I Shouldn't
I'm excited to share my journey of bootstrapping Audioscrape, a podcast exploration platform, built entirely in Rust. Despite conventional wisdom suggesting RoR, Python, or TypeScript for rapid MVP development, I chose Rust to challenge myself technically and optimize for low operational costs. The result? A performant application running on a $7/month VM, demonstrating that you can launch lean and scale efficiently.
Why Rust for a Bootstrapped MVP?
Cost-Efficiency: Minimal resource usage translates to lower hosting costs, crucial for bootstrapping.
Performance: Efficient handling of audio processing and web serving, allowing for growth without immediate infrastructure scaling.
Learning Investment: Deepening expertise in a language with growing demand, potentially opening future opportunities.
Proving a Point: Demonstrating Rust's viability for rapid development in web applications.
Project Overview:
Audioscrape aggregates podcast RSS feeds, transcribes episodes, and provides an interactive interface for exploring and discussing podcast content. It's a full-stack Rust application, leveraging various crates from the ecosystem.
Technical Stack:
Backend: Axum (async web framework)
Database: SQLite with SQLx for type-safe queries
Authentication: OAuth2
Image Processing: For social media previews
HTML Templating: Askama
Async Runtime: Tokio
Development Approach:
4k LoC in a single main.rs file (plus HTML templates)
Rapid iteration using Neovim for navigation
Lean development: No external services beyond the VM
Key Features:
Transcription Browsing: Read along with your favorite podcasts or quickly scan for topics of interest.
Segment Highlighting: Share and discuss specific moments from episodes.
Community Interaction: Upvote, comment on, and bookmark your favorite segments.
Advanced Search: Find relevant content across multiple podcasts and episodes.
Person Profiles: Explore appearances of specific guests or hosts across different shows.
Challenges and Learnings:
Overcoming the learning curve of Rust's ownership model
Efficient transcriptions and speaker detection
Managing all aspects solo: Development, design, and operations
Future Plans:
API for third-party integrations
WebAssembly for client-side processing
Scaling strategies for larger datasets (search)
Personalized content delivery
Metrics and Goals:
Current Users: 500 (last 7 days)
MRR: $0
Cost per User: Less than $0.01 (thanks to efficient resource use)
Next Milestone: Add paid features to pay the bills + reduce cost per episode page creation
Questions for the HN Community:
Has anyone else bootstrapped using Rust? What were your experiences?
How do you balance technical debt vs. shipping features in a solo project?
What strategies have worked for you in marketing such technical products?
I'm bootstrapping this project and would greatly appreciate any feedback, especially from those who've launched similar technical products or used unconventional tech stacks for MVPs. Check out Audioscrape at www.audioscrape.com and let me know your thoughts!
- samier-trellis 2y ago> Learning Investment: Deepening expertise in a language with growing demand, potentially opening future opportunities. If it's just you, then that reason alone justifies it.
- lukaesch 2y agoYes, it's just me right now. I'm moonlighting after my day job and bringing my kid to bed.
- deleted 2y ago[deleted]
- aleksjess 2y ago4k loc in a single file must be brutal
- diggan 2y agoCan be, can also be just like using multiple files, especially since OP seems to be using neovim. Open a buffer per area and work away, just like using tabs/panes with multiple files. Personally I wouldn't do it either.
- lukaesch 2y agoThanks! I was inspired by levelsio's meme about having MVPs in a single index.php file. Traditionally, I've organized codebases into folders, but I started questioning its necessity. Folders often just add an extra layer to search through. It's basically a search param. With Neovim and strict naming conventions, I've found managing everything in one file works quite well. Keyboard navigation can make folders feel like a hassle in the vi context. This setup has been effective so far, though potential downsides might appear later on.
- samatman 2y agoMight want to check out Harpoon: https://github.com/ThePrimeagen/harpoon/tree/harpoon2 https://github.com/ThePrimeagen/harpoon/tree/harpoon2 No comment on your one-file approach one way or the other, but like all of us, you will need to deal with tree-shaped projects, I've found Harpoon to be a good solution for this. Global marks can only get you so far. Good luck with Audioscape btw.