| .forgejo/workflows | ||
| .env.example | ||
| .gitignore | ||
| config.js | ||
| index.js | ||
| now-page-template.md | ||
| package-lock.json | ||
| package.json | ||
| profile-page-template.md | ||
| README.md | ||
| services.js | ||
| utils.js | ||
now-updater
Automatically updates your omg.lol Now page with your latest activity.
Fork of melanie/now-updater with added support for HTML output links, Mastodon, Last.fm, and dynamic URLs.
Demo: dylan.omg.lol/now
How It Works
Fetches content from RSS feeds, JSON feeds, and different services (Letterboxd, Trakt, Mastodon, Last.fm) and updates HTML or markdown links on your Now page. Runs every 3 hours via Forgejo Actions, only updating your page when changes are detected.
Example
Your Now page links will be automatically updated from this:
HTML links (before):
<a href="service-link">blog</a>
<a href="service-link">gitlab</a>
Markdown links (before):
[blog](service-link)
[gitlab](service-link)
to this:
HTML links (after):
<a href="https://your-blog.com/2025/12/my-latest-post">My Latest Post</a>
<a href="https://gitlab.com/username/project">Pushed to repository</a>
Markdown links (after):
[My Latest Post](https://your-blog.com/2025/12/my-latest-post)
[Pushed to repository](https://gitlab.com/username/project)
New in this fork: Use service names as link text instead of URLs! Just write <a href="service-link">servicename</a> and the script fills in both the text and URL.
Setup
- Fork this repo
- Enable Actions in repo settings
- Add Actions variables:
OMGLOL_USERNAME(your omg.lol username) - Add Actions secrets:
OMGLOL_KEY(your API key),TRAKT_SLURM(optional, see Trakt for details) - Add your sources in
config.js
For local development, copy .env.example to .env with your credentials.
Basic Example
Now page template:
I wrote this: [tktk](https://your-blog.com)
I watched this: [tktk](trakt.tv/users/username)
config.js:
export const linkFormat = 'markdown'
export const items = [
{
id: 'blog',
regex: htmlLinkRegex('your-blog.com'),
getLatest: async () => getJsonFeedItemTitle('https://your-blog.com/feed.json'),
},
{
id: 'letterboxd',
regex: htmlLinkRegex('letterboxd.com/username'),
getLatest: async () => getLetterboxdActivity('username', true), // with image
},
{
id: 'trakt-movie',
regex: htmlLinkRegex('trakt.tv/users/username'),
getLatest: async () => getTraktMovie('username', 'your-trakt-id', false), // text only
},
]
Configuration
Quick Start
- In your Now page, use service names as link text:
<a href="service-link">blog</a>
<a href="service-link">gitlab</a>
- In services.js, find the service and flip
isActivetotrue:
{
id: 'gitlab',
isActive: true, // just change this!
regex: htmlServiceLinkRegex('gitlab'),
feedUrl: 'https://gitlab.com/users/your-username/activity.atom',
feedType: 'atom',
}
That's it! No importing, no commenting/uncommenting.
Files
- config.js - Link format setting and filter logic (rarely needs editing)
- services.js - All available services with
isActiveflags (edit this to enable/disable services) - utils.js - Generic feed handlers and special service logic
Service Structure
Each service has:
id: identifier for logsisActive:trueto enable,falseto disableregex: matches service name in your Now pagefeedType: Handler to use (rss,atom,json, or special handler name likemastodon)feedUrl: Direct feed URL (use this for custom feeds without usernames)feedUrlTemplate: URL template with{userId}placeholder (use this for standard services)userId: Your username/ID (only needed with feedUrlTemplate)- Extra params as needed (e.g.,
instance,steamId,traktId,showImage)
Note: Use either feedUrl (direct) OR feedUrlTemplate + userId (template). Both work!
Set linkFormat in config.js to 'html' or 'markdown'.
Available Functions
Code Activity
getSourceTubeActivity(username)- Forgejo activity on source.tubegetGitLabActivity(username)- GitLab activity feedgetCodebergActivity(username)- Codeberg activity feed
Content Creation
getYouTubeLatestVideo(channelId)- Latest YouTube video (requires channel ID starting with "UC")getVimeoLatestVideo(username)- Latest Vimeo videogetTwitchLatestStream(channel)- Latest Twitch stream/VOD (via TwitchRSS, no API key needed)
Gaming
getBackloggdActivity(username, showImage)- Backloggd game activity with optional cover imagesgetExophaseActivity(username, showImage)- Multi-platform gaming achievementsgetSteamRecentlyPlayed(steamId)- Recently played Steam game (requires STEAM_WEBAPI_KEY)
Books
getGoodreadsActivity(userId, showImage)- Goodreads activity (requires numeric user ID, not username)getHardcoverActivity(username)- Currently reading books via GraphQL API
Music
getListenBrainzScrobble(username)- Latest music scrobble (open source Last.fm alternative)
Social Media
getPixelfedPost(instance, username)- Latest Pixelfed post from federated instancegetBlueskyPost(handle)- Latest Bluesky post (note: links not clickable in RSS)
General/Legacy
getRSSItemTitle(feedUrl)- Standard RSS feedsgetJsonFeedItemTitle(feedUrl, showImage)- JSON feedsgetLetterboxdActivity(username, showImage)- Letterboxd activitygetTraktEpisode(username, id, showImage)- Latest TV episodegetTraktMovie(username, id, showImage)- Latest moviegetTraktEpisodeAndMovie(username, id, showImage)- Latest episode and movie combinedgetMastodonPost(feedUrl)- Latest non-reply Mastodon postgetMalojaScrobble(url)- Latest music scrobble from maloja
Important Notes:
showImage(defaults totrue) controls whether images/posters are included in the output. Set it tofalseto show text only.- For Last.fm, use
getRSSItemTitle('https://lfm.xiffy.nl/your-username')(via lfm.xiffy.nl) - YouTube requires channel ID (not username), find it in your channel's page source or URL
- Goodreads requires numeric user ID (found in profile URL after
/user/show/) - Steam requires Steam ID 64 (convert at https://steamid.io/)
- Pixelfed requires instance domain and username (e.g.,
pixelfed.social,username)
API Keys Setup
Trakt
To get your Trakt slurm key, follow these steps:
- Go to your History page on Trakt:
https://trakt.tv/users/your-username/history - There should be an RSS feed icon on the top right of the page. Click it.
- The URL it shows will look something like this:
https://trakt.tv/users/crankle/history.atom?slurm=your-slurm-key - Copy the
slurmvalue from the URL and add it as a secret in your Actions settings namedTRAKT_SLURM.
Steam
To get your Steam Web API key:
- Visit https://steamcommunity.com/dev/apikey
- Enter a domain name (can be localhost for personal use)
- Agree to the terms and get your API key
- Add it to your
.envfile asSTEAM_WEBAPI_KEYor to Actions secrets - Find your Steam ID 64 at https://steamid.io/ (enter your profile URL)
Credits
Original project by melanie kat. Without her work, this fork would not exist.
Thank you also to xiffy for the Last.fm scrobble fetching service this uses.
Support
Did you find this useful like I did? Melanie asks that you donate to Trans Lifeline or The Trevor Project if you can. I will also add Belong To to that list.