brainstate

golmenero/ratelog · source

Snapshot 0 · 2026-11-04T12:47:28Z · Kotlin · AGPL-3.0

Content fingerprint8a28f57b7b19e07d60677fdc3c52d121462ee5440f666b4e6398027a5a196e11

GitHub description at capture

App for user rating of media

README at capture

<p align="center">
  <img alt="Screenshot" src="assets/banner.svg" width="300"/>
</p>

<p align="center">
  <!-- REPLACE: Update badges with your actual repository URLs -->
  <a href="https://github.com/golmenero/ratelog">
  <img alt="License" src="https://img.shields.io/github/license/golmenero/ratelog.svg"/>
  </a>
  <a href="https://github.com/golmenero/ratelog/releases">
  <img alt="Current Release" src="https://img.shields.io/github/release/golmenero/ratelog.svg"/>
  </a>
  <a href="https://github.com/golmenero/ratelog/actions/workflows/ci.yml">
  <img alt="CI Status" src="https://img.shields.io/github/actions/workflow/status/golmenero/ratelog/ci.yml.svg"/>
  </a>
  <a href="https://www.buymeacoffee.com/golmenero">
  <img alt="Buy Me a Coffee" src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?logo=buymeacoffee&logoColor=black"/>
  </a>
</p>

---

Ratelog is a web application that lets you search for movies and TV shows on TMDB, rate them across multiple categories, and generate ranked top lists. It supports multi-user accounts with authentication, a dark-themed responsive UI, and follows/tracking for upcoming releases.

No premium tiers, no hidden features — just a straightforward tool to track and rank what you watch.

> **Disclaimer:** This is a man-driven project, heavily supported by AI-assisted development. All code is manually reviewed by the maintainers before being merged.

<strong>Want to get started?</strong><br/>
Check out the <a href="#installation-guide">installation guide</a>.<br/>

<strong>Something not working right?</strong><br/>
Open an <a href="https://github.com/golmenero/ratelog/issues">Issue</a> on GitHub.<br/>

<strong>Want to contribute?</strong><br/>
Check out the contributing guide (coming soon).<br/>

<strong>New idea or improvement?</strong><br/>
Open a <a href="https://github.com/golmenero/ratelog/discussions">Discussion</a> on GitHub.<br/>
---

## Features

### Discovery & Tracking
- **Search** — Find movies and TV shows via TMDB's API
- **Follow** — Track upcoming releases and see them on the premieres page (grouped by Released / Upcoming / No Date)

### Rating System
- **Rate by category** — Score each title from 1 to 10 (0.25 steps) across 5 categories: Directing, Cinematography, Acting, Soundtrack, and Screenplay
- **Average score** — Automatic mean calculation across all 5 categories
- **One rating per title** — Delete and re-rate if you change your mind

### Lists & Organization
- **Top lists** — Separate pages for movies and TV shows, filterable by year and category with configurable limits
- **Custom lists** — Create and manage personalized lists of movies and TV shows

### Social & Import
- **Community** — Explore other users' ratings, lists, and activity
- **Import from Letterboxd** — Bulk import your ratings and watchlist from a Letterboxd export

### Multi-user & Languages
- **Multi-user** — Each user has their own ratings, follows, and tops
- **Roles** — `USER`, `ADMIN` and `SUPERADMIN`. Superadmins can manage every account from the `/admin/dashboard`. A bootstrap superadmin is seeded on first run (see below).
- **Multi language support** — 
  ![EN](https://flagcdn.com/24x18/gb.png)
  ![DE](https://flagcdn.com/24x18/de.png)
  ![ES](https://flagcdn.com/24x18/es.png)
  ![FR](https://flagcdn.com/24x18/fr.png)
  ![IT](https://flagcdn.com/24x18/it.png)
  ![JA](https://flagcdn.com/24x18/jp.png)
  ![PT](https://flagcdn.com/24x18/pt.png)
  ![RU](https://flagcdn.com/24x18/ru.png)
  ![ZH](https://flagcdn.com/24x18/cn.png)


<p align="center">
  <img alt="Search" src="assets/search.png" width="900"/>
  <br>
  <img alt="Detail" src="assets/detail.png" width="900"/>
  <br>
  <img alt="Rate" src="assets/rate.png" width="900"/>
  <br>
  <img alt="Top" src="assets/top.png" width="900"/>
</p>

---

## Tech Stack

| Layer | Technology |
|---|---|
| **Backend** | Kotlin 2.4.0 + Spring Boot 3.5.14 |
| **Database** | PostgreSQL 17 (Flyway migrations) |
| **Frontend** | Thymeleaf server-rendered HTML + CSS (dark theme, responsive) |
| **Auth** | Spring Security (BCrypt, form login) |

---

## Installation Guide

### Prerequisites

- Docker & Docker Compose
- TMDB API key ([get one here](https://www.themoviedb.org/settings/api))

### Quick Start

#### Step 1: Clone the repository
```bash
git clone https://github.com/golmenero/ratelog.git
cd ratelog
```

#### Step 2: Copy the environment file
```bash
cp .env.example .env
```

#### Step 3: Configure environment variables

Edit `.env` and configure the variables:

| Variable | Required | Default | Description |
|---|---|---|---|
| `PORT` | No | `8080` | HTTP port |
| `POSTGRES_HOST` | No | `localhost` | PostgreSQL host |
| `POSTGRES_PORT` | No | `5432` | PostgreSQL port |
| `POSTGRES_DB` | No | `ratelog` | Database name |
| `POSTGRES_USER` | No | `ratelog` | PostgreSQL user |
| `POSTGRES_PASSWORD` | No | `ratelog` | PostgreSQL password |

> **Warning:** For production deployments, consider setting `POSTGRES_PASSWORD` to a secure value

#### Step 4: Start the application
```bash
docker compose up -d
```

This will start the following services:
- **postgres**: PostgreSQL 18 (port 5432, volume `pgdata`)
- **ratelog**: App (port 8080, depends on healthy postgres)

#### Step 5: Verify the deployment
```bash
curl http://localhost:8080/api/health
```

#### Step 6: Log in as the bootstrap admin

On first run, the Flyway migration `V20__add_role_and_seed_admin.sql` seeds a superadmin account:

| Field    | Value             |
|----------|-------------------|
| Username | `admin`           |
| Password | `admin`           |
| Email    | `admin@admin.com` |
| Role     | `SUPERADMIN`      |

> **Important:** Change the password from the admin dashboard immediately after first login.

If an `admin` user already exists (e.g. created via the registration form), the migration only forces its role to `SUPERADMIN` and leaves its existing email and password untouched.

#### Step 7: Configure the TMDB API key

The TMDB API key is stored in `general_config` and editable from **Configuración > General** (`/admin/configuration`). Log in as the superadmin, paste the key and save. Search, trending and detail endpoints require a configured key.

---

## Mobile App

Ratelog is a Progressive Web App (PWA) that can be installed on your mobile device for a native app-like experience.

### Installation

On the login page, click the **iOS** or **Android** icon to see installation instructions, or follow the steps below:

#### iOS (Safari)
1. Open the app URL in **Safari**
2. Tap the **Share** button (square with arrow)
3. Scroll down and tap **"Add to Home Screen"**
4. Tap **"Add"** to confirm

#### Android (Chrome)
1. Open the app URL in **Chrome**
2. Tap the **menu button** (⋮) in the top right corner
3. Tap **"Install app"** or **"Add to Home screen"**
4. Tap **"Install"** to confirm

> **Note:** The app must be accessible from your device (same network or via tunnel/VPN)

---

<p align="center">
This project is powered by:
<br/>
<br/>
<a href="https://www.themoviedb.org/documentation/api">
<img alt="TMDB API" src="assets/tmdb.svg" height="20px"/>
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://spring.io/projects/spring-boot">
<img alt="Spring Boot" src="assets/spring.svg" height="20px"/>
</a>
&nbsp;&nbsp;&nbsp
<a href="https://www.postgresql.org/">
<img alt="PostgreSQL" src="assets/postgres.svg" height="20px"/>
</a>
</p>