Peter Theill

Peter Theill

Commanigy

My name is Peter Theill, a Copenhagen-based software engineer and entrepreneur. I’m a co-founder of Zublime, Outbound & Familio but also do indie-hacking at Commanigy. I started playing around with programming back in 1987 on a good old Commodore 64 and released my first couple of shareware products on Windows around 1994.

Deployment Stats

Total deployments
960

over 479 days

This week
4

4 this month

Most active day
27

on Nov 15, 2025

Running year activity
ā–ƒ
37 deployments in Aug
Aug
▁
18 deployments in Sep
Sep
ā–„
64 deployments in Oct
Oct
ā–‡
111 deployments in Nov
Nov
ā–‡
123 deployments in Dec
Dec
ā–ˆ
127 deployments in Jan
Jan
ā–…
81 deployments in Feb
Feb
ā–†
96 deployments in Mar
Mar
ā–ƒ
42 deployments in Apr
Apr
▁
6 deployments in May
May
▁
3 deployments in Jun
Jun
▁
4 deployments in Jul
Jul
Daily activity
Aug
Sep
Oct
Nov
Dec
Jan
Feb
Mar
Apr
May
Jun
Jul
Mon Wed Fri
1 deployment on Sun, Jul 27, 2025
0 deployments on Mon, Jul 28, 2025
0 deployments on Tue, Jul 29, 2025
2 deployments on Wed, Jul 30, 2025
1 deployment on Thu, Jul 31, 2025
0 deployments on Fri, Aug 01, 2025
0 deployments on Sat, Aug 02, 2025
1 deployment on Sun, Aug 03, 2025
0 deployments on Mon, Aug 04, 2025
0 deployments on Tue, Aug 05, 2025
0 deployments on Wed, Aug 06, 2025
0 deployments on Thu, Aug 07, 2025
0 deployments on Fri, Aug 08, 2025
8 deployments on Sat, Aug 09, 2025
10 deployments on Sun, Aug 10, 2025
3 deployments on Mon, Aug 11, 2025
3 deployments on Tue, Aug 12, 2025
0 deployments on Wed, Aug 13, 2025
0 deployments on Thu, Aug 14, 2025
2 deployments on Fri, Aug 15, 2025
0 deployments on Sat, Aug 16, 2025
1 deployment on Sun, Aug 17, 2025
0 deployments on Mon, Aug 18, 2025
1 deployment on Tue, Aug 19, 2025
0 deployments on Wed, Aug 20, 2025
7 deployments on Thu, Aug 21, 2025
0 deployments on Fri, Aug 22, 2025
0 deployments on Sat, Aug 23, 2025
0 deployments on Sun, Aug 24, 2025
0 deployments on Mon, Aug 25, 2025
0 deployments on Tue, Aug 26, 2025
0 deployments on Wed, Aug 27, 2025
1 deployment on Thu, Aug 28, 2025
0 deployments on Fri, Aug 29, 2025
0 deployments on Sat, Aug 30, 2025
0 deployments on Sun, Aug 31, 2025
1 deployment on Mon, Sep 01, 2025
0 deployments on Tue, Sep 02, 2025
0 deployments on Wed, Sep 03, 2025
0 deployments on Thu, Sep 04, 2025
1 deployment on Fri, Sep 05, 2025
0 deployments on Sat, Sep 06, 2025
0 deployments on Sun, Sep 07, 2025
0 deployments on Mon, Sep 08, 2025
0 deployments on Tue, Sep 09, 2025
0 deployments on Wed, Sep 10, 2025
0 deployments on Thu, Sep 11, 2025
0 deployments on Fri, Sep 12, 2025
0 deployments on Sat, Sep 13, 2025
5 deployments on Sun, Sep 14, 2025
7 deployments on Mon, Sep 15, 2025
0 deployments on Tue, Sep 16, 2025
0 deployments on Wed, Sep 17, 2025
0 deployments on Thu, Sep 18, 2025
0 deployments on Fri, Sep 19, 2025
1 deployment on Sat, Sep 20, 2025
3 deployments on Sun, Sep 21, 2025
0 deployments on Mon, Sep 22, 2025
0 deployments on Tue, Sep 23, 2025
0 deployments on Wed, Sep 24, 2025
0 deployments on Thu, Sep 25, 2025
0 deployments on Fri, Sep 26, 2025
0 deployments on Sat, Sep 27, 2025
0 deployments on Sun, Sep 28, 2025
0 deployments on Mon, Sep 29, 2025
0 deployments on Tue, Sep 30, 2025
0 deployments on Wed, Oct 01, 2025
0 deployments on Thu, Oct 02, 2025
0 deployments on Fri, Oct 03, 2025
0 deployments on Sat, Oct 04, 2025
0 deployments on Sun, Oct 05, 2025
1 deployment on Mon, Oct 06, 2025
0 deployments on Tue, Oct 07, 2025
0 deployments on Wed, Oct 08, 2025
7 deployments on Thu, Oct 09, 2025
4 deployments on Fri, Oct 10, 2025
1 deployment on Sat, Oct 11, 2025
5 deployments on Sun, Oct 12, 2025
2 deployments on Mon, Oct 13, 2025
1 deployment on Tue, Oct 14, 2025
1 deployment on Wed, Oct 15, 2025
1 deployment on Thu, Oct 16, 2025
7 deployments on Fri, Oct 17, 2025
9 deployments on Sat, Oct 18, 2025
5 deployments on Sun, Oct 19, 2025
5 deployments on Mon, Oct 20, 2025
10 deployments on Tue, Oct 21, 2025
3 deployments on Wed, Oct 22, 2025
1 deployment on Thu, Oct 23, 2025
1 deployment on Fri, Oct 24, 2025
0 deployments on Sat, Oct 25, 2025
0 deployments on Sun, Oct 26, 2025
0 deployments on Mon, Oct 27, 2025
0 deployments on Tue, Oct 28, 2025
0 deployments on Wed, Oct 29, 2025
0 deployments on Thu, Oct 30, 2025
0 deployments on Fri, Oct 31, 2025
0 deployments on Sat, Nov 01, 2025
0 deployments on Sun, Nov 02, 2025
0 deployments on Mon, Nov 03, 2025
0 deployments on Tue, Nov 04, 2025
0 deployments on Wed, Nov 05, 2025
2 deployments on Thu, Nov 06, 2025
0 deployments on Fri, Nov 07, 2025
0 deployments on Sat, Nov 08, 2025
2 deployments on Sun, Nov 09, 2025
5 deployments on Mon, Nov 10, 2025
2 deployments on Tue, Nov 11, 2025
2 deployments on Wed, Nov 12, 2025
0 deployments on Thu, Nov 13, 2025
3 deployments on Fri, Nov 14, 2025
27 deployments on Sat, Nov 15, 2025
1 deployment on Sun, Nov 16, 2025
0 deployments on Mon, Nov 17, 2025
1 deployment on Tue, Nov 18, 2025
2 deployments on Wed, Nov 19, 2025
4 deployments on Thu, Nov 20, 2025
5 deployments on Fri, Nov 21, 2025
2 deployments on Sat, Nov 22, 2025
6 deployments on Sun, Nov 23, 2025
9 deployments on Mon, Nov 24, 2025
4 deployments on Tue, Nov 25, 2025
2 deployments on Wed, Nov 26, 2025
7 deployments on Thu, Nov 27, 2025
5 deployments on Fri, Nov 28, 2025
12 deployments on Sat, Nov 29, 2025
8 deployments on Sun, Nov 30, 2025
7 deployments on Mon, Dec 01, 2025
0 deployments on Tue, Dec 02, 2025
0 deployments on Wed, Dec 03, 2025
0 deployments on Thu, Dec 04, 2025
7 deployments on Fri, Dec 05, 2025
3 deployments on Sat, Dec 06, 2025
5 deployments on Sun, Dec 07, 2025
0 deployments on Mon, Dec 08, 2025
3 deployments on Tue, Dec 09, 2025
4 deployments on Wed, Dec 10, 2025
1 deployment on Thu, Dec 11, 2025
10 deployments on Fri, Dec 12, 2025
6 deployments on Sat, Dec 13, 2025
2 deployments on Sun, Dec 14, 2025
6 deployments on Mon, Dec 15, 2025
1 deployment on Tue, Dec 16, 2025
2 deployments on Wed, Dec 17, 2025
5 deployments on Thu, Dec 18, 2025
1 deployment on Fri, Dec 19, 2025
10 deployments on Sat, Dec 20, 2025
4 deployments on Sun, Dec 21, 2025
6 deployments on Mon, Dec 22, 2025
2 deployments on Tue, Dec 23, 2025
0 deployments on Wed, Dec 24, 2025
0 deployments on Thu, Dec 25, 2025
3 deployments on Fri, Dec 26, 2025
7 deployments on Sat, Dec 27, 2025
3 deployments on Sun, Dec 28, 2025
6 deployments on Mon, Dec 29, 2025
11 deployments on Tue, Dec 30, 2025
8 deployments on Wed, Dec 31, 2025
11 deployments on Thu, Jan 01, 2026
13 deployments on Fri, Jan 02, 2026
8 deployments on Sat, Jan 03, 2026
13 deployments on Sun, Jan 04, 2026
4 deployments on Mon, Jan 05, 2026
3 deployments on Tue, Jan 06, 2026
5 deployments on Wed, Jan 07, 2026
8 deployments on Thu, Jan 08, 2026
1 deployment on Fri, Jan 09, 2026
0 deployments on Sat, Jan 10, 2026
1 deployment on Sun, Jan 11, 2026
6 deployments on Mon, Jan 12, 2026
0 deployments on Tue, Jan 13, 2026
3 deployments on Wed, Jan 14, 2026
4 deployments on Thu, Jan 15, 2026
3 deployments on Fri, Jan 16, 2026
1 deployment on Sat, Jan 17, 2026
5 deployments on Sun, Jan 18, 2026
4 deployments on Mon, Jan 19, 2026
2 deployments on Tue, Jan 20, 2026
8 deployments on Wed, Jan 21, 2026
4 deployments on Thu, Jan 22, 2026
2 deployments on Fri, Jan 23, 2026
5 deployments on Sat, Jan 24, 2026
3 deployments on Sun, Jan 25, 2026
1 deployment on Mon, Jan 26, 2026
1 deployment on Tue, Jan 27, 2026
0 deployments on Wed, Jan 28, 2026
0 deployments on Thu, Jan 29, 2026
6 deployments on Fri, Jan 30, 2026
2 deployments on Sat, Jan 31, 2026
1 deployment on Sun, Feb 01, 2026
2 deployments on Mon, Feb 02, 2026
6 deployments on Tue, Feb 03, 2026
2 deployments on Wed, Feb 04, 2026
0 deployments on Thu, Feb 05, 2026
2 deployments on Fri, Feb 06, 2026
0 deployments on Sat, Feb 07, 2026
1 deployment on Sun, Feb 08, 2026
1 deployment on Mon, Feb 09, 2026
2 deployments on Tue, Feb 10, 2026
0 deployments on Wed, Feb 11, 2026
5 deployments on Thu, Feb 12, 2026
7 deployments on Fri, Feb 13, 2026
6 deployments on Sat, Feb 14, 2026
1 deployment on Sun, Feb 15, 2026
5 deployments on Mon, Feb 16, 2026
1 deployment on Tue, Feb 17, 2026
4 deployments on Wed, Feb 18, 2026
4 deployments on Thu, Feb 19, 2026
1 deployment on Fri, Feb 20, 2026
0 deployments on Sat, Feb 21, 2026
3 deployments on Sun, Feb 22, 2026
3 deployments on Mon, Feb 23, 2026
0 deployments on Tue, Feb 24, 2026
2 deployments on Wed, Feb 25, 2026
2 deployments on Thu, Feb 26, 2026
6 deployments on Fri, Feb 27, 2026
14 deployments on Sat, Feb 28, 2026
1 deployment on Sun, Mar 01, 2026
1 deployment on Mon, Mar 02, 2026
3 deployments on Tue, Mar 03, 2026
0 deployments on Wed, Mar 04, 2026
4 deployments on Thu, Mar 05, 2026
3 deployments on Fri, Mar 06, 2026
0 deployments on Sat, Mar 07, 2026
2 deployments on Sun, Mar 08, 2026
8 deployments on Mon, Mar 09, 2026
0 deployments on Tue, Mar 10, 2026
5 deployments on Wed, Mar 11, 2026
3 deployments on Thu, Mar 12, 2026
2 deployments on Fri, Mar 13, 2026
4 deployments on Sat, Mar 14, 2026
9 deployments on Sun, Mar 15, 2026
1 deployment on Mon, Mar 16, 2026
2 deployments on Tue, Mar 17, 2026
0 deployments on Wed, Mar 18, 2026
1 deployment on Thu, Mar 19, 2026
6 deployments on Fri, Mar 20, 2026
8 deployments on Sat, Mar 21, 2026
13 deployments on Sun, Mar 22, 2026
2 deployments on Mon, Mar 23, 2026
3 deployments on Tue, Mar 24, 2026
2 deployments on Wed, Mar 25, 2026
5 deployments on Thu, Mar 26, 2026
2 deployments on Fri, Mar 27, 2026
2 deployments on Sat, Mar 28, 2026
0 deployments on Sun, Mar 29, 2026
1 deployment on Mon, Mar 30, 2026
3 deployments on Tue, Mar 31, 2026
0 deployments on Wed, Apr 01, 2026
1 deployment on Thu, Apr 02, 2026
3 deployments on Fri, Apr 03, 2026
1 deployment on Sat, Apr 04, 2026
6 deployments on Sun, Apr 05, 2026
1 deployment on Mon, Apr 06, 2026
2 deployments on Tue, Apr 07, 2026
1 deployment on Wed, Apr 08, 2026
0 deployments on Thu, Apr 09, 2026
0 deployments on Fri, Apr 10, 2026
7 deployments on Sat, Apr 11, 2026
3 deployments on Sun, Apr 12, 2026
1 deployment on Mon, Apr 13, 2026
2 deployments on Tue, Apr 14, 2026
0 deployments on Wed, Apr 15, 2026
2 deployments on Thu, Apr 16, 2026
0 deployments on Fri, Apr 17, 2026
1 deployment on Sat, Apr 18, 2026
6 deployments on Sun, Apr 19, 2026
2 deployments on Mon, Apr 20, 2026
1 deployment on Tue, Apr 21, 2026
1 deployment on Wed, Apr 22, 2026
1 deployment on Thu, Apr 23, 2026
0 deployments on Fri, Apr 24, 2026
0 deployments on Sat, Apr 25, 2026
0 deployments on Sun, Apr 26, 2026
0 deployments on Mon, Apr 27, 2026
0 deployments on Tue, Apr 28, 2026
0 deployments on Wed, Apr 29, 2026
0 deployments on Thu, Apr 30, 2026
0 deployments on Fri, May 01, 2026
1 deployment on Sat, May 02, 2026
0 deployments on Sun, May 03, 2026
0 deployments on Mon, May 04, 2026
0 deployments on Tue, May 05, 2026
0 deployments on Wed, May 06, 2026
0 deployments on Thu, May 07, 2026
0 deployments on Fri, May 08, 2026
0 deployments on Sat, May 09, 2026
0 deployments on Sun, May 10, 2026
0 deployments on Mon, May 11, 2026
0 deployments on Tue, May 12, 2026
0 deployments on Wed, May 13, 2026
0 deployments on Thu, May 14, 2026
0 deployments on Fri, May 15, 2026
0 deployments on Sat, May 16, 2026
0 deployments on Sun, May 17, 2026
0 deployments on Mon, May 18, 2026
0 deployments on Tue, May 19, 2026
0 deployments on Wed, May 20, 2026
0 deployments on Thu, May 21, 2026
1 deployment on Fri, May 22, 2026
0 deployments on Sat, May 23, 2026
0 deployments on Sun, May 24, 2026
0 deployments on Mon, May 25, 2026
1 deployment on Tue, May 26, 2026
0 deployments on Wed, May 27, 2026
0 deployments on Thu, May 28, 2026
1 deployment on Fri, May 29, 2026
0 deployments on Sat, May 30, 2026
2 deployments on Sun, May 31, 2026
0 deployments on Mon, Jun 01, 2026
0 deployments on Tue, Jun 02, 2026
0 deployments on Wed, Jun 03, 2026
0 deployments on Thu, Jun 04, 2026
0 deployments on Fri, Jun 05, 2026
0 deployments on Sat, Jun 06, 2026
0 deployments on Sun, Jun 07, 2026
0 deployments on Mon, Jun 08, 2026
0 deployments on Tue, Jun 09, 2026
0 deployments on Wed, Jun 10, 2026
0 deployments on Thu, Jun 11, 2026
1 deployment on Fri, Jun 12, 2026
0 deployments on Sat, Jun 13, 2026
0 deployments on Sun, Jun 14, 2026
0 deployments on Mon, Jun 15, 2026
0 deployments on Tue, Jun 16, 2026
0 deployments on Wed, Jun 17, 2026
0 deployments on Thu, Jun 18, 2026
0 deployments on Fri, Jun 19, 2026
0 deployments on Sat, Jun 20, 2026
0 deployments on Sun, Jun 21, 2026
0 deployments on Mon, Jun 22, 2026
1 deployment on Tue, Jun 23, 2026
1 deployment on Wed, Jun 24, 2026
0 deployments on Thu, Jun 25, 2026
0 deployments on Fri, Jun 26, 2026
0 deployments on Sat, Jun 27, 2026
0 deployments on Sun, Jun 28, 2026
0 deployments on Mon, Jun 29, 2026
0 deployments on Tue, Jun 30, 2026
0 deployments on Wed, Jul 01, 2026
0 deployments on Thu, Jul 02, 2026
0 deployments on Fri, Jul 03, 2026
0 deployments on Sat, Jul 04, 2026
0 deployments on Sun, Jul 05, 2026
0 deployments on Mon, Jul 06, 2026
0 deployments on Tue, Jul 07, 2026
0 deployments on Wed, Jul 08, 2026
0 deployments on Thu, Jul 09, 2026
0 deployments on Fri, Jul 10, 2026
0 deployments on Sat, Jul 11, 2026
0 deployments on Sun, Jul 12, 2026
0 deployments on Mon, Jul 13, 2026
0 deployments on Tue, Jul 14, 2026
0 deployments on Wed, Jul 15, 2026
0 deployments on Thu, Jul 16, 2026
0 deployments on Fri, Jul 17, 2026
0 deployments on Sat, Jul 18, 2026
0 deployments on Sun, Jul 19, 2026
0 deployments on Mon, Jul 20, 2026
0 deployments on Tue, Jul 21, 2026
0 deployments on Wed, Jul 22, 2026
0 deployments on Thu, Jul 23, 2026
0 deployments on Fri, Jul 24, 2026
0 deployments on Sat, Jul 25, 2026
1 deployment on Sun, Jul 26, 2026
2 deployments on Mon, Jul 27, 2026
0 deployments on Tue, Jul 28, 2026
1 deployment on Wed, Jul 29, 2026
0 deployments on Thu, Jul 30, 2026
Less
More

Recent deployments by Peter Theill

3 days ago
✨ MCP endpoint for importing donations from Facebook groups (#24)
Adds an MCP server at POST /mcp so an AI agent can turn posts from a public
Facebook group into donations on Forward.
The server never touches Facebook. The agent does the reading, with its own
browser session and its own membership of the groups; the endpoint only turns
"here is a post" into a record. That keeps scraping out of the application and
leaves the MCP surface small enough to stay stable.
Three properties are enforced structurally rather than by convention:

  • Imports are drafts. A new `draft` state is invisible everywhere, because


every listing already goes through `active`, and the direct URL 404s for
anybody but its owner. Watch alerts are held back until `publish!`.

  • Imports are credited to the original poster. `user_id` stays the importing


account - a row needs an owner, and that is who to ask about it - while the
donation is attributed to `source_author_name` and links to `source_url`.
Imports are not requestable, because the importer does not have the item;
visitors are sent to the original post instead. `create_donation` requires
both fields, so there is no way to use this endpoint to post something as
your own.

  • Re-scanning a group is safe. `source_url` is unique at the database, and is


normalised to drop fbclid, mibextid and friends first, so the second import
of a post is refused rather than duplicated.
Two changes fall out of the ownership split. The donor-currency check is
skipped for imports, since `user` is the importer and their region says nothing
about the market the donation belongs to - somebody in Copenhagen curating a
Stockholm group is importing SEK donations, and that is correct. To keep the
invariant that check was protecting, `User#update_stats!` now counts only
donations the user posted themselves, so a curator is neither credited for
items they never had nor able to mix currencies into their totals. The region
and charity checks are untouched.
`list_charities` takes a region and returns only charities whose currency
matches it. The currency rule is the constraint an agent would otherwise trip
over on most calls, and answering it in the tool signature beats answering it
in an error message.
Image URLs arrive from a page an agent was told to go and read, so they are
attacker-influenced in the ordinary case. `RemoteImageFetcher` is https-only,
resolves the host and checks every address it resolves to, pins the connection
to the address it checked, and re-runs all of that per redirect hop.
Authentication is a bearer token rather than the session cookie, because the
caller is not a browser. Tokens are stored as HMAC digests, shown once, can be
named and renamed, and are rate limited per token.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
ā¬†ļø Upgrade libraries
šŸ’ø Scope donation currency to the market (#23)
Currency becomes a property of the region a donation happens in rather than
something the donor picks per item.

  • a region owns the currency; a charity accepts exactly one, which keeps its


total raised a single figure

  • a donation copies its region's currency and validates it against the region,


the charity and the donor's own region

  • the locale decides only how an amount is punctuated, never which currency

  • the currency picker is gone from the donation form; `market_controller` keeps


the symbol and charity list in step with the selected region

  • `currency_symbol` columns are dropped for a new `Currency` model, following


`Locale` as the single source of truth

  • the admin dashboard's cross-market total is grouped by currency, not summed


Also makes `regions.donations_count` a true counter cache. An active-only
counter cannot work, since claiming or deleting a donation is an update and
never fires the create/destroy callbacks that maintain it. The regions index,
which labelled that number "available items", now queries for the active count.
3 days ago
🌐 Multi-language support: Danish, Swedish, Norwegian, German, French and Spanish (#22)

  • 🌐 Add multi-language support (da, sv, no, de, fr, es)


Localises the site into Danish, Swedish, Norwegian, German, French and
Spanish alongside English, using Rails' own i18n rather than a gem.
URLs
English keeps its existing unprefixed paths, so no URL moves and no
redirects are needed. The other languages are served from a `/da/...`
prefix via `scope "(:locale)"`. Admin, the API and sitemaps opt out.
Locale resolution
URL > signed-in user's profile > cookie > Accept-Language > English.
The URL always wins so a shared or crawled link renders the language it
was shared in. Visitors who prefer another language are redirected once
from an unprefixed path, keeping one canonical URL per language.
Routes without a `(:locale)` segment never redirect. This matters for
the OmniAuth callbacks, which live on fixed paths: redirecting them
discards the auth hash and breaks sign-in.
SEO
`<html lang>`, canonical, hreflang for all seven languages plus
x-default, og:locale and its alternates, and translated titles and
descriptions. The sitemap emits per-entry alternates rather than
duplicating rows per language.
Language selector
Footer dropdown reusing the existing dropdown controller. Saves to the
user's profile when signed in and to a cookie otherwise. Language is
also editable on the profile form.
Content
Navigation, forms, flash messages, emails and meta tags, plus the home,
search, about, press, help, FAQ and MobilePay pages. Emails render in
the recipient's saved language, including their links. Region names and
descriptions are translatable per locale from the admin.
Terms and privacy stay English-only for now and reach other locales
through the fallback; they are keyed and ready for a reviewed
translation.
Fixes found along the way

  • charities#show declared format.rss with no template, so the request


500'd. Added the feed.

  • `xml.language I18n.locale` passed a Symbol, which Builder reads as a


namespace prefix and emitted `<language:en/>`.

  • FAQ answers moved into locale data still contained ERB, which


rendered as literal text. Links now use placeholders resolved in a
helper so they stay locale-correct.
Query efficiency
Fixed N+1s on donation cards (donor avatars, charity logos, regions),
charity logos on the home/MobilePay/country/region pages, comment
authors, leaderboard donors, and notifications in both the navbar and
the notifications page. The sitemap no longer loads each user's
donations separately. Covered by tests that fail if the count grows
with the number of records.
Adds one gem, rails-i18n, for Rails' own date, number and validation
strings in the new languages.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

  • šŸ’š Fix CI: trailing newline and HTTP verb confusion


Both failures predate this branch and reproduce on develop, but they make
the build red, so they are fixed here.
Rubocop flagged a trailing blank line in admin/users_controller_test.rb.
Autocorrected; the file is otherwise untouched.
Brakeman flagged `request.get?` in Authentication#store_location: HEAD is
routed like GET, so a HEAD request skipped storing the return path.
It now treats the two alike.
The locale redirect had the same divergence, without being flagged. A
crawler checking an unprefixed URL with HEAD would have seen a different
answer than the GET that followed, so it redirects on HEAD as well.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
ā¬†ļø Update version
about 1 month ago
✨ implement poll finalization, email reminders, ICS export, and time slot support with updated dependencies.
about 1 month ago
šŸŽØ Update wallpapers guide for clarity and SEO
Revise content for better organization and readability. Enhance SEO
elements and improve descriptions for user engagement.
about 2 months ago
✨ Add comparative landing pages for competitors and pricing philosophy explanations
šŸ’„ Update UI for About page and add competitor list
Revise layout and styling for the About section, and introduce a
new markdown file detailing competitors in the journaling space.
2 months ago
šŸ’„ Implement voice recording upload failure recovery with retry, manual download, and reset options while adding dependent destruction for Entry associations
2 months ago
šŸ’„ Add custom audio player controller with playback controls, timeline, and transcription display
šŸ’„ Add dedicated audio attachment rendering and update visual styling for regular attachments in entry modal
šŸ’„ Update email box component with new minimal design and pink color theme
ā™»ļø Add empty day handling to calendar and prevent event listener duplication via namespaced turbo:load hooks
šŸ’„ Update dependencies and add ruby-vips gem
šŸ’„ Consolidate and style audio player component with optional deletion support
šŸ’„ Extract audio attachment display into a dedicated partial component
šŸ’„ Update journal index view layout and styling for improved responsiveness
šŸ’„ Add animated pending recording UI and update header navigation links
šŸ”§ Update lifetime supporter contribution price from $89 to $29 across pricing pages
✨ Implement voice recording functionality with background transcription and entry integration
2 months ago
šŸ’„ Pivot pricing page from lifetime supporter to lifetime backup plan
2 months ago
šŸ’„ upgrade Ruby to 3.4.9 and pin GitHub Actions to specific commit hashes
2 months ago
ā¬†ļø Upgrade Puppeteer to version 22
Skip browser downloads by using the system Chromium for improved efficiency.
ā¬†ļø Upgrade libraries
3 months ago
šŸ± Update asset images for seasonal themes
Replace dashboard and hero polaroid images to reflect seasonal updates.
3 months ago
šŸ”ļø Enhance SEO pages and UI elements
Update various SEO-related pages with improved text, styling, and
functionality. Introduce a development-only SEO pages index for easier
navigation and testing.
3 months ago
✨ Introduce photo booth feature
Add a new photo booth route and controller for capturing and uploading photos.
Update dashboard and layout to support the new feature.
šŸ’„ Update user lifetime display styling
Enhance the UI for lifetime users by adding a timestamp and improving the layout.
3 months ago
✨ Introduce sort order cycling in slideshow
Add functionality to cycle through media sort orders using the 'S' key.
Co-authored-by: Copilot <copilot@github.com>
✨ Introduce media sorting options in slideshow
Add sorting functionality for media items based on various criteria
such as added date and capture date, enhancing user experience in
the slideshow feature.
šŸ’„ Update archived events UI and count display
Enhance the header styling and update the displayed count of archived
events to reflect the total count instead of the current list size.
Co-authored-by: Copilot <copilot@github.com>
3 months ago
✨ Introduce guest access control feature
Update event permissions to allow hosts to control guest actions:
view and upload, view only, or upload only. This enhances user
experience and privacy management for event sharing.
Co-authored-by: Copilot <copilot@github.com>
šŸ’„ Add dismiss button to preservation nudge
Enhance the UI by adding a dismiss button to the preservation nudge bar.
Co-authored-by: Copilot <copilot@github.com>
3 months ago
šŸ—ƒļø Add covering index to metrics table
Introduce a new index on the metrics table to improve query performance
by including the count column.
3 months ago
šŸŽØ Improve code formatting and style consistency
Refactor Gemfile and middleware for better readability and maintainability.
3 months ago
šŸ’„ Update media sorting options
Enhance the dropdown for media sorting by adding options for oldest
and newest dates for both added and captured media.
Co-authored-by: Copilot <copilot@github.com>