INDULGON — Platform Operations Manual


> ## ADMIN USE ONLY — STRICTLY CONFIDENTIAL

>

> This document is for Jillian Janson (platform owner/admin) only. Do NOT share, screenshot, forward, or reference this document with anyone — including partners, investors, developers, contractors, or employees — without explicit written authorization from Jillian.

>

> This manual contains the complete architecture, proprietary scraping methods, database schemas, API internals, competitive advantages, and trade secrets of the Indulgon platform. Anyone with this document and access to the codebase could replicate the entire platform, including features that took months to build. This includes:

>

> - Exact scraping techniques that bypass bot protection on industry databases

> - The full database schema (55+ tables, all columns, all relationships)

> - Every API endpoint, its parameters, and its internal logic

> - The performer tagging viral growth engine and how it works

> - Payment processing architecture and fee calculations

> - Data import/export pipelines for 10+ competitor platforms

>

> If this document is leaked, a competitor could clone Indulgon's core features in weeks instead of the year it took to build them.

>

> Store this file securely. Do not commit it to any public repository. Do not upload it to shared drives. Do not paste sections into AI tools, chat messages, or emails.




Table of Contents


1. [Glossary — Terms You Need to Know](#1-glossary)

2. [Architecture Overview](#2-architecture)

3. [Every Page & What It Does](#3-pages)

4. [Every Route (Backend API) & What It Does](#4-routes)

5. [Every Database Table & What It Stores](#5-tables)

6. [The Connection Map — What Connects to What](#6-connections)

7. [The 7 Layers of a Feature](#7-layers)

8. [How to Ask for Changes — Prompt Templates](#8-prompts)

9. [What Happens When You Add a Feature](#9-checklist)

10. [File Map — Where Everything Lives](#10-files)




1. Glossary — Terms You Need to Know {#1-glossary}


The Basics


TermWhat It MeansExample
**Page (HTML)**What you SEE in the browser. The visual interface. A `.html` file.`financial.html` is the Financial Hub page
**Route (API)**The BACKEND code that handles data. When a page needs data, it calls a route. A `.js` file in `/routes/`.`financial-hub.js` handles all money data
**Database Table**Where data is permanently STORED. Lives in PostgreSQL.`transactions` table stores every dollar
**Endpoint**A specific URL the page calls to get/send data. Part of a route.`GET /api/financial/transactions` fetches transactions
**Frontend**Everything the user sees — HTML pages, CSS styling, JavaScript interactionsThe buttons, forms, lists, colors
**Backend**Everything behind the scenes — routes, database, logic, securityThe code that processes data when you click a button

Feature Components


TermWhat It MeansWhy It Matters
**UI (User Interface)**The visual part — buttons, forms, modals, tabs, listsIf something looks wrong or is missing visually, it's a UI issue
**API (Application Programming Interface)**The data pipeline between frontend and backendIf a page loads but shows no data, the API might be broken
**Connection**A link between two features so data flows between themBooking creates a calendar event = connection
**Cross-connection**When one action updates MULTIPLE other featuresRecording a scene → creates transaction + calendar block + timeline event + contacts
**Auto-trigger**Something that happens AUTOMATICALLY when an event occursAuto-post to feed when a booking is confirmed
**Sync**Keeping two systems in agreement (e.g., Platform ↔ Notion)Edit a transaction on platform → updates in Notion too
**Entity Link**A universal connector in the database that links ANY two thingsLinks a film to a transaction, a contact to a booking, etc.
**Cascade**One action that creates MANY records across multiple tablesScene cascade: 1 API call → 11 records across 7 tables
**Middleware**Code that runs BEFORE your request reaches the route (security, parsing)Security middleware checks if you're logged in
**Widget**A small data display embedded in a larger pageDashboard widgets show pending requests, upcoming events
**Modal**A popup dialog/form that appears over the current page"Add Transaction" modal on Financial Hub
**Toggle**An on/off switch for a featureAuto-post toggles in Settings
**Tab**A sub-section within a pageFinancial Hub has tabs: Summary, Transactions, Bookings, etc.

Data Terms


TermWhat It Means
**Source of Truth**The PRIMARY place data lives. For Indulgon, this is PostgreSQL (PG). Notion is a mirror.
**Dual-write**When data is saved to PG first, then also pushed to Notion
**Fire-and-forget**The Notion push doesn't block the main operation — if Notion fails, PG still has the data
**Deduplication (Dedup)**Detecting and linking duplicate records so the same dollar isn't counted twice
**Soft delete**Data is never truly removed — an `is_deleted` flag is set to true. Everything is recoverable.
**JSONB**A PostgreSQL column type that stores flexible JSON data (arrays, objects)
**Entity**Any record in the system — a transaction, film, contact, booking, post, etc.
**User scoping**Every record has a `user_id` so users only see their own data

Connection Types


TermWhat It MeansExample
**Button connection**A button on Page A that sends you to Page B or triggers Page B's API"Rebook" button on Financial Hub calls booking API
**Data connection**Page A's data automatically appears on Page BScene work transactions show on Filmography page
**Auto-create connection**Creating something on Page A automatically creates a record on Page BAccepting a booking auto-creates a calendar block
**Sync connection**Two-way data flow between Page A and an external serviceNotion bidirectional sync, iCloud Calendar export/import
**Cross-page link**A clickable link on Page A that navigates to a related item on Page BContact card → View in Filmography
**API dependency**Page A calls Page B's API to get data it needsDashboard calls `/api/dashboard-widgets/summary` which pulls from 10 other APIs




2. Architecture Overview {#2-architecture}



USER'S BROWSER
    │
    ▼
┌─────────────────────────────────┐
│  HTML Pages (64 files)          │  ← What you see (frontend)
│  /public/app/*.html             │
│  Styled by: platform.css,       │
│    themes.css, editorial-base,  │
│    color-customizer.css         │
│  Powered by: nav.js, api.js,   │
│    themes.js, accessibility.js  │
└────────────┬────────────────────┘
             │ HTTP requests (fetch)
             ▼
┌─────────────────────────────────┐
│  Express Server (server.js)     │  ← Traffic cop
│  Port 3000, managed by PM2     │
│  Middleware: security, CSV,     │
│    mailer, notion-client        │
└────────────┬────────────────────┘
             │
             ▼
┌─────────────────────────────────┐
│  Route Modules (137 files)      │  ← Business logic (backend)
│  /routes/*.js                   │
│  142 mounted API paths          │
│  Registered in _register.js     │
└────────────┬────────────────────┘
             │
        ┌────┴────┐
        ▼         ▼
┌──────────┐ ┌──────────┐
│PostgreSQL│ │  Notion   │  ← Data storage
│237 tables│ │ 60 DBs    │
│SOURCE OF │ │ MIRROR    │
│TRUTH     │ │(sync copy)│
└──────────┘ └──────────┘

Key Infrastructure


ComponentLocationWhat It Does
**server.js**`/platform-server/server.js`Main entry point. Starts Express, loads middleware, registers routes
**_register.js**`/routes/_register.js`Imports and mounts ALL 142 route modules
**PM2**Process managerKeeps server running. `pm2 restart platform` to restart
**Caddy**HTTPS proxyHandles SSL. Routes `indulgon.com` → localhost:3000
**PostgreSQL**Database237 tables. Source of truth for all data
**Notion**Synced mirror60 databases. Bidirectional sync. Dashboard/spreadsheet view of data

Shared JavaScript (loaded on EVERY page)


FileWhat It Does
`nav.js`Navigation bar with logo, main links, More dropdown grouped by category
`api.js`Helper functions for API calls
`themes.js`Theme switching (dark/light), monochrome enforcement
`editorial-theme.js`Default "Editorial" template styling
`color-customizer.js`Color wheel for customizing theme colors
`accessibility.js`Voice narration, screen reader, keyboard shortcuts
`page-editor.js`Drag-and-drop layout editing
`share-button.js`Share button functionality
`quick-add.js`Quick-add shortcuts
`template-engine.js`Template switching system
`safety-sw.js`Service Worker for offline panic button
`auth-guard.js`Login requirement enforcement



3. Every Page & What It Does {#3-pages}


Top Bar (customizable — click "Edit Top Bar" in More dropdown)


Default top bar: Dashboard, Profile, Feed, Bookings, Messages, Safety


Users can add/remove ANY page to the top bar in three ways:

1. +Nav / -Nav buttons — subtle inline buttons next to each page name in the dropdown. Click to instantly add/remove from top bar.

2. Eye icon toggle — bottom-left of dropdown. Click to show/hide the +Nav/-Nav buttons (reduces clutter when not editing).

3. Edit All — bottom-right of dropdown. Opens full checkbox editor overlay.


Show in Both toggle (bottom center of dropdown, or in editor): Controls whether pages pinned to the top bar also appear in their dropdown section, or are hidden from sections to reduce duplication.


All preferences stored in localStorage: nav-topbar (array of hrefs), nav-show-edit-buttons (true/false), nav-show-in-both (true/false).


PageFileWhat It Does
Dashboard`dashboard.html`Home screen. Stats, widgets, quick links, recent activity, upcoming events
Profile`profile.html`Public website view. Toggle to edit mode. Awards showcase, timeline
Feed`feed.html`Social feed. Create posts, cross-post to Twitter, archive, PPV content
Bookings`bookings.html`All bookings unified. Scene work, strip clubs, video calls. Requests tab. Source filter
Messages`messages-v2.html`Direct messaging. Free between friends, paid for non-friends to performers
Safety`safety.html`11 safety toggles, panic button (3s hold), ride tracking, travel check-ins

More Dropdown → CONTENT


PageFileWhat It Does
Calendar`content-calendar.html`Unified calendar. Content, bookings, publicist, strip clubs, shifts. Create Post from events
Smart Post`smart-post.html`AI-assisted posting. Captions, scheduling, backlog, drip-feed
Community`community.html`Forums, groups, discussions
Portfolio`portfolio.html`Professional portfolio/resume display
Templates`templates.html`Template marketplace. Preview mobile+desktop. Style collections
Page Builder`page-builder.html`Custom page creation with 37 embeddable feature blocks

More Dropdown → COMMERCE


PageFileWhat It Does
Store`store-v2.html`Public-facing storefront where fans browse and buy
Marketplace`marketplace.html`Browse listings from all sellers
Products`products.html`**NEW** Inventory management. Physical, digital, worn items. Stats, filters, categories
Services`services.html`**NEW** Rate card, video calls, cam shows, custom content, companion. Service revenue stats
Pricing`pricing.html`Subscription tiers and pricing bundles

More Dropdown → PROFESSIONAL


PageFileWhat It Does
Address Book`address-book.html`Industry contacts, sync status, Request Booking + Message buttons
Publicist`publicist.html`PR management. 6 tabs. Engagements auto-create expenses, calendar blocks, timeline events
Shifts & Schedule`shifts.html`Universal shift management. All user types. Syncs to calendar + bookings + financial
Rider`rider.html`Hospitality rider for club appearances. Explains what a rider is

More Dropdown → ENTERTAINMENT


PageFileWhat It Does
Live Cams`cam.html`Webcam streaming. Credit billing, room types, auto-save all streams
Video Calls`video-calls.html`Paid video call bookings
Music`music.html`Connected music library. Spotify/Apple Music sync. Share to feed
Gaming`gaming.html`Xbox/gaming connections. Tipping feature for play-with-performer
Discover`discover.html`Browse other users. Empty until users sign up

More Dropdown → FINANCES


PageFileWhat It Does
Financial Hub`financial.html`THE money page. All income/expenses/tips/payouts. Dedup engine. Rebook from transactions
Earnings`earnings-v2.html`Unified income view. 8 stats, 7 tabs, potential vs actual, bookings filter
Expenses`expenses-v2.html`Expense tracking, categorization, tax-deductible flags
Payments`payments.html`Stripe + payout methods (Cash App, Venmo, PayPal, etc.)
Reports`reports.html`Comprehensive reports from all data sources
Analytics`analytics.html`Social engagement, sales trends, subscriber growth

More Dropdown → FILES


PageFileWhat It Does
Cloud Services`files.html`iCloud Drive, Google Drive, etc. connections. Bidirectional sync
Vault`vault.html`Locked/Private/Hidden media. Scene photos/videos. Version history

More Dropdown → LIFESTYLE


PageFileWhat It Does
Wishlists`wishlists.html`Amazon + custom wishlists. Gift tracking. Auto-post when gifted
Watchlist`watchlist.html`Movies/shows/content to watch
Recipes & Nutrition`recipes.html`Recipe sharing, food photo analysis, meal planning, nutrition tracking
Fitness`fitness.html`Workouts, body tracking, YouTube workout embeds
Bookmarks`bookmarks.html`Save anything from the web. Collections

More Dropdown → ABOUT


PageFileWhat It Does
Biography`performer.html`Performer bio, career stats, history. Public sections configurable
Filmography`filmography.html`All films/scenes. Performer view (all data) vs public view (no financials). Rebook buttons
Achievements`achievements.html`Milestones, badges, unlocks
Social`social.html`Unified social notification inbox from all connected platforms

More Dropdown → ACCOUNT


PageFileWhat It Does
Settings`settings.html`All preferences. Auto-post toggles, booking prefs, notifications, theme, nav layout
Connections`connections.html`33 platform connections. Full walkthroughs. Connection type table. Auth-gated API key reveal (eye toggle requires password/OAuth re-verification). Stripe permission reference modal.
Data Import`import.html`Universal platform data import. Upload GDPR exports from OnlyFans, SextPanther, Chaturbate, ManyVids, Fansly, MyFreeCams. Auto-detect platform + data type from CSV headers. Per-platform summary cards with earnings breakdown, subscriber overview, message stats. Social Connect section for Hootsuite-style OAuth (Twitter live, Instagram/TikTok/YouTube coming soon).

Indulgon Connect SDK (Partner Integration)


Indulgon offers an embeddable SDK for partner platforms. Partners embed a JS snippet and get buttons for data import and verification.


Route: partner-sdk.js at /api/connect


Products:

1. Data Export Button — Partner embeds

, user clicks, data flows to Indulgon

2. Verification Check — Partner queries /api/connect/api/verify-user to check if a user is verified on Indulgon

3. Push Data API — Partner pushes data to a user's Indulgon account via /api/connect/api/push-data


Pricing: Free (1K calls/mo), Basic $99 (10K), Pro $299 (100K), Enterprise (custom/unlimited)


SDK embed:


<script src="https://api.indulgon.com/connect/sdk.js?key=PARTNER_API_KEY"></script>
<div data-indulgon="import" data-platform="platform-name"></div>
<div data-indulgon="verify"></div>

Identity Verification Passport


Route: verification-passport.js at /api/verification


Performers verify identity once on Indulgon (government ID + selfie, 2257 age verification). Verification is stored as a portable credential that can be shared with partner platforms via time-limited tokens.


Flow: Start verification → Stripe Identity or admin review → Verified status stored → Generate share token → Partner checks token → Returns verified/age/2257 status


Tables: identity_verifications, verification_shares, partner_integrations, partner_api_logs


Share tokens: Time-limited (default 24h), single-use, revocable, scoped (identity/age/2257)


Public-Facing Pages

PagePurpose
`partners.html`Partner landing page with pitch, live SDK demo, pricing table, partnership application form, FAQ
`sdk-docs.html`Technical SDK documentation with API reference, code examples, data schemas, rate limits, error codes
`import.html`User-facing data import dashboard with per-platform upload, summary cards, social connect

Help Center / Support System


Page: support.html — 5-tab help center


Tabs:

TabContent
FAQGeneral, data, payments, safety questions with expandable answers
Your DataExport, preview, recovery requests, GDPR rights boxes (Articles 15-18, 20)
AccountDelete (30-day grace), recover (password/locked/deleted/hacked), merge duplicates
Legal/PrivacyFull privacy policy, data usage, what we do NOT do, retention, cookies, GDPR/CCPA, 2257
Support TicketsCreate ticket (8 categories), auto-responses, track history

Routes:

RoutePurpose
`POST /api/support/create`Create ticket with auto-tagging and auto-response
`POST /api/support/:id/reply`User replies to ticket
`POST /api/support/:id/admin-reply`Admin replies (with internal notes option)
`GET /api/support/:id`Get ticket + message thread
`GET /api/support/`List user's tickets
`PATCH /api/support/:id/status`Close/reopen ticket
`POST /api/account/delete/request`Request account deletion (generates confirmation code)
`POST /api/account/delete/confirm`Confirm with code, schedules 30-day deletion
`POST /api/account/delete/cancel`Cancel pending deletion
`GET /api/account/delete/status`Check deletion status
`POST /api/account/recover/request`Request recovery (password, locked, deleted, hacked)
`POST /api/account/recover/verify`Verify recovery code
`POST /api/account/merge/request`Request account merge

Auto-email templates: ticket_created, ticket_resolved, data_request, account_deletion, account_recovery


New tables: support_tickets, ticket_messages, account_deletion_requests, account_recovery_requests, account_merge_requests, auto_email_templates


Performer Tagging System (Viral Growth)


Route: performer-tags.js at /api/tags


When a performer tags someone who isn't on Indulgon (in filmography, financial records, bookings, etc.):

1. A placeholder account is created with the tagged person's name

2. The name is clickable on the tagger's profile (shows a placeholder page)

3. System attempts to find them on social media (Twitter, Instagram)

4. They receive a notification: "[Tagger] created an account for you on Indulgon"

5. When they join, they claim the placeholder — all tags transfer to their real account

6. If they already have a Indulgon account, they merge with the placeholder


RoutePurpose
`POST /api/tags/tag`Tag a performer (auto-creates placeholder if not on Indulgon)
`GET /api/tags/search?q=`Search real users + placeholders (for autocomplete)
`GET /api/tags/placeholder/:id`View placeholder profile + all tags
`POST /api/tags/placeholder/:id/claim`Claim placeholder, transfer all tags to real account
`GET /api/tags/my-tags`Tags where I was tagged (incoming)
`GET /api/tags/my-created-tags`Tags I created (outgoing)
`DELETE /api/tags/tag/:id`Remove a tag
`GET /api/tags/pending-invitations`Admin: unclaimed placeholders to invite
`POST /api/tags/placeholder/:id/mark-invited`Admin: mark invitation sent

Tables: placeholder_accounts, performer_tags


Tag contexts: filmography, financial, booking, content, feed_post, scene

Tag roles: co-star, director, photographer, producer, agent, studio


Multi-Signal Lookup System (4 signals):

1. Provided handles (high confidence) — Tagger gives Twitter/Instagram handle directly

2. Industry databases (high/medium) — IAFD, Indexxx search by performer name. Discovers social links, aliases, scene counts, active years

3. Cross-reference handles (low) — If tagger says "@JohnDoe on OnlyFans", system checks Twitter/Instagram for the same username

4. Email (high) — If tagger provides email, direct invitation sent


What we CAN'T use for lookup (privacy/legal):


Data Export (GDPR Portability)

Users can export ALL their data from Indulgon at any time.


RoutePurpose
`GET /api/export/preview`Show what data exists (counts by source platform)
`POST /api/export/request`Start an export (full, indulgon_only, imported_only, custom)
`GET /api/export/status/:id`Check export progress (0-100%)
`GET /api/export/download/:id`Download the ZIP file
`GET /api/export/history`List past exports
`DELETE /api/export/:id`Delete an export

Format: ZIP containing CSV files (one per data type) + manifest.json + README.txt

Source tagging: Every row in every CSV has a data_source column: "indulgon", "onlyfans", "sextpanther", etc.

Includes: Indulgon-native data (uploads, transactions, bookings, profile) + all imported data (earnings, subscribers, messages, payouts from every platform)

Limits: Exports available 7 days, max 5 downloads per export


Data Recovery System

For performers who lost access to platforms (banned, suspended, deleted, locked out).


RoutePurpose
`GET /api/recovery/platforms`List all supported platforms with GDPR contact info
`POST /api/recovery/request`Create a recovery request (platform, status, what happened, proof)
`POST /api/recovery/request/:id/acknowledge`Accept terms + auto-generate formal GDPR/CCPA letter
`POST /api/recovery/request/:id/send`Send the letter (email or manual)
`POST /api/recovery/request/:id/follow-up`Generate follow-up letter (references deadlines + supervisory authorities)
`GET /api/recovery/requests`List all recovery requests
`PATCH /api/recovery/request/:id/status`Update when platform responds or data arrives

Legal basis: GDPR Article 15 (right of access) + Article 20 (data portability) or CCPA. Platforms must respond within 30 days (GDPR) / 45 days (CCPA) regardless of account status.


Supported platforms: OnlyFans, SextPanther, Chaturbate, ManyVids, Fansly, MyFreeCams, Pornhub, Stripchat, CAM4, Clips4Sale, LoyalFans, + custom.


Fan Integration (Two-Sided Migration)

When partners add the Indulgon button for both models AND fans:


RoutePurpose
`POST /api/fans/fan-migrate`Fan onboards from partner platform (with consent choices)
`GET /api/fans/model/reconnected-fans`Model sees which of their fans migrated
`GET /api/fans/fan/reconnected-models`Fan sees which models they follow migrated
`GET /api/fans/summary`Per-platform reconnection counts
`POST /api/fans/fan/revoke-consent`Fan withdraws data sharing consent

Auto-matching: When both a model and their fan migrate from the same platform, the system automatically reconnects the relationship. Both get notified.


Fan consent is granular: Basic profile (always), payment method (opt-in), message history (opt-in), spending history (opt-in). All logged with timestamps for GDPR audit. |

Address Book`address-book.html`Industry contacts, sync status, Request Booking + Message buttons
Rider`rider.html`Hospitality rider for club appearances. Explains what a rider is
Legal`legal.html`Legal documents, 2257 records, GDPR
FAQ & Hosting`faq.html`Help center
Admin`admin.html`Admin controls
Setup Guide`setup-guide.html`Interactive step-by-step guide for everything

Other Pages (not in nav)


PageFilePurpose
`login.html`Login/signup
`onboarding.html`New user onboarding flow (basic 5-step)
`tutorial.html`Interactive demo: 35-step walkthrough across 8 phases. Shows example data, accepts real user input. Covers: account creation, platform connections, data import, native content, financial setup, bookings/safety, content/social, advanced features
`pricing.html`Platform pricing display
`tos.html`Terms of service
`oauth-callback.html`OAuth return handler
`companion-services.html`Companion booking services
`asmr.html`ASMR content features
`house-girl.html`House/live-in content features
`findom.html`Financial domination features
`fundraiser.html`Crowdfunding/fundraiser features
`archive.html`Archived content (preserves original timestamps)
`used-items.html`Legacy used items (replaced by Store Items tab)
`store.html`Legacy store (replaced by store-v2)
`messages.html`Legacy messages (replaced by messages-v2)
`earnings-v2.html`Earnings breakdown
`expenses.html`Legacy expenses
`mockup-dashboard.html`Design mockup
`cost-comparison.html`Platform cost comparison tool
`management-guide.html`Management/operations guide



4. Every Route (Backend API) & What It Does {#4-routes}


Routes are the BACKEND code. When a page needs data, it calls a route's endpoint.


Core Data Routes


Route FileAPI PathWhat It Handles
`financial-hub.js``/api/financial`Transactions, CSV import, Plaid sync, categories, dedup scan, clean totals, screenshot import
`filmography.js``/api/filmography`Films, performer earnings, costars, favorites, award-worthy flags
`bookings-full.js``/api/bookings`Unified bookings (scene work + platform bookings)
`booking-requests.js``/api/booking-system`Booking requests, preferences, calendar blocks, availability, rebook, promote, publicists, strip clubs, calendar-to-post
`feed.js``/api/feed`Posts, likes, comments, PPV, cross-posting
`commerce.js``/api/commerce`Products, orders, store operations
`store-v2.js``/api/store`Store items, listings, sales
`payments.js``/api/payments`Tips, subscriptions, payment processing
`payouts.js``/api/payouts`Payout requests, commission tracking, fee models
`earnings.js``/api/earnings`Earnings breakdown, statements
`expenses.js``/api/expenses`Expense tracking, categorization

User & Profile Routes


Route FileAPI PathWhat It Handles
`auth.js``/api/auth`Login, signup, OAuth, test users
`settings.js``/api/settings`User preferences, notification settings
`performer-profile.js``/api/performer`Performer bio, stats, profile data
`profile-discovery.js``/api/profile`Aliases, Wikipedia, news articles
`performers.js``/api/performers`Performer directory/search
`user-types.js``/api/user-types`User type management (performer, studio, agent, publicist, strip_club, fan)
`account-types.js``/api/account-types`Account tier management
`onboarding-flows.js``/api/onboarding`New user onboarding steps

Content Routes


Route FileAPI PathWhat It Handles
`content-calendar.js``/api/calendar`, `/api/content-calendar`Content scheduling, calendar events
`custom-pages.js``/api/pages`Custom page builder with 37 feature blocks
`templates-marketplace.js``/api/templates`133 templates, marketplace, purchases, ratings
`vault.js``/api/vault`Locked/private/hidden media, version history
`archive.js``/api/archive`Content archival (preserves timestamps)
`portfolio.js``/api/portfolio`Professional portfolio items
`smart-post.js``/api/smart-post`AI captions, scheduling, backlog, drip-feed

Social & Communication Routes


Route FileAPI PathWhat It Handles
`messages.js``/api/dm`Direct messaging, conversations
`social.js``/api/social`Social accounts, notifications from connected platforms
`social-mirror.js``/api/social-mirror`Import content from Twitter/Instagram/websites
`twitter.js``/api/twitter`Twitter cross-post, profile, media upload
`cross-post.js``/api/cross-post`Multi-platform cross-posting
`community.js`(inline)Forums, groups, discussions
`friends.js``/api/friends`Friend requests, friend list
`mass-messaging.js``/api/messaging`Mass/broadcast messaging
`notifications.js``/api/notifications`Push/email/SMS notifications
`notification-prefs.js``/api/notification-prefs`Per-type notification preferences

Entertainment Routes


Route FileAPI PathWhat It Handles
`cam-rooms.js``/api/cam`Live webcam streaming, chat, tips, private shows, auto-save
`music.js``/api/music`Playlists, tracks, Spotify/Apple Music sync
`gaming.js``/api/gaming`Gaming profiles, sessions, tipping
`gaming-subs.js``/api/gaming-subs`Gaming subscription management
`video-calls.js``/api/video-calls`Paid video call sessions

Money & Financial Routes


Route FileAPI PathWhat It Handles
`dedup-engine.js``/api/financial` (integrated)Duplicate detection across all sources
`categorization.js``/api/categorize`Auto-categorization engine (22 rule sets)
`bank-import.js``/api/bank-import`Bank statement CSV import
`bank-alternatives.js``/api/bank-sync`Plaid, Yodlee, MX, Finicity, Akoya connections
`tax-reporting.js``/api/tax`Tax reports, 1099 forms, deductions
`cashapp.js``/api/cashapp`Cash App integration
`credits.js``/api/credits`Credit packages, balance, spend, gift
`subscription-tiers.js``/api/tiers`Subscription tier management
`pricing.js``/api/pricing`Pricing bundles, rates
`reports.js``/api/reports`Comprehensive reports
`earnings-widget.js``/api/earnings-widget`Embeddable earnings display
`holiday-discounts.js``/api/discounts`13 holiday auto-discounts
`spending-badges.js``/api/badges`Top fan badges, dual-consent visibility

Notion & Database Routes


Route FileAPI PathWhat It Handles
`notion-live.js``/api/notion`Live Notion queries, financial sync, property mapping
`notion-writeback.js`(integrated)Platform → Notion bidirectional sync
`notion-db-scanner.js`(integrated)Universal database discovery (scans 200+ DBs)
`connected-databases.js``/api/databases`Connected database management
`db-api.js``/api/v2`Generic PostgreSQL CRUD for any table

Cross-Connection Routes (the glue)


Route FileAPI PathWhat It Handles
`entity-links.js``/api/entities`Universal entity linking (any record ↔ any record)
`scene-cascade.js``/api/scenes`One-call scene recording (creates 11 records across 7 tables)
`industry-contacts.js``/api/contacts`Industry contacts, auto-populate from filmography
`contact-import.js``/api/contacts`Apple/Google/Outlook/vCard/CSV import
`contact-sync.js``/api/contacts`Bidirectional contact sync engine
`cross-connections.js``/api/cross-connect`Shifts→bookings, contracts→calendar, store→income, vault→scenes, reports, profile, messages
`auto-post-events.js``/api/auto-post-events`12 auto-post triggers with per-user toggles
`calendar-sync.js``/api/calendar-sync`8-source calendar sync + ICS export/import
`dashboard-widgets.js``/api/dashboard-widgets`10-source dashboard summary
`used-items.js``/api/used-items`Used/worn item lifecycle

Safety Routes


Route FileAPI PathWhat It Handles
`safety.js``/api/safety`11 safety toggles, panic button, escalation
`safety-enhanced.js``/api/safety-v2`Ride tracking, offline panic, travel check-ins
`location-proximity.js``/api/location`Location sharing, proximity alerts
`geo-blocking.js``/api/geo-block`Geographic content blocking

Lifestyle Routes


Route FileAPI PathWhat It Handles
`wishlists.js``/api/wishlists`Wishlists, items, gift tracking
`amazon-wishlists.js``/api/amazon-wishlists`Amazon wishlist sync
`recipes.js``/api/recipes`Recipes, food photo analysis, nutrition
`fitness.js``/api/fitness`Workouts, body tracking, measurements
`bookmarks.js``/api/bookmarks`Bookmark collections
`watchlist.js``/api/watchlist`Movies/shows watchlist

Other Routes


Route FileAPI PathWhat It Handles
`legal.js``/api/legal`Legal documents, 2257 compliance
`gdpr.js``/api/gdpr`GDPR/CCPA data requests, export, deletion
`dmca.js``/api/dmca`DMCA takedown requests
`mail.js``/api/mail`Email sending
`email-templates.js``/api/email-templates`Email template management
`ai-tools.js``/api/ai`AI-powered features (captions, analysis)
`forms.js``/api/forms`Custom form builder
`ppv.js``/api/ppv`Pay-per-view content
`polls.js``/api/polls`Polls and voting
`referral.js``/api/referral`Referral program
`rider.js``/api/rider`Hospitality rider management
`watermark.js``/api/watermark`Media watermarking
`embed-widgets.js``/api/embed`Embeddable widgets for external sites
`discover.js``/api/discover`Content/user discovery
`connectors.js``/api/connectors`Platform connection handlers
`event-scraper.js``/api/events`Industry event discovery
`content-preservation.js``/api/preservation`Content import protection (never auto-deleted)
`fan-tags.js``/api/fan-tags`Private fan CRM tagging
`fan-questions.js``/api/questions`Fan Q&A
`counter-offers.js``/api/counter-offers`Price negotiation
`funded-scenes.js``/api/funded-scenes`Crowdfunded scene requests
`amateur-content.js``/api/amateur`Amateur content features
`companion-services.js``/api/companion`Companion booking services
`house-features.js``/api/venues`, `/api/house`House/venue features
`youtuber-asmr.js``/api/creators`YouTube/ASMR creator features
`findom.js``/api/findom`Financial domination sessions/tributes
`fundraiser.js``/api/fundraiser`Crowdfunding campaigns
`marketplace.js``/api/marketplace`Marketplace listings



5. Database Tables — Grouped by Feature {#5-tables}


237 tables total. Here are the key ones grouped by what they support.


Users & Auth

users (user_type: performer/studio/agent/publicist/strip_club/fan/admin), user_settings, user_verifications, user_aliases, user_blocks, user_businesses, user_credits, user_domains, user_photos, user_achievements, sessions, age_verifications, tos_acceptances


Financial

transactions (THE main money table), earnings, expenses, earning_statements, financial_accounts, bank_connections, bank_transactions, budgets, recurring_transactions, tax_reports, platform_revenue, platform_transactions, import_jobs, screenshot_imports, transaction_links


Content & Feed

posts (THE feed table), comments, post_edits, post_engagements, post_likes, post_update_alerts, posting_triggers, albums, album_items, content_calendar, content_reports, auto_post_settings, auto_post_queue, auto_post_groups, captions, caption_library


Bookings & Calendar

bookings, booking_requests, booking_preferences, booking_verifications, calendar_blocks, calendar_events, strip_clubs, strip_club_appearances


Films & Career

films, film_performers, film_performer_earnings, film_transactions, film_tag_requests, scenes, scene_contacts, award_submissions, career_timeline, contracts


Contacts

industry_contacts, contact_sync_state, addresses, emergency_contacts, client_interactions, client_relationships


Store & Commerce

products, orders, marketplace_listings, used_items, closet_items, item_requests, used_item_orders, pricing_bundles, pricing_rates, promo_codes


Messaging

conversations, messages, message_attachments, mass_messages, welcome_messages, birthday_messages


Social

social_accounts, cross_post_log, follows, friends, friend_requests, friendships


Entertainment

cam_rooms, cam_chat_messages, cam_tips, cam_private_requests, cam_viewer_sessions, cam_schedules, music_playlists, music_tracks, playlist_tracks, playlists, gaming_profiles, gaming_sessions, gaming_participants, gaming_subscriptions, game_wishlist, video_call_sessions


Safety

safety_alerts, safety_check_ins, safety_checkins, safety_incidents, safety_reports, safety_scores, ride_tracking, travel_checkpoints, travel_trips, location_shares, proximity_alerts, geo_blocks, geo_rules


Files & Media

vault_files, file_versions, file_duplicates, cloud_connections, cloud_sync_folders, media_downloads, photo_albums


Templates

templates (133 CSS templates), template_purchases, template_ratings


Notion Sync

connected_notion_databases, connected_databases, sync_history


Subscriptions & Payments

subscriptions, subscription_configs, subscription_tiers, credit_packages, credit_transactions, payment_methods, payout_requests, ppv_content, ppv_unlocks, spending_badges, spending_visibility, holiday_discounts


Other

entity_links (universal connector), custom_pages, page_blocks, custom_forms, form_submissions, notifications, notification_preferences, achievements, achievement_awards, legal_documents, records_2257, dmca_requests, referrals, reports, feedback, embed_widgets, scraped_events, polls, poll_votes, wishlists, wishlist_items, wishlist_goals, amazon_wishlists, amazon_wishlist_items, bookmarks, bookmark_collections, watchlist, recipes, fitness_workouts, body_measurements, health_logs, meal_plans, mood_entries, mileage_log, tip_menu_items, tip_songs, riders, rider_requirements, portfolios, portfolio_items, presenters, publicists, publicist_engagements, custom_categories, custom_requests, draft_campaigns, campaigns, special_accounts, donations, fundraisers, fundraiser_donations, funded_scenes, funded_scene_campaigns, funded_scene_requests, scene_funding, asmr_bookings, asmr_sessions, companion_bookings, companion_clients, companion_profiles, companion_rates, house_content_sales, house_costumes, house_shifts, house_tip_outs, house_tips, findom_sessions, findom_tributes, amateur_content, amateur_profiles, analytics_events, fan_event_schedules, fan_profiles, fan_questions, fan_tags, performer_holiday_settings, performer_ratings, platform_rules, preservation_jobs, profile_articles, public_profile_data, testing_records, team_members, vip_events, vip_event_attendees, vip_event_rsvps, blacklist, award_orders, auto_post_albums, live_photos (if exists)




6. The Connection Map — What Connects to What {#6-connections}


This is the most important section. When you modify ANY feature, check this map to see what else needs updating.


DASHBOARD connects to:


FEED connects to:


FINANCIAL HUB connects to:


BOOKINGS connects to:


FILMOGRAPHY connects to:


CALENDAR connects to:


ADDRESS BOOK connects to:


PUBLICIST connects to:


STRIP CLUBS connects to:


STORE connects to:


CLOSET (lifecycle) connects to:


SETTINGS connects to:


SAFETY connects to:


EARNINGS connects to:


CONNECTIONS connects to:




7. The 7 Layers of a Feature {#7-layers}


Every complete feature has up to 7 layers. When you ask for a new feature or a change, ALL relevant layers must be updated. Here's what they are:


Layer 1: DATABASE TABLE

What: The PostgreSQL table(s) that store the data.

File: Column additions in route files or schema.sql

Example: strip_clubs table stores club name, city, state, house_fee, rating


Layer 2: API ROUTE

What: The backend code that creates/reads/updates/deletes data.

File: /routes/feature-name.js

Example: POST /api/booking-system/strip-clubs creates a new club


Layer 3: HTML PAGE

What: The visual interface the user interacts with.

File: /public/app/feature-name.html

Example: publicist.html with 6 tabs, modals, forms


Layer 4: CROSS-CONNECTIONS

What: Auto-created records in OTHER features when this feature is used.

File: Within the route file OR in cross-connections.js

Example: Creating a strip club appearance auto-creates:


Layer 5: UI BUTTONS & LINKS

What: Buttons/links on OTHER pages that reference this feature.

File: Other HTML files that need buttons added

Example: "Rebook" buttons on Filmography and Financial Hub pages


Layer 6: SETUP GUIDE

What: Documentation in the interactive setup guide.

File: /public/app/setup-guide.html

Example: Strip Clubs section explains how to add clubs, log appearances, what gets auto-created


Layer 7: SETTINGS & TOGGLES

What: User-configurable options for this feature.

File: settings.html + route's preferences endpoint

Example: Auto-post toggle for strip_club_appearance in Settings → Auto-Post Settings


Quick Reference: Which Layers Does Each Change Need?


Change TypeLayers Needed
Add a brand new featureALL 7
Add a new field to existing feature1 (DB) + 2 (API) + 3 (HTML)
Connect two existing features4 (cross-connection) + 5 (buttons) + 6 (guide)
Add auto-post for something4 (trigger) + 7 (toggle in settings) + 6 (guide)
Change how something looks3 (HTML/CSS only)
Fix broken data2 (API route logic)
Add a new page3 (HTML) + `nav.js` (add to nav) + 2 (API if needed)



8. How to Ask for Changes — Prompt Templates {#8-prompts}


Use these exact prompts when asking for modifications. They ensure nothing gets missed.


Adding a Brand New Feature



Add [FEATURE NAME] to the platform. This should include:
- Database table with [describe fields]
- API endpoints for CRUD
- HTML page with [describe layout/tabs]
- Cross-connections to [list related features]
- Auto-post trigger (if applicable)
- Setup guide section
- Settings toggles (if applicable)
- Add to nav under [CATEGORY]
Build ALL 7 layers.

Example:


Add a Podcast feature to the platform. This should include:
- Database table with episode title, description, audio_url, duration, guest_name, publish_date
- API endpoints for CRUD
- HTML page with episodes list, upload form, player
- Cross-connections to: Feed (auto-post new episode), Calendar (scheduled releases), Financial Hub (sponsorship income), Contacts (guests as contacts)
- Auto-post trigger for new episode published
- Setup guide section
- Settings toggle for auto-post
- Add to nav under ENTERTAINMENT
Build ALL 7 layers.

Adding a New Field to an Existing Feature



Add [FIELD NAME] to [FEATURE]. Update:
- Database column on [TABLE]
- API to accept/return the new field
- HTML form/display to show it
- Any cross-connections that should use this field

Example:


Add a "mood" field to Bookings. Update:
- Database column on bookings table (mood VARCHAR)
- API to accept/return mood in booking creation/listing
- HTML booking card to show mood tag
- Calendar event title should include mood

Connecting Two Existing Features



Connect [FEATURE A] to [FEATURE B]:
- When [ACTION] happens on Feature A, auto-create [WHAT] on Feature B
- Add [BUTTON/LINK] on Feature A's page linking to Feature B
- Add [BUTTON/LINK] on Feature B's page linking back to Feature A
- Update setup guide with the new connection
- Update CONNECTION-AUDIT.md

Example:


Connect Recipes to Financial Hub:
- When a recipe ingredient list is saved, auto-create a grocery expense estimate in Financial Hub
- Add "View Expenses" link on recipe cards
- Add recipe tag on grocery expenses in Financial Hub
- Update setup guide
- Update CONNECTION-AUDIT.md

Modifying an Existing Feature



Change [WHAT] on [FEATURE]:
- [Describe the change]
- Check all cross-connections (see Operations Manual section 6)
- Update any pages that display this data
- Update setup guide if behavior changed

Adding Auto-Post for Something



Add auto-post trigger for [EVENT TYPE]:
- Add trigger in auto-post-events.js
- Add toggle in auto_post_settings table
- Add toggle switch in Settings page
- Add to setup guide Auto-Post section
- Test with: POST /api/auto-post-events/trigger { type: "[type]", data: {...} }

Adding a Platform Connection



Add [PLATFORM] connection:
- Add connection card to connections.html with setup steps
- Add to connections.html walkthrough section
- Add to setup-guide.html connections section
- Create API handler if needed
- Add "usedFor" description
- Add connection type (Full OAuth / Limited OAuth / Import Only / etc.)
- Connect data flow to relevant pages

UI-Only Change (Visual Only, No Data)



Change the [VISUAL ELEMENT] on [PAGE]:
- This is UI-only, no backend changes needed
- Update [specific HTML file]
- Make sure dark mode / monochrome / theme still works
- No cross-connections affected

The "Do Everything" Prompt (when unsure)



Add/change [DESCRIPTION]. Apply to ALL layers:
1. Database changes needed?
2. API route changes needed?
3. HTML page changes needed?
4. Cross-connections to other features?
5. Buttons/links on other pages?
6. Setup guide update?
7. Settings/toggles?
Check the Connection Map in the Operations Manual for all related features.



9. What Happens When You Add a Feature — Complete Checklist {#9-checklist}


Use this checklist every time a feature is added or modified:


Pre-Build


Build


Connect


Document


Test


Deploy




10. File Map — Where Everything Lives {#10-files}



/home/work/.openclaw/workspace/platform-server/
├── server.js                    ← Main entry point
├── package.json                 ← Dependencies
├── .env                         ← Environment variables (DB password, API keys)
│
├── routes/                      ← ALL backend logic (137 files)
│   ├── _register.js             ← Imports & mounts all routes
│   ├── financial-hub.js         ← Financial Hub endpoints
│   ├── booking-requests.js      ← Booking system (537+ lines, most complex route)
│   ├── scene-cascade.js         ← Scene recording cascade
│   ├── entity-links.js          ← Universal entity linking
│   ├── cross-connections.js     ← Cross-page connections
│   ├── auto-post-events.js      ← Auto-post triggers
│   ├── calendar-sync.js         ← Calendar sync engine
│   ├── dashboard-widgets.js     ← Dashboard widgets
│   ├── notion-live.js           ← Notion sync + queries
│   ├── notion-writeback.js      ← Platform → Notion sync
│   ├── dedup-engine.js          ← Duplicate detection
│   └── ... (124 more route files)
│
├── middleware/                   ← Runs before routes
│   ├── security.js              ← Auth & access control
│   ├── csv-parser.js            ← CSV upload parsing
│   ├── mailer.js                ← Email sending
│   ├── notion-client.js         ← Notion API client
│   └── validate.js              ← Input validation
│
├── db/                          ← Database layer
│   ├── client.js                ← PostgreSQL connection
│   ├── data-layer.js            ← Dual-write (PG + Notion)
│   ├── models.js                ← Data models
│   ├── defaults.js              ← Default values
│   ├── notion-dbs.js            ← Notion database IDs
│   └── schema.sql               ← Table definitions
│
├── public/app/                  ← ALL frontend files
│   ├── dashboard.html           ← Dashboard page
│   ├── financial.html           ← Financial Hub page
│   ├── ... (62 more HTML files)
│   │
│   ├── css/
│   │   ├── platform.css         ← Main styles + monochrome vars
│   │   ├── themes.css           ← Dark/light theme variables
│   │   ├── editorial-base.css   ← Default template base
│   │   ├── color-customizer.css ← Color wheel styles
│   │   └── templates/           ← 135 template CSS files
│   │
│   └── js/
│       ├── nav.js               ← Navigation (CRITICAL — all pages load this)
│       ├── api.js               ← API helper functions
│       ├── themes.js            ← Theme switching
│       ├── editorial-theme.js   ← Default template JS
│       ├── color-customizer.js  ← Color wheel functionality
│       ├── accessibility.js     ← Screen reader, voice, keyboard
│       ├── page-editor.js       ← Drag-and-drop layout
│       ├── template-engine.js   ← Template switching
│       ├── safety-sw.js         ← Offline panic Service Worker
│       ├── share-button.js      ← Share functionality
│       ├── quick-add.js         ← Quick add shortcuts
│       └── auth-guard.js        ← Login requirement
│
├── PLATFORM-OPERATIONS-MANUAL.md ← THIS FILE
│
└── core-files/                  ← Project documentation
    ├── CONNECTION-AUDIT.md      ← All connections status
    ├── MASTER-TASK-LIST.md      ← Task tracking
    ├── E2E-TESTING-LOG.md       ← Test results
    └── CONSOLIDATED-FEATURE-MAP.md ← Feature inventory

Key Environment Variables (.env)


VariableWhat It Is
`PG_PASSWORD`Database password
`PG_DATABASE`Database name (`platform`)
`PG_USER`Database user (`platformuser`)
`NOTION_TOKEN`Notion API token
`TWITTER_*`Twitter API credentials
`STRIPE_PUBLISHABLE_KEY`Stripe publishable key (`pk_live_...`) — used by frontend for checkout
`STRIPE_SECRET_KEY`Stripe restricted key (`rk_live_...`) — used by server for API calls
`STRIPE_CLIENT_ID`Stripe Connect OAuth client ID (`ca_...`) — needed only for Standard OAuth path
`STRIPE_REDIRECT_URI`OAuth callback URL for Standard connect

Stripe Connect Setup Status


Stripe Connect requires completing these steps in the [Stripe Dashboard](https://dashboard.stripe.com/settings/connect) before live payments work:


"Tell us about your platform" — 6 screens in order:

1. Funds flow → "Buyers will purchase from you" (platform collects, pays out to sellers)

2. How sellers get paid → "Sellers will be paid out individually" (one buyer, one seller)

3. Industry → "On-demand services" (closest to creator/service marketplace)

4. Account creation → "Onboarding hosted by Stripe" (Express — performers redirected to Stripe form)

5. Account management → "Express Dashboard" (Stripe-hosted payout dashboard for performers)

6. Summary → Review and confirm


Then complete remaining items:


Fee Model D: Customer pays product price + Stripe fee (2.9% + $0.30). Performer pays only 15% platform fee. Stripe fee never touches performer money.


All payment endpoints (payments.js) use real Stripe API calls when a valid key is configured, with automatic simulation fallback. Every API response includes live: true/false so the frontend knows which mode is active.


Commands You Need to Know


CommandWhat It Does
`pm2 restart platform`Restart the server (do this after code changes)
`pm2 logs platform`View server logs
`pm2 status`Check if server is running
`curl -sk https://indulgon.com/api/[endpoint]`Test an API endpoint



Appendix A: The Auto-Post Trigger Types


TriggerWhat Creates ItToggle Key
Scene ReleasedFilm added/published`scene_released`
Award NominatedAward submission created`award_nominated`
Award WonAward submission status → won`award_won`
New Store ListingProduct listed`new_store_listing`
Club AppearanceStrip club appearance logged`strip_club_appearance`
Booking ConfirmedBooking request accepted`booking_confirmed`
Milestone ReachedCareer timeline event created`milestone_reached`
Going LiveCam room started`going_live`
Wishlist GiftWishlist item purchased by fan`wishlist_gift_received`
Workout CompletedFitness workout logged`workout_completed`
Recipe SharedRecipe created/shared`recipe_shared`
Music SharedSong/playlist shared`music_shared`

All toggles live in auto_post_settings table and are configurable in Settings page.


Appendix B: The Scene Cascade — What 1 API Call Creates


POST /api/scenes/record with scene data creates:


1. Transaction (income) in transactions

2. Film in films

3. Film-transaction link in film_transactions

4. Calendar block in calendar_blocks

5. Career timeline event in career_timeline

6. Industry contacts for each costar/director in industry_contacts

7. Scene-contact links in scene_contacts

8. Closet items for wardrobe in closet_items

9. Entity links connecting everything in entity_links

10. Booking if from a booking request

11. Feed post if auto-post is enabled


All operations are idempotent — running twice with the same data won't create duplicates.


Appendix C: The Booking Request Flow



Sender → POST /api/booking-system/requests
    │
    ▼
Routing Engine (checks booking_preferences)
    │
    ├─ agent_receives_requests=true → notify agent
    ├─ i_receive_requests=true → notify performer
    ├─ auto_accept_if_open=true + calendar open → auto-accept
    │
    ▼
Recipient sees in Bookings → Requests tab
    │
    ├─ Accept → acceptBooking() runs:
    │   ├─ Calendar block created
    │   ├─ Booking record created
    │   ├─ Career timeline event
    │   ├─ Auto-post (if toggle on)
    │   └─ Notification to sender
    │
    ├─ Decline → notification to sender
    ├─ Reschedule → counter-date sent back
    └─ Counter → counter-rate/terms sent back

Appendix D: User Types & What They Can Do


User TypeCan Send BookingsCan Accept BookingsHas FilmographyHas StoreHas Cam
PerformerYesYesYesYesYes
StudioYesYesNoNoNo
AgentYesYes (on behalf)NoNoNo
PublicistYesNoNoNoNo
Strip ClubYesYesNoNoNo
FanYesNoNoNoNo
AdminYesYesYesYesYes

All user types share the SAME booking features, preferences, and calendar.




> Last Updated: 2026-04-29 04:35 EDT

> Route Count: 142/142 loaded, 0 failed

> Table Count: 237

> Page Count: 64

> Connection Status: 280+ connections, 0 missing





Automatic Filmography Import (IAFD Integration)


Overview

Indulgon automatically imports performer filmographies from the Internet Adult Film Database (IAFD). This is a competitive advantage -- no other platform offers automatic filmography import.


Technical Architecture


HTTP Scraper (Primary — `/api/tags/iafd-import`)

1. Search phase: Makes two HTTP requests to IAFD's search endpoint:

- Comprehensive search: iafd.com/results.asp?searchtype=comprehensive&searchstring=[name] (returns top 50 scenes + performer profile data)

- Title search: iafd.com/results.asp?searchtype=title&searchstring=[name] (returns up to ~120 additional scene matches)

- Both requests use standard HTTP with User-Agent: Mozilla/5.0 (compatible; IndulgonBot/1.0)

- IAFD's search results pages are NOT behind Cloudflare (no bot challenge)


2. Data extracted from search results (no Cloudflare issue):

- Performer profile URL (direct link)

- Exact name match verification

- All known aliases (e.g., "Anna Lynn, Annalynn Grace, Jillian Brookes")

- Active years (e.g., "2013-2025")

- Total scene count (e.g., 787)

- Scene list: title, IAFD ID, year, studio/distributor, IAFD URL


3. Import phase: For each scene found:

- Dedup check: SELECT FROM films WHERE external_id = [iafd_id] OR (LOWER(title) = LOWER([title]) AND year = [year])

- If new: INSERT into films table with source = 'iafd'

- INSERT into film_performers linking the requesting user

- If import_as_transactions = true: INSERT into transactions with source = 'iafd_import', amount = 0, category = 'Scene Work'


4. Limitations of HTTP scraper:

- Search results show top 50 (comprehensive) + ~120 (title) = ~134 unique scenes max

- Full filmography (e.g., 787 scenes) is only on the profile page, which has Cloudflare

- No social media handles from search results (those are on the profile page)


Browser Scraper (Cloudflare Bypass — `/api/iafd/scrape-profile`)

1. Purpose: Accesses IAFD profile pages that are behind Cloudflare bot protection

2. Method: Uses the Chromium browser running on the VM via Chrome DevTools Protocol (CDP)

- Connects to ws://127.0.0.1:9222 (Chromium's CDP WebSocket)

- Navigates to the IAFD profile URL in the real browser

- Waits 8-10 seconds for Cloudflare challenge to auto-solve

- Extracts rendered HTML via Runtime.evaluate


3. Data extracted from profile page (requires browser):

- Full biographical data: birthday, birthplace, ethnicity, measurements

- Social handles: Twitter/X, Instagram, OnlyFans, personal website

- Complete alias list

- Active years and scene count


4. Bulk scraper (POST /api/iafd/bulk-scrape):

- Iterates through placeholder accounts that have IAFD URLs but missing social handles

- Rate-limited: 3-second delay between requests

- Updates placeholder_accounts with discovered handles


5. Browser requirements:

- systemctl --user start openclaw-browser must be running

- Chromium CDP available at port 9222

- Node.js built-in WebSocket (Node 22+) for CDP communication


Database Tables Involved

TableRole
`films`Stores imported scenes. `source = 'iafd'`, `external_id = iafd_uuid`
`film_performers`Links performer to each film. `billing_order`, `is_platform_user`
`transactions`Scene Work income entries. `source = 'iafd_import'`, `amount = 0`
`placeholder_accounts`Stores IAFD data for performers not on Indulgon
`performer_tags`Links taggers to tagged performers with context
`entity_links`Links films to closet items (`source_type = 'film'`, `target_type = 'closet_item'`)

API Endpoints

EndpointMethodPurpose
`/api/tags/iafd-import`POSTImport filmography via HTTP scraper
`/api/tags/scene-closet/:filmId`POSTLink closet items to a film
`/api/tags/lookup/:name`GETManual IAFD lookup (search only)
`/api/iafd/scrape-profile`POSTBrowser-based profile scrape (Cloudflare bypass)
`/api/iafd/bulk-scrape`POSTBatch scrape all placeholders

Security & Legal Notes


> ADMIN USE ONLY — This section describes proprietary scraping methods that are a key competitive advantage. If a competitor learns how we bypass Cloudflare to access IAFD profile data, they can replicate the feature. If IAFD learns the specific technique, they can block it. Never discuss these methods outside this document.





Performer Tagging System


Overview

Performers can tag other performers in any context (filmography, feed, financial, bookings, content calendar). If the tagged person is not on Indulgon, a placeholder account is created and they receive an invitation.


Tag Creation Flow

1. Tagger enters a name (e.g., "Johnny Castle")

2. System searches users table by display_name or username (case-insensitive)

3. If found: Creates performer_tags entry with tagged_user_id pointing to real user

4. If NOT found:

a. Searches placeholder_accounts by display_name or stage_name

b. If existing placeholder: increment invitation_count

c. If no placeholder: CREATE new one with name, invited_by, metadata

d. Creates performer_tags entry with tagged_placeholder_id

e. IAFD lookup runs automatically to enrich the placeholder


Claim Flow (When Tagged Person Joins)

1. New user hits POST /api/tags/placeholder/:id/claim

2. System updates placeholder_accounts: status = 'claimed', claimed_by = user_id

3. All performer_tags with tagged_placeholder_id are updated: tagged_user_id = new_user_id, tagged_placeholder_id = NULL

4. All film_performers with placeholder_id are updated: user_id = new_user_id, placeholder_id = NULL

5. All bookings with coworker_placeholder_id updated

6. All content_calendar with collaborator_placeholder_id updated

7. Notification sent to every tagger: "[Name] just joined Indulgon!"

8. Response includes full attribution: which contexts transferred, who tagged what


Attribution (Who Added What)


Connected Systems

SystemFieldCreates Placeholder?
Filmography (scene creation)`coworkers` arrayYes
Feed (post creation)`tagged_performers` arrayYes
Financial Hub (transaction)`coworkers` arrayYes
Bookings (booking creation)`coworkers` arrayYes
Content Calendar (event creation)`collaborators` arrayYes
Scene Cascadevia `tagPerformerInScene()` helperYes

Database Tables

TableKey Columns
`performer_tags``tagger_user_id`, `tagged_user_id`, `tagged_placeholder_id`, `context_type`, `context_id`, `context_title`, `role`, `status`
`placeholder_accounts``display_name`, `stage_name`, `twitter_handle`, `instagram_handle`, `invited_by`, `invitation_count`, `claimed_by`, `status`, `metadata`
`film_performers``film_id`, `user_id`, `placeholder_id`, `performer_name`, `role`, `billing_order`
`notifications``user_id`, `type`, `title`, `message`, `reference_id`, `reference_type`, `is_read`



Scene-to-Closet Connection


How It Works

1. Every film entry (whether from IAFD import, manual entry, or CSV) has a closet_item_ids JSON array

2. POST /api/tags/scene-closet/:filmId with { closet_item_ids: ['uuid1', 'uuid2'] } links items

3. Entity links are created: entity_links row with source_type = 'film', target_type = 'closet_item'

4. Film is marked has_closet_items = true

5. Store listings for linked items show scene provenance: "As worn in [Title] ([Studio], [Year])"


Resale Value Impact





Credit System Architecture (Option C)


Overview

Credits are the platform's internal currency. 1 credit = $1 display value. Customers buy credit packs to spend on the platform. All money flows through Indulgon's Stripe account first.


Money Flow

1. Customer buys $100 credit pack (gets 120 credits with bonus) → $100 goes to Indulgon's Stripe

2. Customer spends credits on performers → system logs the transaction instantly

3. Performer sees "Earned X credits" on their dashboard

4. At payout time: Indulgon transfers performer's share from its Stripe to performer's bank/debit


Option C: Payout Based on Actual Dollars Paid


Promotional Credits


Credit Packs

PackPriceCreditsBonusEffective Rate
Starter$10100%$1.00/credit
Standard$505510%$0.909/credit
Premium$10012020%$0.833/credit
Elite$50065030%$0.769/credit

Performer Payout Methods (at launch)

MethodStatusHow
Bank Transfer (ACH)AvailableStripe sends directly to performer's bank
Debit CardAvailableStripe Instant Payouts to Visa/Mastercard
PayPalPost-launchRequires PayPal Business account on platform
VenmoPost-launchSame as PayPal (Venmo is owned by PayPal)
CashAppPost-launchNo API — performer provides bank info instead
Crypto (USDC)Post-launchRequires Circle or Coinbase integration

Performers Do NOT Need Stripe


Admin Endpoints

EndpointPurpose
`GET /api/payments/admin/funds-overview`YOUR money vs PERFORMER money separation
`GET /api/credits/admin/credit-overview`Total credits outstanding (purchased vs promotional)
`POST /api/credits/admin/grant`Grant promotional credits (with out-of-pocket warning)

Custom Pricing (Performer-Controlled)

SettingDefaultWhere
Text message rate1 creditSettings > Pricing
Photo message rate3 creditsSettings > Pricing
Video message rate5 creditsSettings > Pricing
Video call rate/min5 creditsSettings > Pricing
Subscription tiersPerformer setsPayments page
PPV pricesPerformer setsFeed / Post creation
Store pricesPerformer setsStore
Custom order pricesPerformer setsCustom Requests

Indulgon always takes 15% regardless of what the performer charges.





Multi-Role System


Overview

Users can have multiple roles simultaneously. Stored as TEXT[] roles on the users table.


Valid Roles

fan, performer, creator, studio, agent, escort, publicist, house_girl, companion, amateur


API Endpoints

EndpointMethodPurpose
`/api/settings/roles`GETGet current roles
`/api/settings/roles`PUTSet roles array `{ "roles": ["performer", "studio", "agent"] }`

Registration

POST /api/auth/register accepts roles: ["performer", "studio"] array. Primary role = first in array. Falls back to single role field for backward compatibility.


Dashboard Behavior




Cloud Storage — Bidirectional Sync and Cross-Service Transfers


Overview

Cloud files route supports 7 cloud services with full bidirectional sync and cross-service file transfers.


Supported Services

iCloud, Google Drive, Dropbox, OneDrive, Mega, Box, Amazon S3


Sync Direction

Default: bidirectional. Set per-connection in cloud_connections.sync_direction.


Cross-Service Move

POST /api/cloud/move — transfers files between cloud services through the platform. File is downloaded from source, uploaded to destination. User never downloads to their device.


Deduplication

SHA256 hash comparison. Duplicates detected on sync and removed automatically.


Deletion Policy

Files deleted on Indulgon go to trash (recoverable). Original files on cloud services are NEVER deleted by Indulgon.



AI Assistant System


Architecture


Database Tables (9 new)


Intent Detection (14 intents)

1. Profile update 2. Memory save/recall 3. Earnings queries

4. Metrics queries 5. Message summaries 6. Booking queries

7. Content drafting 8. Schedule management 9. Performance reviews

10. Morning briefings 11. Document generation 12. Calendar

13. Email integration 14. Knowledge base (13 static topics)


Genspark Integration



Fan Request Aggregation (routes/fan-requests.js)


Post-Launch Activation Checklist



News (routes/news.js)


Politics (routes/politics.js)


News vs Politics Rule


Signup and Session System


Split Signup Flow


Session Persistence


Account Safety Policy


News and Politics Pages


News (routes/news.js)


Politics (routes/politics.js)


News vs Politics Rule




Universal Role System


Architecture


Role List (20 total)

Role IDDisplay NameTarget AudienceKey Platforms
performerPerformerAdult industry performersOnlyFans, SextPanther, Chaturbate, Fansly, ManyVids
creatorContent CreatorGeneral content creatorsYouTube, TikTok, Instagram, Patreon
studioStudioProduction studiosMulti-performer management
agentAgent / ManagerTalent managersBooking management, commission splits
companionCompanionCompanion servicesClient management, rate cards
escortEscortEscort servicesBooking, safety, client screening
publicistPublicistPR/mediaPress contacts, media kits
house_girlHouse GirlClub/venue performersShift scheduling, tip tracking
amateurAmateur / NewIndustry newcomersGuided onboarding
musicianMusician / DJMusicians, DJs, producersSpotify, Apple Music, SoundCloud, Bandcamp
athleteAthleteAthletes, fitnessStrava, Nike Run Club, Garmin, Cameo
streamerStreamerLive streamersTwitch, YouTube Live, Kick, StreamElements
influencerInfluencerSocial media influencersInstagram, TikTok, YouTube, Twitter/X
podcasterPodcasterPodcast hostsSpotify for Podcasters, Apple Podcasts, Podbean
modelModelFashion/commercial modelsModel Mayhem, Casting Networks, agencies
artistArtistVisual artists, photographersEtsy, DeviantArt, ArtStation, Redbubble
writerWriter / AuthorAuthors, bloggers, journalistsSubstack, Medium, Amazon KDP, Wattpad
chefChef / Food CreatorChefs, food content creatorsYouTube, AllRecipes, Food Network
cosplayerCosplayerCosplayers, prop makersEtsy, convention circuit, Patreon
fanFanAudience membersFollow creators, purchase content

Role-Platform Mapping

Each role has associated platforms for the Connections and Import pages. Platform connections are additive — if a user has multiple roles, they see all associated platforms.


Where Roles Are Referenced

1. settings.html — ALL_ROLES array (role checkboxes)

2. signup-performer.html — role chip buttons

3. onboarding.html — chooser card descriptions

4. auth.js — VALID_ROLES validation, registration

5. db/schema.sql — role column definition

6. connections.html — platform connection cards

7. import.html — platform import cards

8. discover.js — discovery categories

9. ai-assistant.js — ROLE_KNOWLEDGE object

10. setup-guide.html — Universal Roles section

11. tutorial.html — Choose Your Roles step

12. support.html — Role FAQs


Adding a New Role (Checklist)

When adding a new role, update ALL of these:

1. settings.html ALL_ROLES array

2. signup-performer.html role chips

3. auth.js VALID_ROLES

4. db/schema.sql role comment

5. connections.html platform cards

6. import.html import cards

7. discover.js categories

8. ai-assistant.js ROLE_KNOWLEDGE

9. setup-guide.html roles table

10. tutorial.html role buttons

11. support.html role FAQ answer

12. PLATFORM-OPERATIONS-MANUAL.md role table

13. onboarding.html if card text needs updating


Platform Connection Architecture



Connections Page Layout



Batch 1 Updates (May 2, 2026)


FAB Bar Architecture


Indulgon Game (Scaffold)


Universal Comments System


Media Assignments (Set-As System)


Press Releases & Publications


Affiliate System (Scaffold)


Phone Notifications (Full Twilio Integration)

Route: routes/phone-notifications.js at /api/phone

DB Table: phone_numbers — 22 columns including verification, notification prefs, quiet hours, paid messaging


Endpoints:

MethodPathPurpose
GET`/api/phone/status`Connection + verification status
POST`/api/phone/connect`Enter number, sends 6-digit verification code
POST`/api/phone/verify`Submit code to verify number
POST`/api/phone/resend`Resend verification code
PUT`/api/phone/preferences`Update notification toggles, quiet hours
POST`/api/phone/notify`Internal: send SMS notification (called by other routes)
POST`/api/phone/incoming`Twilio webhook: incoming SMS replies
POST`/api/phone/disconnect`Disconnect phone
POST`/api/phone/paid-setup`Configure paid messaging rates
GET`/api/phone/paid-info/:userId`Public: check if performer has paid messaging
POST`/api/phone/test`Send test notification

Verification Flow:

1. User enters phone number → normalized to E.164 format

2. 6-digit code generated, stored with 10-minute expiry

3. SMS sent via Twilio (or simulated in demo mode)

4. User enters code → max 5 attempts

5. On success: is_verified = true, is_active = true, code cleared

6. Welcome SMS sent confirming activation


Notification Types: messages, bookings, safety, earnings (each independently toggleable)

Quiet Hours: No SMS during set times, EXCEPT safety alerts which always bypass

STOP/HELP/START: Twilio handles natively + manual handling in /incoming webhook

Reply Flow: Incoming SMS → find user by phone → find most recent conversation → insert reply → auto-mark as read

Paid Messaging: Per-message or monthly rate, set by performer


Environment Variables:


A2P 10DLC: Campaign registered as "Mixed" use case. All recipients are verified opt-in users. SMS content is transactional notifications only, never explicit content.


Navigation Updates


Route Count: 162 (was 158)

DB Table Count: 296 (was 287)

Page Count: 80 (was 76)


Tax Revenue Calculator

Route: routes/tax-calculator.js at /api/tax

DB Tables: tax_1099s, tax_transactions


Endpoints:

MethodPathPurpose
GET`/api/tax/1099s`List 1099 forms (optional ?year= filter)
POST`/api/tax/1099s`Add single 1099
POST`/api/tax/1099s/bulk`Bulk import 1099s
DELETE`/api/tax/1099s/:id`Delete 1099
POST`/api/tax/parse-transcript`Parse IRS Wage & Income Transcript text
GET`/api/tax/transactions`List bank transactions (filters: year, account, category, type)
POST`/api/tax/transactions/import`Import parsed bank transactions
POST`/api/tax/transactions/parse-csv`Parse bank CSV (auto-detect columns)
GET`/api/tax/summary`Year-by-year revenue summary
GET`/api/tax/discrepancies`Cross-reference 1099s vs bank deposits
GET`/api/tax/report/:year`Full tax report for a year
GET`/api/tax/la-city-response/:startYear/:endYear`Generate LA City tax response letter
POST`/api/tax/categorize/:id`Manually recategorize a transaction
GET`/api/tax/accounts`List imported bank accounts

Auto-categorization: 172+ patterns, 114 categories covering all 20 user roles.

CSV parsing: Auto-detects column layout (Date, Description, Amount, Deposit/Withdrawal, Balance).


GIF Editor (Animated Avatars)

Route: routes/gif-editor.js at /api/gif

DB Table: user_gifs

Requires: ffmpeg (pre-installed on server)


Endpoints:

MethodPathPurpose
GET`/api/gif/status`Check ffmpeg availability
POST`/api/gif/create`Create GIF from video (start/end/width/fps)
GET`/api/gif/my-gifs`List user's GIFs
DELETE`/api/gif/:id`Delete a GIF
POST`/api/gif/probe`Get video info (duration, dimensions, fps)

Two-pass creation: Palette generation + palette-applied GIF for better colors.

Limits: Max 6 seconds, max 480px width, max 20 fps.


Batch 2 Updates (May 2, 2026 — Afternoon Session)


Google OAuth (Sign in with Google)


Cross-Platform Handle Resolver


Scene Promo Composer


Photo Import / Search


Social Post Queue


Universal Media Search


Smart Calendar Enhancements


Feed Cross-Platform Tags


Posts Table Schema Update


Clean URL Routing


Updated Counts


Features Added 2026-05-07


Multi-Account Connections (`/api/accounts`)


Email Intelligence (`/api/email-intel`)


Service Menu (`/api/service-menu`)


Unfulfilled Request Detector (`/api/unfulfilled`)


Product Menu (`/api/product-menu`)


Live Queue (`/api/live-queue`)


Content Gallery (`/api/content-gallery`)


Amazon/Shipping Order Tracking


Quote Automation System (Make.com Replacement)


Overview

Replaces all 6 Make.com scenarios with native platform functionality. Route: routes/quote-automation.js (1060 lines). Mounted at /api/quotes.


Endpoints

MethodPathPurpose
POST`/api/quotes/receive`Create new request + send confirmation email
POST`/api/quotes/approve/:id`Set price, create Stripe Payment Link, email customer
POST`/api/quotes/start/:id`Mark in-progress, email customer
POST`/api/quotes/complete/:id`Mark done, attach delivery URL, email customer
POST`/api/quotes/deliver/:id`Confirm delivery (digital/physical), email customer
POST`/api/quotes/decline/:id`Decline + suggest alternatives, email customer
POST`/api/quotes/check-expirations`Cron: renew expired links or expire quotes (Monday 9am)
POST`/api/quotes/webhook`Stripe webhook: payment success/fail/checkout
GET`/api/quotes/dashboard`Stats: pending, approved, in_queue, completed, revenue
GET`/api/quotes/alternatives`List alternative suggestions for performer
POST`/api/quotes/alternatives`Create new alternative suggestion
PUT`/api/quotes/alternatives/:id`Update alternative suggestion
GET`/api/quotes/status/:quoteId`Public quote status lookup
GET`/api/quotes/events/:requestId`Payment event audit trail

Database Tables


Stripe Integration


Notion Database Mappings (Make.com equivalent)

Notion DatabasePlatform TableSync Direction
Master Requests Queuecustom_requestsBidirectional
Custom Quote Requestscustom_requestsBidirectional
Custom Quote Requests (Special)custom_quotesBidirectional
Alternative Suggestionsalternative_suggestionsBidirectional
Transaction/Payment Logpayment_link_eventsPlatform → Notion

Email Templates (12)

1. Request Received

2. Quote Approved (with payment button)

3. Full Payment Received (queue position)

4. Partial Payment (remaining balance + pay button)

5. Payment Failed (retry button)

6. Work Started (production status)

7. Content Ready (download link)

8. Content Delivered (digital) / Order Shipped (physical with tracking)

9. Link Expired - 1st Reminder (new link)

10. Link Expired - Last Chance (new link)

11. Quote Final Expiration

12. Decline with Alternatives


Cron Job


Payment Flow

1. Customer submits request → POST /api/quotes/receive

2. Performer sets price + approves → POST /api/quotes/approve/:id → Stripe Payment Link created

3. Customer clicks link → pays on Stripe-hosted page → redirected to indulgon.com/order-confirmed

4. Stripe webhook fires → POST /api/quotes/webhook → updates payment status

5. Full payment → auto-adds to production queue with position number

6. Partial payment → tracks amount_paid, sends receipt with remaining balance


Security


Smart Request Detection (Custom vs Quote)


Overview

Detects when a customer's Quote Request description matches existing menu options and offers to redirect them to a Custom Request with set pricing.


Endpoint


Customer-Facing Page


How It Works

1. Customer types in Quote Request description textarea

2. 800ms debounce triggers POST /smart-match with their text

3. Backend matches against performer's: styles, creator_roles, customer_roles, outfits, custom_services, and request type keywords

4. If matches found, popup shows what was detected with option to switch

5. Switching copies description to Special Instructions, pre-selects matched options, transfers name/email


Custom Request Features


Quote Request Features


Request Inbox System


Overview

The Request Inbox (/request-inbox) is the performer's central workspace for managing Custom Requests and Quote Requests. It provides filtering, searching, sorting, saved filter presets, and sentence-format request summaries.


Endpoints

MethodPathDescription
GET`/api/service-menu/requests/inbox`Filter/search/sort/paginate requests
PUT`/api/service-menu/requests/saved-filter`Save a named filter preset
GET`/api/service-menu/requests/saved-filters`List all saved filter presets

Inbox Query Parameters


Response Includes


Sentence-Format Notifications

The generateRequestSummary() function creates human-readable summaries from order data:


"James Smith requested a Custom Video for 10 minutes (JOI, POV) in Schoolgirl as Teacher (customer wants to be called Daddy) for $300.00 [Categories: JOI, Foot Fetish] - 'Black heels and red panties, call me Daddy, countdown from 10'"

Used for: performer notifications, Request Inbox cards, customer email confirmations.


Saved Filter Presets

Filters are stored in user_settings with key service_menu_saved_filters. Each preset has a name and a filters object. Performers can save presets like "Red Panties", "JOI 10min", "Foot Fetish Requests" for one-click batch access.


Order Form (Customer-Facing)


Overview

The Order Form at /order?performer=[id] is the unified customer page for placing Custom Requests and Quote Requests. It serves as the parent page for all custom content.


Two Modes

FeatureCustom RequestQuote Request
Service TypesCustom Video, Photo Set, Skype ShowCustom Video, Photo Set, Skype Show
PricingSet by performer rate card, shown instantlyPerformer reviews and sends personalized quote
PaymentImmediate Stripe checkoutPayment link after quote approval
Best ForStandard ordersUnique/complex requests

Form Fields (shared by both modes)


Quote Request Additional Fields


Constants (in service-menu.js)


Nav Page Search


Overview

Search bar in the navigation bar for instant page navigation. Accessible via click (magnifying glass icon, top-right) or keyboard shortcut (Ctrl+K / Cmd+K).


Implementation

Built into nav.js. Maintains a flat allSearchPages[] array built from corePages + all moreGroups. Searches by label, href, and group name. Results show page name + nav category. Enter navigates to first result. Escape closes.


Navigation Updates


Request Form Editor


Overview

The Request Form Editor (/request-form-editor) allows performers to fully customize their customer-facing order form. All settings are stored as service_menu_* keys in user_settings table.


5 Customization Tabs

TabWhat It Controls
Form FieldsToggle field visibility, reorder fields
Options & SelectionsAdd/remove/rename options in every dropdown/chip group (12 option sets)
Labels & WordingCustom labels, help text, placeholders for every field
Policies & PricingContent policy lists, sales/refund policy, video/photo/Skype pricing
Email TemplatesSubject and body for 6 lifecycle emails with {placeholder} support

Option Sets (12)

Styles, Service Categories, Creator Roles, Customer Roles, Outfits, Moods, Color Schemes, Tools & Toys, Accessories, Locations, Add-Ons, Product Items


Endpoints

MethodPathDescription
GET`/api/service-menu/settings`Get performer's current settings
PUT`/api/service-menu/settings`Save settings (any key-value pairs)
POST`/api/service-menu/settings/reset`Delete all custom settings, revert to defaults

How Customization Propagates


Storage

All settings stored as service_menu_{key} in user_settings table (PostgreSQL JSONB values).

Example keys: service_menu_styles, service_menu_label_outfits, service_menu_form_field_visibility, service_menu_email_request_received_subject.


Universal Undo System


Overview

Apple Markup-style undo available on all editor pages. Tracks individual changes, supports undo/redo one at a time, and "Revert All" to page-load state.


Implementation

js/undo-system.js (172 lines) — standalone module, no dependencies.


Pages Using Undo


Multi-Format Orders


Overview

Customers can select multiple request types (Custom Video + Photo Set + Skype Show) in a single order. Each type gets its own duration/quantity selector.


Multi-Outfit Ordering

Multiple outfits can be selected. When >1 outfit is chosen, an ordering hint appears asking which to wear first. The Special Instructions placeholder updates to prompt outfit order specification.


Notion Option Sync


Overview

When performers save option changes in the Form Editor, the platform syncs those options to connected Notion databases via the Notion API databases.update() endpoint.


Behavior


Notion Databases Synced

DatabaseIDProperties Synced
Customer Orders (Current)13fb8641...Style, Attire, Creator Role, Customer Role, Mood, Color Scheme, Tools & Toys, Accessories, Service Category
Customer Orders (Completed)13fb8641...Same as above
Custom Quote Requests (Special)2e8b8641...Style, Creator Role, Customer Role, Mood, Color Scheme, Service Category

API Method

notionClient.updateDatabaseProperties(databaseId, properties) — added to middleware/notion-client.js


Notion-Enriched Options (807 Total)


Data Source

All dropdown options pulled from Jillian's real Notion databases:


Full Notion Audit (1,152 databases)

CategoryCountNotes
Business Orders79Customer Orders, Queue, dropdown DBs
Business Financial166Income, expenses, tax, bank, budget
Business Contacts48Clients, vendors, addresses
Business Projects38Tasks, milestones, goals
Business Products26Products, inventory, closet
Business Content32Media, portfolio, calendar
Business Marketing16Social, analytics, affiliates
Business Ops102Settings, templates, config
Platform Core Mapped34Already integrated
Personal Life66Habits, journal, health, goals
Personal Travel81Trips, flights, hotels, Airbnbs
Personal Finance58Budget, savings, subscriptions
Personal Entertainment22Movies, books, anime, music
Personal Home16Plants, recipes, gifts, shopping
Personal Education21Courses, grades, coding
Duplicates/Templates115Notion template instances
Uncategorized232Need review

Dick Rating Service


Implementation


Order Attachments


Implementation


Supply Items


Implementation


Role-Specific Pages (v0.35.0)


Overview

Specialized pages for specific creator roles. All users get shared features (Dashboard, Earnings, Bookings, etc.). Role-specific pages add tools tailored to each role's workflow. Accessible from More > Creative in navigation.


Podcaster Hub


Artist Studio


Writer's Desk


Cosplay Workshop


Filmography Access


Existing Role Pages


Role-Specific Pages (v0.35.0)


Overview

Specialized pages for specific creator roles. All users get shared features (Dashboard, Earnings, Bookings, etc.). Role-specific pages add tools tailored to each role's workflow. Accessible from More > Creative in navigation.


Podcaster Hub


Artist Studio


Writer's Desk


Cosplay Workshop


Filmography Access


All Role-Specific Pages


Companion Services (Rebuilt v0.36.0)


Overview

Safety-first in-person meetup booking system. NOT for filming. Covers dinner dates, events, appearances. Every customer must be identity-verified before booking. Cross-performer review system ensures performers always know who they are meeting.


Page


Route


Endpoints


Customer Verification Flow

1. Customer uploads government ID photo (driver's license, passport, state ID)

2. Customer takes live selfie for photo match comparison

3. Admin or AI reviews and approves/rejects

4. Verified badge appears on customer profile, visible to all performers

5. Unverified customers cannot book (if performer has require_id_verification enabled)


Cross-Performer Review System


Safety Features


Booking Statuses

Requested > Accepted > Deposit Paid > Confirmed > Completed (or Cancelled / No-Show)




11. Features Added Sessions 12-17 (2026-05-08 through 2026-05-12) {#11-new-features}


> This section covers every feature built since the Content Calendar overhaul. All routes, tables, and pages are production-ready and tested.


Creative Tools


Stories (`stories.html` / `routes/stories.js`)


Reels (`reels.html` / `routes/reels.js`)


Smart Video Editor (`video-editor.html` / `routes/video-editor.js`)


Auto-Generated Closed Captions (`routes/captions.js`)


Transcripts (`transcripts.html` / `routes/transcripts.js`)


Advanced Feed Features (`feed.html` / `routes/feed.js`)


Content Gallery (`content-gallery.html` / `routes/content-gallery.js`)


Productivity and Organization


Unified Inbox (`inbox.html` / `routes/inbox.js`)


Notes (`notes.html` / `routes/notes.js`)


Kanban Project Board (`kanban.html` / `routes/kanban.js`)


Ask Box (`ask-box.html` / `routes/ask-box.js`)


Expedite / Priority Bidding (`routes/expedite.js`)


Custom Phrases (`routes/custom-phrases.js`)


Social Features


Audio Rooms (`spaces.html` / `routes/audio-rooms.js`)


Channel Points (`routes/channel-points.js`)


Matching (`routes/matching.js`)


Raids (`routes/raids.js`)


Memories (`routes/memories.js`)


AR Filters (`routes/ar-filters.js`)


Visual Search (`routes/visual-search.js`)


Platform Systems


Change Trail (`routes/change-trail.js`)


Universal Undo System (`public/app/js/undo-system.js`)


Role Switcher (`public/app/js/role-switcher.js`)


Multi-Email Login (`routes/auth.js`)


Presence Modes (`routes/presence.js`)


Health Monitoring (`routes/health-monitor.js`)


Loyalty Badges (`routes/loyalty-badges.js`)


Universal Platform Search (`routes/platform-search.js`)


External Payments (`routes/external-payments.js`)


Credit Wallet (`routes/credits.js`)


User Subdomains (`routes/user-subdomains.js`)


Video/Voice Calls (`video-calls.html` / `routes/video-calls.js`)


Bookmarks (`bookmarks.html` / `routes/bookmarks.js`)


Bots & Plugins (`bots.html` / `routes/bots.js`)


Activity Tracker (`routes/activity-tracker.js`)


Test Mode (`routes/test-mode.js`)


Auto-Sync & Updates


Updates Page (`updates.html` / `routes/updates.js`)


Email System


Email Templates (`routes/email-templates.js`)


Database Summary (New Tables This Sprint)


TablePurpose
storiesStory posts
story_viewsView tracking
story_reactionsReactions
story_highlightsPinned stories
reelsShort-form video
reel_likesReel likes
reel_commentsReel comments
audio_roomsLive audio
audio_room_participantsRoom members
kanban_boardsProject boards
kanban_cardsBoard cards
ask_boxFan questions
ask_box_settingsPricing/quota config
ask_auto_answersKnowledge base
channel_pointsPoint balances
channel_points_logPoint transactions
channel_rewardsRedeemable rewards
ar_filtersCamera effects
match_profilesMatching profiles
match_actionsLike/pass actions
matchesMutual matches
raidsAudience redirects
soundsAudio library
saved_soundsUser saved sounds
botsBot definitions
bot_installsUser bot installations
bot_event_logBot activity
video_edit_jobsEdit queue
video_edit_projectsProject files
caption_jobsCaption generation
video_captionsGenerated captions
caption_settingsAuto-caption config
transcriptsSearchable text
transcript_settingsAuto-save config
custom_phrasesPer-customer phrases
phrase_settingsRotation mode config
tipsTip records
expedite_settingsQueue priority config
expedite_bidsPriority bids

Total new tables this sprint: 39

Platform total: 382+ tables


Cross-Platform Posting (`routes/cross-post.js`, `routes/social-queue.js`)


Progressive Web App (PWA)



Fan Migration (`routes/fan-integration.js`)


Partner SDK (`routes/partner-sdk.js`, `sdk-docs.html`)


Email Sync (`routes/email-sync.js`)


Admin Tools (`routes/admin-tools.js`)


Content Moderation (`routes/content-moderation.js`, `routes/reports.js`)


Password Reset (in `routes/auth.js`)


Daily Backups


Tax Calculator (`routes/tax-calculator.js`)


Tip Menu (`routes/tip-menu.js`)


Mass DM (`routes/mass-messaging.js`)



Section 12: Account Snapshots, Analytics, and Data Retention


Account Snapshot System


Analytics Endpoints


Account Recovery


Data Retention Policy


Universal Change Trail


Where Data Retention Is Documented


Smart Wishlists System (Added 2026-05-13)


Architecture


Features (13 tabs)

1. Browse All — search/sort/filter all 2,024+ items, grid/list/compact views

2. My Wishlists — 52 Amazon wishlists displayed as cards

3. Folders — nested category folders, auto-organize from product categories

4. Favorites — items marked as favorites

5. Purchased — who bought (self/fan/gift), spending vs savings

6. Cart — items currently in Amazon cart

7. Saved for Later — items saved on Amazon

8. Duplicates — same ASIN+color+size detection, one-click merge

9. Analytics — by category, brand, price range, style/color analysis, recommendations

10. Import — Amazon CDP browser import, CSV upload, URL paste

11. Gift Cards — manual + auto-detect from email

12. Archive — removed items, restorable anytime

13. All Favorites — universal favorites from ALL pages (products, services, posts, photos, bookmarks)


Data Pipeline


Cross-Platform Connections


API Endpoints


Amazon Import Tools (Added 2026-05-13)


Bookmarklet (All browsers including Safari)


Browser Extension (Chrome/Edge/Brave)


Safari/Apple users: Bookmarklet only. Works on macOS Safari, iOS Safari (via bookmark URL edit), iPadOS Safari.


Notion Wishlist Sync — Bidirectional (Added 2026-05-13)


Auto-sync hooks (platform -> Notion):

All hooks use syncItemToNotion() exported from wishlist-sync.js, imported by smart-wishlists.js


Manual sync:


Schema: Notion databases created with properties: Name (title), Price (number $), List Price (number $), ASIN (text), URL (url), Brand (text), Category (select), Subcategory (text), Color (text), Size (text), Rating (text), Location (select: Wishlist/Cart/Saved/Purchased/Archived), Status (select: Active/Purchased/Archived), Favorited (checkbox), Image (url), Added (date), Source (text), Notes (text)


DB columns added: amazon_wishlists.notion_database_id, amazon_wishlist_items.notion_page_id, wishlist_folders.notion_database_id, wishlist_folders.notion_parent_page_id


Rate limiting: Notion API ~3 req/s. Bulk sync pauses 350ms every 3 requests.


Folder → Notion mapping: Each folder can be linked to one Notion database. All items in all wishlists under that folder sync to that database. Alternatively, each wishlist can have its own Notion DB.


Smart Item Detection (Added 2026-05-13)


How it works: Browser extension content script (content.js) monitors DOM events on Amazon pages:


Backend handling: POST /api/smart-wishlists/import/receive — same endpoint as bookmarklet. metadata.action field carries the detected action type. If action is purchased, item status is immediately set to purchased after insert.


Settings: smartDetect stored in chrome.storage.local. ON by default. User can toggle in extension popup.


Safari limitation: No extension support. Bookmarklet is manual-click only. Smart detection is extension-exclusive.


Notifications: Black toast notification appears bottom-right of Amazon page for 4 seconds confirming the sync.




Admin Command Center (Added 2026-05-13)


Route file: routes/admin-command-center.js

HTML page: public/app/command-center.html

DB table: system_events (created manually via sudo -u postgres psql)


Endpoints


System Event Logging

app.locals.logSystemEvent(type, severity, title, details, source) — globally available after server init.

Wired into: health-monitor.js (client errors → warning), safety.js (panic alerts → critical), support-tickets.js (new tickets → severity-based), _register.js (server start + route failures).


Dashboard Integration

dashboard.html has a collapsible Command Center panel at top. Auto-opens on critical issues. Refreshes every 30s. Uses /api/command-center/summary endpoint. Shows status dot + message + badges when collapsed, mini cards + recent issues when expanded.


Notion Sync

Bidirectional sync with Notification Center DB (34db864118fc818191daee035f368c08). Platform → Notion pushes: Title, Type, Severity, Status, Details, Source, Auto-Resolved. Notion → Platform pulls new entries.


Bookmark CSV Import (Added 2026-05-13)


Route file: routes/bookmark-dedup.js

Endpoint: POST /api/bookmark-tools/import-and-dedup


3-Level Categorization

detectCategory3Level() function with 100+ URL pattern rules. Returns Department > Category > Subcategory (e.g., "Shopping > Amazon > Products", "Beauty & Fashion > Cosmetics > Sephora").


URL Normalization

Strips: utm_source, utm_medium, utm_campaign, fbclid, gclid, ref, tag, www prefix, trailing slashes. Used for both dedup comparison and storage.


Frontend

bookmarks.html has "Import CSV" tab with drag-and-drop upload, preview table, duplicate handling mode selector, results panel with breakdown.


Payout Transparency (Added 2026-05-13)


Route file: routes/payouts.js

Endpoint: GET /api/payouts/info


Returns structured JSON: platform_fee (rate, applies_to array, does_NOT_apply_to array), stripe_processing_fee, payout_methods (supported + display_only), important_notes.


Surfaced on: settings.html (Fees & Payouts section, loadPayoutInfo() function) and earnings-v2.html (Payouts tab, auto-loads on page init).


Safety Full History (Added 2026-05-13)


Route file: routes/safety-enhanced.js

Endpoints:


Notion Database Relations (Added 2026-05-13)


13 bidirectional dual-property relations wired via Notion API databases.update:


Script: /tmp/wire-notion-relations.js (run once, creates dual_property type relations).


Service Worker Fix (Added 2026-05-13)


File: public/sw.js

Cache version: indulgon-v4 (bumped from v3)


Key change

HTML pages (navigate requests) are never cached — always fetched from network. Only the offline fallback page shows when truly offline. Static assets (CSS/JS/images) still use network-first with cache fallback, but only cache successful (200 OK) responses.


Problem solved

Service worker was caching HTML pages including the offline page. During brief connectivity blips, it would cache the offline page under the real URL, then keep serving it even after connectivity returned.


Nav Bar Pin/Unpin Redesign (Added 2026-05-13)


File: public/app/js/nav.js


Changes


PM2 Auto-Startup (Added 2026-05-13)


Service: pm2-work.service (systemd)

Config: --max-memory-restart 500M

Startup command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u work --hp /home/work


PM2 auto-starts on VM boot and resurrects saved process list. Platform server auto-restarts on crash or if memory exceeds 500MB.


Nav Customization Update (Added 2026-05-13, updated)


Full feature set now includes:

1. 14 sections: HOME (Dashboard, Command Center, Profile, Feed, Inbox, Safety), COMMUNICATION (Messages, Live Cams, Video Calls, Spaces, Inbox), CONTENT, COMMERCE, FINANCES, MANAGE, CREATIVE, ENTERTAINMENT, PROFESSIONAL, LIFESTYLE, ABOUT, ACCOUNT, HELP, INDULGON

2. Pin/Unpin pages: Toggle via pin icon in dropdown footer. Pinned pages appear in top nav bar + bold in dropdown.

3. Page drag-and-drop: In edit mode, each page has a 6-dot drag handle. Drag within section to reorder, drag to different section header or page to move between sections.

4. 3 section sort modes: Grouped (function-based, default), A-Z (alphabetical), Custom (user-defined via section header drag-and-drop).

5. Section drag-and-drop: In Custom sort mode, section headers get drag handles for reordering.


localStorage keys:


Footer controls (3 items):

1. Sort button (cycles Grouped → A-Z → Custom)

2. Pin icon (toggles edit mode — filled pushpin = on, slashed = off)

3. Reset (clears all 5 localStorage keys)


Documented in: setup-guide.html, tutorial.html, support.html FAQ (2 entries), tour.html, glossary.html (2 terms), onboarding.html, getting-started.html, ai-assistant.js knowledge base



Template System (Added 2026-05-18)


Overview


Database Tables


Route: `/api/template-system` (routes/template-system.js)


CSS Theme Files

Location: public/app/css/templates/{slug}.css

Each file defines: color variables, typography (Google Fonts), card styles, button patterns, tag styles, scrollbar themes, tab accents. Both light and dark mode variants.


Frontend

public/app/js/template-system.js — Injected into 105 pages. Auto-loads active template from localStorage (instant, no flash). Manages apply/switch/customize/reset/undo.


Unified Marketplace (Added 2026-05-18)


Overview

Store + Templates + Marketplace merged into single page with tabs:


Navigation Changes


Life Tracker Expansion (Added 2026-05-18)


7 New Tables


Expanded Columns


Route: `/api/life` (routes/life-tracker.js) — 17 categories

New endpoints: period, sleep, water, skincare, vision-board, bucket-list, outfits, books, gratitude, dreams, goals/vision, goals/bucket, summary/expanded


Route: `/api/life-sync` (routes/life-notion-sync.js) — Notion bidirectional


Notion Database IDs



Fine-Tuning Phase Changes (2026-05-20)


New Route Files Added (24 total)

RouteMount PointPurpose
age-verification.js/api/age-verificationDOB field + 18+ gate
musicians.js/api/musiciansMusicians page CRUD
referrals.js/api/referralsReferral code system
file-dedup.js/api/file-dedupDuplicate file scanner
gift-credits.js/api/gift-creditsCredit gifting between users
testing-service.js/api/testingPASS/testing records + reminders
call-sheets.js/api/call-sheetsAuto-generated call sheets
calendar-visibility.js/api/calendar/visibilityThree-tier calendar privacy
closet-scene-link.js/api/closet-sceneBidirectional item-scene search
handle-resolver.js/api/handlesCross-platform handle mapping
seasonal-discounts.js/api/seasonal-discountsAuto-enable/disable discounts
auto-caption.js/api/auto-captionAI-generated captions + alt text
dance-rate-calculator.js/api/dance-rateFeature dance rate calculator
wardrobe-pricing.js/api/wardrobe-pricingScene provenance pricing
booking-consent.js/api/booking-consentDual-consent + audit trail
locked-albums.js/api/locked-albumsLock files from deletion
auto-invoice.js/api/invoicesAuto-invoice on booking confirm
closet-locations.js/api/closet-locationsPhysical closet location tracking
file-metadata.js/api/file-metadataEXIF preservation + conflict resolution
closet-guide.js/api/closet-guideInteractive closet setup guide
booking-visibility.js/api/booking-visibilityPer-booking visibility toggle
auto-post.js/api/auto-postAuto-curate mass posts
password-dedup.js/api/password-dedupPassword reuse scanner
package-tracking.js/api/packagesUSPS/UPS/FedEx tracking
voice-to-text.js/api/voice-to-textSpeech recognition API
external-embeds.js/api/external-embedsExternal platform embeds

Global Fixes Applied


Page-Specific Modifications

28+ pages received targeted modifications per the Fine-Tuning Plan (P1-P36 equivalent items).

Key changes: safety check-in timer, gallery/table view toggles, proper form fields for all add buttons,

edit/delete on entries, category filters, tab additions, real data wiring for biography tabs.


Structural Changes




May 24, 2026 — Features Added


Permanent Profile URLs

Every user now has two profile URLs stored in users.permanent_profile_url:


Admin view: Admin Users Directory (/app/admin-users-directory.html) shows all users with both URLs + copy buttons + CSV export.


Model Release & Costar System

Tables: model_releases, costar_connections

Routes: routes/model-releases.js — 9 routes in correct order (specific before /:id)


Key rules:


Account Recovery / Snapshots

Table: account_snapshots (3,244+ snapshots)


Notification Bell + System Notifications


Unified Communication Hub

Four connected pages with shared tab navigation (Messages | Inbox | Activity | System):


Inbox tabs added today: Custom Requests (pulls from /api/service-menu/requests/inbox), Messages (preview with click-through), System (platform notifications)


Auto-Badge System (PAUSED)

System built, currently paused until final verification pass.


Update Notification Banner


Signup Fix

routes/auth.js — fixed pool is not defined error that was silently breaking all new registrations. Used require('../db/client') at the correct scope for permanent URL assignment.


Earnings Summary Widget


Admin Platform Earnings Overview





2026-05-24 05:41 PM — Auto-logged Changes


Affected: Tour Page, Tutorial


Commits:


Files changed: platform-server/FINE-TUNING-PLAN.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/tour.html, platform-server/public/app/tutorial.html





2026-05-24 05:46 PM — Auto-logged Changes


Affected: Setup Guide


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/setup-guide.html, platform-server/public/last-docs-update-commit.txt, platform-server/scripts/auto-update-docs.js, platform-server/server.js





2026-05-24 06:19 PM — Auto-logged Changes


Affected: Messages, Notifications, Age Verification, Profile


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/expenses.html, platform-server/public/app/getting-started.html, platform-server/public/app/messages.html, platform-server/public/app/notifications.html, platform-server/public/app/partners.html, platform-server/public/app/support.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/age-verification.js (+2 more)





2026-05-24 06:23 PM — Auto-logged Changes


Affected: Model Releases & Costar System, Admin & Command Center


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/node_modules/.package-lock.json, platform-server/node_modules/express-fileupload/.circleci/config.yml, platform-server/node_modules/express-fileupload/.eslintignore, platform-server/node_modules/express-fileupload/.eslintrc, platform-server/node_modules/express-fileupload/.mocharc.json, platform-server/node_modules/express-fileupload/.prettierrc, platform-server/node_modules/express-fileupload/LICENSE, platform-server/node_modules/express-fileupload/README.md (+35 more)





2026-05-24 06:28 PM — Auto-logged Changes


Affected: Age Verification, Sign Up / Login


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/js/age-verify.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/auth.js





2026-05-24 06:35 PM — Auto-logged Changes


Affected: Sign Up / Login, Admin & Command Center, Content & Feed, Model Releases & Costar System, Life Tracker, Profile, Inbox, Tour Page, Tutorial, Wishlists


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/admin-login.html, platform-server/public/app/admin.html, platform-server/public/app/ai-guide.html, platform-server/public/app/artist.html, platform-server/public/app/cam.html, platform-server/public/app/companion-services.html, platform-server/public/app/content-calendar.html, platform-server/public/app/content-gallery.html (+32 more)





2026-05-24 06:51 PM — Auto-logged Changes


Affected: Sign Up / Login


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/login.html, platform-server/public/app/oauth-callback.html, platform-server/public/last-docs-update-commit.txt





2026-05-24 07:00 PM — Auto-logged Changes


Affected: Age Verification


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/js/age-verify.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/age-verification.js, platform-server/scripts/check-id-expiry.js, platform-server/server.js, platform-server/uploads/id-documents/17beed97-9bc9-4bc9-91cc-6d8eede00390_1779662794803.jpeg





2026-05-24 07:02 PM — Auto-logged Changes


Affected: Bookings, Content & Feed, Safety System, Wishlists


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/booking-requests.js, platform-server/routes/content-calendar.js, platform-server/routes/content-gallery.js, platform-server/routes/cross-connections.js, platform-server/routes/financial-hub.js, platform-server/routes/iafd-browser-scraper.js, platform-server/routes/live-queue.js (+5 more)





2026-05-24 07:10 PM — Auto-logged Changes


Affected: Messages


Commits:


Files changed: platform-server/public/last-docs-update-commit.txt, platform-server/routes/_register.js, platform-server/routes/messages.js





2026-05-24 07:20 PM — Auto-logged Changes


Affected: Bookings, Content & Feed, Wishlists


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/_register.js, platform-server/routes/analytics.js, platform-server/routes/bookings-workflow.js, platform-server/routes/cart.js, platform-server/routes/content-calendar.js, platform-server/routes/orders.js, platform-server/routes/wishlists.js





2026-05-24 07:29 PM — Auto-logged Changes


Affected: Sign Up / Login


Commits:


Files changed: platform-server/.env, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/db/unified-error-sync.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/auth.js, platform-server/routes/error-tracking.js





2026-05-25 08:26 PM — Auto-logged Changes


Affected: Age Verification, Sign Up / Login, Messages


Commits:


Files changed: platform-server/.env, platform-server/public/app/js/age-verify.js, platform-server/public/app/login.html, platform-server/public/app/oauth-callback.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/auth.js, platform-server/routes/messages.js





2026-05-25 08:36 PM — Auto-logged Changes


Affected: Setup Guide, Messages


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/setup-guide.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/messages.js





2026-05-25 08:43 PM — Auto-logged Changes


Affected: Navigation


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/js/nav.js, platform-server/public/last-docs-update-commit.txt





2026-05-25 08:45 PM — Auto-logged Changes


Affected: Messages


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/messages-v2.html, platform-server/public/last-docs-update-commit.txt





2026-05-25 08:54 PM — Auto-logged Changes


Affected: Messages


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/messages-v2.html, platform-server/public/last-docs-update-commit.txt





2026-05-25 09:03 PM — Auto-logged Changes


Affected: Inbox, Model Releases & Costar System, Settings


Commits:


Files changed: platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/inbox.html, platform-server/public/app/legal.html, platform-server/public/app/settings.html, platform-server/public/last-docs-update-commit.txt, upload/image_75.png





2026-05-25 09:13 PM — Auto-logged Changes


Affected: Design & Themes, Inbox, Messages


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/css/editorial-base.css, platform-server/public/app/inbox.html, platform-server/public/app/messages-v2.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/messages.js, upload/IMG_3110.png, upload/image_76.png





2026-05-25 09:23 PM — Auto-logged Changes


Affected: Messages


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/messages-v2.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/messages.js





2026-05-25 09:34 PM — Auto-logged Changes


Affected: Inbox, Navigation


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/inbox.html, platform-server/public/app/js/nav.js, platform-server/public/app/request-inbox.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/inbox.js





2026-05-25 09:35 PM — Auto-logged Changes


Affected: Inbox


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/ask-box.html, platform-server/public/app/inbox.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/ask-box.js, platform-server/routes/inbox.js





2026-05-25 09:48 PM — Auto-logged Changes


Affected: Inbox


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/inbox.js





2026-05-25 09:53 PM — Auto-logged Changes


Affected: Settings


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/settings.js





2026-05-25 12:07 AM — Auto-logged Changes


Affected: Bookings, Earnings & Payouts, Inbox, Profile, Safety System, Settings


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/ask-box.html, platform-server/public/app/bookings.html, platform-server/public/app/cam.html, platform-server/public/app/earnings-v2.html, platform-server/public/app/financial.html, platform-server/public/app/inbox.html, platform-server/public/app/profile.html, platform-server/public/app/request-inbox.html (+5 more)





2026-05-25 01:21 AM — Auto-logged Changes


Affected: Inbox, Quick Add / FAB, Sign Up / Login


Commits:


Files changed: platform-server/.env, platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/dashboard.html, platform-server/public/app/dashboard.html.backup-error-fixes-20260525, platform-server/public/app/inbox.html, platform-server/public/app/inbox.html.backup-error-fixes-20260525, platform-server/public/app/js/ai-widget.js, platform-server/public/app/js/ai-widget.js.backup-error-fixes-20260525, platform-server/public/app/js/color-customizer.js (+10 more)





2026-05-25 01:26 AM — Auto-logged Changes


Affected: Safety System


Commits:


Files changed: memory/2026-05-25.md, memory/email-routing.md, platform-server/.env, platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/safety-enhanced.js, platform-server/scripts/error-notify.js





2026-05-25 01:33 AM — Auto-logged Changes


Affected: Bookings, Safety System


Commits:


Files changed: platform-server/.env, platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/db/alert-sync.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/booking-requests.js, platform-server/routes/custom-requests.js, platform-server/routes/error-tracking.js, platform-server/routes/safety-enhanced.js, platform-server/scripts/check-id-expiry.js





2026-05-25 02:13 AM — Auto-logged Changes


Affected: Earnings & Payouts, Notifications


Commits:


Files changed: platform-server/.env, platform-server/db/alert-sync.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/earnings.js, platform-server/routes/support-tickets.js, platform-server/routes/unified-notifications.js





2026-05-25 02:32 AM — Auto-logged Changes


Affected: Admin & Command Center, Payments, Earnings & Payouts


Commits:


Files changed: platform-server/ecosystem.config.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/_register.js, platform-server/routes/admin-tools.js, platform-server/routes/cam-rooms.js, platform-server/routes/dmca.js, platform-server/routes/notion-writeback.js, platform-server/routes/payments.js, platform-server/routes/payouts.js, platform-server/routes/reports.js (+7 more)





2026-05-25 02:41 AM — Auto-logged Changes


Affected: Earnings & Payouts, Payments


Commits:


Files changed: platform-server/.env, platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/db/alert-sync.js, platform-server/public/last-docs-update-commit.txt, platform-server/routes/payouts.js, platform-server/routes/stripe-webhook.js, platform-server/scripts/morning-summary.js





2026-05-25 02:59 AM — Auto-logged Changes


Affected: Earnings & Payouts


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/earnings-v2.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/payouts.js





2026-05-25 03:22 AM — Auto-logged Changes


Affected: Earnings & Payouts, Setup Guide


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/earnings-v2.html, platform-server/public/app/js/role-switcher.js, platform-server/public/app/setup-guide.html, platform-server/public/app/tax.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/payouts.js





2026-05-25 03:33 AM — Auto-logged Changes


Affected: Earnings & Payouts


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/earnings.js, platform-server/scripts/morning-summary.js, platform-server/scripts/sync-platform-stats.js





2026-05-25 04:43 AM — Auto-logged Changes


Affected: Activity, Sign Up / Login, Admin & Command Center, AI Assistant, Bookings, Content & Feed, Earnings & Payouts, Filmography, Inbox, Model Releases & Costar System, Life Tracker, Store & Marketplace, Messages, Payments, Profile, Safety System, Settings, Setup Guide, Social Media, Legal & Compliance, Tutorial


Commits:


Files changed: platform-server/public/app/achievements.html, platform-server/public/app/activity.html, platform-server/public/app/address-book.html, platform-server/public/app/admin-login.html, platform-server/public/app/admin-user-detail.html, platform-server/public/app/admin-users-directory.html, platform-server/public/app/admin-users.html, platform-server/public/app/admin.html, platform-server/public/app/ai-assistant.html, platform-server/public/app/ai-guide.html (+109 more)





2026-05-25 04:45 AM — Auto-logged Changes


Affected: Bookings, Earnings & Payouts


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/bookings.html, platform-server/public/app/earnings-v2.html, platform-server/public/app/scene-work.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/bookings-full.js





2026-05-25 04:50 AM — Auto-logged Changes


Affected: Bookings, Earnings & Payouts, Filmography, Setup Guide, Tutorial


Commits:


Files changed: platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/bookings.html, platform-server/public/app/dashboard.html, platform-server/public/app/earnings-v2.html, platform-server/public/app/filmography.html, platform-server/public/app/financial.html, platform-server/public/app/scene-work.html, platform-server/public/app/setup-guide.html, platform-server/public/app/tutorial.html, platform-server/public/last-docs-update-commit.txt (+3 more)





2026-05-25 04:51 AM — Auto-logged Changes


Affected: Filmography


Commits:


Files changed: platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/last-docs-update-commit.txt, platform-server/routes/filmography.js, platform-server/routes/scene-cascade.js




May 25, 2026 — Major Features Added


Scene Lifecycle System

Full booking-to-earnings-to-comments lifecycle:


Funded Scene Definition

Funded = ANY third-party funded production:

NOT "customer-funded only" — any third party


Online/Industry Status System

Columns added to users: online_mode, is_online, last_seen, online_at, industry_status, status_message


Terminology Changes


PPM Messaging System


Admin Platform Revenue Withdrawal


Payout History Notion DB

DB ID: 36bb8641-18fc-8124-ba24-e373f4c2b319

Syncs on: payout requested, Stripe transfer.paid, payout.failed


Platform Stats System


Earnings/Payouts Summary Separation


Test Data Flagging





2026-05-25 05:05 AM — Auto-logged Changes


Affected: Setup Guide, Sign Up / Login, Profile, Tour Page, Tutorial


Commits:


Files changed: platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/setup-guide.html, platform-server/public/app/signup-performer.html, platform-server/public/app/support.html, platform-server/public/app/tour.html, platform-server/public/app/tutorial.html, platform-server/public/last-docs-update-commit.txt





2026-05-25 05:37 AM — Auto-logged Changes


Affected: Settings


Commits:


Files changed: platform-server/public/app/settings.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/settings.js





2026-05-25 05:47 AM — Auto-logged Changes


Affected: Settings


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/settings.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/settings.js





2026-05-25 01:37 PM — Auto-logged Changes


Affected: Earnings & Payouts, Bookings


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/earnings-v2.html, platform-server/public/app/financial.html, platform-server/public/last-docs-update-commit.txt, platform-server/routes/_register.js, platform-server/routes/bookings-full.js, platform-server/routes/fee-splits.js, upload/IMG_3116.jpeg, upload/IMG_3117.jpeg





2026-05-25 01:40 PM — Auto-logged Changes


Affected: Activity, Bookings, Design & Themes, Inbox, Navigation, Messages, Profile, Setup Guide, Tutorial


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/activity.html, platform-server/public/app/bookings.html, platform-server/public/app/css/platform.css, platform-server/public/app/inbox.html, platform-server/public/app/js/nav.js, platform-server/public/app/js/photo-filter-system.js, platform-server/public/app/messages-v2.html, platform-server/public/app/profile.html (+78 more)





2026-05-25 01:43 PM — Auto-logged Changes


Affected: Design & Themes, Navigation


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/css/platform.css, platform-server/public/app/js/nav.js, platform-server/public/img/logos/gen-indulgon-dark.html, platform-server/public/img/logos/gen-indulgon.html, platform-server/public/img/logos/gen-logos.html, platform-server/public/img/logos/indulgon-final.svg, platform-server/public/img/logos/indulgon-logo-dark.png, platform-server/public/img/logos/indulgon-logo-light.png (+5 more)





2026-05-25 01:47 PM — Auto-logged Changes


Affected: Activity, Design & Themes, Inbox, Navigation, Model Releases & Costar System


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/activity.html, platform-server/public/app/css/platform.css, platform-server/public/app/inbox.html, platform-server/public/app/js/nav.js, platform-server/public/app/legal.html, platform-server/public/app/templates-manager.html, platform-server/public/last-docs-update-commit.txt





2026-06-08 11:30 AM — Auto-logged Changes


Affected: Navigation


Commits:


Files changed: platform-server/CHANGELOG.md, platform-server/PLATFORM-OPERATIONS-MANUAL.md, platform-server/public/app/js/nav.js, platform-server/public/app/js/online-status.js, platform-server/public/app/updates.html, platform-server/public/last-docs-update-commit.txt