Skip to content

psam21/biffes26

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

134 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 17th BIFFes 2026

A modern Progressive Web App for exploring the 17th Bengaluru International Film Festival (January 30 – February 6, 2026).

🌐 Live: biffes26.vercel.app

✨ Features

πŸŽ₯ Film Discovery

  • Browse by Category β€” 13 categories including Asian Cinema, World Cinema, Indian Panorama, Kannada Cinema, Critics' Week, Bio-Pics, Documentaries, and more
  • Award Winners β€” Films grouped by prestigious festivals (Cannes, Venice, Berlin, Sundance, Toronto, Locarno, San SebastiΓ‘n, Karlovy Vary, National Film Awards India)
  • A-Z Film List β€” Alphabetically sorted complete film catalog with letter quick-jump
  • Smart Search β€” Instant search across titles, directors, countries, and languages with debounced dropdown results
  • Rating Filters β€” Filter films by minimum IMDb, RT, or Letterboxd scores

πŸ“… Schedule & Planning

  • 8-Day Schedule β€” Complete festival timetable (Jan 30 – Feb 6) across all venues
  • Multi-Venue Support β€” Cinepolis LULU Mall (5 screens), Rajkumar Bhavana, Suchitra Cinema, Open Air
  • Live "Now Showing" β€” Real-time indicator for currently playing films (IST timezone aware)
  • Today Auto-Select β€” Schedule automatically opens to current festival day
  • View Modes β€” Toggle between compact timeline and detailed card views
  • Venue Filtering β€” Filter schedule by specific cinema or screen

❀️ Watchlist System

  • Personal Watchlist β€” Build your must-watch list with one-tap add/remove
  • Local-First Storage β€” Works offline with localStorage, syncs to cloud when online
  • Share Codes β€” Generate 6-character codes to share your watchlist with friends
  • Import Lists β€” Import shared watchlists via URL parameter (?import=ABC123)
  • Schedule Integration β€” See your watchlist films mapped to screening times
  • Conflict Detection β€” Visual warnings when watchlist films overlap in schedule

✨ Top Rated Picks

  • Daily Picks β€” Films ranked by highest ratings for each festival day
  • Multi-Source Scoring β€” Aggregates IMDb, RT, Metacritic, Letterboxd ratings with award bonuses
  • Conflict-Free Planning β€” Greedy algorithm ensures no overlapping screenings
  • Alternative Showings β€” Suggests other days/times if a recommended film conflicts
  • Shareable β€” Share your daily picks via Web Share API or clipboard
  • Bulk Add β€” One-click "Add All to Watchlist" for quick planning

πŸ“Š Data Observatory (/data)

  • Festival Statistics β€” Total films, countries, languages, runtime analytics
  • Geographic Distribution β€” Films by country/language bar charts
  • Schedule Analytics β€” Screenings by venue, by day, peak hours
  • Platform Stats β€” Active sync codes, watchlists, data sizes
  • Category Breakdown β€” Film counts per category

⭐ Ratings & Info

  • Multi-Platform Ratings β€” IMDb, Rotten Tomatoes, Metacritic, Letterboxd scores
  • Clickable Links β€” Direct links to external rating pages
  • Awards Display β€” Festival selections and prizes prominently shown
  • Premiere Badges β€” World/Asia/India premiere indicators
  • Full Details β€” Synopsis, cast, crew, runtime, language, country for every film

πŸ“± Progressive Web App

  • Installable β€” Add to home screen on mobile/desktop
  • Offline Support β€” Service worker caches essential assets and posters
  • Fast Loading β€” Static site generation with incremental data updates
  • Responsive Design β€” Mobile-first, works beautifully on all screen sizes

β™Ώ Accessibility

  • Skip Navigation β€” Skip-to-content link for screen readers
  • ARIA Labels β€” Proper labeling throughout the UI
  • Keyboard Navigation β€” Full keyboard support including focus trapping in modals
  • Reduced Motion β€” Respects prefers-reduced-motion setting

πŸ›  Tech Stack

Technology Version Purpose
Next.js 16.1.6 React framework with App Router, SSG
React 19.x UI library with Server Components
TypeScript 5.x Type safety
Tailwind CSS 4.x Utility-first styling
Framer Motion 12.x Smooth animations
@tanstack/react-virtual 3.x Virtualized lists for performance
@upstash/redis 1.x Serverless Redis for watchlist sync
Cheerio 1.x HTML parsing for web scraping
Sharp 0.34 Image optimization
Lucide React 0.561 Icon library

πŸš€ Quick Start

git clone https://github.com/psam21/biffes26.git
cd biffes26
npm install
npm run dev

Open http://localhost:3000 to view the app.

πŸ“ Project Structure

src/
β”œβ”€β”€ app/                      # Next.js App Router
β”‚   β”œβ”€β”€ page.tsx              # Home - categories & award winners
β”‚   β”œβ”€β”€ films/                # A-Z alphabetical film listing
β”‚   β”œβ”€β”€ schedule/             # 8-day festival schedule
β”‚   β”œβ”€β”€ recommendations/      # Top-rated daily picks
β”‚   β”œβ”€β”€ watchlist/            # Personal watchlist with schedule view
β”‚   β”œβ”€β”€ data/                 # Festival statistics dashboard
β”‚   β”œβ”€β”€ category/[slug]/      # Dynamic category pages (13 categories)
β”‚   β”œβ”€β”€ film/[id]/            # Individual film detail pages (200+ films)
β”‚   └── api/                  # API routes
β”‚       β”œβ”€β”€ watchlist/        # Watchlist CRUD + sync codes
β”‚       β”œβ”€β”€ status/           # Health check endpoint
β”‚       └── cron/refresh/     # Daily data refresh
β”œβ”€β”€ components/               # Reusable UI components
β”‚   β”œβ”€β”€ FilmDrawer.tsx        # Full-screen film details panel
β”‚   β”œβ”€β”€ FilmCard.tsx          # Film card with poster & ratings
β”‚   β”œβ”€β”€ VirtualizedFilmGrid.tsx # Performance-optimized grid
β”‚   β”œβ”€β”€ WatchlistButton.tsx   # Add/remove watchlist button
β”‚   β”œβ”€β”€ ShareWatchlist.tsx    # Movie ticket-styled share modal
β”‚   β”œβ”€β”€ RatingBadges.tsx      # Compact multi-platform ratings
β”‚   β”œβ”€β”€ SiteHeader.tsx        # Sticky header with festival info
β”‚   β”œβ”€β”€ SiteNav.tsx           # Navigation pills
β”‚   └── ...                   # 15+ components total
β”œβ”€β”€ data/                     # Static JSON data
β”‚   β”œβ”€β”€ biffes_data.json      # Festival info, categories, films
β”‚   └── schedule_data.json    # 8-day venue/screen schedule
β”œβ”€β”€ lib/                      # Utilities & context
β”‚   β”œβ”€β”€ watchlist-context.tsx # React Context for watchlist state
β”‚   β”œβ”€β”€ recommendations.ts    # Scoring algorithm
β”‚   β”œβ”€β”€ utils.ts              # Helpers (cn, formatDuration, etc.)
β”‚   └── upstash.ts            # Redis client
└── types/
    └── index.ts              # TypeScript interfaces

scripts/                      # Data pipeline tooling
β”œβ”€β”€ pipeline.ts               # Main scraping orchestrator
β”œβ”€β”€ scrape-films.ts           # biffes.org film scraper
β”œβ”€β”€ download-posters.ts       # Poster image downloader
β”œβ”€β”€ optimize-images.ts        # AVIF conversion
└── ...

public/
β”œβ”€β”€ posters/                  # Film poster images
β”œβ”€β”€ manifest.json             # PWA manifest
└── sw.js                     # Service worker

πŸ”„ Data Pipeline

# Full pipeline (scrape + ratings + posters)
npm run pipeline

# Quick update (skip scraping, ratings only)
npm run pipeline:quick

# Individual steps
npm run download-posters      # Download missing poster images
npm run optimize-images       # Convert to AVIF format
npm run schedule:generate     # Generate schedule from extracted data
npm run schedule:validate     # Validate schedule consistency

Environment Variables

# Required for ratings
OMDB_API_KEY=your_key_here

# Required for cloud sync
UPSTASH_REDIS_REST_URL=https://xxx.upstash.io
UPSTASH_REDIS_REST_TOKEN=AXxx...

# Required for cron refresh
CRON_SECRET=your_secret_here

☁️ Cloud Sync Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   User Browser  │────▢│   Vercel Edge    │────▢│  Upstash Redis  β”‚
β”‚   (localStorage)│◀────│   API Routes     │◀────│   (Serverless)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                        β”‚
        β”‚                        β”‚ Daily Cron
        β”‚                        β–Ό
        β”‚               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        └──────────────▢│   biffes.org     β”‚
           (fallback)   β”‚   (Source)       β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • Local-first: Works offline, syncs when online
  • Rate limiting: 60 requests/min per IP
  • TTL: 30-day expiration for inactive watchlists
  • Share codes: 6-character alphanumeric (32^6 = 1B+ combinations)

πŸ“Š API Endpoints

Endpoint Method Description
/api/watchlist GET/POST/DELETE Watchlist CRUD operations
/api/watchlist/sync POST Create/retrieve share codes
/api/status GET Health check + stats
/api/cron/refresh GET Daily data refresh (cron)

πŸ“¦ Data Sources

Source Data Provided
biffes.org Films, categories, crew, synopses, awards
OMDb API IMDb, Rotten Tomatoes, Metacritic ratings
Letterboxd Community ratings (manual enrichment)
Official Schedule PDF Venue, screen, and timing data

🎨 Design Highlights

  • Dark Theme β€” Easy on the eyes for cinema lovers
  • Amber Accents β€” Festival branding color (#eab308)
  • Smooth Animations β€” Framer Motion page transitions
  • Movie Ticket UI β€” Share modal styled like a film ticket
  • Category Gradients β€” Unique color gradients per category
  • Glass Morphism β€” Subtle backdrop blur effects

πŸ“± PWA Features

  • Manifest: App name, icons, theme color, standalone display
  • Service Worker:
    • Static assets cached on install
    • Posters: cache-first with background revalidation
    • Navigation: network-first with cache fallback
    • API: stale-while-revalidate

πŸ— Deployment

Deployed on Vercel with automatic deployments on push to main.

npm run build    # Production build
npm run start    # Start production server

πŸ“„ License

MIT β€” Feel free to fork for your own film festival!


Built with ❀️ for cinema lovers attending BIFFes 2026

Venues: LULU Mall Cinepolis β€’ Rajkumar Bhavana β€’ Suchitra Cinema

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published