Everything you need
to build on Pressly.
Technical reference for editorial admins, developers, and platform operators. Start with the quickstart and go as deep as you need.
Start here
Quickstart
Tenant live in 10 minutes. Create an account, pick a theme, publish.
API Reference
17+ REST endpoints covering posts, auth, comments, search, and tags.
Themes
15 pluggable frontends: blog, magazine, news, docs, minimal, and more.
Migration
Move from WordPress, Ghost, or a custom stack in 6 weeks.
Architecture
How Pressly is structured
Multitenancy
Domain-based tenant resolution via ResolveTenant middleware. Every request web and API gets app('tenant') bound automatically. Demo mode falls back to the first active tenant.
URL Structure
Tech Stack
Backend
Laravel 13 (PHP 8.4) + PostgreSQL
Frontend
Tailwind CSS 4, Alpine.js, TipTap v3, Vite 8
Auth
Laravel Sanctum + Socialite (Google/Facebook/GitHub)
Payments
Stripe Checkout + Billing Portal
AI
OpenAI PHP content generation & SEO
Media
intervention/image, Spatie Tags & Permissions
Database 29 migrations
Editorial & Content
Publishing workflow
Ghost-style Post Editor
Full-width TipTap v3 WYSIWYG editor with a sticky toolbar, right-side publish panel, featured image picker, tag input, and a live SEO score ring. Auto-saves every 60 seconds with full revision history.
- TipTap v3 rich text (bold, italic, headings, lists, code blocks, blockquote, links, images)
- Right sidebar: draft/publish toggle, scheduled publish, author, category, tags
- Featured image with alt text and caption
- SEO panel: custom title, meta description, slug, OG image, live keyword score
- AI slide-over: generate title, intro, outline, or full draft from a prompt
- Revision history compare and restore previous saves
- Auto-save every 60s with dirty-state indicator
Media Manager
Full file manager at /admin/media for uploading, browsing, and inserting images into content. Powered by intervention/image for server-side processing.
- Upload images, documents, and files
- Browse and search tenant media library
- Insert media directly into TipTap editor
- Image processing and resizing via intervention/image
- Alt text and caption fields per upload
- Tenant-scoped each publication has its own library
Roles & Permissions
Built on Spatie Permissions. Three default roles ship with demo accounts. Roles gate admin panel access, post ownership, and user management.
Admin
admin@demo.com
Full access settings, users, all content, subscriptions
Editor
editor@demo.com
Manage all posts, categories, comments, media
Author
author@demo.com
Create and edit own posts only
Comment Moderation
Reader comments on posts with admin moderation queue. Email notifications fire to the post author on new comment and to the commenter on approval.
- Guest and authenticated comment submission
- Approval queue in admin at /admin/comments
- Author notified by email on new comment (CommentPosted)
- Commenter notified on approval (CommentApproved)
- Bulk approve, reject, or delete
- Per-post comment enable/disable toggle
REST API
Headless CMS endpoints
All 17 endpoints are under /api/v1/. The ResolveTenant middleware runs on every API request. Bearer token auth via Laravel Sanctum.
/api/v1/posts
List posts with pagination, category, and tag filters
/api/v1/posts
Create a new post (auth required)
/api/v1/posts/{slug}
Single post with full content
/api/v1/posts/{slug}
Update post (auth required)
/api/v1/posts/{slug}
Delete post (auth required)
/api/v1/posts/{slug}/comments
Comments on a post
/api/v1/posts/{slug}/comments
Submit a comment
/api/v1/categories
All categories
/api/v1/categories/{slug}
Category with its posts
/api/v1/tags
All tags
/api/v1/tags/{slug}
Tag with its posts
/api/v1/search?q=
Full-text search across posts
/api/v1/auth/login
Exchange credentials for a Bearer token
/api/v1/auth/register
Create a subscriber account
/api/v1/auth/me
Authenticated user (token required)
/api/v1/auth/logout
Revoke current token
Revenue
Monetization stack
Stripe Subscriptions
Stripe Checkout Sessions, Billing Portal, and webhooks. Keys are stored per-tenant in the integrations JSON field no shared platform keys.
Paywalls
Two paywall modes via PaywallService: metered (view-count based) and hard paywall per post. Content preview is gracefully truncated for non-subscribers.
- Hard paywall full block for non-subscribers
- Metered paywall configurable free view limit
- Content preview truncation with upgrade prompt
- PaywallService tracks per-reader access via ContentAccessLog
- Paywall bypass for authenticated subscribers
- Per-post paywall toggle in post editor
Ad Management
Full ad CRUD at /admin/ads with impression and click tracking. Use the <x-ad-slot> Blade component in any theme.
Placements
Audience & SEO
Growth and discoverability
SEO Engine
SeoService generates JSON-LD schema, Open Graph tags, canonical URLs, and a live keyword density score in the editor sidebar.
- XML sitemap at /sitemap.xml
- robots.txt
- AMP pages at /amp/{slug}
- Per-post meta title + description
- OG image support
Newsletter Engine
Full campaign system create drafts, compose in WYSIWYG or raw HTML, send to all active subscribers instantly.
- Campaign CRUD at /admin/newsletter
- Welcome email on subscribe
- Responsive HTML email templates
- Unsubscribe token flow
- Subscriber stats strip
Push Notifications
Web Push API with VAPID keys and a service worker at public/service-worker.js. NewPostPublished notification class ready.
- POST /push/subscribe save subscription
- GET /push/vapid-key serve public key
- Service worker handles push events
- Per-tenant PushSubscription model
Tracking Codes
Centralized partial injected before </head> in all 15 theme templates. Configure in Settings → Integrations.
- Google Analytics 4 (GA4)
- Google Tag Manager (GTM)
- Facebook Pixel
- Twitter/X Pixel
- Hotjar
- Google Search Console meta tag
AI & Integrations
Connections & automation
AI Writing Assistant
OpenAI-powered slide-over panel in the post editor. Trigger with the ✦ toolbar button. Generate, refine, or summarize content without leaving the editor.
Social Login (Socialite)
OAuth sign-in via Laravel Socialite. Configure client IDs/secrets in .env. Redirect and callback routes are pre-registered.
Text-to-Speech
Browser Web Speech API player injected into all 15 theme post pages when tts_enabled = 1. Play/pause/stop, speed 0.75×–2×, animated waveform. ElevenLabs field ready for premium TTS.
WordPress Import
WXR XML upload up to 50 MB, or auto-pull from any public WordPress REST API. Full pagination, bulk DB inserts, and in-memory slug maps for zero per-item lookups.
- WXR XML files up to 50 MB via /admin/imports
- URL pull from WP REST API (/wp-json/wp/v2)
- Bulk insert (chunks of 50–100) wrapped in DB transaction
- Http::pool() for parallel REST pagination
- Author email deduplication
- SSRF protection on URL inputs
Email Notifications
Four notification classes ship out of the box. Configure SMTP or Mailgun per-tenant in Settings → Integrations → Email.
WelcomeUser
Fires on new user registration
WelcomeSubscriberMail
Fires on newsletter subscribe
CommentPosted
Post author notified of new comment
CommentApproved
Commenter notified when approved
NewsletterCampaignMail
Sent to all active subscribers on campaign send
NewPostPublished
Ready for push notification integration
Frontend
15 pluggable themes
Every theme ships with home, post, category, search, and tag views. Active theme is set per-tenant in tenants.active_theme. Shared partials handle ads, menus, tracking codes, and the TTS player.
blog
General purpose blog with sidebar
magazine
Editorial grid with featured hero
corporate
Clean B2B publication layout
newsletter
Email-first story presentation
news
Breaking news with standard pagination
minimal
Distraction-free reading mode
photography
Visual-first full-bleed layout
tech
Dev-focused monospace aesthetic
lifestyle
Warm editorial with card grid
docs
Sidebar-nav documentation layout
apex
Premium news with dark hero
meridian
Bold serif editorial
pulse
Live-news ticker style
slate
Clean minimal corporate
vanguard
Bold magazine with full-width imagery
Migration
From WordPress, Ghost, or custom
Pressly ships a fully-featured import engine. Upload a WXR export or point us at a public WordPress REST API and we handle the rest posts, authors, categories, tags, and media references, all mapped cleanly.
Full migration guide →Audit content types, plugins, and subscriber dependencies
Upload WXR XML or provide WordPress REST API URL
Bulk import: posts, authors, categories, tags in one transaction
Rebuild navigation with the drag-and-drop menu builder
Validate SEO paths 301 redirects generated automatically
Go live under your tenant slug or custom domain
Reference articles
All documentation
Tenant Routing and URL Structure
How Pressly separates the product site at / from tenant content under /{tenant}.
Super Admin Console
Overview of the platform-level dashboard for subscriptions, tenants, and module health.
E-Paper Module
Publish replica editions, premium digital issues, and downloadable archives.
Streaming Module
Run live channels, scheduled coverage, and embedded broadcasts inside the publication experience.
Subscriptions and Paywalls
How Pressly structures recurring plans, pricing, and subscriber lifecycle states.
Theme System and Content Presentation
A quick reference for how Pressly themes share navigation, ads, and module surfaces.
Can't find what you need?
We answer every enquiry no chatbots, just engineers who know the platform.