--- name: mainline-sources description: Adding new RSS feeds and data sources to Mainline compatibility: opencode metadata: audience: developers source_type: codebase --- ## What This Skill Covers This skill covers how to add new data sources (RSS feeds, poetry) to Mainline. ## Key Concepts ### Feeds Dictionary (engine/sources.py) All feeds are defined in a simple dictionary: ```python FEEDS = { "Feed Name": "https://example.com/feed.xml", # Category comments help organize: # Science & Technology # Economics & Business # World & Politics # Culture & Ideas } ``` ### Poetry Sources Project Gutenberg URLs for public domain literature: ```python POETRY_SOURCES = { "Author Name": "https://www.gutenberg.org/cache/epub/1234/pg1234.txt", } ``` ### Language & Script Mapping The sources.py also contains language/script detection mappings used for auto-translation and font selection. ## Adding a New RSS Feed 1. Edit `engine/sources.py` 2. Add entry to `FEEDS` dict under appropriate category: ```python "My Feed": "https://example.com/feed.xml", ``` 3. The feed will be automatically discovered on next run ### Feed Requirements - Must be valid RSS or Atom XML - Should have `` elements for items - Must be HTTP/HTTPS accessible ## Adding Poetry Sources 1. Edit `engine/sources.py` 2. Add to `POETRY_SOURCES` dict: ```python "Author": "https://www.gutenberg.org/cache/epub/XXXX/pgXXXX.txt", ``` ### Poetry Requirements - Plain text (UTF-8) - Project Gutenberg format preferred - No DRM-protected sources ## Data Flow Feeds are fetched via `engine/fetch.py`: - `fetch_feed(url)` - Fetches and parses RSS/Atom - Results cached for fast restarts - Filtered via `engine/filter.py` for content cleaning ## Categories Organize new feeds by category using comments: - Science & Technology - Economics & Business - World & Politics - Culture & Ideas