Initial commit: site code, layouts, content (images added separately)

Fixes duplicate placeholder cover image on the 3 newest blog posts,
broken aspect-ratio classes on the albums listing page, and a
non-responsive fixed sidebar on the chat page.
This commit is contained in:
Dr. Jones
2026-07-08 06:18:17 +00:00
commit d9961a76ad
80 changed files with 9438 additions and 0 deletions

138
IMPLEMENTATION_SUMMARY.md Normal file
View File

@@ -0,0 +1,138 @@
# Membership Paywall System - Implementation Summary
## Files Created
### Backend
- `scripts/membership_api.py` - Flask API server for membership management
- `requirements.txt` - Python dependencies
### Frontend
- `static/js/membership.js` - Client-side membership functionality
- `layouts/membership/single.html` - Membership signup/login page
- `layouts/testimonials/single.html` - Testimonials page with paywall
- `layouts/admin/single.html` - Admin approval panel
- `layouts/contact/single.html` - Contact page layout
### Content
- `content/membership.md` - Membership page content
- `content/testimonials.md` - Testimonials page content
- `content/admin.md` - Admin panel page
### Documentation
- `MEMBERSHIP_SETUP.md` - Setup and configuration guide
## Files Modified
- `layouts/_default/baseof.html` - Added membership.js, auth UI, navigation updates
- `layouts/library/list.html` - Added paywall and download tracking
- `content/contact.md` - Paywalled email, secure form
- `hugo.yaml` - Added membership and testimonials to menu
## Key Features Implemented
1. **User Registration & Authentication**
- Email/password registration
- JWT-based session management
- Password hashing with bcrypt
2. **Download Tracking**
- IP-based tracking (1 free download)
- Unlimited downloads for members
- Automatic tracking on download clicks
3. **Paywall System**
- Library downloads (1 free, then paywall)
- Contact form (members only)
- Email address (members only)
- Testimonials page (members only)
4. **Admin Panel**
- Secure admin login
- Approve/deny memberships
- Moderate testimonials
- View pending members
5. **Email Notifications**
- Signup notifications to admin
- Approval confirmations to users
- Contact form submissions
6. **Buy Me a Coffee Integration**
- Prominent $5 donation button
- Users donate first, then sign up
- Manual verification by admin
## Configuration Required
1. **Environment Variables** (set before running API):
```
ADMIN_PASSWORD=your-strong-password
ADMIN_EMAIL=indiana.holmes8@gmail.com
JWT_SECRET=random-secret-key
MEMBERSHIP_PORT=5001
SMTP_HOST=smtp.gmail.com (optional)
SMTP_PORT=587 (optional)
SMTP_USER=your-email@gmail.com (optional)
SMTP_PASS=your-app-password (optional)
```
2. **API URL Configuration** (update for production):
- `static/js/membership.js` line 4: `API_BASE`
- `layouts/admin/single.html` line 186: `ADMIN_API_BASE`
3. **Start the API Server**:
```bash
python3 /root/hydro-sterile/scripts/membership_api.py
```
## Database
SQLite database automatically created at:
`/root/hydro-sterile/data/members.db`
Tables:
- `users` - User accounts and status
- `downloads` - Download tracking
- `testimonials` - User testimonials
- `sessions` - User sessions
- `admin_sessions` - Admin sessions
- `contact_submissions` - Contact form submissions
## Security Features
- Password hashing (bcrypt)
- JWT tokens with expiration
- Rate limiting on all endpoints
- Input sanitization
- SQL injection prevention (parameterized queries)
- CSRF protection ready
- Secure admin authentication
- Email privacy (not exposed in frontend)
## Next Steps
1. Set environment variables
2. Install dependencies: `pip3 install -r requirements.txt`
3. Start API server: `python3 scripts/membership_api.py`
4. Test registration flow
5. Test admin panel
6. Update API URLs for production
7. Configure SMTP for email notifications
8. Test email sending
## Testing Checklist
- [ ] User can register after donation
- [ ] Admin receives signup notification
- [ ] Admin can approve/deny members
- [ ] Approved users receive confirmation email
- [ ] Users can log in
- [ ] Download tracking works (IP-based)
- [ ] Paywall shows after 1 download
- [ ] Members get unlimited downloads
- [ ] Contact form only works for members
- [ ] Email address hidden for non-members
- [ ] Testimonials page paywalled
- [ ] Members can submit testimonials
- [ ] Admin can moderate testimonials