Follow creators, not algorithms.
A lightweight YouTube subscription feed built with React Native and Expo.
Loom helps users follow their favorite YouTube channels without the distractions of the standard YouTube homepage. Instead of algorithmic recommendations, Shorts, trending videos, and endless scrolling, Loom creates a clean chronological feed from channels you choose.
Loom aggregates recent videos from the channels you choose into a single feed and provides filtering tools to help you find the content you actually want to watch.
- No login required, your data stays on your device
- Add YouTube channels you want to watch
- Unified feed from all added channels
- In-app video playback
- Duration filtering
- Channel filtering
- Auto feed refresh and Pull-to-refresh
- Feed caching to reduce API usage
- Light and dark themes
- Local storage
I wanted a simpler way to follow YouTube creators without constantly being pulled into recommendations, Shorts, and other distractions.
The app also stops you from scrolling infinitely looking for something to watch by giving you filtering options.
The goal of this project is to create a focused viewing experience where users control what appears in their feed rather than relying on recommendation algorithms.
This project also serves as a learning experience for React Native, Expo, API integration, caching strategies, mobile UI design, and application architecture.
- Node.js
- npm
- Expo CLI
- Android Studio or a physical Android device
- YouTube Data API v3 Key
Clone the repository:
git clone https://github.com/crazysamurai/loom.git
cd loomInstall dependencies:
npm installCreate a YouTube Data API key and configure it in the project.
Start the development server:
npx expo startRun on Android:
npx expo run:androidRequires Android version 7+
Navigate to the Channels tab and add channels you want to follow using channel handles. You can find a channel's handle on the its page on YouTube. It looks like @ChannelHandle. Currently the number of channels you can add is intentionally limited to 12 to stop the user from adding unlimited channels and running into the same problem as they did on YouTube.
The Feed tab displays videos from all subscribed channels sorted by publish date. After adding a new channel, refresh the feed page manually to fetch videos.
Use the duration slider and channel filters to narrow down the feed. The video duration filter is limited to maximum 90 minutes which is done intentionally right now to stop user from spending too much time but i might change it to infinite.
Tap any video to open the built-in player. All the recently updated videos from the same channel are also shown alongside. At the moment the app integrates YouTube's provided player so you may see ads and encounter some issues while watching videos in landscape mode. This will be resolved in upcoming updates.
Pull down on the feed to fetch the latest uploads. The feed refreshes every 15 minutes automatically.
Contributions are welcome.
- Fork the repository
- Create a feature branch
git checkout -b feature/my-feature- Commit your changes
git commit -m "Add my feature"- Push your branch
git push origin feature/my-feature- Open a Pull Request
Please open an issue before making large changes so we can discuss the proposed feature or improvement.
Planned features include:
- A dedicated settings page (in works)
- Export and import user data
- Watch history
- Advanced filtering options
- A fully native video player
- A custom notification system
This project is licensed under the MIT License.



