@loop/admin — Content Management System
Unified content management interface for all Loop brands, built on Payload CMS 3.75. Provides a modern admin dashboard for managing content, users, products, and clinical data across the Loop ecosystem.
Purpose
The admin app serves as the central hub for:
- Content Management: Blog posts, pages, FAQs, testimonials, research papers, certificates of analysis
- Product Catalog: Peptides, stacks, goals, and product relationships
- User Administration: Staff accounts, roles, and permissions via Clerk SSO
- Media Library: Centralized asset management with automatic image optimization
- Clinical Data: Research papers, COAs, and compliance documentation
Replaces the original microservices architecture by consolidating content management into a single, maintainable application.
Architecture
Route Structure
/— Next.js landing page with admin dashboard/cms— Payload CMS admin interface/api/payload— Payload REST and GraphQL API/api/health— Health check endpoint
Key Components
Dashboard (app/dashboard/)
- Real-time metrics and system status
- Quick actions for common tasks
- Recent activity feed
Collections (payload/collections/)
- Generic collections from
@loop/cms(Users, Media, Pages, BlogPosts, FAQs, Testimonials, ResearchPapers, COAs) - Loop-specific collections (Peptides, Stacks, Goals)
Configuration (payload.config.ts)
- Database connection (Supabase
payloadschema) - Clerk SSO integration
- Collection registration
- Plugin configuration (SEO, redirects, cloud storage)
Key Features
Content Management
- Rich text editor with markdown support
- Draft/publish workflow
- SEO metadata management
- Automatic sitemap generation
- Redirect management
Product Management
- Peptide catalog with dosing protocols
- Stack builder with peptide relationships
- Goal-based product recommendations
- Inventory tracking integration
Access Control
- Clerk SSO authentication
- Role-based permissions (admin, staff, editor, support)
- Per-collection access rules
- Field-level permissions
Media Management
- Drag-and-drop uploads
- Automatic image optimization
- Cloud storage integration (Vercel Blob)
- CDN delivery
Developer Tools
- GraphQL playground at
/api/payload/graphql - REST API documentation
- Type generation for collections
- Database migrations
Tech Stack
- Framework: Next.js 15 (App Router)
- CMS: Payload CMS 3.75
- Database: Supabase PostgreSQL (
payloadschema) - Auth: Clerk SSO with role-based access
- Storage: Vercel Blob for media assets
- Validation: Zod 3.x
- Styling: Tailwind CSS
Package Dependencies
@loop/cms— Shared Payload collections, access rules, hooks@loop/core— Result type, error handling, logging@loop/database— Supabase client and types@loop/shared— Zod schemas, types, constants
Development
Local Setup
# Install dependencies
pnpm install
# Set environment variables
cp apps/admin/.env.example apps/admin/.env.local
# Run development server
pnpm --filter @loop/admin dev
# Access admin at http://localhost:3002Required Environment Variables
# Database
DATABASE_URL=postgresql://...
SUPABASE_URL=https://okjpxbiipeghfhwksoit.supabase.co
SUPABASE_SERVICE_KEY=eyJhbGc...
# Clerk SSO
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...
# Storage
BLOB_READ_WRITE_TOKEN=vercel_blob_...
# Payload
PAYLOAD_SECRET=your-secret-keySeed Data
Import v2 peptide data and sample content:
pnpm --filter @loop/admin seedCommands
pnpm dev # Start dev server (port 3002)
pnpm build # Production build
pnpm start # Start production server
pnpm typecheck # Type check
pnpm lint # Lint code
pnpm payload migrate # Run database migrationsDeployment
- Platform: Vercel
- Environments:
- Production:
mainbranch → admin.loop.health - Staging:
stagingbranch → staging-admin.loop.health - Development:
developbranch → dev-admin.loop.health
- Production:
- Database: Shared Supabase project with isolated
payloadschema - Auto-Deploy: Push to branch triggers deployment
- Migrations: Automatically run on deployment via Payload CLI
Access Roles
Controlled via Clerk publicMetadata.adminRole:
admin— Full access to all collections and settingsstaff— Edit access to content, read-only for settingseditor— Content creation and editing onlysupport— Read-only access to user data
Users without roles are denied access to the admin.