Popcorn is a small Go web app that aggregates cinema showtimes from the allociné.fr API and serves them as a rolling 7-day calendar for the theaters you configure. Showtimes are refreshed in the background, so the data stays fresh and a transient allociné outage never takes the site down.
The interface is in French; the codebase and documentation are in English.
- Rolling 7-day view, recomputed from the current date on every refresh.
- Per-movie cards: poster, director, runtime, genres, synopsis, and a trailer search link.
- Client-side day switching and genre filtering, both reflected in the
URL (
?delta=,?genre=) so any view is shareable. - Background refresh with serve-stale: a failed fetch keeps the last good snapshot, and the server is available immediately on startup.
- Installable PWA: add it to your phone's home screen and the app shell works offline — see docs/pwa.md for install instructions. Optional push notifications alert you when new movies arrive — see docs/push-notifications.md.
- Single self-contained binary — templates and static assets are embedded via
go:embed.
# Run the dev server against the sample config.
go run . -config config.example.yaml
# then open http://localhost:5000
# Build a standalone binary (assets are embedded).
go build -o popcorn .
./popcorn -config config.example.yamldocker build -t popcorn .
# Use the config baked into the image:
docker run -p 5000:5000 popcorn
# Or mount your own:
docker run -p 5000:5000 -v "$PWD/config.yaml:/app/config.yaml" popcornTheaters and runtime settings live in config.yaml; copy config.example.yaml
to get started. Every scalar can be overridden at runtime with a POPCORN_*
environment variable. See docs/configuration.md for the
full reference.
theaters:
- internal_id: C0159 # allociné.fr theater id
name: UGC Ciné Cité Les Halles
server:
port: 5000 # POPCORN_PORT
refresh:
interval: 3h # POPCORN_REFRESH_INTERVAL
days: 7 # POPCORN_REFRESH_DAYSgo test ./... -cover # tests with coverage
go vet ./... # static checks
gofmt -l . # formatting (should print nothing)
pre-commit run --all-filesSee docs/architecture.md for the data flow and package layout.
Released under the GNU General Public License v3.0 or later.
Popcorn began as a Go reimplementation inspired by grainParisArt by Solène and Mathias. The current codebase is an independent rewrite.
The bundled fonts (Raleway and Montserrat) are third-party works redistributed under the SIL Open Font License 1.1 — see static/font/LICENSE.txt. They are not covered by the GPLv3 license above.
Showtime data comes from allociné.fr via an unofficial API and belongs to its respective owners; this project is unaffiliated with allociné.