Hosting a burn for everybody.
Initially for The Borderland, but designed to be as general, configurable and parameterizable as possible.
- allow changing name and birthday (only admins can change)
- users can apply for a change of name and/or birthday, auto-accept with small Levenshtein distance
- allow search for memberships (both email and name)
- generate and send out membership QR PDF via email
- link list (both on theborderland.se and in another section besides the timeline overview)
- membership scanner
- consolidating existing tools
- add the entire dreams system (including receipt submission), i.e. everything what Cobudget and Open Collective currently do
- add a single interface for all shift signups (clowns, sanctuary, threshold, toilets, etc.)
- issue so far: realities leads didn't have proper contact details from everyone!
- add a single interface for rideshares
- integrate the map and the JOMO guide, i.e. everything what the Dust app currently does
- integrate everything Talk currently does
- add LLM-based AP writing assistance (based on the AP How do we run Advice Processes?)
- add all the functionality for BurnerBox
- technical
- set up as a Progressive Web App (PWA) to allow seamless use on mobile
- allow "one-click deployment" onto own server, e.g. using Fly
- i18n
It also bothered me that Vercel and/or the Supabase Postgres database struggled even for this tiny amount of time... That's my ambitious 100% uptime brain, more as a pretty exciting infrastructural challenge :D Also Vercel and Supabase are of course still regular commercial companies, while it would be sooo great to have a 100% burner-managed stack.
For next year my dream is to have something like self-hosted Vercel, but instead of one party managing a big data center, we would be massively decentralized, so that everyone can voluntarily "donate" servers, and then those servers would act like one big unified edge network (like https://vercel.com/docs/edge-network/overview) which can serve anything from any Docker container. Also a bit like https://fly.io/
- Make sure that you have recent versions of Node.js and Docker installed
- Clone this repositorys
- Run
npm install - Run
npm run supabase:start - Copy the contents from .env.template to .env and use the keys from the output of the previous command to populate the file. If you are running on somewhere else than localhost update the URLs as well.
- Run
npm run dev - Go to http://localhost:3000
- Click on "Click to login", enter any email address and click on "Send magic link"
- Go to http://localhost:54324/monitor and click on the first entry
- Copy the 6-digit code from that email into your login tab and submit it
- Go to http://localhost:54323/project/default/editor and click on "profiles" on the left
- Set "is_admin" to TRUE for your user
- Reload your tab with http://localhost:3000/
- Click on the gear icon titled "Administration" in the top left
- Click on "Projects" to reach http://localhost:3000/admin/projects
- Click on "Add project" and enter the following
- Name:
The Borderland 2025 - Type:
burn - Slug:
the-borderland-2025(determined automatically)
- Name:
- Click on "Submit"
- Click on "The Borderland 2025" in the left bar to reach http://localhost:3000/burn/the-borderland-2025
- Click on "Configuration" and scroll to the bottom to reach http://localhost:3000/burn/the-borderland-2025/admin/config
- Go to https://dashboard.stripe.com/test/apikeys, copy out the secret key (starting with
sk_test_) and copy it into thestripe_secret_api_keyfield of the burn config. You will need a stripe account in advance for this. - Make sure you have the stripe command line tools installed. If you do not have these installed (you can test by typing in stripe in your command line) find instructions here: https://docs.stripe.com/stripe-cli
- Run
npm run stripe:listenin a separate console. Follow the instructions on activating the keys. Once done run the command again, copy out the webhook signing secret (starting withwhsec_) and copy it into thestripe_webhook_secretof the burn config - Click on "Save configuration"
To investigate Stripe webhook delivery failures (e.g. after seeing failed events in the Stripe Dashboard), run npm run webhook:investigate (optionally with -- 14 for the last 14 days). This fetches both Stripe’s failed deliveries and Vercel runtime logs into misc/.
npm run supabase:sql runs arbitrary SQL against the production database. Requires SUPABASE_DB_URL in .env (from Supabase Dashboard > Project Settings > Database > Connection string).
- Run an SQL file:
npm run supabase:sql -- -f path/to/file.sql - Run inline SQL:
npm run supabase:sql -- "SELECT 1"
For example, to verify which webhook-affected users already have memberships: npm run supabase:sql -- -f misc/verify-webhook-affected-users.sql.
When you want to change the database schema, first create new migration file using:
npx supabase migration new migration_name
# edit migration file
npx supabase migration up # applies the new migration to the local database
npx supabase db push # applies the new migration to the remote database
npx supabase db reset # resets the local database and applies all migrations
Dump remote database and initialize local one with it:
npx supabase db dump -f supabase/seed.sql --data-only
npx supabase db reset
When you ran npx supabase db dump -f supabase/seed.sql --data-only, but then npx supabase db reset throws some SQL error (e.g. a mission column), a Supabase version update has happened on the remote which made the schemas incompatible. This means that the local Supabase instance has to be updated. To fix it:
- Locally, nuke everything that has to do with Supabase in Docker.
npm uninstall @supabase/ssr @supabase/supabase-js supabase; npm i @supabase/ssr @supabase/supabase-js; npm i -D supabasesupabase link(this is crucial, because e.g.supabase/.temp/gotrue-versionneeds to be updated, as the Docker images pulled in the next step depend on that)npm run supabase:start
Please contact synergies@hermesloom.org for collaboration and co-creation.