Threadist is a multi-platform app that crawls Reddit stories based on user interests and tells these interesting tales to users with amazing narrating voices using AI-powered text-to-speech.
- Spotify-like UI: Beautiful, modern interface inspired by Spotify's design
- Reddit Story Discovery: Browse and search stories from popular subreddits
- AI Narration: Convert Reddit stories to audio using ElevenLabs TTS
- Personalized Recommendations: Get story recommendations based on your interests
- Audio Player: Full-featured audio player with play/pause/stop controls
- User Authentication: Secure signup/login with Supabase
- Interest Management: Select and manage your story interests
- FastAPI: Modern Python web framework
- Supabase: Database and authentication
- ElevenLabs: AI text-to-speech
- Reddit API: Story content
- Redis: Caching and background tasks
- React Native: Cross-platform mobile app
- Expo: Development platform
- TypeScript: Type safety
- Expo AV: Audio playback
Before running this application, you'll need:
- Python 3.8+ for the backend
- Node.js 16+ for the frontend
- Expo CLI for React Native development
- Redis (optional, for caching)
# Supabase Configuration
SUPABASE_URL=your_supabase_url_here
SUPABASE_ANON_KEY=your_supabase_anon_key_here
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here
# ElevenLabs Configuration
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here
# Reddit API Configuration
REDDIT_CLIENT_ID=your_reddit_client_id_here
REDDIT_CLIENT_SECRET=your_reddit_client_secret_here
REDDIT_USER_AGENT=Threadist/1.0
# Redis Configuration (optional)
REDIS_URL=redis://localhost:6379
# Server Configuration
HOST=0.0.0.0
PORT=8000
DEBUG=True# Backend API URL (for development)
REACT_APP_API_URL=http://localhost:8000
# Supabase Configuration
EXPO_PUBLIC_SUPABASE_URL=your_supabase_url_here
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_heregit clone <repository-url>
cd threadistcd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create .env file with your environment variables
cp env.example .env
# Edit .env with your actual values
# Run the backend server
python run.pyThe backend will be available at http://localhost:8000
API documentation will be available at http://localhost:8000/docs
cd frontend
# Install dependencies
npm install
# Create .env file with your environment variables
cp env.example .env
# Edit .env with your actual values
# Start the development server
npm startMake sure your Supabase database has the required tables. The SQL schema is provided in the project description.
GET /api/reddit/search- Search for storiesGET /api/reddit/subreddit/{subreddit}/stories- Get stories from a subredditGET /api/reddit/subreddit/{subreddit}/info- Get subreddit informationGET /api/reddit/subreddits/search- Search for subreddits
GET /api/recommendations/stories- Get personalized recommendationsGET /api/recommendations/trending- Get trending stories
POST /api/tts/generate- Generate audio from textGET /api/tts/audio/{filename}- Get generated audio fileGET /api/tts/voices- Get available voices
GET /api/user/{user_id}/profile- Get user profileGET /api/user/{user_id}/interests- Get user interestsPOST /api/user/{user_id}/interests- Add user interestDELETE /api/user/{user_id}/interests/{csid}- Remove user interest
- Go to https://www.reddit.com/prefs/apps
- Create a new app
- Select "script" as the app type
- Note down the client ID and client secret
- Go to https://elevenlabs.io/
- Sign up for an account
- Go to your profile settings
- Copy your API key
- Go to https://supabase.com/
- Create a new project
- Go to Settings > API
- Copy the URL and anon key
cd backend
python run.pyThe server will run with hot reload enabled in debug mode.
cd frontend
npm startThis will start the Expo development server. You can:
- Press
wto open in web browser - Press
ato open in Android emulator - Press
ito open in iOS simulator - Scan the QR code with Expo Go app on your phone
threadist/
├── backend/
│ ├── services/
│ │ ├── reddit_service.py
│ │ ├── elevenlabs_service.py
│ │ ├── supabase_service.py
│ │ └── recommendation_service.py
│ ├── main.py
│ ├── config.py
│ ├── models.py
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── screens/
│ │ ├── services/
│ │ └── styles/
│ ├── App.tsx
│ └── package.json
├── helpful-code/
│ └── elevenlabs-example.ts
└── README.md
- Backend won't start: Check that all environment variables are set correctly
- Frontend can't connect to backend: Make sure the backend is running and the API URL is correct
- Audio not playing: Check that ElevenLabs API key is valid and you have sufficient credits
- Reddit API errors: Verify your Reddit API credentials and rate limits
Set DEBUG=True in your backend .env file to enable detailed logging.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
If you encounter any issues, please:
- Check the troubleshooting section
- Look at the API documentation at
http://localhost:8000/docs - Create an issue in the repository