SeedHope - Crowdfunding & Fundraising Platform
A full-stack mobile and web application for creating, managing, and contributing to fundraising campaigns. Built with Spring Boot backend and React Native frontend, this platform enables users to raise funds for various causes including medical, education, disaster relief, and community projects.
๐ Table of Contents
- Overview
- Key Features
- Technology Stack
- Architecture & Design Patterns
- Project Structure
- Features Breakdown
- API Endpoints
- Setup & Installation
- Screenshots
๐ฏ Overview
SeedHope is a comprehensive crowdfunding platform designed to connect people who need financial support with those willing to help. The application provides a secure, user-friendly interface for creating fundraising campaigns, making donations, and tracking progress toward funding goals.
Key Highlights:
- Cross-platform mobile application (iOS & Android)
- RESTful API backend with Spring Boot
- Secure authentication (JWT & OAuth2)
- Integrated payment gateway (SSLCommerz & Stripe)
- Real-time campaign tracking
- Comment system with nested replies
- File upload capabilities
โจ Key Features
1. User Management
- User registration and authentication (JWT-based)
- Google OAuth2 integration for social login
- Profile management with photo upload
- Password encryption using BCrypt
- Role-based access control (User/Admin)
- Top contributors leaderboard
2. Campaign/Fundraiser Management
- Create fundraising campaigns with detailed information
- Multiple campaign categories (Medical, Education, Disaster, Environment, Emergency, Family, Sports, Community)
- Campaign status workflow (Pending โ Approved โ Active โ Done/Rejected)
- Photo and document uploads for campaigns
- Set funding goals and due dates
- Track raised amounts in real-time
- Edit and update campaigns
- Search and filter campaigns by category
- Campaign sorting options (by date, goal amount, status, due date)
- Trending campaigns feature
- Successful campaigns listing
3. Donation System
- Secure donation processing
- Multiple payment methods integration (SSLCommerz, Stripe)
- Preset and custom donation amounts
- Donation history tracking
- User donation statistics
- Anonymous donation option
- Payment status tracking (Success/Failed/Cancelled)
- IPN (Instant Payment Notification) handling
4. Payment Gateway Integration
- SSLCommerz integration for local payments
- Stripe integration for international payments
- Secure transaction processing
- Payment webhooks and callbacks
- Transaction ID tracking
- Payment status management
- Refund support
5. Comments & Engagement
- Add comments to campaigns
- Nested reply system (parent-child comments)
- Paginated comment loading
- User profile display on comments
- Like functionality on comments
- Real-time comment updates
6. Search & Discovery
- Search campaigns by title
- Filter by categories
- Sort campaigns by various criteria
- View trending campaigns
- Category-wise browsing
- Campaign details view with progress tracking
7. File Management
- Campaign photo uploads
- User profile picture uploads
- Document uploads for verification
- Separate storage for different file types
- File size validation (up to 10MB)
- Secure file storage
8. Social Features
- Share campaigns via social media
- Top contributors showcase
- Campaign organizer profiles
- User bio and information
- Campaign engagement metrics
9. Security Features
- JWT token-based authentication
- Spring Security integration
- Password hashing with BCrypt
- OAuth2 for Google login
- CORS configuration
- Secure API endpoints
- Role-based authorization
10. Admin Features
- Campaign approval/rejection workflow
- View all pending campaigns
- Update campaign status
- Monitor all campaigns
- User management
๐ Technology Stack
Backend
- Framework: Spring Boot 3.3.5
- Language: Java 17
- Database: PostgreSQL (Aiven Cloud)
- ORM: Spring Data JPA / Hibernate
- Security: Spring Security, JWT, OAuth2
- API Documentation: RESTful APIs
- Build Tool: Maven
- Payment: Stripe API, SSLCommerz
- Additional Libraries:
- Lombok (reducing boilerplate)
- JWT (io.jsonwebtoken)
- BCrypt (password encryption)
- Jackson (JSON processing)
Frontend
- Framework: React Native with Expo
- Language: TypeScript/JavaScript
- Navigation: React Navigation (Stack & Bottom Tabs)
- State Management: React Hooks
- UI Components:
- React Native Paper
- Expo Linear Gradient
- Expo Vector Icons
- React Native Reanimated
- NativeWind (Tailwind for React Native)
- HTTP Client: Axios
- Authentication: JWT Decode, Async Storage
- Forms: React Native DateTimePicker, Picker
- Payment: WebView for payment gateways
- Additional Features:
- Expo Image Picker
- Expo Document Picker
- Expo File System
- React Native Gesture Handler
- Google Sign-In
Database Schema
- Users: User authentication and profile data
- Campaigns: Fundraiser information
- Donations: Donation transactions
- Comments: Campaign comments and replies
- Payments: Payment transaction records
- Payment Status: Transaction status tracking
๐ Architecture & Design Patterns
Design Patterns Implemented
-
Builder Pattern
- Used in
Paymentmodel for flexible object creation - Used in
Usermodel (UserBuilder) for complex user object construction
- Used in
-
Strategy Pattern
- Campaign sorting strategies (
CampaignSortStrategyinterface) - Multiple sorting implementations:
SortByCreationDateDescSortByDueDateAscSortByGoalAmountStrategySortByStatusStrategySortByDateStrategy
- Campaign sorting strategies (
-
Observer Pattern
PaymentObserverinterface for payment event notifications- Used for updating campaign amounts on successful donations
-
Factory Pattern
CampaignFactoryfor campaign object creation- Centralizes campaign instantiation logic
-
MVC (Model-View-Controller)
- Backend follows MVC architecture
- Controllers handle HTTP requests
- Services contain business logic
- Repositories manage data access
-
Repository Pattern
- Spring Data JPA repositories for data access
- Abstraction layer for database operations
-
DTO (Data Transfer Object) Pattern
CommentDTOfor transferring comment dataPaymentRequestandPaymentResponsefor payment operations- Separates internal models from API responses
Backend Architecture Layers
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Controllers โ โ REST API Endpoints
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Services โ โ Business Logic
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Repositories โ โ Data Access Layer
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Models/Entities โ โ Database Entities
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Project Structure
SeedHope/
โโโ Backend/
โ โโโ seedhope/
โ โโโ src/
โ โ โโโ main/
โ โ โ โโโ java/com/example/seedhope/seedhope/
โ โ โ โ โโโ config/ # Security & App Configuration
โ โ โ โ โโโ controller/ # REST Controllers
โ โ โ โ โโโ dto/ # Data Transfer Objects
โ โ โ โ โโโ exception/ # Exception Handlers
โ โ โ โ โโโ Factory/ # Factory Pattern
โ โ โ โ โโโ model/ # JPA Entities
โ โ โ โ โโโ observer/ # Observer Pattern
โ โ โ โ โโโ repository/ # Data Repositories
โ โ โ โ โโโ response/ # API Response Models
โ โ โ โ โโโ service/ # Business Logic
โ โ โ โ โ โโโ strategy/ # Strategy Pattern
โ โ โ โ โโโ util/ # Utility Classes
โ โ โ โโโ resources/
โ โ โ โโโ application.properties
โ โ โ โโโ photos/ # Uploaded Files
โ โ โโโ test/ # Unit Tests
โ โโโ pom.xml # Maven Configuration
โ
โโโ Frontend/
โโโ app/
โ โโโ src/
โ โ โโโ assets/ # Images & Fonts
โ โ โโโ components/ # Reusable Components
โ โ โ โโโ BottomNavBar.tsx
โ โ โ โโโ FundraiserCard.tsx
โ โ โ โโโ DonationCard.tsx
โ โ โ โโโ Categories.tsx
โ โ โ โโโ Header.tsx
โ โ โ โโโ ...
โ โ โโโ screen/ # App Screens
โ โ โ โโโ HomeScreen.tsx
โ โ โ โโโ LogInScreen.tsx
โ โ โ โโโ SignUpScreen.tsx
โ โ โ โโโ CreateFundraiser.tsx
โ โ โ โโโ FundraiserDetailsScreen.tsx
โ โ โ โโโ DonationPage.tsx
โ โ โ โโโ ProfileScreen.tsx
โ โ โ โโโ SearchScreen.tsx
โ โ โ โโโ CommentScreen.tsx
โ โ โ โโโ ...
โ โ โโโ utils/ # Helper Functions & API
โ โโโ (tabs)/ # Tab Navigation
โ โโโ _layout.tsx # Root Layout
โโโ android/ # Android Native Code
โโโ ios/ # iOS Native Code
โโโ package.json # Dependencies
๐จ Features Breakdown
Authentication Flow
1. User Registration โ Email/Password stored with BCrypt
2. User Login โ JWT token generated
3. Token stored in AsyncStorage (Mobile)
4. All API requests include JWT in Authorization header
5. Alternative: Google OAuth2 login
Campaign Creation Workflow
1. User creates campaign with details
โโโ Title, Description
โโโ Category selection
โโโ Goal amount
โโโ Due date
โโโ Photo upload
โโโ Document upload (optional)
2. Campaign status set to "PENDING"
3. Admin reviews campaign
4. Admin approves/rejects
5. Approved campaigns visible to all users
6. Users can donate to approved campaigns
7. Raised amount updates automatically
8. Campaign marked "DONE" when goal reached
Donation Flow
1. User selects campaign
2. Enters donation amount
3. Chooses payment method
โโโ SSLCommerz (Local)
โโโ Stripe (International)
4. Payment gateway opens
5. User completes payment
6. IPN/Webhook received
7. Payment status updated
8. Campaign raised amount updated
9. User's donation history updated
10. Top contributor list updated
Comment System
Campaign Comments
โโโ Top-level comments (paginated)
โ โโโ Reply 1
โ โโโ Reply 2
โ โโโ Reply 3
โโโ Load more comments
โโโ Nested replies supported
๐ API Endpoints
Authentication
POST /api/v1/register- Register new userPOST /api/v1/login- User login (returns JWT)GET /oauth2/callback/google- Google OAuth callbackGET /me- Get current user detailsPUT /update/me- Update user profilePUT /update/password- Update passwordGET /passwordChecker/{password}- Verify current password
User Management
GET /api/v1/users- Get all usersGET /api/v1/users/{id}- Get user by IDGET /contributors- Get top contributors
Campaign Management
POST /campaign- Create new campaignPUT /campaign/update- Update campaignGET /campaign- Get all approved campaignsGET /campaign/all- Get all campaigns (admin)GET /campaign/pending- Get pending campaigns (admin)GET /campaign/{id}- Get campaign detailsPATCH /campaign/{id}/status- Update campaign status (admin)GET /campaign/category?category={name}- Get campaigns by categoryGET /campaign/sorted?sortBy={criteria}- Get sorted campaignsGET /campaign/successful- Get successful campaignsGET /campaign/trending- Get trending campaignsPATCH /campaign/{id}/updateAmount- Update raised amountGET /campaign/{category}/search?query={text}- Search campaignsGET /api/v1/campaigns/{organizerId}- Get user's campaigns
Donation Management
GET /api/donation/all- Get all donationsGET /api/donation/me/{userId}- Get user's donation history
Payment Processing
POST /api/payment/initiate- Initiate paymentPOST /api/payment/ipn- Payment IPN handlerPOST /api/payment/success/{transactionId}- Payment success callbackPOST /api/payment/fail/{transactionId}- Payment failure callbackPOST /api/payment/cancel/{transactionId}- Payment cancellationGET /api/payment/status/{transactionId}- Get payment status
Comments
POST /api/comments- Create commentGET /api/comments/campaign/{campaignId}- Get campaign commentsGET /api/comments/campaign/{campaignId}/paginated- Get paginated commentsPOST /api/comments/add/{parentCommentId}/replies- Add replyGET /api/comments/{parentCommentId}/replies- Get comment replies
File Uploads
POST /uploads/campaign- Upload campaign photoPOST /uploads/user- Upload user photoPOST /uploads/document- Upload document
๐ Setup & Installation
Prerequisites
- Java 17+
- Maven
- Node.js & npm
- PostgreSQL
- Android Studio / Xcode (for mobile development)
- Expo CLI
Backend Setup
# Navigate to backend directory
cd Backend/seedhope
# Install dependencies
mvn clean install
# Configure database in application.properties
spring.datasource.url=jdbc:postgresql://your-db-url
spring.datasource.username=your-username
spring.datasource.password=your-password
# Configure payment gateways
stripe.secret.key=your-stripe-key
sslcommerz.store.id=your-store-id
sslcommerz.store.password=your-password
# Run the application
mvn spring-boot:run
The backend will start on http://localhost:8080
Frontend Setup
# Navigate to frontend directory
cd Frontend
# Install dependencies
npm install
# Update API base URL in config.js
export const API_BASE_URL = 'http://your-backend-url:8080';
# Start Expo development server
npm start
# Run on Android
npm run android
# Run on iOS
npm run ios
๐ธ Screenshots
(Add your application screenshots here)
๐ Security Features
- JWT token authentication with expiration
- BCrypt password hashing (strength 12)
- OAuth2 Google integration
- CORS configuration
- Spring Security filter chain
- Protected API endpoints
- Secure file uploads
- SQL injection prevention (JPA)
- XSS protection
๐ฏ Use Cases
- Medical Fundraising: Raise funds for medical treatments and emergencies
- Education: Collect donations for educational expenses
- Disaster Relief: Quick fundraising for disaster victims
- Community Projects: Fund local community initiatives
- Emergency Support: Immediate financial help for urgent needs
- Environmental Causes: Support environmental conservation projects
- Sports Events: Fundraise for sports teams and events
- Family Support: Help families in financial distress
๐ Key Metrics Tracked
- Total donations received
- Number of campaigns created
- Success rate of campaigns
- Top contributors
- Campaign progress (percentage funded)
- Donation history per user
- Trending campaigns
- Category-wise analytics
๐งช Testing
The project includes:
- Backend unit tests (JUnit)
- Integration tests for APIs
- Frontend component testing (Jest)
๐ค Contributing
This is a personal portfolio project built for demonstration purposes.
๐ License
This project is part of a personal portfolio and was built for educational purposes.
๐จโ๐ป Developer
Built by HP as a Software Development Project
๐ Interview Talking Points
When discussing this project in interviews, highlight:
- Full-stack Development: End-to-end application development
- Design Patterns: Practical implementation of multiple design patterns
- Payment Integration: Real-world payment gateway integration
- Security: JWT, OAuth2, and secure authentication
- Database Design: Normalized schema with relationships
- RESTful APIs: Well-structured REST API design
- Mobile Development: Cross-platform React Native development
- State Management: Complex state management in React
- File Handling: Secure file upload and storage
- Real-world Application: Solves actual social problems
๐ฎ Future Enhancements
- Push notifications for campaign updates
- Real-time chat support
- Campaign analytics dashboard
- Multi-language support
- Social media feed integration
- Email notifications
- Campaign milestones
- Fundraiser verification system
- Tax receipt generation
- Recurring donations
Note: This project was built 2 years ago as part of a Software Development Project course and demonstrates proficiency in full-stack development, design patterns, and modern web technologies. It's a fund raising app created for Bangladesh.