BooMap: Finding Halloween Haunts Around Ashford
For the last few years I’ve run a little Halloween map for Ashford, listing the houses that go all out with decorations and the local events worth a visit. It started life as ashford-spooky, a Hugo site built from one big JSON file.
That worked, but it meant every house and event came to me by email, and I copied each one into the JSON by hand and rebuilt the site. Great when a handful of people get in touch, but not fun, especially positioning all the pins on the map1.
So this year it’s been replaced with BooMap, and the old address now redirects there.
What’s New
- Public submissions. Anyone can add their own house or event. You sign in with a magic link, fill in a short form, and it appears on the map once I’ve given it a quick check.
- Better support for events. Events can have multiple dates and times, a link, and whether they’re free or paid, so the list shows what’s on and when at a glance.
- Spotted houses. If you walk past a house that’s gone all out, you can pin it too, so the map isn’t limited to people who know it exists.
- Less work for me. Instead of editing JSON, I just approve submissions.
You can also save places to visit, filter by houses, events or trick-or-treat stops, and switch to a heatmap to find the busiest streets. It works on phones too, which is where most people will be using it with a bag of sweets in the other hand. It’s also a PWA, so you can add it to your home screen and it feels “almost” native, opening full screen without the browser bars.
The Tech Stack
It’s a SvelteKit app (Svelte 5 and TypeScript), built into a Node server that runs in Docker. Storage is a SQLite2 database, accessed through Drizzle ORM, which is plenty for a map of Halloween houses.
Mapping is via MapLibre GL, with free vector tiles from OpenFreeMap. Addresses are looked up with a Photon geocoder, so no more copying lat/longs out of Google by hand.
Sign-in uses Better Auth3 with magic links sent through Amazon SES, so there are no passwords for me to look after. Photos are uploaded with Uppy, then resized to WebP with sharp on the server, which also strips their metadata. That matters when people are photographing their own front doors: no GPS tags leaking out with the pictures.
Testing is Vitest for unit tests and Playwright for end-to-end ones, and it’s all developed in a VS Code dev container, the same as this site.
Add Your Haunt
If you’re decorating this year, or running something spooky around Ashford, add it to the map. It takes a couple of minutes, and it’s a lot quicker than emailing me.
-
I could have made my life easier, but for a throwaway project I just found the location in google and copy pasted the lat/long into my file. ↩︎
-
SQLite is more than capable for this site, and I have some caching in front which also helps. ↩︎
-
I’ve used Better Auth a few times now, it really takes the pain out of setting up auth systems. ↩︎