--- title: "Fundraising campaigns with card donations, built by Claude Code on Elements" author: "@chris" author_url: https://elements.dev/u/@chris published: 2026-09-30T21:41:29.391Z url: https://elements.dev/demos/fundraising-campaigns-with-card-donations-built-by-claude-uaxdnqlt kind: post format: article --- # Fundraising campaigns with card donations, built by Claude Code on Elements by [@chris](https://elements.dev/u/@chris) ยท 2026-09-30 ## Description Campaigns with a story, cover photo and live progress bar, card donations on a donor wall, emailed receipts, and updates to donors. Raisemeter needed campaign pages with a story and a cover photo, card donations, a progress bar and donor wall that move as gifts arrive, emailed receipts and updates to donors. Each of those is a part of Elements, so the agent spent its 17 minutes on the campaigns themselves. - **A live meter and donor wall.** Donations are a LiveTable, one view per campaign. When a gift is recorded, every open campaign page moves its progress bar and adds the donor's name and message to the wall, and the donor's email stays on the server. - **Donations by card.** A donor picks an amount and pays through Stripe. The gift is recorded when the donor returns and again when Stripe's webhook arrives, once either way. Until a Stripe key is added, an in-app test checkout stands in and records the gift the same way, and in production the app registers its own webhook on the first checkout. - **Cover photos and stories.** An organizer uploads a cover photo straight from the campaign form and it is stored in the database. Stories and updates are written in Markdown. - **Background work.** A job emails each donor a receipt once the gift is saved, and another sends an organizer's update to every donor as their own email. - **Server calls as function calls.** Donating, creating a campaign, posting an update and searching call server functions straight from the page with `@rpc`. - **Data and roles from SQL.** Migrations define the site and seed two organizers, four campaigns at different stages, their donations and updates. Sessions keep each campaign's dashboard and its donations export with its organizer.