Skip to content

A feature-rich crowdfunding platform built with Laravel. Users can create or support fundraising campaigns, browse and donate without registration, and manage submissions via an admin dashboard. Includes image optimization, accessibility improvements, and a working contact form.

License

Notifications You must be signed in to change notification settings

laimonas2g/crowdfunding

Repository files navigation

Crowdfunding Platform (Laravel 12) 💸🤝

A complete crowdfunding platform built with Laravel 12 (PHP 8.2), MariaDB, Vite, and Bootstrap. It features a public area for browsing and donating to campaigns, authenticated story/idea creation, and an administration area for approving or deleting submissions. Includes image optimization, accessibility improvements, search/sort, and a working contact page with SMTP email.

Laravel PHP MariaDB Vite Bootstrap Namecheap


🌐 Live Demo

Try the app here: Crowdfunding Platform


Table of Contents


About

This project implements an online platform for crowdfunding stories or ideas. It allows users to create campaigns with a funding goal and accept donations from the public:

  • Public users can browse all approved stories/ideas (campaigns), see goal progress, and donate without registering.
  • Registered users can create new stories/ideas with images and funding goals.
  • Admins can approve or delete submitted campaigns; only approved ones appear publicly.

The platform is production-ready for shared hosting and configured to work with Namecheap + MariaDB via phpMyAdmin. It uses modern tooling (Vite, Bootstrap) and includes a working contact form with SMTP mail.


Key Features

Public Area:

  • Campaign listing with:
    • Story/idea text and cover image
    • Goal amount, raised amount, remaining amount
    • Donation history (name + amount)
    • Inline donation form (name + amount + Donate)
  • Sorting and searching:
    • Sort campaigns; modal popup for searching by title
  • Clear status presentation:
    • Campaigns that reached the goal are visually distinct and no longer accept donations
  • Static pages:
    • About, Contact, FAQ, How It Works, Maintenance, Privacy, Terms

Auth & User Area:

  • Registration and login (Laravel Breeze)
  • New story/idea creation with image upload and target goal
  • Server-side validation across all pages

Admin Area:

  • Review all submitted campaigns
  • Approve or delete campaigns (only approved are public)

Contact & Email:

  • Contact page with form, validation, anti-bot checks
  • SMTP-based mailing service for contact submissions

Performance & UX:

  • Image optimization:
    • Convert uploads to WebP, resize, and serve responsive/lazy images
  • Accessibility improvements:
    • ARIA labels, improved heading order, better link semantics
  • Build pipeline with Vite

Changelog Highlights

  • feat(contact): add working contact page with mailing service
    • Controller, view, routes
    • SMTP integration, validation, anti-bot
  • feat: create and edit campaign functionality in dashboard
  • perf: optimize campaign images (WebP, resize, responsive/lazy)
  • a11y: ARIA labels, improved heading order, link semantics
  • feat: modal popup to search campaigns by title
  • feat: sorting on campaigns page
  • feat: add about, contact, faq, how-it-works, maintenance, privacy, terms pages
  • feat: validation across all pages
  • chore: deploy and connect to Namecheap MariaDB

Architecture Overview

  • Domain model:
    • Users: authentication and roles/permissions for admin access
    • Campaigns: story/idea, goal amount, raised amount, image, status (approved/pending)
    • Donations: donor name, amount, linked to campaign
  • Project structure:
    • app/Http/Controllers — controllers (e.g., CampaignController, DonationController, ContactController)
    • app/Models — Eloquent models (User, Campaign, Donation)
    • resources/views — Blade templates (public pages, auth, admin)
    • routes/web.php — application routes
    • database/migrations — database schema
    • public/ — public assets (Vite builds, images)

Note: Image optimization uses Intervention Image (conversion to WebP and responsive dimensions). Donation flow updates totals and logs donor history.


Tech Stack

Backend:

  • Laravel 12 (PHP 8.2)
  • MariaDB (MySQL-compatible)

Frontend:

  • Vite
  • Bootstrap 5
  • Vanilla JS

Laravel Packages:

  • laravel/breeze — auth scaffolding
  • intervention/image-laravel — image processing (resize/WebP)
  • laravel/telescope — development debugging tools (dev only)

Screenshots

Lighthouse Test Results
Lighthouse Test Results

Campaigns Page
Campaigns Page


Prerequisites

  • PHP 8.2+
  • Composer 2.x
  • Node.js 18+ and npm 9+
  • MariaDB 10.5+ (or MySQL 8)
  • OpenSSL/PDO extensions enabled
  • Git (optional for cloning)
  • For email: SMTP credentials

Running the App

Backend (PHP):

php artisan serve

Frontend (Vite) – For development:

npm run dev

Or, for production build:

npm run build

Roadmap / Ideas

  • Comments or discussion section for each campaign
  • Email verification for user registration
  • Multi-language support
  • Export campaign and donation data (CSV, PDF)
  • Integration with payment gateways (Stripe, PayPal, etc.)
  • Two-factor authentication (2FA) for users/admins
  • Social media sharing for campaigns
  • Campaign expiration dates and automatic status updates
  • Donation receipts via email
  • Accessibility audit and improvements
  • Mobile app or PWA version

License

This project is licensed under the MIT License - see the LICENSE file for details.


Author

Laimonas – GitHub | Website

About

A feature-rich crowdfunding platform built with Laravel. Users can create or support fundraising campaigns, browse and donate without registration, and manage submissions via an admin dashboard. Includes image optimization, accessibility improvements, and a working contact form.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published