WallpaperMachine
The wallpapers you love. A new home on your Mac.
Free yoga, live music, markets, festivals and community events across Jacksonville, FL — pulled together from a dozen local calendars into one list.
LifestyleTypeScript · CSSGitHub @starryeyez024OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Events in and near Jacksonville, FL
Translation pending
Loading the full README. The saved excerpt is shown below.
Personal event-discovery web app for Jacksonville Beach, FL. Local-first (runs in your browser at localhost:3000), self-learning (ratings shift the recommendation weights), and portable to a real host later.Read the full README ↗Personal event-discovery web app for Jacksonville Beach, FL. Local-first (runs in your browser at localhost:3000), self-learning (ratings shift the recommendation weights), and portable to a real host later.
When you see something good on Instagram, Facebook, an email forward, or a flyer, hit + Add tip in the header. Paste the caption / description / pasted text into the modal, optionally add the source URL, and click Parse with AI.
Under the hood: a short call to Claude Haiku 4.5 extracts title, date+time (resolving relative dates like "this Saturday" against today), venue, address, city, URL, description, price, and categories. You then review and edit the extracted fields before saving — Claude isn't trusted unilaterally; you're the final say.
ANTHROPIC_API_KEY in .env.local. Without it, the modal still works — you just fill the form manually.This is the deliberate workaround for the social-media scraping problem (IG/FB block scraping aggressively; APIs are owner-only or expensive). You see the post on your phone, hit Add tip, paste — 10 seconds of friction, no scraping infrastructure, no missed events.
cd ~/jax-events
npm install
cp .env.example .env.local # contains a curated starter list of Meetup groups
npm run seed # load verified-real Jacksonville-area events
npm run dev # open http://localhost:3000
Click ↻ Refresh in the UI to pull live data from all configured sources.
.env.local controls everything. Suggested keys to add:
| Source | Required? | How to get | Free tier |
|---|---|---|---|
| Cummer Museum | nothing | iCal feed, public | unlimited |
| Florida Theatre | nothing | HTML scrape, public | unlimited |
| Meetup | nothing | iCal per group, public | unlimited |
| Ticketmaster | optional API key | https://developer-acct.ticketmaster.com/user/register | 5,000 calls/day |
MEETUP_GROUPS in .env.local controls which Meetup groups get scanned. Add or remove slugs (the part after meetup.com/) freely.
The number on each event card is a Match score (0–100+, higher = closer fit to your tastes). Not stars. Stars (★ 1–5) only appear when you mark an event attended and rate it.
match = avg(category_weights for the event)
+ venue_affinity_bonus (learned per-venue bump)
+ source_affinity_bonus (learned per-Meetup-group bump)
+ 8 if free
+ 15 if tagged 'experiential'
− 25 if tagged ONLY 'market-shopping'
− 10 if it's an evergreen ongoing place
+ distance_penalty (0 / −3 / −15 / −30, source-modified)
Color cues on the card: green ≥ 80, blue ≥ 50, slate ≥ 20, faded otherwise.
Every event lands in one of four buckets based on its city:
| Bucket | Penalty | Includes |
|---|---|---|
| Local | 0 | Jacksonville, Jax Beach, Atlantic/Neptune Beach, Ponte Vedra, Mayport |
| Nearby (~1 hr) | −3 (or ~−5 for meetups) | St Augustine, Fernandina, Amelia, Orange Park, Fleming Island |
| Drive (1–3 hr) | −15 (or ~−22 for meetups) | Daytona, Gainesville, Ocala, Brunswick GA, St Simons |
| Far (3+ hr) | −30 (or ~−45 for meetups) | Orlando, Tampa, Miami, Pensacola, Tallahassee, … |
The Driving radius filter in the sidebar hard-filters to events in or below the selected bucket. Default is "Nearby" (Jax metro + 1-hour cities).
Distance penalties are stronger for Meetups (small events) and lighter for destination venues like Florida Theatre or Daily's Place — those "earn" the drive.
Each card also shows an approximate drive distance from the corner of Beach Blvd & 3rd St S, Jacksonville Beach (change via HOME_LAT / HOME_LON in .env.local). This readout is local-only — the public build hides it, since a distance measured from one fixed point is misleading to a visitor who could be anywhere. Values prefixed with ~ mean the venue had no exact coordinates and we used city-center as a fallback — click Directions on the card for Google's actual ETA. Tap the 📍 venue line to open Google Maps, or Directions to start navigation.
| Action | What it does | Card treatment |
|---|---|---|
| 👍 Interested | +2 to every category on the event, +1 to venue | Green border + "✓ You marked this Interested" |
| 📅 Register | Marks "I signed up / bought a ticket". Doesn't shift weights. Surfaces in iCal export. | Violet border + "📅 You're registered for this" |
| 👎 Not for me | −2 to every category, −1 to venue | Faded |
| 🚗 Too far for this | Penalizes the source/group by −8 and venue by −8. Does NOT touch category weights. | Faded |
| ✓ I went to this + ★ 1–5 | (stars − 3) × 4 to every category; half that to the venue | Blue border, persistent star count |
All clicks are optimistic — the card updates instantly, then the list refetches in the background, so positions don't jump while you're rating.
This is the beginning of the README. Read the rest at the original. Read the full README ↗