Feedloop is a minimal, customizable content carousel designed to surface meaningful, memorable, and dynamic information over time.
It transforms structured data—such as family history, personal notes, quotes, and milestones—into a clean, evolving display.
Built with simplicity and flexibility in mind, Feedloop focuses on readability, pacing, and long-form ambient viewing.
- Dynamic content carousel with multiple display modes (instant, fade, pop, typing)
- Weighted randomness to prioritize important items
- Smart rotation logic to avoid recently shown content
- Type balancing to prevent repetitive categories
- Time-aware display duration based on reading speed and punctuation
- Multiline support for quotes and longer content
- Quote support with author attribution
- Customizable theming system
- Persistent settings (theme, mode, speed)
- Responsive layout for desktop and mobile
- Clean, distraction-free UI
- nginx (alpine) via Docker
- Static HTML, CSS, and JavaScript
docker compose up -dThen open:
Feedloop uses a local feed.json file for content.
This file is ignored by git, so you can safely store personal or private data.
cp feed.template.json feed.jsonThen edit feed.json.
{
"items": [
{
"id": "fact-001",
"text": "Example fact",
"type": "fact",
"active": true,
"priority": 1
},
{
"id": "quote-001",
"text": "This is a sample quote.",
"author": "Your Name",
"type": "quote",
"active": true,
"priority": 2
}
]
}id(string) — unique identifiertext(string) — main contenttype(string) — e.g.fact,quoteauthor(string, optional) — used for quotespriority(number, optional) — affects frequencyactive(boolean, optional) — disable without deleting
- Keep content concise and meaningful
- Avoid vague wording
- Ensure all
idvalues are unique - Use
priorityto control frequency - Use quotes for personal notes or messages
If you wish to support development, you can donate: https://ko-fi.com/nautxx