Complete technical reference for FansFollow.me — every URL, every feature, every setting. Share this with your design/development team to ensure nothing is missed.
Platform: Sponzy v7.9.2 | Framework: Laravel 12.46 / PHP 8.5 | Database: MySQL 8.4 | Hosting: Laravel Cloud | Updated: August 30, 2026
| URL | https://staging.fansfollowme.com |
| Platform | Laravel Cloud |
| Environment ID | env-a295cd63-356e-4f25-94f8-0961fd2a539e |
| R2 Bucket | fls-a29b3308-b261-4645-bd9d-d1b983bd9cba |
| R2 Public URL | https://fls-a29b3308-b261-4645-bd9d-d1b983bd9cba.laravel.cloud |
| PHP Version | 8.5 |
| Laravel Version | 12.46 |
| MySQL Version | 8.4 |
| Node Version | 24 |
| GitHub Repo | FansFollow-me/staging.fansfollowme.com |
| Branch | main |
| Auto-Deploy | On push to main |
| Build Command | composer install && php fix-laravel-cloud.php && php artisan view:clear |
| Deploy Script | bash deploy.sh (migrate, schema fixes, seed, cache clear) |
| Storage | Cloudflare R2 (S3 driver) |
| Users | 17,546 |
| Posts | 239 |
| URL | Page | Purpose | Status |
|---|---|---|---|
/ | Homepage | Hero section, featured creators, CTA buttons | ✅ 200 |
/explore | Explore | Browse all public posts | ✅ 200 |
/creators | Creators | Creator directory with filters | ✅ 200 |
/fans | Fans Marketing | Landing page for fans | ✅ 200 |
/celebrities | Celebrities | Celebrity creator showcase | ✅ 200 |
/casting | Casting | Casting call page | ✅ 200 |
/business | Business | Business/brand partnerships | ✅ 200 |
/for-creators | For Creators | Creator recruitment landing | ✅ 200 |
/support | Support | Support center with contact form | ✅ 200 |
/faq | FAQ | Frequently asked questions | ✅ 200 |
/contact | Contact | Contact form (Usebasin) | ✅ 200 |
/blog | Blog | Blog listing | ✅ 200 |
/privacy | Privacy Policy | Privacy policy page | ✅ 200 |
/terms | Terms of Service | Terms page | ✅ 200 |
/cookies | Cookie Policy | Cookie policy page | ✅ 200 |
/sitemap.xml | Sitemap | XML sitemap for search engines | ✅ 200 |
/robots.txt | Robots | Search engine crawl rules | ✅ 200 |
| URL | Page | Notes | Status |
|---|---|---|---|
/login | Login | AJAX form, supports username or email | ✅ 200 |
/signup | Register | Fan or Creator registration | ✅ 200 |
/password/reset | Password Reset | Email-based password reset | ✅ 200 |
/oauth/google | Google OAuth | Social login (needs config) | — |
/oauth/facebook | Facebook OAuth | Social login (needs config) | — |
| URL Pattern | Description | Features |
|---|---|---|
/{username} | User profile | Avatar, cover, bio, posts, subscribe button, tip button |
/{username}/photos | Photo gallery | Filtered photo posts |
/{username}/videos | Video gallery | Filtered video posts |
/{username}/audio | Audio gallery | Filtered audio posts |
/{username}/shop | Shop | Creator's products |
/{username}/reels | Reels | Creator's short videos |
/{username}/post/{id} | Single post | Post detail view |
| URL | Page | Description | Status |
|---|---|---|---|
/dashboard | Dashboard | Fan home — feed, subscriptions | ✅ 200 |
/explore | Explore | Browse creators and posts | ✅ 200 |
/notifications | Notifications | Activity notifications | ✅ 200 |
/messages | Messages | Direct message inbox | ✅ 200 |
/messages/{id} | Chat | Individual conversation | ✅ 200 |
/settings/page | Edit Profile | Name, bio, avatar, cover, categories | ⚠️ 500 |
/settings/password | Change Password | Password update form | ✅ 200 |
/settings/subscription | Subscription | Manage subscription settings | ✅ 200 |
/privacy/security | Privacy & Security | 2FA, sessions, blocked users | ✅ 200 |
/my/bookmarks | Bookmarks | Saved posts | ✅ 200 |
/my/subscriptions | My Subscriptions | Creators you follow | ✅ 200 |
/my/purchases | My Purchases | Purchased content | ✅ 200 |
/my/wallet | Wallet | Balance, add funds | ✅ 200 |
/my/likes | My Likes | Liked posts | ✅ 200 |
/reels | Reels | Short-form video feed | ⚠️ 302 |
/shop | Shop | Browse all products | ✅ 200 |
| URL | Page | Description | Status |
|---|---|---|---|
/dashboard | Creator Dashboard | Earnings chart, stats, quick actions | ✅ 200 |
/my/posts | My Posts | All creator posts with stats | ✅ 200 |
/my/subscribers | My Subscribers | List of paying subscribers | ✅ 200 |
/my/products | My Products | Shop products management | ✅ 200 |
/my/sales | My Sales | Sales history and orders | ✅ 200 |
/my/stories | My Stories | Manage 24-hour stories | ✅ 200 |
/my/reels | My Reels | Manage short videos | ✅ 200 |
/my/vault | My Vault | Private file storage | ⚠️ 500 |
/settings/page | Edit Profile | Creator profile settings | ⚠️ 500 |
/settings/payout/method | Payout Method | Bank/PayPal/Stripe payout setup | ✅ 200 |
/settings/withdrawals | Withdrawals | Request withdrawals | ✅ 200 |
/my/referrals | Referrals | Referral links and earnings | ✅ 200 |
/settings/subscription | Subscription Settings | Set subscription price | ✅ 200 |
/privacy/security | Privacy & Security | 2FA, sessions, blocked users | ✅ 200 |
/messages | Messages | Direct messages | ✅ 200 |
/notifications | Notifications | Activity notifications | ✅ 200 |
/create/story | Create Story | Upload image/text story | ✅ 200 |
/settings/video-call | Video Call Settings | Set pricing for video calls | ⚠️ 404 |
/settings/audio-call | Audio Call Settings | Set pricing for audio calls | ⚠️ 404 |
/create/reel | Create Reel | Upload short video | — |
/add/product | Add Product | Create digital product | — |
/live/{username} | Live Stream | Start/view live stream | — |
All admin pages are under /panel/admin/. Requires admin role.
/panel/admin | Dashboard |
/panel/admin/settings | General Settings |
/panel/admin/settings/limits | Limits & Restrictions |
/panel/admin/settings/email | Email/SMTP Settings |
/panel/admin/settings/cron-job | Cron Job Config |
/panel/admin/theme | Theme & Colors |
/panel/admin/custom-css-js | Custom CSS/JS |
/panel/admin/pwa | PWA Settings |
/panel/admin/websockets | WebSocket Config |
/panel/admin/video/encoding | Video Encoding |
/panel/admin/storage | Storage Settings |
/panel/admin/billing | Billing Info |
/panel/admin/maintenance/mode | Maintenance Mode |
/panel/admin/members | Members List |
/panel/admin/members/edit/{id} | Edit Member |
/panel/admin/posts | All Posts |
/panel/admin/comments | Comments |
/panel/admin/replies | Replies |
/panel/admin/reels | Reels Management |
/panel/admin/stories/posts | Stories |
/panel/admin/stories/settings | Stories Settings |
/panel/admin/stories/backgrounds | Story Backgrounds |
/panel/admin/stories/fonts | Story Fonts |
/panel/admin/reports | Reports |
/panel/admin/verification/members | Verification Requests |
/panel/admin/moderation-image-video | Content Moderation |
/panel/admin/payments | Payment Settings |
/panel/admin/payments/{id} | Payment Gateway Config (1-12) |
/panel/admin/subscriptions | Subscriptions |
/panel/admin/transactions | Transactions |
/panel/admin/deposits | Deposits |
/panel/admin/withdrawals | Withdrawals |
/panel/admin/sales | Sales |
/panel/admin/products | Products |
/panel/admin/shop | Shop Settings |
/panel/admin/shop-categories | Shop Categories |
/panel/admin/tax-rates | Tax Rates |
/panel/admin/referrals | Referral Settings |
/panel/admin/advertising | Advertising |
/panel/admin/gifts | Gifts Management |
/panel/admin/video-calls | Video Call Settings |
/panel/admin/audio-calls | Audio Call Settings |
/panel/admin/live-streaming | Live Streaming Settings |
/panel/admin/live-streaming-private-requests | Private Live Requests |
/panel/admin/messages | Messages Settings |
/panel/admin/push-notifications | Push Notifications |
/panel/admin/announcements | Announcements |
/panel/admin/age-verification | Age Verification |
/panel/admin/social-login | Social Login Config |
/panel/admin/google | Google Settings |
/panel/admin/giphy-api | GIPHY Integration |
/panel/admin/stickers | Stickers |
/panel/admin/blog | Blog Management |
/panel/admin/pages | Custom Pages |
/panel/admin/categories | Categories |
/panel/admin/languages | Languages |
/panel/admin/countries | Countries |
/panel/admin/names-reserved | Reserved Usernames |
/panel/admin/profiles-social | Social Profiles |
| Reels | ✅ Enabled |
| Stories (Image + Text) | ✅ Enabled |
| Vault (File Storage) | ✅ Enabled |
| Scheduled Posts | ✅ Enabled |
| EPUB Files | ✅ Enabled |
| ZIP Files | ✅ Enabled |
| Watermark | ✅ Enabled |
| QR Codes | ✅ Enabled |
| Subscriptions | ✅ Enabled |
| Tips | ✅ Enabled |
| Pay-Per-View | ✅ Enabled |
| Gifts | ✅ Enabled |
| Shop (Digital + Physical) | ✅ Enabled |
| Earnings Simulator | ✅ Enabled |
| Referral System | ✅ Enabled |
| Wallet | ✅ Enabled |
| Video Calls (Agora) | ✅ Enabled |
| Audio Calls (Agora) | ✅ Enabled |
| Live Streaming | ✅ Enabled |
| Private Live Streaming | ✅ Enabled |
| Direct Messages | ✅ Enabled |
| Welcome Messages | ✅ Enabled |
| Push Notifications | ✅ Enabled |
| GIFs (GIPHY) | ✅ Enabled |
| Feature | Old Sponzy | v7.9.2 | FFM Use Case |
|---|---|---|---|
| Reels | ❌ | ✅ | Workout clips, technique demos, fight highlights |
| Video Calls | ❌ | ✅ | 1-on-1 coaching, VIP sessions |
| Audio Calls | ❌ | ✅ | Coaching calls, consultations |
| Private Live Streaming | ❌ | ✅ | Paid private training sessions |
| Vault | ❌ | ✅ | Store workout plans, meal prep PDFs |
| Gifts | ❌ | ✅ | Fan engagement, additional revenue |
| EPUB Support | ❌ | ✅ | Sell training ebooks |
| Scheduled Posts | ❌ | ✅ | Content planning across time zones |
| Age Verification | ❌ | ✅ | Legal compliance (Yoti/Didit) |
| PWA | ❌ | ✅ | Mobile app-like experience |
| Push Notifications | ❌ | ✅ | Re-engagement |
| Earnings Simulator | ❌ | ✅ | Creator revenue education |
| Stories (Enhanced) | Basic | ✅ | Image + text stories with backgrounds/fonts |
| Advertising System | ❌ | ✅ | Promoted posts/creators |
| Role & Permissions | ❌ | ✅ | Fine-grained admin access control |
| Setting | Current | What It Does |
|---|---|---|
who_can_see_content | all | Public access to profiles (vs logged-in only) |
email_verification | ✅ On | Require email verification on signup |
account_verification | ✅ On | Allow creator verification requests |
registration_active | ✅ On | Allow new registrations |
show_counter | ✅ On | Show post/like/view counts |
widget_creators_featured | ✅ On | Show featured creators widget |
earnings_simulator | ✅ On | Show earnings calculator to creators |
requests_verify_account | ✅ On | Allow verification requests |
watermark | ✅ On | Auto-watermark uploaded content |
users_can_edit_post | ✅ On | Allow post editing after publish |
referral_system | ✅ On | Enable referral program |
search_creators_genders | ✅ On | Gender filter in creator search |
generate_qr_code | ✅ On | QR code generation for profiles |
allow_zip_files | ✅ On | Allow ZIP file uploads |
allow_scheduled_posts | ✅ On | Post scheduling feature |
allow_creators_deactivate_profile | ✅ On | Temporary profile deactivation |
allow_epub_files | ✅ On | EPUB ebook uploads |
gifts | ✅ On | Virtual gift system |
allow_reels | ✅ On | Short-form video feature |
allow_vault | ✅ On | Private file storage |
users_can_delete_messages | ✅ On | Allow message deletion |
allow_delete_account | ✅ On | Allow account deletion |
send_welcome_email_new_users | ✅ On | Welcome email on registration |
captcha_contact | ✅ On | CAPTCHA on contact form |
disable_tips | ❌ Off | Tips are enabled (off = enabled) |
disable_free_post | ❌ Off | Free posts are enabled |
disable_explore_section | ❌ Off | Explore is enabled |
disable_creators_section | ❌ Off | Creators section is enabled |
disable_contact | ❌ Off | Contact form is enabled |
captcha | ❌ Off | Global CAPTCHA (off for testing) |
alert_adult | ❌ Off | Adult content warning (not needed) |
hide_admin_profile | ❌ Off | Admin profile visible |
| Gateway | ID | Status | Notes |
|---|---|---|---|
| Stripe | 1 | Needs API keys | Primary recommended |
| PayPal | 2 | Needs API keys | Wide reach |
| CCBill | 3 | Needs API keys | Adult-friendly |
| Paystack | 4 | Needs API keys | Africa focus |
| Instamojo | 5 | Needs API keys | India focus |
| Flutterwave | 6 | Needs API keys | Africa focus |
| Razorpay | 7 | Needs API keys | India focus |
| MercadoPago | 8 | Needs API keys | Latin America |
| Mollie | 9 | Needs API keys | Europe focus |
| Coinbase | 10 | Needs API keys | Crypto |
| CoinPayments | 11 | Needs API keys | Crypto |
| Cardinity | 12 | Needs API keys | Europe focus |
| Background | #0B0F1A |
| Card Background | #111827 |
| Border | #1f2937 |
| Primary/CTA | #f97316 (Orange) |
| Text Primary | #e5e7eb |
| Text Muted | #9ca3af |
| Font Family | Inter, system-ui, sans-serif |
| Navbar Height | 72px |
| Theme | Dark (default) |
| Logo | /fans-foloow-me-logo-final-file--png-version.png |
| Logo (480px) | /fans-foloow-me-logo-final-file--png-version-480.png |
| Logo (960px) | /fans-foloow-me-logo-final-file--png-version-960.png |
| Logo (1440px) | /fans-foloow-me-logo-final-file--png-version-1440.png |
| Hero Background | /ffmherobackground.jpg |
| Hero Background (1280) | /ffmherobackground-1280.jpg |
| Creators Hero BG | /creators-hero-bg.jpg |
| Favicon | /img/favicon.png |
| Custom CSS | /css/ffm-brand.css (53KB) |
| GA4 | G-SZRL69LXXS |
| Microsoft Clarity | xk78rrb386 |
| Usebasin (Forms) | 954d0d6e30da |
| Conversion Events | sign_up, login, generate_lead |
| robots.txt | ✅ |
| sitemap.xml | ✅ |
| Open Graph Tags | ✅ |
| Twitter Cards | ✅ |
| Canonical URLs | ✅ |
| JSON-LD Schema | ✅ |
| Bing Webmaster | 83E04AABA8CC0BC0618D1849666A133A |
Users & Auth
stg_users — 17,546 recordsstg_login_sessionsstg_password_resetsstg_personal_access_tokensContent
stg_updates — 239 postsstg_media — Post media filesstg_commentsstg_comment_repliesstg_reels — Short videosstg_media_reelsstg_storiesstg_media_storiesMonetization
stg_subscriptionsstg_transactionsstg_depositsstg_withdrawalsstg_productsstg_salesstg_tipsstg_giftsstg_advertisingCommunication
stg_messagesstg_conversationsstg_notificationsvideo_callsaudio_callsCategories & Taxonomy
stg_categoriesstg_shop_categoriesstg_countriesstg_statesstg_languagesSettings & Config
admin_settings — Global settingsstg_pages — Custom pagesstg_blogstg_stickersstg_giftsvaults — Creator file storage
Git Push (main)
↓
Laravel Cloud Auto-Deploy
↓
Build: composer install --no-dev && php fix-laravel-cloud.php && php artisan view:clear
↓
Deploy: bash deploy.sh
├── Create storage directories
├── Create public/public symlink
├── Run pending migrations (php artisan migrate --force)
├── Fix missing database columns (idempotent)
├── Create missing tables (video_calls, audio_calls, vaults)
├── Seed test accounts (testfan, testcreator)
├── Clear caches (config, view, route)
└── Done
↓
Live at https://staging.fansfollowme.com
| Account | Username | Role | Features |
|---|---|---|---|
| Admin | Admin | Admin | Full admin panel access |
| Test Fan | testfan | Fan (Normal) | Subscribe, tip, message, purchase |
| Test Creator | testcreator | Creator | Post, sell, receive tips, go live |
Password for all: TestPass123!
| Issue | Page | Status | Root Cause |
|---|---|---|---|
| Settings Page 500 | /settings/page | ⚠️ Investigating | Categories model table prefix fix deployed, may need cache clear |
| Vault 500 | /my/vault | ⚠️ Investigating | vaults table created in deploy, may need cache clear |
| Video/Audio Call 404 | /settings/video-call | ⚠️ Config Needed | Enabled in admin but needs valid Agora credentials |
| Reels 302 | /reels | ✅ Expected | No reels exist yet, redirects to home |
| Age Verification | All auth pages | ✅ Disabled | Disabled for testing, enable for production |
Every page below needs a FFM-branded design. Check off as designed:
Public Pages (17)
Backend Pages (Fan + Creator)
Admin Panel (20 key pages)
Martin is redesigning fansfollowme.com using bolt.new (AI-powered web builder). The output gets converted to Sponzy Blade templates for Laravel Cloud deployment.
Flow: Martin designs in bolt.new → Claude reviews output → Converts to Blade templates → Deploys to staging → Martin reviews → Sign-off
For Martin & Bolt.new
#0B0F1A (bg), #111827 (cards), #f97316 (CTA orange)data-bs-theme="dark"For Claude (Conversion)
@extends('layouts.app') + @section('content')$settings->title, auth()->user(), etc.url('login'), route('profile', $user)Helper::getFile(), __() for translationsbash tests/qa-auth-test.shBolt.new Output Structure (Expected)
bolt-output/
├── index.html # Homepage design
├── css/
│ └── styles.css # Custom styles (will merge into ffm-brand.css)
├── js/
│ └── main.js # Custom JS (will merge into app JS)
└── pages/
├── explore.html # Explore page
├── creators.html # Creators listing
├── profile.html # Profile page
├── dashboard.html # User dashboard
├── messages.html # Messages
├── settings.html # Settings
└── admin.html # Admin panel
Conversion Checklist
Bolt.new Best Practices
col-md-6, col-lg-4, etc.Claude Conversion Best Practices
Helper::getFile(), Helper::userCountry()__('general.key')config('settings.key')Role: Product Owner / Designer
Role: Developer / QA
Role: Infrastructure
Martin designs in bolt.new (visual design, all 54 pages) ↓ Martin creates task in Highrise with bolt.new output ↓ Claude monitors Highrise (every 5-30 minutes) ↓ Claude reads task, downloads bolt.new output ↓ Claude converts bolt.new HTML → Sponzy Blade templates ├── Wraps in @extends('layouts.app') ├── Replaces static text with Sponzy variables ├── Replaces hardcoded URLs with url()/route() ├── Merges CSS into ffm-brand.css ├── Adds auth checks (@auth/@guest) ├── Adds feature flags (config('settings.*')) └── Preserves Sponzy AJAX/modal/payment logic ↓ Claude runs QA tests (automated browser tests) ├── Public pages (17 URLs) — HTTP status + screenshots ├── Auth pages (3 URLs) — Login flow verification ├── Fan backend (15 URLs) — Logged-in user flow ├── Creator backend (19 URLs) — Creator-specific pages └── Admin panel (20 URLs) — Admin-only pages ↓ Claude commits to GitHub (main branch) ↓ Laravel Cloud auto-deploys to staging.fansfollowme.com ↓ Claude verifies in browser (screenshots, behavior check) ↓ Claude replies to Martin in Highrise with results ↓ Martin reviews on staging, approves or requests changes ↓ Martin signs off → Feature complete ✅
| Script | Purpose | What It Tests | Output |
|---|---|---|---|
tests/qa-browser-test.sh |
Public page smoke test | All 17 public pages, auth pages, profiles, backend redirects, admin redirects, static assets | tests/qa-results.md + screenshots |
tests/qa-auth-test.sh |
Authenticated user flow test | Login as testfan/testcreator/Admin, test every backend page with real sessions | tests/qa-auth-results.md + screenshots |
tests/FFM-FEATURE-AUDIT.md |
Feature inventory | Every Sponzy feature, what's enabled, what it does for FFM | Markdown document |
How Martin Communicates
How Claude Responds
| ✅ | Staging environment live and operational |
| ✅ | All 17 public pages returning 200 |
| ✅ | Login/signup/password reset working |
| ✅ | Fan backend (13/15 pages) working |
| ✅ | Creator backend (16/19 pages) working |
| ✅ | Admin panel (20/20 pages) working |
| ✅ | All Sponzy v7.9.2 features enabled |
| ✅ | GA4, Clarity, Usebasin tracking active |
| ✅ | SEO (sitemap, robots, OG tags, JSON-LD) |
| ✅ | Automated QA test scripts created |
| ✅ | Platform Blueprint page created |
| ✅ | Test accounts seeded (testfan, testcreator) |
| ⏳ | Martin's design sign-off — before any UI/template work |
| ⏳ | Settings page 500 fix (cache issue) |
| ⏳ | Vault page 500 fix (table created, needs verification) |
| ⏳ | Agora API credentials for video/audio calls |
| ⏳ | Payment gateway API keys (Stripe, PayPal, etc.) |
| ⏳ | SMTP/email configuration |
| ⏳ | Age verification decision (enable for production?) |
| ⏳ | Content seeding (sample posts, reels, products) |
Complete source documentation. Click each section to expand. These are the actual files from the repository — Claude can review, enhance, and follow these conventions.
# AGENTS.md — FFM Sponzy Project Instructions
## Project Overview
FansFollow.me (FFM) is a creator platform for fitness, bodybuilding, and martial arts creators. Built on **Sponzy v7.9.2** (a commercial PHP/Laravel script), hosted on **Laravel Cloud**, with **Cloudflare R2** for file storage.
**This is NOT a greenfield project.** Sponzy is a purchased script with its own conventions. Respect them.
## Architecture
### Stack
- **Framework:** Laravel 12.46 / PHP 8.5
- **Database:** MySQL 8.4 (tables use `stg_` prefix)
- **Frontend:** Blade templates + Bootstrap 5 + vanilla JS (no React/Vue)
- **Storage:** Cloudflare R2 (S3-compatible)
- **Hosting:** Laravel Cloud (auto-deploy on push to main)
- **Video/Audio:** Agora SDK
- **Analytics:** GA4, Microsoft Clarity, Usebasin
### Directory Structure
app/
├── Http/Controllers/ # All controllers (80+ files)
├── Models/ # Eloquent models (66 files)
├── Services/ # External service integrations
├── Jobs/ # Queue jobs (video encoding, moderation)
├── Events/ # Laravel events
├── Listeners/ # Event listeners
├── Notifications/ # Email/push notifications
└── Helper.php # Global helper class
resources/views/
├── index/ # Public pages (home, explore, creators, etc.)
├── users/ # Authenticated user pages (dashboard, settings, etc.)
├── admin/ # Admin panel pages (100+ files)
├── includes/ # Shared partials (navbar, footer, modals)
├── layouts/ # Master layouts (app.blade.php, appnew.blade.php)
├── reels/ # Reels views
├── shop/ # Shop views
└── emails/ # Email templates
routes/
├── web.php # ALL routes (public, auth, admin)
├── api.php # API routes (minimal)
└── console.php # Artisan commands
### Key Patterns
#### Table Prefix: `stg_`
ALL database tables use the `stg_` prefix. When creating Eloquent models, ALWAYS set:
protected $table = 'stg_tablename';
**Exception:** Some tables like `admin_settings`, `video_calls`, `audio_calls`, `vaults` do NOT have the prefix. Check the schema before assuming.
#### Model Convention
class ExampleModel extends Model
{
protected $table = 'stg_examples'; // ALWAYS set this
protected $guarded = []; // Sponzy uses guarded=[], not fillable
public $timestamps = false; // Most Sponzy tables don't use timestamps
}
#### Controller Convention
class ExampleController extends Controller
{
protected $settings; // Admin settings singleton
public function __construct()
{
$this->settings = config('settings'); // Always available
}
}
#### View Convention
@extends('layouts.app')
@section('title')Page Title @endsection
@section('content')
{{-- Page content here --}}
@endsection
#### Route Convention
// Public routes (no auth)
Route::get('page', [Controller::class, 'method']);
// Authenticated routes
Route::group(['middleware' => ['auth']], function () {
Route::get('dashboard', [UserController::class, 'dashboard']);
});
// Admin routes (role middleware)
Route::group(['middleware' => ['role', 'nocache']], function () {
Route::prefix('panel/admin')->group(function () {
Route::get('/', [AdminController::class, 'admin']);
});
});
## Critical Rules
### DO NOT
1. DO NOT create new tables without the `stg_` prefix (unless it's a system table like `admin_settings`)
2. DO NOT use React, Vue, or any SPA framework — this is Blade + vanilla JS
3. DO NOT modify the Sponzy core files without documenting why
4. DO NOT add Composer packages without checking if Sponzy already has the functionality
5. DO NOT use `$fillable` — Sponzy uses `$guarded = []`
6. DO NOT assume table names — always check `database/schema.sql` or the model
7. DO NOT create new CSS files — use `public/css/ffm-brand.css` for FFM customizations
8. DO NOT modify `public/css/core.min.css` or `public/css/bootstrap.min.css` — these are Sponzy vendor files
9. DO NOT hardcode URLs — use `url()`, `route()`, or `asset()` helpers
10. DO NOT skip the `stg_` prefix on joins — this caused the Reels 500 bug
### ALWAYS
1. ALWAYS check if a feature already exists in Sponzy before building it
2. ALWAYS use `ffm-brand.css` for FFM-specific styling (53KB of overrides already exist)
3. ALWAYS test with all 3 user roles: fan (testfan), creator (testcreator), admin (Admin)
4. ALWAYS run `tests/qa-auth-test.sh` after changes
5. ALWAYS commit to `main` branch (auto-deploys to staging)
6. ALWAYS check `database/schema.sql` for table structure before writing queries
7. ALWAYS use the dark theme (`data-bs-theme="dark"`) — FFM is dark by default
8. ALWAYS use Inter font family — FFM brand font
9. ALWAYS check `config('settings.*')` for feature flags before showing UI elements
10. ALWAYS preserve existing Sponzy functionality when adding FFM branding
## Design Tokens
--ffm-bg: #0B0F1A; /* Main background */
--ffm-card: #111827; /* Card/panel background */
--ffm-border: #1f2937; /* Borders */
--ffm-orange: #f97316; /* Primary CTA / brand color */
--ffm-text: #e5e7eb; /* Primary text */
--ffm-muted: #9ca3af; /* Secondary text */
font-family: 'Inter', system-ui, sans-serif;
navbar-height: 72px;
## File Editing Rules
- CSS: ONLY edit `public/css/ffm-brand.css`
- Blade: index/ (public), users/ (auth), admin/ (admin), includes/ (partials)
- PHP: Controllers in app/Http/Controllers/, Models in app/Models/
- Routes: ALL in routes/web.php
- Database: Schema in database/schema.sql, fixes in deploy.sh
## Test Accounts
| Admin | Admin | TestPass123! | Admin (full access) |
| Fan | testfan | TestPass123! | Normal user |
| Creator | testcreator | TestPass123! | Creator (verified) |
## QA Scripts
bash tests/qa-browser-test.sh # Public page smoke test
bash tests/qa-auth-test.sh # Authenticated user flow test
## Deployment
git push origin main → Laravel Cloud auto-deploys → Live at staging.fansfollowme.com
## Feature Flags
@if(config('settings.allow_reels')) {{-- Reels --}}
@if(config('settings.allow_vault')) {{-- Vault --}}
@if(config('settings.gifts')) {{-- Gifts --}}
@if(config('settings.video_call_status')) {{-- Video calls --}}
@if(config('settings.audio_call_status')) {{-- Audio calls --}}
## Common Pitfalls
1. Table prefix: The #1 bug source. Always use `stg_` prefix.
2. CSRF tokens: Login uses AJAX with `X-Requested-With: XMLHttpRequest`
3. Age verification: Redirects to `/age/verification` if `user->age_verification !== 1`
4. Admin routes: Under `/panel/admin/`, NOT `/admin/`
5. User routes: Under `/settings/`, `/my/`, etc. — NOT `/user/`
6. View cache: Run `php artisan view:clear` after Blade changes
7. Config cache: Run `php artisan config:clear` after settings changes
## What Martin Needs
Martin is the product owner. He creates tasks in Highrise, provides design feedback, signs off on designs BEFORE code changes. He does NOT write code.
**Rule:** Do NOT touch the site or build anything until Martin provides design sign-off.
#!/bin/bash # FFM Staging Comprehensive Browser Test # Tests public, backend, admin, fan, and creator pages BASE_URL="https://staging.fansfollowme.com" # PUBLIC PAGES (17 tests) # Homepage, Explore, Creators, Fans, Celebrities, Casting, Business, # Support, FAQ, Privacy, Terms, Cookies, Contact, Blog, For Creators, # Sitemap, Robots # AUTH PAGES (3 tests) # Login, Signup, Password Reset # PROFILE PAGES (3 tests) # VikingSamurai, Ronsmoorenburg, TongPo # BACKEND PAGES (10 tests - should redirect to login) # /dashboard, /messages, /notifications, /settings/page, /my/posts, # /my/subscribers, /my/subscriptions, /my/wallet, /settings/withdrawals, # /my/referrals # ADMIN PAGES (15 tests - should redirect to login) # /panel/admin, /panel/admin/settings, /panel/admin/members, # /panel/admin/posts, /panel/admin/categories, /panel/admin/pages, # /panel/admin/blog, /panel/admin/subscriptions, /panel/admin/transactions, # /panel/admin/withdrawals, /panel/admin/reports, # /panel/admin/verification/members, /panel/admin/theme, # /panel/admin/billing, /panel/admin/storage # STATIC ASSETS (5 tests) # /css/ffm-brand.css, /css/bootstrap.min.css, /js/app.js, # /img/favicon.png, /fans-foloow-me-logo-final-file--png-version.png # Run: bash tests/qa-browser-test.sh # Output: tests/qa-results.md + tests/screenshots/
#!/bin/bash # FFM Staging Authenticated User Flow Test # Tests actual login + navigation for fan, creator, and admin BASE_URL="https://staging.fansfollowme.com" # FAN FLOW (15 tests - logs in as testfan) # Dashboard, Explore, Notifications, Messages, Settings, Password, # Bookmarks, Subscriptions, Purchases, Wallet, Likes, # Creator Profile, Creators, Reels, Shop # CREATOR FLOW (19 tests - logs in as testcreator) # Dashboard, Posts, Subscribers, Products, Sales, Stories, Reels, # Vault, Settings, Payout, Withdrawals, Referrals, Subscription, # Privacy, Messages, Notifications, Create Story, # Video Call Settings, Audio Call Settings # ADMIN FLOW (20 tests - logs in as Admin) # Dashboard, Settings, Members, Posts, Categories, Pages, Blog, # Subscriptions, Transactions, Withdrawals, Reports, Verification, # Theme, Billing, Storage, Payments, Social Login, Google, # Languages, Maintenance Mode # Login method: AJAX with X-Requested-With: XMLHttpRequest # Field name: username_email (NOT username) # Session: Cookie-based (fansfollowme_session) # Run: bash tests/qa-auth-test.sh # Output: tests/qa-auth-results.md + tests/screenshots/auth/
# FFM Staging — Sponzy v7.9.2 Feature Audit ## ENABLED FEATURES ### Content & Creator Tools - Reels (short-form video) - Stories (24-hour disappearing content) - Vault (private file storage) - Scheduled Posts - EPUB Files - ZIP Files - Watermark - QR Codes ### Monetization - Tips - Subscriptions - Pay-Per-View - Gifts - Earnings Simulator - Referral System - Wallet - Shop (physical + digital) ### Communication - Video Calls (Agora) - Audio Calls (Agora) - Live Streaming - Private Live Streaming - Messages - Welcome Messages ### User Experience - Dark Mode (default) - Featured Creators - Search by Gender - Creator Badges - Post Counters - Edit Posts - Delete Messages - Delete Account - Deactivate Profile ### Security & Verification - Email Verification - Account Verification - Age Verification (disabled for testing) - 2FA - QR Code Login ### Marketing & Growth - Blog - Custom Pages - Social Login - Push Notifications - PWA - Welcome Email ## NEW IN SPONZY v7.9.2 (Not in old fansfollow.me) - Reels (TikTok-style) - Video/Audio Calls - Private Live Streaming - Vault (file storage) - Gifts - EPUB Support - Scheduled Posts - Age Verification - PWA - Push Notifications - Earnings Simulator - Stories (Enhanced) - Advertising System - Role & Permissions ## NEEDS CONFIGURATION - Video/Audio Calls: Needs valid Agora credentials - Payment Gateways: Stripe, PayPal, etc. need API keys - Email/SMTP: For sending verification emails - Age Verification: Enable for production with Yoti/Didit
#!/bin/bash # FFM Staging Deploy Script # Runs on the persistent app container after each deploy set -e echo "=== FFM Deploy ===" # 1. Create storage directories mkdir -p storage/logs storage/framework/views storage/framework/cache storage/framework/sessions chmod -R 777 storage bootstrap/cache # 2. Create public/public symlink (for /public/uploads/ URLs) cd public && ln -sf . public && cd .. # 3. Uploads are on R2 (S3 driver) echo "Uploads: using R2 storage (FILESYSTEM_DRIVER=s3)" # 3b. Run pending migrations php artisan migrate --force 2>&1 | tail -3 # 4. Fix missing database columns (idempotent) # Adds: post_views, scheduled_date, likes_extras, crowdfund_goal, etc. # Adds: captcha=off, disable_contact=0 to admin_settings # 4b. Create missing tables and columns # Creates: video_calls, audio_calls, vaults tables # Adds: allow_vault, allow_crowdfund, video_call_status, audio_call_status, etc. # 4c. Seed test accounts (idempotent) # Creates: testfan, testcreator (if not exist) # Sets: age_verification=1 for both # 5. Clear caches php artisan config:clear php artisan view:clear php artisan route:clear echo "=== Deploy complete ==="
# FFM Staging Status Report ## ALL SYSTEMS OPERATIONAL ### Infrastructure - URL: https://staging.fansfollowme.com - Platform: Laravel Cloud (Sponzy v7.9.2) - PHP 8.5, Laravel 12.46, MySQL 8.4 - R2 Object Storage: 2131+ files, 6.08GB uploaded - Deploy: Auto on push to main - Zero 500 errors ### All Pages (19/19 = 200) - /, /explore, /fans, /celebrities, /casting, /business - /support, /faq, /privacy, /terms, /cookies, /contact - /blog, /for-creators, /login, /signup, /password/reset - /sitemap.xml, /robots.txt ### Profile Pages - All profile pages working - Avatar: 128px (CSS override) - Cover: 80px height - Tabs: Posts/About (tab switching working) ### Logged-In Experience - Login: Admin / TestPass123! - Dashboard, Messages, Notifications, Settings, Explore: All working ### Analytics & Tracking - GA4: G-SZRL69LXXS - Microsoft Clarity: xk78rrb386 - Usebasin: 954d0d6e30da - Conversion Events: sign_up, login, generate_lead ### Design Matching - Background: #0B0F1A - Font: Inter, system-ui - Branding: FansFollow.me - Navbar: 72px ### Database - 17,546 users, 239 posts - All Sponzy v7.9.2 tables created - 53+ missing admin_settings columns added
FansFollow.me — Creator Platform for Fitness & Sports
This document is auto-generated from the staging environment. Last updated: August 30, 2026.
Share this URL with your design/development team. Do not index this page.