Skip to content

Shariqtechie/rerun

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rerun

A self-hostable TV/movie tracker — built to replicate what TV Time used to be before it shut down (July 2026). Deploy your own instance for you and your friends: track shows/movies, mark episodes watched, see stats, follow friends' libraries. Import your old TV Time data straight from your GDPR export.

Project structure

backend/                    Cloudflare Worker API + D1 database
├── src/
│   ├── index.js             main router
│   └── routes/
│       ├── auth.js          signup / login / sessions
│       ├── import.js        importing a cleaned TV Time export
│       ├── library.js       shows, movies, marking episodes watched
│       ├── follow.js        follow/unfollow, private profiles
│       ├── stats.js         stats screen data
│       └── admin.js         invite keys, user management
├── schema.sql               D1 database schema
├── wrangler.toml            Cloudflare config (D1/KV bindings, env vars)
└── package.json

frontend/                   React + TypeScript + Vite app (Cloudflare Pages)

import-cleaner-service/     Standalone Render web service
├── app.py                   upload your raw TV Time zip, get a cleaned zip back
├── rerun_importer.py        the actual cleaning + TVDB ID-resolving pipeline
└── requirements.txt

How data flows

  1. Export your data from TV Time (while it's still available, or from a saved gdpr-data.zip)
  2. Upload it to the import-cleaner-service (deployed separately on Render) — it cleans the messy export and resolves real TMDB/IMDb IDs for every show and movie via TheTVDB's public pages
  3. Download the resulting clean-output.zip
  4. Sign up on your deployed Rerun instance (needs an admin-generated invite key), then upload that clean zip on the import screen — it lands in your personal library, ready to go

New users who never used TV Time can just skip straight to using the app.

Self-hosting: backend setup

cd backend
npm install
wrangler login
wrangler d1 create rerun-db          # copy the id into wrangler.toml
wrangler kv namespace create TMDB_CACHE   # copy the id into wrangler.toml
wrangler d1 execute rerun-db --file=./schema.sql
wrangler secret put TMDB_API_KEY
wrangler deploy

Self-hosting: frontend setup

cd frontend
npm install
npm run dev       # local dev
npm run build     # then deploy the dist/ folder to Cloudflare Pages

Self-hosting: import-cleaner-service (optional, separate deploy)

Deploy import-cleaner-service/ to Render (or run locally). It's fully independent of the main site — no login, no shared database, just a zip-in/zip-out utility.

Creating your first admin account

The very first user needs to be made an admin manually, since invite keys can only be generated by an existing admin:

wrangler d1 execute rerun-db --command="UPDATE users SET is_admin = 1 WHERE username = 'YOUR_USERNAME'"

(run this after you've signed up as that user through the normal signup flow)

Security notes

  • Passwords are hashed (PBKDF2 via Web Crypto), never stored in plaintext — even the admin panel only ever sees hashes.
  • tvtime/ and any *.zip files are gitignored — never commit your personal export data.
  • Change FRONTEND_URL in wrangler.toml from * to your actual deployed frontend domain before going live, to lock down CORS properly.

Status

Backend API routes: done (auth, import, library, follow, stats, admin). Frontend: in progress, currently wired to mock data — real API integration is the next step.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors