Hi there ![]()
There’s no good one-stop shop to find all the various events happening in a given city, so I’m trying to build one!
I’ve got a fairly basic implementation up here.
At the moment, it just runs a daily cron that scrapes events from a small set of local Vancouver publications/venue websites then pushes them to a bluesky collection, which the site then fetches and uses to populate the calendar. It supports basic commenting and RSVP functionality via bluesky auth.
It’s very rudimentary at the moment and the UI is atrocious, but I figured I should just get it up there and make improvements later. The mobile experience isn’t great and I didn’t even add a loading state during the login process yet. There’s also a dark mode, but I put it in the authenticated user dropdown for some reason lol. I’ll tidy all that up soon!
Note: there’s a small gap from the last couple weeks because I didn’t realize my github credits ran out, so the cron wasn’t running and I haven’t backfilled the missing events yet ![]()
Here’s a little more info ![]()
High-level overview of current features
-
Automated Scraping:
- Event scraping CLI that can be executed on a cron(such as a GitHub Actions workflow).
-
Data Quality Filtering:
- De-dupes scraped events
- Filters malformed events before publishing
-
AT Proto Integration:
- Publish events to your Bluesky repo using the community calendar lexicon.
- Publicly read events from any DID repo without authentication.
- Automatic deduplication prevents duplicate events.
- Conform event data to the AT Proto Smoke Signal format
- Comment posting and moderation on individual events via Bluesky OAuth
- RSVPs and moderation on individual events via Bluesky OAuth
- Community-specific moderator whitelists(via delegation)
-
Calendar UI:
- Renders events using a basic calendar with source filtering and event details(first of many primitives in a series of Smoke Signal components).
-
Local Cache:
- Store events in
data/events.jsonfor fast unauthenticated reads. (Can interface with any external data store)- This can be used as a fallback if the bluesky collection isn’t available for some reason, but that’s only ever happened if I’ve pushed a breaking change without realizing it

- This can be used as a fallback if the bluesky collection isn’t available for some reason, but that’s only ever happened if I’ve pushed a breaking change without realizing it
- Store events in
In-flight features
-
UI framework integration
-
Manual event submission
-
Moderator cohorts to approve events manually submitted by the community
-
No-code scraping interface(also subscription-based intelligent scraper)
-
Better mobile layout
Future features(short-medium term)
Enhanced Scraping
-
Add More Event Sources:
- More hardcoded event sources
- Community-submitted events
- Dynamic scraping interface where a user can simply submit a URL to scrape
-
Improve Data Quality:
- Better date parsing for edge cases
- Location standardization and geocoding
- Event categorization (music, theater, sports, etc.)
- Price information extraction
User Experience
-
Calendar Improvements
- Event search and filtering by keywords
- Category-based color coding
- Mobile-responsive design improvements
- Export to personal calendars (iCal, Google Calendar)
- Interactive map with event locations
- Ticket purchasing
-
Performance Optimization
- Event pagination for large datasets
- Caching strategies for faster load times
- Image optimization and lazy loading
API Enhancements
- REST API Expansion
- Event search endpoints with filters
- Venue-specific event listings
- Event statistics and analytics