All deployments

Peter Theill
Peter Theill 
deployed a refactoring 14 days ago
Peter Theill
Peter Theill 
deployed a documentation update 14 days ago
Peter Theill
Peter Theill 
deployed a documentation update 14 days ago
Peter Theill
Peter Theill 
deployed a feature 14 days ago
Peter Theill
Peter Theill 
deployed a feature 14 days ago
14 days ago
✨ Add launchtowin listing metadata and ignore its directory
Peter Theill
Peter Theill 
deployed a bug fix 18 days ago
18 days ago
🐛 Fix DKK conversion failing in production
The ECB chains to a Sectigo root missing from Debian bookworm's CA
bundle, so ship it with the app. Each source also converts right after
it syncs, and one failing currency no longer blocks the others.
Peter Theill
Peter Theill 
deployed a bug fix 18 days ago
18 days ago
🐛 Run migrations on boot behind Thruster
The entrypoint only ran db:prepare for "./bin/rails server", but the
container starts "./bin/thrust ./bin/rails server", so new migrations
never ran and Solid Queue crashed Puma on missing tables.
Peter Theill
Peter Theill 
deployed a bug fix 18 days ago
18 days ago
🐛 Fix missing colors on revenue tile and Labs chips
Tailwind skipped arbitrary classes inside ERB conditionals; a new test
checks every admin class is in the built CSS.
Peter Theill
Peter Theill 
deployed a feature 18 days ago
18 days ago
✨ Add revenue tracking for Stripe and app stores
Net proceeds in DKK from both Stripe accounts, App Store and Google Play,
synced nightly by Solid Queue running inside Puma.
Peter Theill
Peter Theill 
deployed a styling change 18 days ago
18 days ago
💄 Redesign admin with Bento layout and ⌘K palette
Own admin layout, restyled posts, projects and files pages, and resized
WebP images with preloaded attachments so admin pages load fast.
Peter Theill
Peter Theill 
deployed a security update 29 days ago
Peter Theill
Peter Theill 
deployed a performance improvement 29 days ago
29 days ago
⚡️ Speed up deploys with a cached build on the server
Build with Kamal's remote builder on the server so the BuildKit cache
persists, and drop CI steps that are no longer needed
Peter Theill
Peter Theill 
deployed a documentation update 29 days ago
Peter Theill
Peter Theill 
deployed a documentation update about 1 month ago
about 1 month ago
🔥 Remove .windsurfrules; AGENTS.md is the agent instructions file
📝 Replace Copilot instructions with AGENTS.md for all coding agents
Peter Theill
Peter Theill 
deployed a documentation update about 1 month ago
about 1 month ago
🔥 Remove .windsurfrules; AGENTS.md is the agent instructions file
📝 Replace Copilot instructions with AGENTS.md for all coding agents
Peter Theill
Peter Theill 
deployed a feature about 1 month ago
Peter Theill
Peter Theill 
deployed a documentation update about 1 month ago
about 1 month ago
📝 Replace Copilot instructions with AGENTS.md
🔥 Remove .windsurfrules
Peter Theill
Peter Theill 
deployed a security update about 1 month ago
about 1 month ago
🔒️ Blocks hold on the website too; reports only reach what the reporter can see

  • The web comment form and "ask for this item" now honour blocks, and the


rule lives in the model (Donation#open_to?, a Comment validation), so any
future path is covered as well.

  • The web comment controller hides drafts like the donation page does.

  • Reports of a draft listing, or of a comment on one, 404 for anyone but


the owner, so they can't be used to find out that a draft exists.
Peter Theill
Peter Theill 
deployed a documentation update about 1 month ago
about 1 month ago
:shield: Report, block, filter and terms for user content; new privacy policy and terms; OpenStreetMap tiles
What App Review guideline 1.2 asks of an app with user content:

  • Reports of listings, comments and people (POST /api/reports), emailed to


support straight away.

  • Blocks (/api/blocks): a blocked person's listings, comments and activity


are hidden, their requests are withdrawn, and they can no longer ask for
or comment on the blocker's things.

  • A whole-word filter (config/content_filter.yml) on listing titles,


descriptions and comments, in all seven languages.

  • App users must accept the terms (POST /api/me/accept_terms) before they


post, comment or ask for things.
The privacy policy now names every service that handles data (Hetzner,
Resend, OpenAI for photo suggestions, the sign-in providers), how long data
is kept and how to delete an account; the terms state zero tolerance for
objectionable content and how reports are handled. Both are now in all
seven languages instead of English only.
Maps use OpenStreetMap's tiles, with the attribution they require, instead
of Carto.
Peter Theill
Peter Theill 
deployed a performance improvement about 1 month ago