Geli is a personal ranking app inspired by the Beli restaurant-rating experience. Search for any video game, book, movie, or TV show, rate it as Like, Neutral, or Dislike, then stack-rank it against your other picks through quick pairwise comparisons. Once you've ranked at least 10 items in a category, Geli automatically calculates a 1โ10 score for every title on your list.
| Feature | Description |
|---|---|
| ๐ฎ๐๐ฌ๐บ Multi-Media | Rank video games, books, movies, and TV shows โ each with their own standalone experience |
| ๐ Search | Search across IGDB (games), Open Library (books), and TMDB (movies & TV) |
| ๐๐ Tier Rating | Classify every item as Like, Neutral, or Dislike |
| โ๏ธ Pairwise Comparison | Binary-search-based comparison flow to precisely rank within tiers |
| ๐ Automatic Scoring | Once you hit 10+ items, scores from 1.0 โ 10.0 are calculated per tier |
| ๐๏ธ Remove Items | Remove any item from your rankings |
| ๐ Dark Glassmorphism UI | A sleek, modern dark-themed interface with per-media accent colors |
| ๐ Media Switcher | Click the Geli logo to switch between media types |
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.11+ | Tested on 3.11 via Conda |
| pip or Conda | any | For installing Python packages |
| Twitch/IGDB API Credentials | โ | Free (for games โ see below) |
| TMDB API Key | โ | Free (for movies & TV โ see below) |
๐ก Books use the Open Library API which requires no API key.
git clone https://github.com/NSC508/Geli.git
cd GeliYou can use Conda (recommended) or a plain virtualenv.
Option A โ Conda (recommended)
# Create and activate a new environment
conda create -n geli python=3.11 -y
conda activate geli
# Install dependencies
pip install flask requestsOption B โ virtualenv / venv
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install flask requests- Go to the Twitch Developer Console.
- Log in (or create a free Twitch account).
- Click Register Your Application.
- Fill in:
- Name: anything (e.g.
Geli) - OAuth Redirect URLs:
http://localhost - Category:
Application Integration
- Name: anything (e.g.
- Click Create, then click Manage on the new app.
- Copy your Client ID.
- Click New Secret and copy the Client Secret.
- Go to TMDB and create a free account.
- Go to Settings โ API โ Request an API Key.
- Select Developer, accept the terms, and fill in the application details.
- Copy your API Key (v3 auth).
Choose one of the two methods below. Environment variables are recommended because they keep secrets out of files entirely.
Option A โ Environment variables (recommended)
export IGDB_CLIENT_ID="your_client_id_here"
export IGDB_CLIENT_SECRET="your_client_secret_here"
export TMDB_API_KEY="your_tmdb_api_key_here"๐ก Tip: Add these lines to your shell profile (
~/.bashrc,~/.zshrc, etc.) so they persist across sessions.
Option B โ creds.json file
cp creds.example.json creds.jsonThen edit creds.json and replace the placeholder values:
{
"client_id": "your_twitch_client_id_here",
"client_secret": "your_twitch_client_secret_here",
"tmdb_api_key": "your_tmdb_api_key_here"
}
โ ๏ธ Important:creds.jsonis listed in.gitignoreand will never be committed to Git.
python app.pyThe app will start on http://localhost:5000. Open this URL in your browser.
- Switch Media โ Click the Geli logo in the navbar to switch between Games, Books, Movies, and TV Shows.
- Add Items โ Click + Add Game/Book/Movie/Show in the navbar and search.
- Rate It โ Click a search result and choose Like, Neutral, or Dislike.
- Compare โ If there are other items in the same tier, you'll be asked "Which is better?" comparisons.
- View Rankings โ The home page shows your full ranked list, split by tier.
- Scores Unlock at 10 Items โ Once you've ranked 10+ items in a media type, numerical scores appear.
- Remove โ Click the โ button on any card to remove it from your rankings.
Geli/
โโโ app.py # Flask application โ multi-media routes & API endpoints
โโโ igdb_client.py # IGDB / Twitch API client (games)
โโโ openlibrary_client.py # Open Library API client (books)
โโโ tmdb_client.py # TMDB API client (movies & TV shows)
โโโ models.py # SQLite data layer with media_type support
โโโ ranking.py # Binary insertion ranking algorithm & score calculation
โโโ static/
โ โโโ style.css # Dark glassmorphism theme with per-media accents
โ โโโ app.js # Client-side search, rating, comparison, media switcher
โโโ templates/
โ โโโ base.html # Base layout with navbar & media switcher dropdown
โ โโโ index.html # Rankings page (adaptive to media type)
โ โโโ search.html # Search & rating page (adaptive to media type)
โ โโโ compare.html # Pairwise comparison page (adaptive to media type)
โโโ creds.example.json # Template for API credentials
โโโ .gitignore # Keeps secrets & DB out of version control
โโโ README.md # You are here!
| Variable / File | Purpose | Required |
|---|---|---|
IGDB_CLIENT_ID |
Twitch / IGDB client ID | Yes for games (env var or creds.json) |
IGDB_CLIENT_SECRET |
Twitch / IGDB client secret | Yes for games (env var or creds.json) |
TMDB_API_KEY |
TMDB v3 API key | Yes for movies & TV (env var or creds.json) |
creds.json |
File-based credential store | No (fallback if env vars are unset) |
๐ก Books use Open Library which requires no credentials at all.
Pull requests are welcome! If you have ideas for new features or find a bug:
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
- Game data provided by IGDB via the Twitch API
- Book data provided by Open Library
- Movie & TV data provided by TMDB
- Inspired by Beli