Back to Examples
Example Implementation

Non-Profit Website with Donations

A complete non-profit website with donation tracking, volunteer management, and impact story sharing across multiple languages.

The Problem

Non-profits need websites that handle donations, manage volunteers, and share impact stories globally, but lack technical resources for complex backend systems.

StaticBox Solution

StaticBox provides simple APIs for donation tracking, volunteer management, and multilingual content without requiring technical expertise.

Key Features Implemented

Donation Tracking

Track donations, donor information, and campaign performance.

<!-- Simple donation form -->
<form action="https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit" method="POST">
  <input name="donor_name" type="text" placeholder="Full Name" required />
  <input name="donor_email" type="email" placeholder="Email" required />
  <select name="donation_amount">
    <option value="25">$25</option>
    <option value="50">$50</option>
    <option value="100">$100</option>
    <option value="other">Other Amount</option>
  </select>
  <input name="custom_amount" type="number" placeholder="Enter amount" />
  <select name="campaign">
    <option value="clean_water">Clean Water Initiative</option>
    <option value="education">Education Program</option>
    <option value="general">General Fund</option>
  </select>
  <button type="submit">Donate Now</button>
</form>

Volunteer Registration

Collect volunteer applications and manage sign-ups for events.

<form action="https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit" method="POST">
  <input name="name" type="text" placeholder="Full Name" required />
  <input name="email" type="email" placeholder="Email" required />
  <input name="phone" type="tel" placeholder="Phone Number" />
  <select name="skills" multiple>
    <option value="marketing">Marketing</option>
    <option value="web_dev">Web Development</option>
    <option value="fundraising">Fundraising</option>
    <option value="events">Event Planning</option>
  </select>
  <textarea name="availability" placeholder="When are you available?"></textarea>
  <input name="background_check" type="checkbox" required />
  <label>I consent to a background check</label>
  <button type="submit">Apply to Volunteer</button>
</form>

Impact Story Uploads

Allow field workers to submit impact stories and photos directly.

<form action="https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit" method="POST" enctype="multipart/form-data">
  <input name="story_title" type="text" placeholder="Story Title" required />
  <textarea name="story_content" placeholder="Tell the impact story..." required></textarea>
  <input name="location" type="text" placeholder="Location" />
  <input name="date" type="date" />
  <input name="photo" type="file" accept="image/*" multiple />
  <select name="program">
    <option value="water">Water Program</option>
    <option value="education">Education</option>
    <option value="health">Healthcare</option>
  </select>
  <button type="submit">Submit Story</button>
</form>
⚠️

Important Security Notice

API Keys must NEVER be used in frontend code. StaticBox API keys should only be used in:

  • Server-side code (API routes, server actions, backend functions)
  • Environment variables (process.env.STATICBOX_API_KEY)
  • Serverless functions (Vercel Functions, Netlify Functions)

Forms API can be used directly from frontend (no API key needed)

⚠️ DataStore API requires API keys and must be server-side only

Implementation Steps

1

Setup Donation Forms

Create donation forms that integrate with your payment processor.

<!-- Donation form with payment integration -->
<form id="donation-form">
  <input name="amount" type="number" placeholder="Donation Amount" required />
  <input name="donor_name" type="text" placeholder="Full Name" required />
  <input name="donor_email" type="email" placeholder="Email" required />
  <button type="submit">Donate</button>
</form>

<script>
// After payment processing (Stripe, PayPal, etc.)
async function recordDonation(paymentData) {
  await fetch('https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      ...paymentData,
      timestamp: new Date().toISOString()
    })
  });
}
</script>
2

Create Volunteer Portal

Build a system to manage volunteer applications and events.

<!-- Volunteer opportunity signup -->
<div class="volunteer-events">
  <h3>Upcoming Volunteer Opportunities</h3>
  <form action="https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit" method="POST">
    <select name="event_id" required>
      <option value="cleanup_2024_03">Beach Cleanup - March 15</option>
      <option value="fundraiser_2024_03">Fundraiser Gala - March 22</option>
    </select>
    <input name="volunteer_name" type="text" placeholder="Your Name" required />
    <input name="volunteer_email" type="email" placeholder="Email" required />
    <button type="submit">Sign Up</button>
  </form>
</div>
3

Add Impact Stories

Create a system for collecting and displaying impact stories.

<!-- Impact story submission -->
<form action="https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit" method="POST" enctype="multipart/form-data">
  <input name="title" type="text" placeholder="Story Title" required />
  <textarea name="content" placeholder="Share the impact..." required></textarea>
  <input name="photos" type="file" accept="image/*" multiple />
  <input name="location" type="text" placeholder="Location" />
  <select name="program">
    <option value="education">Education Program</option>
    <option value="health">Health Initiative</option>
    <option value="environment">Environmental</option>
  </select>
  <button type="submit">Share Story</button>
</form>
4

Configure Multi-Language

Make your content accessible globally.

// Load translations for global reach
async function loadTranslations(language) {
  const response = await fetch(
    `https://staticbox.io/api/projects/[your-project-id]/localization/[project-name]/entries?lang=${language}`
  );
  const { entries } = await response.json();
  
  // Update page content
  updateContent(entries, language);
}

Benefits

No technical expertise required
Secure donation tracking
Global accessibility
Volunteer management
Impact story collection
Multi-language support
Cost-effective solution

Tech Stack

StaticBox Forms
Donation and volunteer forms
StaticBox Storage
Impact photos and documents
StaticBox Localization
Multi-language content
Payment Gateway
Secure donation processing

Ready to build your own non-profit website?

Start with StaticBox today and have your backend ready in minutes.

Start Building Now