Two gardeners talking beside wooden raised beds in a walled community garden
All Case Studies

// Nonprofit

Boca Raton Urban Gardens

Nonprofit Website, Online Giving & Back Office on 27ERP

Built bocagardens.org for a 501(c)(3) community-garden nonprofit in Boca Raton, FL, and set the organization up on 27ERP: one-time and monthly gifts through Stripe Checkout on the nonprofit's own account, a season of 65 garden beds sold from an interactive plot map, workdays and events with tickets, and seven website forms that arrive as prospects in a back office that speaks nonprofit — supporters, proposals, funds received.

65

Garden Beds on the Plot Map

One-time + Monthly

Gifts on the Nonprofit's Own Stripe Account

0

Payment Keys on the Website

7

Website Forms That Become CRM Records

// Product tour

Inside the Build

Marketing site

bocagardens.org: the home page, the Give hub and donate page, events, the interactive plot map and the planting calendar.

Next.js 16Tailwind CSS v4MotionVercelwww.bocagardens.org
Home page: rent a bed, join a workday, give something that grows
The Give hub: donations, bricks, trees and sponsorships
Donate: one-time or monthly, designation, tribute, cover the fee
Events and workdays, read from 27ERP
The plot map: 65 beds, availability from ticket stock
A South Florida planting calendar
The home page on a phone

Back office

27ERP set up as a nonprofit. These screens are from a fictional demo workspace with nonprofit wording — Supporters, Prospects, Funds received — not the client's data.

27ERPPostgreSQLGoogle Cloud Run
Dashboard: funds received, supporters, what needs attention (demo data)
Donations: every gift with totals and filters (demo data)
Supporters: the customer list in the nonprofit's own words (demo data)
Prospects with the form each one came from (demo data)
Events: a workday and a season of beds (demo data)
Stories and news, published from the back office (demo data)

// The problem · 4 pain points

The Challenge

A community-garden nonprofit in its second season needed its website to do real work: take gifts without a person in the loop, show which of its 65 beds were open and keep that in step with who had paid, sell seats to workdays and classes, and turn every volunteer, newsletter and sponsorship form into a record someone could follow up. Before giving moved onto 27ERP, a donation on the site was a pledge form, and staff emailed a payment link by hand.

01

Gifts needed a checkout

A donation was a pledge form followed by a payment link sent by hand, so monthly giving, tributes and designations all meant manual follow-up

02

65 beds, one season, a waitlist

Every bed's availability had to be visible on the site and stay in step with who had actually paid for the season

03

Workdays and classes with seats

Free and paid events needed sign-ups, tickets and a count of who was coming, without a second tool

04

One record per neighbor

A neighbor who gives, volunteers and rents a bed should be one supporter record, not three unrelated entries

// How it works

How It Works

The website holds no payment keys and no database of its own: every gift, bed, ticket and form goes through 27ERP's public API and lands as a record staff can work from.

Give

One-time or monthly, on the nonprofit's own Stripe account

  1. 01

    Donate page

    Amount, frequency, designation, tribute, cover the fee

  2. 02

    27ERP checkout

    The site posts the gift to the public donations API

  3. 03

    Stripe Checkout

    On the nonprofit's own connected account

  4. 04

    Gift recorded

    When Stripe confirms, once per monthly charge

  5. 05

    Supporter

    Matched by email, or created

Beds & events

A season of beds is one event with a ticket per bed

  1. 01

    Season event

    One event per garden season, a ticket type per bed

  2. 02

    Plot map

    Available, taken or not open, read from ticket stock

  3. 03

    Reserve a bed

    A one-seat order with a 30-minute hold

  4. 04

    Stripe Checkout

    Paid on the same connected account

  5. 05

    Bed marked taken

    Ticket stock updates the map on the next read

Forms & stories

Every form is a prospect; every story is an article

  1. 01

    Website form

    Contact, volunteer, newsletter, sponsor, brick, tree, waitlist

  2. 02

    Turnstile

    A bot check before anything is sent

  3. 03

    Prospect in 27ERP

    Tagged with the form it came from

  4. 04

    Reply from the record

    Two-way email on the prospect

  5. 05

    Article in 27ERP

    Stories and news drafted with a preview link

  6. 06

    Published to the site

    No redeploy; the site re-reads on a timer

// What we built

Our Solution

1

Marketing Site

Next.js 16 site with Tailwind CSS v4 and Motion: gardens with an interactive plot map, events, stories and news, a South Florida planting calendar, and a Give hub for donations, engraved bricks and memorial trees. Deployed on Vercel, every form guarded by Cloudflare Turnstile. The site reads 27ERP server-side through its public tenant API and holds no payment keys of its own.

2

Giving Through 27ERP

The donate page posts to 27ERP's donations checkout, which opens Stripe Checkout on the nonprofit's own connected account: preset or custom amounts, one-time or monthly, a designation, an in-honor or in-memory tribute with a notification email, anonymous giving and an option to cover the fee. The gift is recorded when Stripe confirms the money, and the donor is matched to a Supporter or becomes one.

3

Beds as a Season Event

Each garden season is one event in 27ERP with a ticket type per bed. The site maps ticket types to beds on the plot map — available, taken or not open — and reserving a bed creates a one-seat order with a 30-minute hold and Stripe Checkout. A full season shows a waitlist form instead, which files a prospect.

4

Events & Workdays

Workdays, family days and classes are 27ERP events with free or paid tickets. The site lists them from the same records, takes the order, and 27ERP holds the seats and emails a QR ticket per seat.

5

Forms That Become Prospects

Contact, volunteer, newsletter, sponsorship, brick, memorial-tree and bed-waitlist forms post to 27ERP as prospects tagged with the form they came from, so a Volunteer sign-up never looks like a quote request. Staff reply from the record with two-way email.

6

Stories From the Back Office

Stories and news are 27ERP articles with drafts and preview links, published to the site without a redeploy. The workspace is set up as a nonprofit, so staff see Supporters, Prospects, Proposals and Funds received on the main screens instead of customers, leads, estimates and revenue.

// Technologies used

Built With

Next.js
React
TypeScript
Tailwind CSS
Motion
Zod
Vercel
27ERP
Stripe Connect
PostgreSQL
Google Cloud Run
Cloudflare Turnstile

// Boca Raton, FL · Columbus, OH → nationwide

Ready for Similar Results?

Let's discuss how we can help bring your project to life.

Rather talk it through? Call today: (380) 270-2095