1 new donation
No active campaign

Nothing has been assigned to your role yet

Nothing is wrong with your account. Once a module is added to your role, it appears in the menu the next time a page loads.

Donations over time · last 30 days

View

Donation calendar

Participation

-
Group by
Group Students Rate

Top donors · YTD

Revenue by category

-
Category Share

Active campaigns

Donation timing · weekly

Showing 0 donations · Total $0Click any row to view full record
Showing 7 of 7 donorsClick any row to view full record
Showing 0 of 0 contacts
NameEmailStatusSourceAdded
Loading...Click any row to open it
FEEDBACK ·
Details
Showing 5 of 5 studentsClick any row to view full record
Showing 5 of 5 teachersClick any row to view full record
Showing allClick any row to view full record
CampaignStatusDatesDays LeftGoalRaisedDonors30-day TrendSlug

Basics

Edits here also reflect on the Publish to Site tab
Staged until you publish. To unpublish, use the status pill in the campaigns list.
💡 Tip: The full publishing controls — including the live preview, ticker text, and show/hide toggles — live on the Publish to Site tab.

Live Performance

38%
of goal
Donors
Avg gift
Days left
Form views
Campaign Playbook
Activities, messaging variations, and events teachers use to drive participation. Each activity is a unique "source" donors can select on the form, so you can measure which approaches actually move the needle.
ActivityTypeWeekStatusDonationsRaisedLever
How attribution works: When a donor fills out the form, an optional "What inspired you?" dropdown lists the active playbook activities. Donations attribute back here automatically, so you'll see which messaging variations actually drive giving. Use this to double-down on what works next campaign cycle.
Draft preview · a rough sketch, not the public page
Preview updates as you type. Changes don't go live until you click Publish.
Auto-calculated from completed donations (not editable).
Auto-calculated from donor families (not editable).
Days-left = end date minus today, clamped to at least 0

Donations for this Campaign

Total Raised
Donor Count
Avg Gift
Last 7 Days
DateDonorAmountMethodStudentsTeacherStatusMatch
Page size:

Suggested Amounts

Pre-filled buttons on the form. Click any tile to edit.
Stored on the linked donation form

How receipts work

A receipt is emailed automatically when a donation is captured. Nobody has to send it, and there is nothing to turn on.

It is marked as sent only once the email has actually gone out. If sending fails, the donation is still recorded and the receipt simply stays unsent, rather than the record claiming otherwise.

The subject line reads "Your donation receipt - Poinsettia PTA".

The sender address and the PTA's tax ID come from the hub settings, not from this screen. The tax ID line is included only when an EIN has been set, so a receipt never shows an empty tax-ID sentence.

Wording and sender changes are made in Settings, not per campaign.

Brand

Custom hex:

Public progress gauge

Shape, size and colours for the donation total
Stored as 120-600 (the server validates that range). A horizontal bar scales its thickness from this value; a vertical thermometer uses it as the tube height.
Preview Sample numbers - not this campaign's totals
Not on the public page yet. These settings are saved and served by the server, but the public fundraising page still draws its own fixed bar and ignores them. Until it is updated, changing these does not change what visitors see.

Linked Donation Form

Only donation-enabled forms appear here. Enable donations on a form from the Forms module first.

Shareable Links

Form Views This Week

Not tracked yet - view, scan, and embed counts aren't collected by the server.
Campaign QR Code
Scan to donate
Print on flyers, posters, sign-up tables
No public donation page linked yet
Each item separated by " | " becomes a scrolling segment

Blocks

Lower numbers appear higher on the public page

Public Embed Code

Note: There is no hosted script embed. Use the standalone panther-pride-campaigns-block.html file - drop it into your site as a paste-ready section, and click Download above to generate its campaign data.

Duplicate

Copies the content into a new draft. Donations, totals and the run are not copied.
Link a published donation form to see the public URL
This is the address to print on a flyer or encode in a QR code. It comes from the donation form linked to this campaign under Donations > Form, not from the campaign itself.
Campaign Settings
Campaign status below is live and applies immediately. The remaining panels describe features that are not built yet - they are listed so it is clear what Panther Hub does and does not do.

Campaign status

Current
Quick status · Publish, unpublish, or move to draft without leaving this screen. Each transition shows a confirmation explaining exactly what will happen.

Notifications

Not built yet. Panther Hub does not send any donation notification emails - there is no scheduled job or handler that sends a per-donation alert, daily summary, weekly treasurer summary, large-gift alert, match reminder or failed-payment alert. The toggles that were here controlled nothing, so they have been removed rather than left looking functional.

Tax receipts

Receipts are sent automatically for online payments. When a card payment succeeds the server emails the donor a tax receipt, subject "Your donation receipt - Poinsettia PTA". The donation is marked as receipted only once that email has actually gone out, so a send failure leaves it honestly unsent rather than claiming otherwise. The PTA tax-ID line is included only when an EIN is configured on the server.
A form can replace the standard receipt. If a donation form has an email response marked as the receipt, that response is sent instead. If it fails to send, the standard receipt goes out as a fallback, so a donor is never left with nothing. A non-receipt response is sent in addition to the standard receipt, not instead of it.
What is not built. Donations you log by hand (cash, check, or a manual entry) do not trigger any email - only completed online payments do. There is no year-end tax letter or annual statement and no downloadable receipt PDF. A completed donation can be opened as a printable receipt and re-sent to the donor from that donation's Receipts tab. Receipt wording and the sender address are server settings, not per-campaign ones.

Payments & Stripe

Stripe status is not surfaced here. This app does not read your Stripe account state, and the connection status, account id and payout figure previously shown on this panel were not real data. Check the Stripe dashboard directly for account status and payouts. Environment, statement descriptor, accepted payment methods and fee handling are determined by the server-side Stripe configuration and the payment intent it creates, not by any setting on this page.

Webhooks & integrations

Not built yet. Panther Hub does not send donation events to Slack or to a custom webhook URL - no outbound webhook exists, so the URL fields, the event checkboxes and the test button were removed. (Stripe calling Panther Hub to report a payment is a separate, inbound webhook and it does work - it is what records donations.)

Fiscal year & accounting

Not configurable here. Fiscal year start and reporting currency were removed because nothing read them - reports are bounded by calendar dates and amounts are always USD. The EIN is real, but it is a server setting, not a field on this page: when one is configured, it appears on the emailed donation receipt. There is no tax-classification field anywhere.

Data retention & privacy

Not built yet. Deleted records are purged on a fixed schedule set on the server, which this page cannot change, so the retention selector was removed. There is no inactive-donor anonymization job. The Export donor data, Right-to-be-forgotten request and Anonymize all PII buttons performed no action at all and have been removed - do not treat any past click of them as a completed compliance action.

Brand defaults

Not built yet. Default brand colour, font, tagline pattern and email signature were removed because nothing stored or applied them - creating a new campaign does not pre-fill from here. Set branding on each campaign in its Branding tab.

Campaign close behavior

Campaigns do not close themselves. Nothing runs on a campaign end date: the campaign is not marked closed, it is not archived, and the linked donation form stays live and keeps accepting payments until someone unpublishes it. The auto-close, auto-archive, late-donation and wrap-up-email settings were removed because no job existed to carry them out.

To actually end a campaign you must do both, by hand: set its status to Closed on this tab, and unpublish the donation form in the Forms module. Doing only the first leaves the form taking money.

Advanced & Danger zone

Archive campaign
Removes from active list but preserves all data. Reversible.
Permanently delete
Cannot be undone. Donations remain (required for accounting) but campaign and metadata are removed.
0 events

Pick a starting point. This only decides which pieces the next screen asks you for. You can change it later, and nothing is saved until you press Save draft.

Preview of content
This shows the wording and values you have entered, so you can see what is still empty. It is not a copy of the public events page, which is built by a different system this screen cannot read.

Change the starting point?

    0 programs
    0 products
    Click any row to view full record

    Before these tiers are saved

      May 2026

      Revenue by Source

      Expenses by Category

      Recent Transactions

      View all →
      TimeUserTypeActionTargetDetails

      From addresses

      The addresses newsletters and receipts are sent from. The domain is fixed and cannot be changed here.
      Loading...

      Email Sending

      Connect your real email account so messages send from your address
      Coming soon - real account connections are not live yet. Newsletters currently send from the verified addresses configured in From addresses above.
      Your connected accounts
      Connect a new account
      Security note: Authorization tokens are encrypted at rest using Cloudflare Workers secrets. Panther Hub uses minimal-scope OAuth — for Gmail this is gmail.send only, not full mailbox access. You can disconnect at any time from this page or directly in your Google/Microsoft account settings.

      Stripe Integration

      Accept donations, sponsorships, store purchases, event tickets
      Stripe — Not connected
      Connect a Stripe account to accept donations · 2.9% + 30¢ per transaction (industry standard)
      💳
      Card payments
      Visa, Mastercard, Amex, Discover
      🏦
      ACH bank transfers
      For larger gifts · 0.8% fee, capped at $5
      🍎
      Apple Pay & Google Pay
      One-tap donations on mobile
      🔁
      Recurring donations
      Monthly, quarterly, annual
      📧
      Receipt automation
      Auto-send via your connected email
      📊
      Reconciliation
      Auto-syncs to Accounting module
      How it works: When you click "Connect Stripe," you'll authenticate with your existing Stripe account (or create one). Panther Hub uses Stripe Connect to process payments directly to your bank account — funds never touch our servers. You retain full control of your Stripe dashboard, refunds, and disputes.

      Google Calendar Integration

      Push events from this calendar to your public website
      Google Calendar — Not configured
      Configure your calendar ID below so events appear on the public website
      No Calendar ID saved yet. Test connection and Sync are disabled so they cannot report a false result.
      Find this in Google Calendar → Settings → your calendar → "Integrate calendar" → Calendar ID. The calendar must be set to Public for our service to read it.
      This is the link parents use to subscribe in Apple/Google/Outlook calendars.
      Used when Google Calendar event has no category tag

      How to find your Calendar ID

      1. Open Google Calendar from a desktop browser
      2. In the left sidebar, hover over the calendar you want to share → click the three dots → Settings and sharing
      3. Under Access permissions, check "Make available to public" with "See all event details"
      4. Scroll down to Integrate calendar section
      5. Copy the Calendar ID (looks like abc123@group.calendar.google.com)
      6. Paste it above and click Test connection
      Recommended: Create a shared calendar specifically for PTA events (separate from anyone's personal calendar) so multiple board members can add events without exposing their private schedules.

      Organization Profile

      Not editable here yet. Panther Hub has no organization-settings store, so the name, address, contact email, phone and website cannot be changed on this screen and were removed rather than left looking editable.

      The tax ID (EIN) is real, and it is a server setting rather than a field on this page: when one is configured it appears on the receipt emailed to a donor. Everything else shown to donors comes from the individual form or campaign it belongs to.
      Click any row to open the task
      Preview - this module is not connected yet. Nothing here is saved.
      This Week
      0hrs
      across 0 entries
      This Month
      0hrs
      across 0 entries
      Year to Date
      0hrs
      across 0 entries
      Pending Approval
      0hrs
      0 entries waiting
      May 2026
      All Forms 0
      Refund Forms 0
      Volunteer 0
      Sponsorship 0
      Expense / Reimbursement 0
      Event 0
      Other 0
      0 forms
      Preview - this module is not connected. The filings shown are sample data, not the PTA's actual tax records.
      All Forms
      Federal · IRS
      State · California
      Templates
      ⚠️ Action Needed
      Approvals now live in Users and Roles. Open them.
      Available placeholders: {donor_name} {amount} {campaign_name} {org_name} {date} {children} {sender_name}
      10 tools 5 pinned to quick access

      Roles

      roles
      Click a role to set what it can do, one role at a time. Custom roles are not available yet - the server has no route to create one.

      Pending invitations

      People who have been invited and have not set a password yet. The server does not report when an invite was sent or when it expires, so those columns show a dash until it does.
      Showing 3 approvals Click any row to review details

      Approval Rules

      Which actions require approval before they take effect
      Loading approval rules...

      Activity

      User and role events from the audit log - the last 100 rows, filtered here.
      PERSON

      What they can do
        The setup link is the same self-serve link as Forgot password on the sign-in page - it goes to their email, it is not shown here. Sign out everywhere is not available yet; it needs a worker route. Deactivating signs them out.
        This panel decides what to show. The server decides what is allowed and refuses on its own, whatever this panel shows.
        Showing 0 records Soft-deleted records auto-purge after 30 days
        Type Name Email Phone Deleted Actions
        Connected
        Stripe
        Payment processing
        Connected
        Resend
        Transactional email
        Available
        QuickBooks
        Auto-sync donations to books
        Available
        Mailchimp
        Newsletter list sync

        Stripe Webhook Events

        api.poinsettiapta.org/webhooks/stripe
        TimeEventObjectStatusLatency
        No webhook events to display.
        Business
        A payment at a tier’s exact amount sets this automatically, and only ever upward - a smaller matching gift never demotes a business.
        Primary Contact
        Pledge
        From recorded payments. Record a cheque or cash payment below.
        Record a payment
        Logo
        Public website
        Published sponsors appear on the public website. Unpublished sponsors stay internal.
        Lower numbers appear first.
        The public website shows only the sponsor's name, tier, website and logo. Contact details, pledged and paid amounts, and notes are never published.
        Payment links
        Issue a link this business can use to pay online. Each link pays one fixed amount for the tier and school year on the sponsor record and works for 30 days. It is never emailed from here: you send it yourself. Issuing a new link cancels the unpaid one before it.
        DASHBOARD
        Recent activity
        The most recent recorded events, newest first.
        DASHBOARD
        Open tasks
        Tasks that are not done yet.
        DONATION ·
        Donor
        Name
        Email
        Phone
        Allocation
        Campaign
        Fund
        Linked students
        Counts toward these classrooms.
        Payment
        Amount
        Method
        Stripe Charge
        Date
        Open a donation to see its receipt status.
        DONOR
        Primary Contact
        First Name
        Edit
        Last Name
        Edit
        Email
        Edit
        Phone
        Edit
        Address
        Edit
        Employer Match
        Employer
        Edit
        Match Status
        None
        Edit
        Notes
        Family Notes
        Click to add note...
        Edit
        DateCampaignAmountStatus
        Loading donations...
        Loading family...
        Loading communications...
        SPONSOR
        Sponsor
        CONTACT
        Contact
        Contact
        First Name
        Last Name
        Email
        Status
        Source
        Use Edit below to change the name or status. Email and source cannot be changed here.
        Parent portal account
        FORM ENTRY
        Submission

        Are you sure?

        This action cannot be undone.

        Notice

        TASK
        Task
        Created by ...
        Description
        Description
        Edit
        Checklist
        Status & Assignment
        TOOL
        Fundraising Calculator
        Standard arithmetic plus campaign-aware shortcuts. Keyboard input supported.
         
        0
        TOOL · LIVE LEADERBOARD
        Classroom Rankings
        Classroom participation rankings
        No classroom rankings yet.
        🍕 Pizza Party Update: No pizza party winner yet. Send announcement →
        PLAYBOOK ACTIVITY · Week 2-4
        Class Pride Challenge
        Challenge   Active   ·   $3,420 raised from 38 donations
        Activity Setup
        Title
        Class Pride Challenge — Pizza Party Stakes
        Edit
        Type
        Challenge
        Edit
        Week / Date Range
        Weeks 2–4 · Aug 22 – Sep 12
        Edit
        Status
        Active
        Edit
        Channel
        Teacher → Students → Parents
        Edit
        Messaging
        Short Description
        Whichever classroom hits 100% family participation first wins a pizza party.
        Edit
        Teacher Script
        "Class, every family in our classroom matters. If we all participate—even with $5—we win a pizza party. I'm sending home a slip today. Bring it back signed and let's go for it."
        Edit
        Parent Text Template
        "Hi from {{teacher_name}}! Our class is in the pizza-party race for Panther Pride. Any gift counts toward 100% participation. Link: {{campaign_url}}"
        Edit
        Psychological Framing
        Primary Lever
        Status & competition
        Secondary
        Social proof Belonging
        Effective For
        Mid-campaign · classrooms with strong teacher buy-in
        Edit
        Donations where the donor selected this activity on the form as "what inspired you to give":
        DateDonorClassroomAmount
        No attributed donations yet.
        Total raised
        $3,420
        Donations
        38
        Avg gift
        $90
        vs. Campaign Avg
        -18%
        Insight: Avg gift is below campaign avg ($90 vs $499), but participation breadth is strong. This activity drives more donors but smaller checks. Pair with a Match Offer next time to lift gift size.
        0 selected
        Lifetime
        Donations
        J K navigate Enter open ? shortcuts