gitmyhub

nuxt.fyi

TypeScript ★ 42 updated 6h ago

Celebrating sites built with Nuxt in the wild.

A bot that monitors the Bluesky social network's live post stream for URLs, detects whether each site is built with the Nuxt web framework using a headless browser, and posts screenshots to a public dashboard.

TypeScriptNode.jsPlaywrightBluesky JetstreamSQLiteFly.iosetup: hardcomplexity 4/5

nuxt.fyi is a bot and website that watches Bluesky (a social media platform) for links to websites, checks each one to see if it was built with the Nuxt web framework, and when it finds a match, posts a screenshot of that site. The goal is to surface and celebrate real-world sites built with Nuxt. There is a public dashboard at nuxt.fyi that shows everything the system has found, organized by version and how recently it was detected.

The system works by tapping into the Bluesky Jetstream firehose, which is a continuous stream of every post made on the platform. The code pulls every URL out of every post, identifies the domain, and then checks whether that domain is a Nuxt site. Detection works by loading the page in a headless browser (Playwright running Chromium) and looking for specific markers in the HTML and the page's behavior that indicate Nuxt is being used. If the check passes, the scanner takes a screenshot and uploads it to an image hosting service.

The bot handles some practical complications. Cookie consent banners are suppressed automatically so screenshots don't get obscured. Screenshots are checked for NSFW content using a classifier, and the posting behavior changes depending on the classification: suggestive content gets labeled on Bluesky so users can blur it, explicit content gets further restricted on both the dashboard and in Bluesky posts. You can also tag the bot's Bluesky account with any URL and it will reply with a scan result and screenshot for that domain.

The system runs as three separate processes deployed on Fly.io: a daemon that consumes the Bluesky stream and handles detection, a screenshot service that runs the browser, and a dashboard website. All three share a SQLite database stored on a shared volume. The project is released under the MIT license and requires Node 24 or newer.

Where it fits