A modern fundraising website for building affordable housing solutions in Omaha, Nebraska.
Visit the deployed site: [Your Render URL Here]
- Modern, Responsive Design - Beautiful UI that works on all devices
- Stripe Payment Integration - Secure donation processing
- Real-time Progress Tracking - Live campaign statistics
- Glass Morphism Effects - Modern visual design
- Smooth Animations - Engaging user experience
- Mobile-First Design - Optimized for mobile devices
- Frontend: HTML5, CSS3, Vanilla JavaScript
- Backend: Node.js, Express.js
- Payments: Stripe API
- Deployment: Render
- Security: Helmet.js, CORS
- Node.js (v16 or higher)
- A Stripe account
- Git
-
Clone the repository
git clone https://github.com/yourusername/omaha-housing-initiative.git cd omaha-housing-initiative
-
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Edit
.env
and add your Stripe keys:STRIPE_SECRET_KEY=sk_test_your_secret_key STRIPE_PUBLISHABLE_KEY=pk_test_your_publishable_key
-
Start the development server
npm run dev
-
Visit
http://localhost:3000
- Push your code to GitHub
- Make sure all environment variables are set up
- Go to render.com and sign up/log in
- Click "New +" β "Web Service"
- Connect your GitHub repository
- Configure the service:
- Name:
omaha-housing-initiative
- Environment:
Node
- Build Command:
npm install
- Start Command:
npm start
- Instance Type: Free (or paid for better performance)
- Name:
In Render's dashboard, add these environment variables:
STRIPE_SECRET_KEY
: Your Stripe secret keySTRIPE_PUBLISHABLE_KEY
: Your Stripe publishable keyNODE_ENV
:production
Click "Create Web Service" and wait for deployment to complete.
- Create a Stripe account
- Get your API keys from the Stripe Dashboard
- For testing, use the test keys (they start with
sk_test_
andpk_test_
) - For production, use live keys (they start with
sk_live_
andpk_live_
)
Variable | Description | Required |
---|---|---|
STRIPE_SECRET_KEY |
Your Stripe secret key | Yes |
STRIPE_PUBLISHABLE_KEY |
Your Stripe publishable key | Yes |
PORT |
Server port (auto-set by Render) | No |
NODE_ENV |
Environment (development/production) | No |
omaha-housing-initiative/
βββ public/
β βββ index.html # Main website
β βββ styles.css # (included in index.html)
βββ server.js # Express server
βββ package.json # Dependencies
βββ .env.example # Environment template
βββ .gitignore # Git ignore rules
βββ README.md # This file
Edit server.js
to modify the initial campaign data:
let campaignData = {
currentAmount: 12750, // Starting amount
goal: 1000000, // Campaign goal
donorCount: 47, // Initial donor count
familiesHelped: 5 // Families helped so far
};
Edit public/index.html
to update:
- Campaign description
- Contact information
- Donation amounts
- Personal testimony
All styles are embedded in index.html
. Look for the <style>
section to make design changes.
- Helmet.js - Sets security headers
- CORS - Configured for secure cross-origin requests
- Environment Variables - Secrets stored securely
- Stripe Security - PCI-compliant payment processing
- Input Validation - Server-side validation for all inputs
The application includes:
- Health check endpoint (
/health
) - Server-side logging
- Error handling
- Campaign statistics tracking
-
"Stripe key not found"
- Make sure environment variables are set correctly
- Check that your
.env
file has the right keys
-
Payment not working
- Verify Stripe keys are correct
- Check browser console for errors
- Ensure you're using test keys in development
-
Deployment fails
- Check build logs in Render dashboard
- Verify
package.json
is correct - Make sure all environment variables are set in Render
- Check the Stripe Documentation
- Review Render Documentation
- Check browser console for JavaScript errors
MIT License - see LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
PacMac Mobile LLC
- Email: housing@pacmacmobile.com
- Phone: 402.915.1434
- Address: 1402 Jones Street, Omaha, NE 68901
Building Dreams, One Home at a Time π β¨