Appearance
Configuration
whiz.pub handles all server configuration automatically. This page covers the settings available to you as a blog owner.
Content Types
Posts
Posts are your main blog content. They appear in your blog index, RSS feed, sitemap, and tag listings. Posts support tags, pinning, SEO fields (summary, featured image), and status (draft/published).
Pages
Pages are standalone content like "About", "Contact", or "Tools" — they don't appear in the blog index or RSS feed. Pages render at their slug URL just like posts (e.g., yourblog.whiz.pub/about).
Create and manage pages from the Pages section in the web dashboard sidebar.
Tags
Tags help organize your posts. You can:
- Add tags to posts via the tag field when creating/editing
- Manage tags from the Tags section in the sidebar: rename tags across all posts, add descriptions, or delete tags entirely
- Tags have their own public pages on your blog (e.g.,
yourblog.whiz.pub/tag/javascript)
Blog Settings
You can manage your blog settings from the dashboard at /app/settings. Available options:
Custom Domain
Add a custom domain to replace your yourname.whiz.pub subdomain. See Custom Domains for full DNS setup instructions.
Web
Go to /app/settings and enter your domain in the Custom Domain field, then click Save.
API
bash
curl -X PUT https://api.whiz.pub/v1/settings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"custom_domain": "blog.example.com"}'CLI
bash
whiz settings set custom-domain blog.example.comSEO & Metadata
- Display name — shown in the blog header and browser title.
- Description — used in meta tags for search engines and social previews.
- Open Graph image — URL of an image used for social media previews.
Web
Go to /app/settings and fill in the Display name, Description, and Open Graph image fields, then click Save.
API
bash
curl -X PUT https://api.whiz.pub/v1/settings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "My Blog",
"description": "A blog about interesting things",
"og_image": "https://example.com/og.png"
}'CLI
bash
whiz settings set display-name "My Blog"
whiz settings set description "A blog about interesting things"
whiz settings set og-image "https://example.com/og.png"API Key
Your API key is used with the CLI (whiz auth YOUR_KEY) and MCP endpoint. You can regenerate it at any time — the old key stops working immediately.
Web
Go to /app/settings. Your API key is displayed under the API Key section. Click Regenerate to create a new key.
API
bash
curl -X POST https://api.whiz.pub/v1/settings/regenerate-api-key \
-H "Authorization: Bearer YOUR_API_KEY"CLI
bash
whiz auth YOUR_KEY
whiz settings regenerate-api-keyAI Access
Toggle whether your blog exposes machine-readable pages at /llms.txt, /sitemap.xml, and markdown mirrors (/*.md). When disabled, these endpoints return 404.
Web
Go to /app/settings and toggle the AI Access switch on or off, then click Save.
API
bash
curl -X PUT https://api.whiz.pub/v1/settings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ai_access": true}'CLI
bash
whiz settings set ai-access true
whiz settings set ai-access falseHeadless Mode
Use whiz purely as a headless CMS. When enabled, your blog's public pages (subdomain, sitemap, robots.txt, markdown mirrors) return 404. The API, CLI, and MCP continue to work normally — you can still create, edit, and manage posts. Your subdomain remains reserved.
Headless mode and custom domains are mutually exclusive. Remove your custom domain before enabling headless mode; disable headless mode before adding a custom domain.
Web
Go to /app/settings and toggle the Headless Mode switch on or off, then click Save. The toggle is disabled when a custom domain is configured.
API
bash
# Enable headless mode
curl -X PUT https://api.whiz.pub/v1/headless \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
# Disable headless mode
curl -X PUT https://api.whiz.pub/v1/headless \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'CLI
bash
whiz headless enable
whiz headless disableMCP
Call whiz_set_headless with {"enabled": true} or {"enabled": false}.
Custom Landing Page
By default, your blog's homepage (/) shows a paginated list of posts. You can instead use a dedicated landing page — a regular page with the special slug home — as your homepage.
When enabled:
- The
/route renders your "home" page instead of the blog post listing. - The blog post listing moves to
/blog(with pagination at/blog/page/2,/blog/page/3, etc.). - If no page with slug
homeexists, one is created automatically as a published page with placeholder content. - Disabling the feature keeps the "home" page intact but restores the default blog listing at
/. Re-enabling reuses the existing "home" page.
Web
Go to Settings > Advanced and toggle the Custom Landing Page switch on, then click Save. A link to edit your new home page is shown after saving.
API
bash
# Enable custom landing page
curl -X PUT https://api.whiz.pub/v1/settings/landing-page \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
# Disable custom landing page
curl -X PUT https://api.whiz.pub/v1/settings/landing-page \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'The response includes "home_page_created": true if a new home page was auto-created.
Blog Pagination
The public blog index and tag pages display posts in paginated form.
- Posts per page: configurable per blog via the dashboard settings or the
PUT /v1/settings/blogAPI endpoint. - Default: 10 posts per page. Allowed range: 5-100 (controlled by global admin config).
- Blog index: paginated pages are available at
/page/2,/page/3, etc. When a custom landing page is enabled, pagination is at/blog/page/2,/blog/page/3, etc. - Tag pages: also paginate at
/tag/:name/page/2,/tag/:name/page/3, etc.
Web
Go to /app/settings and adjust the Posts per page value, then click Save.
API
bash
curl -X PUT https://api.whiz.pub/v1/settings/blog \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"posts_per_page": 15}'Appearance
Customise your blog's visual appearance at /app/settings/appearance. See Themes & Appearance for details on presets, fonts, custom CSS, custom head HTML, and favicons.
Account
Log In
Authentication uses one-time codes sent to your email. To log in:
Web
- Visit
https://app.whiz.pub/auth/login. - Enter your email and click Send code.
- Check your email for a one-time code and enter it.
API
bash
# Step 1: Request a login code
curl -X POST https://api.whiz.pub/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
# Step 2: Verify the code and get your API key
curl -X POST https://api.whiz.pub/v1/auth/verify-otp \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "code": "123456"}'CLI
bash
whiz login
# Follow the prompts to enter your email and the code from your inbox.Delete Account
You can permanently delete your account and all associated data. This action is irreversible.
Web
Go to /app/settings, scroll to the bottom, and click Delete Account. Confirm the deletion when prompted.
API
bash
curl -X DELETE https://api.whiz.pub/v1/account \
-H "Authorization: Bearer YOUR_API_KEY"CLI
bash
whiz account deleteContent Limits
The limits below apply to all blogs. Note that some limits differ between free and donor tiers. See Support & Limits for tier-specific limits and how to become a donor.
| Setting | Limit |
|---|---|
| Post title length | 200 characters |
| Post content size | 100 KB |
| Tags per post | 10 |
| Tag length | 50 characters |
| Custom CSS | 10 KB |
| Custom head HTML | 5 KB |
| Favicon upload | 512 KB |
| Image upload (inline) | 3 MB |
| Image upload (OG/featured) | 10 MB input, resized to 1200x630 |
| Saved themes | 10 per blog |
Rate Limits
The following rate limits apply per IP address:
| Endpoint | Limit |
|---|---|
POST /v1/signup | 5 requests per minute |
POST /v1/auth/login | 5 requests per minute |
POST /v1/auth/verify-otp | 10 requests per minute |
| All other endpoints | No hard limit (subject to change) |
Exceeding a rate limit returns HTTP 429 Too Many Requests. Wait and retry after the cooldown period.
Environment Variables (Self-Hosting / Admin)
If you are deploying or administering a whiz instance, the following environment variables are available:
| Variable | Description |
|---|---|
ADMIN_EMAILS | Comma-separated list of email addresses granted admin privileges (e.g. admin@example.com,ops@example.com). Admin users can access the admin dashboard and manage all tenants. |
SESSION_HASH_SECRET | Secret key used to hash session tokens. Must be a strong random string (32+ characters). Keep this value stable across deployments — changing it invalidates all active sessions. |