Oto (音, meaning "sound" in Japanese) is a React Native mobile application built with Expo that allows users to explore, discover, and listen to anime opening and ending themes. Browse popular and trending anime, search for your favorites, and create custom playlists of anime themes.
- 🎌 Anime Discovery: Browse popular and trending anime from AniList
- 🔍 Search: Search for anime by title
- 🎵 Theme Playback: Listen to anime opening and ending themes
- 📝 Custom Playlists: Create and manage your own playlists of favorite themes
- 🎨 Beautiful UI: Modern, dark-themed interface with smooth animations
- 📱 Cross-Platform: Runs on Android, iOS, and web
- Framework: Expo with React Native
- Navigation: Expo Router (file-based routing)
- Styling: NativeWind (Tailwind CSS for React Native)
- State Management: Zustand
- APIs:
- AniList GraphQL API - Anime metadata and discovery
- AnimeThemes GraphQL API - Anime theme songs and videos
- UI Components: Custom components with React Native Reanimated and Gesture Handler
- Storage: AsyncStorage for local data persistence
- Node.js (v18 or newer)
- npm or yarn
- Expo CLI
- For Android development: Android Studio
- For iOS development: Xcode (macOS only)
-
Clone the repository
git clone https://github.com/LouisBassagal/oto.git cd oto -
Install dependencies
npm install
-
Start the development server
npm start
-
Run on your device
- Scan the QR code with Expo Go app (Android/iOS)
- Press
ato open Android emulator - Press
ito open iOS simulator - Press
wto open in web browser
npm start- Start the Expo development servernpm run android- Build and run on Androidnpm run ios- Build and run on iOSnpm run web- Run in web browsernpm run lint- Run ESLint
oto/
├── app/ # App screens (file-based routing)
│ ├── (tabs)/ # Tab navigation screens
│ │ ├── home.tsx # Home screen with popular/trending anime
│ │ ├── search.tsx # Search screen
│ │ └── lists.tsx # Playlists screen
│ ├── anime/[id].tsx # Anime details screen
│ ├── player.tsx # Theme player screen
│ └── index.tsx # Welcome screen
├── components/ # Reusable React components
├── services/ # API service classes
│ ├── anilist.ts # AniList API integration
│ └── animethemes.ts # AnimeThemes API integration
├── store/ # Zustand state management
│ ├── animeStore.ts # Anime data store
│ └── playlistStore.ts # Playlist management store
├── types/ # TypeScript type definitions
└── assets/ # Images and static assets
- Fetches popular and trending anime from AniList API
- Displays anime with cover images, titles, and descriptions
- Horizontal scrollable lists for easy browsing
- Integrates with AnimeThemes API to fetch anime opening/ending themes
- Video player for theme playback
- Displays theme information (song title, type, anime)
- Create custom playlists
- Add/remove themes to/from playlists
- Persistent storage using AsyncStorage
- Unique playlist IDs using UUID
- AniList - Anime data and metadata
- AnimeThemes - Anime theme songs and videos
- Expo - Amazing React Native framework
Louis Bassagal - GitHub
Made with ❤️ for anime fans