Short films, brought into focus.
Lens is a mobile-first web app that turns a user's available time and mood into curated short film recommendations.
Short films are widely available online, but they are difficult to discover intentionally. Users often scroll through platforms without knowing what to watch, especially when they only have a limited amount of time.
Meanwhile, independent filmmakers and short film creators struggle to get visibility on platforms that often prioritize fast, easily repeatable entertainment formats over more intentional cinematic work.
Lens is where the two sides meet: a lightweight curation layer over existing YouTube short films, helping viewers find meaningful short-form cinema while giving artistic short films a better chance to be discovered.
The user provides:
- available time;
- mood;
- preferred mode: one film, mini-session, or surprise.
Lens then asks a few quick Take / Skip calibration questions and builds either:
- a single short film recommendation;
- or a mini-session of 2 to 3 short films.
- Load enriched short film data from
films_enriched.json. - Create an initial user profile from mood, time and mode.
- Calibrate the profile with Take / Skip cards.
- Score each film individually.
- Keep the best candidate films.
- Generate possible sessions of 2 or 3 films.
- Score each session based on:
- film relevance;
- duration fit;
- similarity balance;
- intensity variation;
- opening bonus;
- ending bonus.
- Keep the top 5% sessions.
- Draw 3 recommendations using weighted randomness.
- Allow reroll without recalculating the full pipeline.
- Mobile-first interface
- PWA-ready structure
- YouTube embeds
- Single film mode
- Mini-session mode
- Surprise mode
- Take / Skip calibration
- Weighted recommendation reroll
- GitHub Pages compatible
- HTML
- CSS
- Vanilla JavaScript modules
- Static JSON data
- GitHub Pages
- Progressive Web App manifest and service worker
The current version uses an already generated films_enriched.json file for demo purposes.
The intended production pipeline is:
YouTube search → raw_youtube_results.json → AI enrichment → films_enriched.json → Lens front-end
The front-end does not call YouTube or AI APIs during runtime.
Open the project with Live Server in VSCode.
Main entry point:
index.html
The app is designed to be deployed as a static site on GitHub Pages.
All paths are relative to support deployment under a GitHub Pages repository path.
- YouTube embeds may depend on video owner settings.
- The enrichment pipeline is not executed live in the front-end.
- Swipe interactions are basic and may vary by device.
- Larger dataset
- Better swipe animations
- Offline-friendly recommendation mode
- More advanced session diversity scoring
- Support for accounts and history
- Language selection
- Accessibility toggles, i.e. only allow subtitled videos