A personal digital journal aggregator that collects activities from various platforms (GitHub, Trakt, Flickr) and generates an RSS feed. Built with F# and ASP.NET Core.
Agg automatically aggregates my digital activities into a single RSS feed, creating a curated stream of me discoveries, thoughts, and activities. The application runs as a web server that generates and serves an RSS feed containing:
- Most recent GitHub commit - Latest code activity from my repositories
- Movie and TV ratings - Reviews from Trakt.tv
- Photos - Latest uploads from Flickr
The RSS feed is automatically regenerated every 12 hours and served at the root endpoint.
- Automated aggregation - Pulls data from multiple APIs on a schedule
- RSS 2.0 compliant - Standard RSS format with custom content types
- Web hosting - Built-in web server serves the generated RSS feed
- Docker support - Containerized deployment ready
- Environment-based configuration - Secure API key management
- .NET 9.0 SDK
- Docker (for containerized deployment)
- API keys for:
- Flickr (for photo data)
- Trackt (for TV/movie data)
Create a .env
file in the project root with your API credentials:
TRACKT_TV_API_KEY=
FLICKR_API_KEY=
# Restore dependencies
dotnet restore
# Run the application
dotnet run
The application will:
- Generate an initial RSS feed
- Start a web server on
http://localhost:5001
- Schedule automatic regeneration every 12 hours
# Build for release
dotnet publish -c Release -o ./publish
# Run the published application
cd publish
dotnet Agg.dll
docker build -t agg .
docker run -d \
--name agg-journal \
-p 5001:5001 \
--env-file .env \
agg
The generated RSS feed includes:
<rss version="2.0">
<channel>
<title>Joe's digital journal</title>
<description>A curated stream of my discoveries, thoughts, and activities</description>
<lastBuildDate>[timestamp]</lastBuildDate>
<!-- Items with custom content types -->
<item>
<contentType>code-commit|movie-review|episode-review|photo</contentType>
<!-- Standard RSS fields plus custom metadata -->
</item>
</channel>
</rss>
Agg/
├── RecentActivity/ # Data source modules
│ ├── MostRecentCommit.fs # GitHub integration
│ ├── MostRecentMovieRating.fs # Trakt.tv integration
│ └── MostRecentPhoto.fs # Flickr integration
├── Program.fs # Main application and web server
├── Agg.fsproj # Project configuration
├── Dockerfile # Container configuration
├── .env # Environment variables (create this)
└── wwwroot/ # Generated static files
└── journal.xml # RSS feed output
To add new data sources:
- Create a new module in
RecentActivity/
- Implement a function with signature:
unit -> Async<string option>
- Add the function to
rssItemGenerators
array inProgram.fs
- Return RSS
<item>
XML as a string