Skip to content
Jithendar.com
← Back to the manual

User manual

Jithendar.com · Moks CMS · 71 pages and 343 settings. The current version is always the one online.

Getting started

A tour of the admin

How the admin is organised and where to find things.

Moks CMS runs the whole publication from one admin: writing and publishing, search and audience data, AI drafting, comments and enquiries, site design and operations.

The sidebar groups pages by category (Overview, Content, Editorial & AI, Insights, Community, Site settings, Operations, Account). Each category expands and collapses, and the browser remembers your choice. A collapsed category still shows the total of its badges (pending reviews, unread messages, comments to moderate), so nothing that needs attention is hidden.

The Dashboard greets you with the number of items that need attention across the publication.

On a phone, the Menu button at the top shows the current page and opens the same list.

Readers and staff reach the Moks CMS web app through the edge. The web app stores content in PostgreSQL, sessions in Redis and media in Cloudflare R2, and sends email. The SEO agent syncs Google data, drafts with Claude and writes drafts and metrics to PostgreSQL.
Diagram (draw.io). Select it to open full size.

In the admin: /admin

Roles: admin, author, reader and demo

What each kind of account can see and do.

  • Admin: every page, every setting.
  • Author: writes and publishes their own posts, manages their author profile and API keys, and moderates comments.
  • Reader: a public account for commenting; no admin access.
  • Demo (read-only): sees every admin page an admin sees, with real data, but cannot save, publish, delete, send or run anything, and cannot download backups. A banner at the top of each page says so.

Admins change roles in Admin → Users. A role change or ban signs the person out straight away.

Admins and demo users can open every page. Changes from admins and authors pass the role check; changes from demo users are refused with a read-only notice.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/users

Exploring with a demo account

What you can try while signed in as a read-only demo user.

A demo account shows the CMS exactly as the site owner uses it. Open any page, use filters, date ranges and search, open articles in the editor and read reports.

Anything that would change something (Save, Publish, Delete, Send, Sync, Generate, Approve) is refused with a read-only notice and nothing is stored. AI and paid external calls are never made, so exploring costs nothing.

Good places to start: Dashboard, Posts (open one in the editor), Search performance, Content audit, Review queue, Appearance & settings (look at the previews), System status and this guide's FAQ.

Using this manual

Browse the contents, search, read a guide on its own page and print the manual.

The manual's home lists every guide by category, the FAQ and the settings reference. The contents on the left (under Contents on a phone) list every guide and question; each opens on its own page, which has its own address to bookmark or share.

A guide's page shows where you are (User manual, the category, the guide), who the page is for, an On this page list, the text and its diagram, where the page is in the admin, the settings of that page with their defaults, related guides, and links to the previous and next page in reading order.

Print / Save as PDF on a guide prints that guide without the menus. Printable manual on the home opens the whole manual on one page, with a contents list, for printing or saving as a PDF.

Type in the search box to match titles, summaries, text and common synonyms (for example “publish”, “backup” or “password”); a suggestion opens that guide. Choose an area to narrow the list, or switch between Guides, FAQ and Settings.

Settings lists every setting and option of the CMS with what it does and its default value, from Appearance to the SEO agent, Advanced settings and MCP scopes.

Each article links to the admin page it describes. The address bar keeps your search and filters, so you can bookmark or share a view of the guide.

I'm a demo user. Why can't I save anything?

Demo accounts are read-only by design: you see the admin exactly as the owner does, but every save, publish, delete, send, sync and AI action is refused and nothing is stored.

Ask the site owner for an author or admin account if you need to make changes.

Is the data I see as a demo user real?

Yes. Demo accounts see the live publication's data, as an admin does. Secrets (keys, passwords, tokens) stay masked everywhere.

Why don't I see some pages in the menu?

Authors only see the pages they can use: content, comments, their profile and API keys. Editorial & AI, Insights, Site settings and Operations are for admins (and read-only demo accounts).

Can readers see this guide?

Only if an admin turns on Appearance & settings → General → Public user manual. It then appears at /user-manual for everyone, read-only and without any of your data. It is off by default.

In the admin: /admin/appearance

Content

Writing and publishing posts

Create, review, schedule and publish articles, news and projects.

Posts lists every article, news item and project with its status: draft, review, published or archived. Filter and search the list, then open a post in the editor.

A post needs a title, a slug (its address), a description used for listings and search results, a category and a content type. News and curated posts also need at least one source.

Publish from the editor's own Publish button. Editorial calendar items become published only when their linked post is published this way.

Each published post has an Insights view with its search and visitor data.

An idea becomes a draft, goes to review and is published by a person. AI drafts wait in the review queue; approving publishes and submits them, rejecting changes nothing.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/posts

The editor

Visual and Markdown editing, blocks, images and keyboard shortcuts.

Markdown is the stored format. The visual editor is a view over it, so switching between Visual and Markdown never loses anything. If a document contains something the visual editor cannot show exactly, it opens in Markdown mode and says why.

Insert blocks with + (searchable) or by typing / in an empty paragraph. Callouts, figures, galleries, buttons, embeds (YouTube and Vimeo), video, audio, details and a table of contents are available as blocks.

  • Save: Ctrl/⌘ S
  • Undo / redo: Ctrl/⌘ Z / Ctrl/⌘ Shift Z
  • Move a block: Alt Shift ↑ / ↓
  • Duplicate a block: Ctrl/⌘ Shift D
  • Delete a block: Alt Shift Backspace

Images come from the media library or are uploaded by choosing, dropping or pasting. Alt text is required. The featured image can be chosen, uploaded or generated, with a focal point.

In the admin: /admin/posts

Pages

About, contact, policies and other standalone pages.

Pages are standalone pages that are not part of a feed: About, Contact, privacy policy, terms and so on. They use the same editor as posts.

In the admin: /admin/pages

Media library

Upload images, video, audio and PDFs; see where each file is used.

Media keeps every uploaded file. Images are served in modern formats (AVIF/WebP) at the right size for each screen.

Images up to 10 MB upload through the site; video, audio and PDFs up to 200 MB upload directly to storage.

A file shows where it is used, and cannot be deleted while a post still uses it. Removing an image from a post never deletes the file.

Generate image creates a picture with AI (when it is configured in Integrations); you choose whether to keep it.

In the admin: /admin/media

Categories and tags

Organise posts by topic; fix or merge tags in one place.

Categories are the topics that organise posts. Each has its own page and RSS feed.

Tags are free-form labels. Renaming a tag (Admin → Tags) fixes it on every post; renaming it onto an existing tag merges the two.

In the admin: /admin/categories

Python practice

Problems, roles, the code runner and the AI tutor for /python-practice.

Python practice manages the interactive coding exercises on the public site: problems, engineering roles and topics, the daily challenge, the sandboxed code runner, the AI tutor and abuse signals.

A new problem is saved as a draft; quality checks and duplicate detection run on save, and you publish it once it validates. Every save creates a new version, and old submissions keep pointing at the version they were graded against.

In the admin: /admin/practice

The code runner (executor), in simple words

How readers' Python code for /python-practice is run safely, away from the website.

Readers on /python-practice can write Python and press Run. Running a stranger's code is risky, so it never runs inside the website.

  • The website checks the reader is signed in and within their limits, then sends the code and only the test inputs (never the expected answers) to the executor.
  • The executor puts the job in a queue. A dispatcher starts a brand-new, throw-away sandbox for each job.
  • The sandbox has no internet, no passwords and no access to anything else. It uses gVisor, a protective layer between the code and the real server. Time, memory, file size and output are all capped.
  • The sandbox prints the results; the dispatcher reads them and deletes the sandbox.
  • The website compares the outputs with the expected answers itself, so a cheating program cannot fake a pass. Progress, XP and badges are then given exactly once.

Repeated abuse (for example endless loops) blocks the account for 15 minutes. Admins manage problems, roles, topics, the daily challenge, the AI tutor and abuse signals under Python practice.

The website sends the reader's code and the test inputs to the executor API, which queues the job. The dispatcher starts a fresh sandbox pod with no network, runs the code and reads the outputs. The website compares the outputs with the expected answers and awards progress.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/practice

How do I publish a post?

Open the post in Admin → Posts, fill in the required fields (title, description, category, content type; sources for news) and press Publish in the editor.

To publish later, schedule it instead. AI-drafted articles are published by approving them in the Review queue.

In the admin: /admin/posts

Can I write in Markdown?

Yes. Markdown is the stored format; switch the editor to Markdown mode at any time and back to Visual without losing anything.

In the admin: /admin/posts

Why can't I delete an image from the media library?

A file that is still used by a post cannot be deleted. The media library shows where it is used; remove it from those posts first.

In the admin: /admin/media

Is it safe to let readers run code on the site?

Their code runs in a separate, throw-away sandbox with no internet and no access to the website, its database or any passwords, and with strict time and memory limits. The website grades the results itself.

In the admin: /admin/practice

Editorial & AI

Editorial calendar

Plan articles from suggestion to publication.

Items move through Suggested → Approved → Drafting → In review → Published.

An item becomes Published only when its linked post is published with the editor's Publish button.

In the admin: /admin/calendar

Review queue

AI-drafted changes waiting for your approval.

Claude drafts improvements and new articles; they wait here for a person. Nothing goes live until you approve an article.

Approving publishes it and submits it to search engines. The sidebar badge shows how many drafts are ready.

In the admin: /admin/review

News desk

Jobs that find, rank and draft source-grounded news for review.

Jobs discover stories from trusted sources, rank them and draft news grounded in those sources. Nothing publishes without your approval.

  • Sources: the feeds and official APIs the desk reads (robots.txt honoured, paywalled sites refused).
  • Topics & categories: map news topics to the CMS's categories; your corrections train the classifier weekly.
  • Profiles & playground: versioned writing and image styles; proposed versions need your approval.
  • Run history and News analytics: every run with its cost and errors, and how published news performs.
  • Settings: global spending caps on top of each job's own budget.

In the admin: /admin/news

Promotion

Where each article is worth sharing, with drafted posts.

Promotion suggests where each published article is worth sharing, drafts posts for you to edit and post yourself, and suggests new article ideas that already have an audience. Nothing is posted automatically.

In the admin: /admin/promotion

Does AI ever publish on its own?

No. AI-drafted articles and news wait in the review queues until a person approves them. Assistants connected through MCP can never approve or publish.

The one automatic change is internal linking, when its weekly job is switched on, and it works within strict limits.

How is AI spending kept under control?

The news desk has global caps on top of each job's budget, and Automation & AI shows Claude usage. AI and paid calls are always explicit actions, never triggered by just viewing a page.

SEO agent, AI & ML

Automation & AI settings

Data sources, schedules, scoring, drafting, crawler and reports for the SEO agent.

Automation & AI shows the search and analytics connections, Claude usage, ML models and Ask the Blog, then the settings by area. Every saved change is audit-logged.

  • Data sources: which Google properties are read, how far back and how long data is kept; DataForSEO for search volume, difficulty, live rankings and backlinks.
  • Schedules: when each job runs (UTC; weekday 0 = Sunday).
  • Scoring & rules: the weights and thresholds that find and rank recommendations.
  • Content & links: keyword opportunities, internal-linking limits and search-engine submission.
  • AI & drafts: Claude drafting (always stops at human review), its monthly budget, the optional explanation model and AI visibility.
  • Crawler: limits for the technical crawl of your own site. Reports: weekly and monthly report email.

Every field is listed with its default under Settings in this guide.

In the admin: /admin/automation

How the SEO agent works

Flows that sync data, score pages, draft fixes and wait for your approval.

The SEO agent is a separate service that runs CrewAI flows. Sync flows read Google Search Console, GA4 and (optionally) DataForSEO into the database on a schedule.

Rules and ML models turn that data into recommendations, reports and alerts, and pick articles worth improving. Drafting flows (optimize_article_flow, new_article_flow) ask Claude crews for a draft within the monthly budget and the rewrite limit.

Drafts stop at “ready for review”. Only a person approving on the site starts publish_flow, which publishes and submits to search engines. Nothing in the agent, the schedules or MCP can approve.

Start a flow by hand with Run now on the relevant page; queued runs start within about 30 seconds and appear in Data sync.

Schedules start sync flows that fill the SEO data. Rules and ML models score it into recommendations and pick articles worth fixing; drafting flows write drafts within budgets. A person approves on the site, and only then does publish_flow publish and submit.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/review

The seo-agent service, in simple words

A helper program that runs next to the website and does the SEO work in the background.

The website and the seo-agent are two separate programs. The website shows pages and the admin. The seo-agent is a Python program that does the slow, background work, so the website stays fast.

  • It wakes up on a timetable (for example every morning at 06:10 UTC to fetch Search Console data). Pressing Run now in the admin, or asking through MCP, starts the same job straight away.
  • It fetches data from Google and DataForSEO and saves it in the same database the website uses.
  • It looks at the numbers, finds pages that can do better and asks Claude to write a suggested fix.
  • It saves every suggestion as a draft. It never publishes on its own.
  • It also trains the ML models each week, builds reports and keeps the Ask the Blog search index up to date.

Every run is listed in Data sync with its status, what it did and any errors. If the seo-agent is down, the website keeps working; only the background jobs wait.

The SEO agent sits next to the web app: it reads Google data, drafts with Claude and saves drafts and numbers in the shared database.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/sync

How CrewAI works here, in simple words

Flows are step-by-step recipes; crews are small teams of AI helpers, each with one job.

CrewAI is the open-source library the seo-agent uses to organise its AI work. Two ideas matter:

  • A flow is a recipe: a fixed list of steps, such as “fetch the article → study the numbers → write a fix → check the fix → save the draft”. Most steps are ordinary code, not AI.
  • A crew is a small team of AI helpers (agents). Each agent has one job, a short description of who it is, and a few tools. They work one after another, like an assembly line, and each passes its work to the next.

The crews on this site:

  • Optimization crew (improving an existing article): an SEO analyst explains what is wrong from the search data, an editor writes the smallest useful change, and a technical reviewer checks every command and fact against official documentation.
  • Editorial crew (a new article): a researcher collects sources, a technical writer writes the draft, a technical reviewer checks it, and an SEO editor suggests the title, description and headings.
  • Report crew: one writer turns already-calculated numbers into a short summary. Every number it writes is checked against the real figures; one wrong number and the summary is thrown away.
  • Promotion crew: a copywriter drafts social posts for an article, and a content strategist suggests new article ideas with evidence.

Safety rails: agents can only read (no publishing, no deleting, no code running), each has a limit on steps, time and tokens, every call counts against the monthly budget, and article text is treated as data, never as instructions. When a crew finishes, the flow checks its output and saves a draft. Only a person approving in the Review queue can publish it.

A flow runs plain steps, then hands the job to a crew. In the crew an analyst or researcher, a writer or editor and a reviewer work one after another with read-only tools. The flow checks the result and saves a draft for a person to approve.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/review

How the ML is built, in simple words

Five small models, trained every Sunday, used only when they prove better than the simple rule.

Every Sunday the seo-agent runs the ML job. For each model it does the same four things: learn from your past data, test itself on data it has not seen, compare its score with the simple rule the site used before, and save the result. The website only reads the saved results; no ML runs while someone loads a page.

  • Falling pages (content decay): looks at each page's daily clicks, removes the normal weekly ups and downs (and yearly seasons when there is enough history), and flags a page only when its trend has fallen steadily for three weeks and clearly more than usual. In tests it raised far fewer false alarms than the old 28-day rule.
  • Topic groups (query clusters): turns each search query into numbers that capture its meaning (embeddings) and groups queries that mean the same thing. You check a sample of groupings on the Labelling page; the model is used only when it matches your answers better than simple word matching.
  • Search intent: learns from intent labels Claude gave earlier (and your corrections) to tell “how to”, “what is”, comparison and other searches apart by itself, so fewer Claude calls are needed. It is used only when it is accurate enough on your spot checks.
  • Priority: looks at recommendations you already carried out and how many clicks they gained, and proposes better scoring weights. Proposals are never applied automatically; you decide.
  • Related articles: mixes how similar two articles are, which search queries they share and which pages readers actually visit together, and picks the best six for each article. Clicks on the related block (with consent) measure whether it works.

If a model is not better, too new or more than 14 days old, the site quietly uses the rule, and every number says which one made it.

In the admin: /admin/models

ML models

Weekly-trained models that replace a rule only when they beat it.

The SEO agent trains five models each week: content decay (seasonal trend decomposition), query clusters (embeddings and HDBSCAN), a search-intent classifier, learned recommendation priority, and related articles. No ML runs inside a web request; the site reads the stored results.

A new version becomes active only if it beats the current rule on held-out data (and, for some models, after your review). Its output counts as fresh for 14 days.

  • Override auto (default): the model when an active version is fresh, otherwise the rule.
  • Override rule: always the rule.
  • Override model: the model whenever its output is fresh, even if it never beat the rule.

Every number on the site says where it came from: model vN, rule, rule (insufficient history) or rule (stale model output). Labels lets you review training labels; Run now trains outside the schedule.

With the override on rule, the rule is used. On model, the model is used if its output is fresh. On auto, the model is used only if an active version beat the rule on held-out data and its output is under 14 days old; otherwise the rule.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/models

MCP access

Connect Claude or MCP Inspector to the SEO tools, choose scopes and revoke access.

Two MCP servers expose the platform to AI assistants. The admin server needs OAuth 2.1 with PKCE; the public server is read-only and serves published articles only, without sign-in. Each has a kill switch (ADMIN_MCP_ENABLED, PUBLIC_MCP_ENABLED) and the page shows whether it is on.

To connect Claude: in Claude, Settings → Connectors → Add custom connector with the admin server URL shown on the page. Claude registers itself, sends you to a consent page on this site, and then appears under Connected clients.

  • seo:read: read SEO metrics, keyword opportunities, the review queue, draft diffs, audit issues, flow runs and LLM usage.
  • seo:flows: start drafting, sync, audit and report flows (drafts still wait for your approval on the site).
  • seo:review:reject: reject drafts and add review notes.

No scope can approve, publish, roll back or submit to search engines. Connected clients shows each client's scopes, who allowed it and when it was last used; Revoke ends its access at once.

Claude adds the admin MCP server as a connector, the admin signs in on the consent page and picks scopes, and the token reaches the admin server. It can read, start flows and reject, but never approve, publish, roll back or submit. Admins revoke clients on MCP access. Readers' assistants use the public server without signing in.
Diagram (draw.io). Select it to open full size.

In the admin: /admin/automation/mcp

Which AI models does the CMS use?

Claude drafts and classifies for the SEO agent (the models are set under Automation & AI → AI & drafts; empty uses the deployment's defaults). Gemini generates images when configured in Integrations. AI visibility asks the assistants you switch on.

In the admin: /admin/automation

Can I stop an ML model from being used?

Yes. Set its override to rule on the ML models page; the site then always uses the rule. auto (the default) only uses a model that beat the rule on held-out data and is less than 14 days old.

In the admin: /admin/models

How do I disconnect Claude from the admin?

Admin → MCP access → Revoke on its row. The token stops working at once. To switch the whole admin MCP server off, the operator sets ADMIN_MCP_ENABLED=false.

In the admin: /admin/automation/mcp

How much does the SEO agent spend on AI?

Drafting stops at the monthly budget in Automation & AI → AI & drafts (0 uses the deployment's ceiling, by default $15). DataForSEO and AI visibility have their own monthly caps; a run stops before a call that would cross one.

In the admin: /admin/automation

What is a “crew” and an “agent”?

An agent is one AI helper with one job (for example “editor” or “technical reviewer”). A crew is a small team of agents that work one after another on the same task. A flow is the step-by-step recipe that runs the crew and saves its draft.

Why does a number say “rule” instead of “model”?

The model was not used because it has not yet proven better than the rule, does not have enough history for that page, or its results are more than 14 days old. The rule is the safe default.

In the admin: /admin/models

What happens if the seo-agent stops?

The website keeps working. Background jobs (syncs, drafts, reports, ML) wait until it is back; Data sync and System status show the problem.

In the admin: /admin/system

Insights

Search performance

Google Search Console clicks, impressions, CTR and position.

Search performance shows Google Search Console data for a period, compared with the previous one. Change the date range and search type to explore.

Data arrives through Data sync; if numbers look stale, check the latest run there.

In the admin: /admin/search

Visitor analytics and page insights

Google Analytics 4 traffic, and every page joined with its search data.

Visitor analytics shows Google Analytics 4 data for the chosen period.

Page insights lists every page with Search Console data, joined with its GA4 landing-page sessions and the CMS article, so you can see which articles bring search visitors.

In the admin: /admin/analytics

Keywords and recommendations

Keyword opportunities and evidence-backed suggestions.

Keyword opportunities come from your Search Console data (anonymised queries are not included, so totals are partial). Search volume and keyword difficulty come from DataForSEO when it is configured. Track the keywords you care about.

Recommendations are rule-based, evidence-backed suggestions. Scores are priorities, not forecasts. Approving records your decision; nothing is changed on the site. AI explanations are labelled and should be verified.

In the admin: /admin/keywords

Content audit and technical health

Article quality scores and a weekly crawl of the public site.

Content audit lists every published article, weakest first. Hover, tap or focus a number to see the issues behind it.

Technical health is a weekly polite crawl of the public site: robots.txt, sitemaps, status codes, redirects, canonicals, titles, meta descriptions, headings, alt text, structured data, broken links, orphan pages and more.

In the admin: /admin/content-audit

AI visibility

Whether AI assistants cite or mention the site, week by week.

Each week a set of prompts is asked to the enabled AI assistants with web search on. A prompt counts as cited when an answer links to the site, and mentioned when it names it.

These are API answers; the consumer apps can differ, so read them as a trend. Open a prompt to see the stored answers.

In the admin: /admin/ai-visibility

Reports

Weekly and monthly reports with CSV and printable versions.

Weekly (last full Monday–Sunday) and monthly (last full month) reports, compared with the previous period. Export as CSV, open a printable page, or download a designed PDF when one has been generated.

In the admin: /admin/reports

The search or analytics numbers look out of date. Why?

Search Console data is usually two to three days behind. Check Admin → Data sync for the latest run and its errors; queued runs start within about 30 seconds.

In the admin: /admin/sync

Why do backlink counts differ from Google Search Console?

Backlinks come from DataForSEO's own crawl, not Google's, so their counts differ. Read both as trends.

In the admin: /admin/backlinks

Community

Moderating comments

Review new and reported comments; open, lock or close discussions.

Comments shows new and reported comments for review, and lets you open, lock or close the discussion on each post. The sidebar badge counts what is waiting.

Every decision is recorded in the audit log. Comment text is shown as plain text, so nothing in a comment runs in the admin.

In the admin: /admin/comments

Messages, bookings and payments

Contact-form messages, booked calls and paid sessions.

  • Messages: contact-form messages and Hire me enquiries. The badge counts unread ones.
  • Bookings: meetings booked through Cal.com from the Hire me page. Reschedule or cancel them in Cal.com.
  • Payments: paid calls from the Hire me page (Razorpay). Refunds and settlements are handled in the Razorpay dashboard.

The Hire me page itself is configured under Appearance & settings.

In the admin: /admin/messages

Site settings

Appearance & settings

Customise the public site with drafts, previews, history and rollback.

Change the public site without code: general details, branding (logos, favicon, share image), header, navigation menus, footer, typography and colours (with live contrast ratios), the homepage sections, blog listings and the Hire me page.

Changes go into a private draft that you preview on the real pages, then publish explicitly. History lets you roll back, and settings can be exported and imported.

General settings also turn comments, reader sign-up, the contact form, the public user guide and maintenance mode on or off.

In the admin: /admin/appearance

Integrations

Social sign-in, IndexNow instant indexing and AI image generation.

Integrations connects the site to outside services. Secrets are encrypted at rest and never shown again; leave a secret field empty to keep the stored value.

  • Social sign-in (Google, GitHub): register the callback URL shown on the page exactly as given with the provider, then paste the client ID and client secret. Each provider can be switched on or off.
  • IndexNow: tells Bing and other IndexNow search engines about new and changed pages straight away. The key file is served by the site so search engines can confirm it belongs to you.
  • Image generation (Google Gemini): the API key, the Fast image model used by default in the editor, an optional Pro model (better, slower, dearer), the default image size and the largest size authors may pick (caps cost).

Analytics, ads and search-engine verification tokens are under Advanced settings; Search Console, GA4 and DataForSEO connections are under Automation & AI.

In the admin: /admin/integrations

Storage & email

Media storage (Cloudflare R2) and outgoing email (Amazon SES).

Keys are encrypted at rest and never shown again; leave a secret field empty to keep the stored value.

  • Media storage (Cloudflare R2): account ID, bucket, an access key ID and secret scoped to that bucket, an optional public media URL (a custom domain for large files) and an optional API endpoint for EU/FedRAMP buckets. A one-time tool moves existing media from S3 to R2.
  • Email: choose one provider (SMTP, Mailgun or Amazon SES; there is no automatic failover), the sender name and address and an optional reply-to. SMTP needs host, port (587 STARTTLS, 465 TLS), encryption and credentials; Mailgun a sending domain, region and API key; SES a region and either the server's AWS credentials or access keys stored here. Send a test before relying on it.

Email is needed for sign-up verification, password resets and demo invitations.

In the admin: /admin/storage

Managing users

Invite demo users, add accounts with a password, change roles, ban or delete.

  • Invite demo users: enter an email; the person gets a link to choose a password (valid 72 hours, Resend invite sends a new one). Needs email set up.
  • Add a user with a password: create an account of any role with a password you choose. No email is sent; share the password yourself.
  • Change a role in the table and press Save; the person is signed out so the new role applies at once.
  • Ban signs a user out and blocks sign-in; Delete removes the account (not possible while they still own posts).

In the admin: /admin/users

Advanced settings

Lower-level options for operators.

Advanced settings holds lower-level site options. Change these only when you know what a setting does; each page section explains its options.

In the admin: /admin/advanced

How do I add a user?

Admin → Users. Either invite a demo user by email (they choose their own password), or use “Add a user with a password” to create an account of any role with a password you set and share yourself.

In the admin: /admin/users

A demo invitation link expired. What now?

Press Resend invite on that user's row in Admin → Users for a new 72-hour link, or the person can use Forgot password on the sign-in page.

In the admin: /admin/users

How do I remove someone's access?

Ban the account, delete it, or change its role in Admin → Users. Each of these signs the person out immediately.

In the admin: /admin/users

Why are emails (invitations, password resets) not arriving?

Check Admin → Storage & email: outgoing email must be configured. Then check System status for a failing email check, and ask the person to look in their spam folder.

In the admin: /admin/storage

I published an appearance change by mistake. Can I undo it?

Yes. Appearance & settings keeps a history; roll back to the previous version.

In the admin: /admin/appearance

Google sign-in says redirect_uri_mismatch. What is wrong?

The callback URL registered with Google must match the one shown in Admin → Integrations exactly, including https and the path.

In the admin: /admin/integrations

Operations

System status and data sync

Live dependency checks, and every data import run.

System status runs live checks of every service the site depends on; reload the page to run them again.

Data sync lists every scheduled, manual and backfill run: window, status, rows written, Google API requests, retries and errors. Queued runs start within about 30 seconds.

ML models shows the models trained weekly; a model is only used when it beats its rule on held-out data.

In the admin: /admin/system

Backups

Zip backups of content and configuration.

Create zip backups of content and configuration, encrypted if you choose. Backups exclude password hashes, sessions, API-key hashes and stored credentials.

Restore replaces posts, pages, categories, comments, media records, redirects and Appearance settings with a stored backup, after saving the current state as a new backup. A post or category that is also in the backup is updated in place, so its SEO drafts, audits and news topics stay. An account the site no longer has is recreated as a reader without a password, whatever role it had in the backup: give staff their roles back in Users.

Demo accounts cannot download backups.

In the admin: /admin/backups

Database browser

Connection, table sizes, maintenance and a read-only browser.

See the database connection, table sizes and maintenance tasks, and browse tables read-only. Passwords, tokens and secret settings are always redacted.

In the admin: /admin/database

Audit log

Every change and every sign-in attempt.

Every change made from the admin or the API, and every sign-in (successful, failed, rate-limited or blocked by the bot check), with the client IP and browser. Filter it to find who changed what and when.

In the admin: /admin/audit

How do I find out who changed something?

Admin → Audit log records every change made from the admin or the API, and every sign-in, with the person, time, IP and browser.

In the admin: /admin/audit

Are passwords included in backups?

No. Backups exclude password hashes, sessions, API-key hashes and stored credentials. Choose encryption when you create one if it will leave your machine.

In the admin: /admin/backups

Something on the site is broken. Where do I look first?

Admin → System status runs live checks of every dependency. Then check Data sync for failed runs and the Audit log for recent changes.

In the admin: /admin/system

Account

Author profile

The public profile shown on your posts.

Your author profile is the public page shown on your posts (at /authors/your-slug). Create it if you do not have one, and keep the bio and links up to date.

In the admin: /admin/profile

API keys

Manage posts from scripts and automations.

Create API keys to manage posts from scripts and automations. A key acts with its owner's permissions; revoke one you no longer need. Demo accounts cannot create keys.

In the admin: /admin/api-keys

Can I manage posts from a script?

Yes. Create an API key in Admin → API keys; it acts with your permissions.

In the admin: /admin/api-keys

Settings reference

Every setting and option, what it does and its default. Defaults only: the manual never shows the values saved on a site.

General

Appearance & settings

Every Appearance change is saved as a private draft, previewed on the real pages and published explicitly; Revision history keeps every version for rollback.

SettingWhat it doesDefault
Site name——
Publication nameUsed in news sitemaps and structured data.—
TaglineShown on the generated share card.—
DescriptionThe default meta description and footer text (50–200 characters).—
Editorial time zoneTime zone for dates across the site.the site's time zone
Date format29 Oct 2026, Oct 29, 2026, 29 October 2026 or 2026-10-29.29 Oct 2026
Public contact emailShown on the contact page and, if enabled, in the footer.—
LocationShown next to the contact email.—
GitHub / LinkedIn / X / YouTube / MastodonSocial profile links (https only) used by the header, footer and author pages.—
CommentsSigned-in readers can comment and reply under posts. Each post can also lock or close its discussion.on
New reader comments need approvalReaders' comments appear after a moderator approves them. Authors' and admins' comments never wait.on
Readers can edit their comments for0 means no time limit. Comments can always be deleted by their author.1440 min
Reader sign-upNew accounts by email or Google/GitHub. Existing users can always sign in.on
Contact formShown on /contact; messages arrive in Admin → Messages.on
Public user manualPublishes this guide at /user-manual for everyone (documentation and defaults only, no site data).off
Enable maintenance modeReaders see a maintenance page instead of the site; staff can still sign in.off
Message for readersShown on the maintenance page (up to 300 characters).—
Ask crawlers to retry afterSent to search engines as Retry-After (5–1440 minutes).30 min

Branding

Appearance & settings

SettingWhat it doesDefault
Show the site name next to the logo—on
Logo (light theme)From the media library.—
Logo (dark theme, optional)Used when the dark theme is on; empty uses the light logo.—
Logo on phones (optional)A compact mark for narrow screens.—
Favicon——
Apple touch iconThe icon used when someone adds the site to an iPhone home screen.—
Share imageDefault image for links shared on social networks.—

Header

Appearance & settings

SettingWhat it doesDefault
Preset4 starting layouts.standard
WidthPage width or full width.page width
HeightCompact, regular or tall.regular
Navigation positionAfter logo, centred or right.—
Logo sizeSmall, medium or large.—
Keep the header visible while scrolling—on
BackgroundPage, tinted, accent or an image (with mobile crop and overlay).—
SearchShow the search button.—
Light/dark switchAlso controls the theme selector in the footer and mobile menu.—
Account avatar and menuWhen hidden, readers can still sign in at /login; consider a menu link to it.—
Social profile iconsOn wide screens only; profiles come from General.—
Call-to-action buttonA highlighted button in the header.—
Button textUp to 24 characters.—
Button linkA site path like /hire-me or an https link.—
Show the announcementA bar above the header.—
TextThe announcement text (up to 200 characters).—
Link (optional)Where the announcement leads.—
StyleNeutral, accent or warning.—
Readers can dismiss itRemembered in their browser until the text changes.—

Navigation

Appearance & settings

SettingWhat it doesDefault
MenusUp to 8 menus; choose which one is the header menu (1–8 top-level items).—
Menu itemsLink to pages, topics, sections, authors or https URLs; one level of sub-items; reorder with arrow buttons or drag-and-drop; indent/outdent; open in a new tab.—
PreviewsDesktop and phone previews of the header menu.—

Footer

Appearance & settings

SettingWhat it doesDefault
PresetColumns, simple or centred.—
AlignmentLeft or centre.—
SpacingCompact, regular or spacious.—
BackgroundTinted, page, inverted or an image.—
Heading / Links from / MenuUp to 4 columns, each with a heading and links from a menu or the topic list.—
Logo and site name——
DescriptionEmpty uses the site description from General.—
Social profile links——
RSS feed link——
Contact email and locationFrom General → Contact.—
Copyright line{year} becomes the current year and {site} the site name. Policy links and Privacy choices are always present.—

Typography & colours

Appearance & settings

SettingWhat it doesDefault
PresetDefault, Editorial, Midnight or High contrast.—
Body font / Heading fontInter, IBM Plex Sans, Source Sans 3 or Source Serif 4.—
Code fontJetBrains Mono or IBM Plex Mono.—
Heading weightSemibold, bold or extra bold.—
Text sizeDefault, larger or largest. Scales all text; form inputs never go below 16 px.—
Article line height1.5–1.9.—
Light and dark palettesPage, cards, text, secondary, meta, borders, accent and links, with live contrast ratios.—
Page width64–88 rem.—
Article reading width36–50 rem; about 70 characters per line at 43 rem.—
Spacing between sectionsCompact, comfortable or spacious.—
Corner radiusNone, small, medium or large.—
Buttons and inputsRounded, pill or square.—
Default theme for new visitorsFollow device, light or dark. Readers can still switch if the switch is shown.follow device

Homepage

Appearance & settings

SettingWhat it doesDefault
SectionsIntroduction, latest articles, hand-picked articles, topics, projects, editorial standards, author bio, call to action and a plain-text block: add, remove, reorder, hide or duplicate.—
Section contentHeadings, text, links, images, layout, spacing and background; searchable pickers for articles and topics.—
AuthorWhich author the author-bio section shows.—

Blog & articles

Appearance & settings

SettingWhat it doesDefault
LayoutGrid or list.—
Cards per row (wide screens)2 or 3.—
Articles per page6–24.—
Excerpt lines (0 hides it)0–4.—
Cover image shape16:9, 3:2, 4:3, square or no cover.—
Topic / Article type (News, Tutorial…) / Date / Reading timeWhat each listing card shows.—
Reading widthNarrow, default or wide.—
Body text size (desktop)16–19 px.—
Breadcrumbs / Author in the byline / “Updated” dateWhat an article page shows.—
Author card after the article——
Show a table of contents——
Only for articles with at least2–8 headings.—
On wide screensTable of contents in the right margin or above the article.—
Related readingRelated articles under each post.—
How many1–6 related articles.—
Share linksPlain links to each network's share page: no third-party scripts.—

Media

Appearance & settings

SettingWhat it doesDefault
Image cornersSquare, small or medium.—
CaptionsCentred or left.—
Gallery columns2, 3 or 4.—
Cloudflare R2 storageStatus: uploads need storage configured (Storage & email).—

SEO & integrations

Appearance & settings

SettingWhat it doesDefault
Homepage titleUp to 70 characters.—
Title separator|, ·, — or -.—
Search result previewHow the homepage may look in Google.—
Google Search Console verificationStatus; tokens are set in Advanced settings.—
Bing Webmaster Tools verificationStatus; tokens are set in Advanced settings.—
Google Analytics 4Status; loads in production only, with Consent Mode.—
Google AdSenseStatus and number of ad slots.—
ads.txtWhether /ads.txt is served.—
Consent defaultDenied everywhere until consent, or only in the EEA, UK and Switzerland.—
IndexNowStatus; turned on in Integrations.—
Cloudflare TurnstileStatus; without it email sign-in and forms are unavailable.—
EmailStatus; without it password resets are not sent.—
Social sign-inWhich providers are enabled.—
Gemini image generationStatus; configured in Integrations.—

Hire me

Appearance & settings

SettingWhat it doesDefault
Show the Hire me pageOff: /hire-me is not found and every call to action is hidden. Add the page to a menu in Navigation.—
AvailabilityAvailable, limited, or not taking new work (keeps the page but hides booking buttons and the article call to action).—
Availability noteA short line under the availability.—
Headline——
Introduction——
Reply time (shown under the form)——
Currency——
Intro call booking linkYour Cal.com (or other https) booking page. Used by “Book an intro call” and by offers without their own link.—
Open Cal.com links in a pop-up on the pageCal.com's scheduler loads only when a visitor clicks Book.—
Self-hosted Cal.com address (optional)Only if you run Cal.com yourself. Bookings reach Admin → Bookings through a webhook (Advanced settings → Cal.com bookings).—
Offer paid callsShown only while the page is on, you are taking work, both rates are set and the Razorpay keys are saved.—
Title / SummaryFor the paid call and each offer.—
Price per minute in India (INR)e.g. 50 → a 30-minute call costs ₹1,500.—
Price per minute elsewhere (USD)e.g. 1.5 → a 30-minute call costs $45.—
Shortest call / Longest call5–480 minutes.—
Lengths offered in steps of5–120 minutes.—
Booking link after payment (optional)Empty: the intro call link.—
Offer thisShow an offer (consulting, freelance, speaking, mentoring).—
Price from (0 = on request) / PerThe offer's starting price and unit.—
Booking link for this offer (optional)——
Show itThe call to action under articles, with its Text.—

Advanced (custom CSS)

Appearance & settings

SettingWhat it doesDefault
Apply custom CSSRestricted CSS applied to the public site.off
CSSValidated, up to 10,000 characters.—

Social sign-in (Google, GitHub)

Integrations

SettingWhat it doesDefault
Allow sign-in with Google / GitHubShow this provider on the sign-in page.—
Authorized redirect / callback URLRead-only: register exactly this URL with the provider.—
Client ID / Client secretFrom the provider's developer console. The secret is stored encrypted; leave it empty to keep it.—
Use environment insteadDrops the saved values and falls back to the deployment's environment variables.—

IndexNow

Integrations

SettingWhat it doesDefault
Turn on IndexNow / Turn offSubmits new and changed URLs to IndexNow search engines (Bing and others) in production.off
Key file / New keyServed by the site so search engines can confirm the key belongs to it; New key replaces it.—
Submit all pages nowSends every public URL once, for example after turning it on.—

Image generation (Google Gemini)

Integrations

SettingWhat it doesDefault
API keyStarts with AIza…; stored encrypted.—
Image model (Fast)Model code from ai.google.dev; the default in the editor.—
Pro model (optional)Higher quality, slower and dearer. Empty offers only Fast.—
Default image sizePreselected in the editor. Larger sizes cost more and take longer.—
Largest size authors may pickCaps cost. Default: the larger of the default size and 2K.—

Media storage (Cloudflare R2)

Storage & email

SettingWhat it doesDefault
Account IDCloudflare dashboard → R2 → Account details (32 characters).—
Bucket / Access key ID / Secret access keyAn R2 API token scoped to this bucket (Object Read & Write). Leave the secret empty to keep it.—
Public media URL (optional)A custom domain connected to the bucket; empty serves everything through the site.—
API endpoint override (optional)Only for an EU/FedRAMP jurisdiction bucket.—

Email

Storage & email

SettingWhat it doesDefault
Email providerSMTP, Mailgun or Amazon SES. Only the selected provider sends; the others' settings are kept; no automatic failover.—
Sender name / Sender email / Reply-to address——
SMTP: Host / Port / Encryption / Username / Password587 with STARTTLS or 465 with TLS from the start.—
Mailgun: Sending domain / API region / API keyThe verified domain (e.g. mg.example.com), US or EU region, and a sending key for that domain.—
Amazon SES: AWS region / AuthenticationWhere the identity is verified; the server's AWS credentials (role / environment) or access keys stored here (limited to ses:SendEmail).—
Access key ID / Secret access key / Session tokenOnly with stored access keys; the session token only for temporary credentials.—
Send the test toSends a test message with the saved settings to this address.—

Data sources: Google properties

Automation & AI

Which Google properties are read, how far back, and how long data is kept; DataForSEO for volume, difficulty, live rankings and backlinks.

SettingWhat it doesDefault
Gsc Propertygoogle.gscPropertysc-domain:example.com for a domain property, or the URL-prefix form with a trailing slash. Empty = SEO_GSC_PROPERTY.empty
Ga4 Property Idgoogle.ga4PropertyIdNumeric GA4 property id (Admin → Property details). Empty = SEO_GA4_PROPERTY_ID.empty
Search Typesgoogle.searchTypes—web
Url Inspection › Enabledgoogle.urlInspection.enabled—off
Url Inspection › Daily Limitgoogle.urlInspection.dailyLimitGoogle allows 2,000 inspections per property per day; keep well below.200
Page Speed › Enabledgoogle.pageSpeed.enabledNeeds PAGESPEED_API_KEY in the site's Secret for field (CrUX) data at a useful quota.off

Data sources: Sync and retention

Automation & AI

Which Google properties are read, how far back, and how long data is kept; DataForSEO for volume, difficulty, live rankings and backlinks.

SettingWhat it doesDefault
Trailing Dayssync.trailingDaysRecent days re-fetched on every sync: Search Console revises its last ~3 days.4
Retention Monthssync.retentionMonthsDaily rows older than this are deleted. Year-over-year decay checks need at least 13.16
Stale After Hourssync.staleAfterHoursAfter this long without a good sync, pages show “stale” and SeoDataStale fires.48
Max Requests Per Runsync.maxRequestsPerRunHard cap on Google API calls per sync run.400
Row Limitsync.rowLimit—25000

Data sources: DataForSEO (pay as you go; credentials DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD in the site's Secret)

Automation & AI

Which Google properties are read, how far back, and how long data is kept; DataForSEO for volume, difficulty, live rankings and backlinks.

SettingWhat it doesDefault
Enableddataforseo.enabledMaster switch. Nothing is bought while off or while the credentials are missing.off
Location Codedataforseo.locationCodeMarket for volume and rankings: 2840 United States, 2356 India, 2826 United Kingdom, 2276 Germany.2840
Language Codedataforseo.languageCode—en
Monthly Budget Usddataforseo.monthlyBudgetUsdHard cap per calendar month (UTC), counted from the cost DataForSEO returns. 0 = buy nothing.5
Keyword Metrics › Enableddataforseo.keywordMetrics.enabled—on
Keyword Metrics › Max Keywordsdataforseo.keywordMetrics.maxKeywordsTop Search Console queries by impressions (tracked keywords always included) that get volume and difficulty.1000
Keyword Metrics › Refresh Daysdataforseo.keywordMetrics.refreshDaysA query's metrics are bought again only after this many days.30
Rank Tracking › Enableddataforseo.rankTracking.enabled—on
Rank Tracking › Weekdaydataforseo.rankTracking.weekday—3
Rank Tracking › Hour Utcdataforseo.rankTracking.hourUtc—5
Rank Tracking › Depthdataforseo.rankTracking.depthResults checked per tracked keyword; billed per 10. A keyword below this depth shows as not ranking.30
Backlinks › Enableddataforseo.backlinks.enabledThe Backlinks API has its own DataForSEO subscription; switch on only once it is active.off
Backlinks › Weekdaydataforseo.backlinks.weekday—0
Backlinks › Hour Utcdataforseo.backlinks.hourUtc—5

Schedules: Schedules (UTC; weekday 0 = Sunday)

Automation & AI

When the web worker runs each job (UTC). With SEO_ORCHESTRATOR=crewai the agent's CronJobs own the flow jobs instead.

SettingWhat it doesDefault
Gsc Daily › Enabledschedules.gscDaily.enabled—on
Gsc Daily › Hour Utcschedules.gscDaily.hourUtc—6
Ga4 Daily › Enabledschedules.ga4Daily.enabled—on
Ga4 Daily › Hour Utcschedules.ga4Daily.hourUtc—6
Technical Weekly › Enabledschedules.technicalWeekly.enabled—on
Technical Weekly › Weekdayschedules.technicalWeekly.weekday—1
Technical Weekly › Hour Utcschedules.technicalWeekly.hourUtc—3
Recommendations Weekly › Enabledschedules.recommendationsWeekly.enabled—on
Recommendations Weekly › Weekdayschedules.recommendationsWeekly.weekday—1
Recommendations Weekly › Hour Utcschedules.recommendationsWeekly.hourUtc—7
Reports Weekly › Enabledschedules.reportsWeekly.enabled—on
Reports Weekly › Weekdayschedules.reportsWeekly.weekday—1
Reports Weekly › Hour Utcschedules.reportsWeekly.hourUtc—8
Reports Monthly › Enabledschedules.reportsMonthly.enabled—on
Reports Monthly › Day Of Monthschedules.reportsMonthly.dayOfMonth—2
Reports Monthly › Hour Utcschedules.reportsMonthly.hourUtc—8

Scoring & rules: Scoring weights (relative; renormalised when an input is missing)

Automation & AI

How recommendations are found and ranked (docs/seo/SCORING.md).

SettingWhat it doesDefault
Search Opportunityweights.searchOpportunityDemand involved (impressions, log-scaled).30
Ranking Opportunityweights.rankingOpportunityHow close the page is to a better result.20
Relevanceweights.relevanceHow directly the site's own content is concerned.20
Quality Gapweights.qualityGapHow far the current state is from good.15
Trendweights.trendSize of a decline (decay).10
Effortweights.effortEase of the fix: cheap fixes score higher.5

Scoring & rules: Rule thresholds

Automation & AI

How recommendations are found and ranked (docs/seo/SCORING.md).

SettingWhat it doesDefault
Low Ctr Min Impressionsthresholds.lowCtrMinImpressionsA query needs at least this many impressions (28 days) before a low CTR counts.200
Low Ctr Ratiothresholds.lowCtrRatioFlag when CTR < expected CTR for the position × this ratio.0.6
Striking Min Impressionsthresholds.strikingMinImpressions—100
Striking Position Minthresholds.strikingPositionMinStriking-distance band: lowest average position.5
Striking Position Maxthresholds.strikingPositionMaxStriking-distance band: highest average position.20
Decay Min Clicksthresholds.decayMinClicksPages need at least this many clicks in the earlier window to be checked for decay.20
Decay Drop Ratiothresholds.decayDropRatioA click drop of this share (0.3 = 30 %) counts as decay.0.3
Gap Min Impressionsthresholds.gapMinImpressionsMinimum demand for a content-gap recommendation.50
Max Links Per Pagethresholds.maxLinksPerPageInternal-link suggestions per article.5
Band Highthresholds.bandHighScore at or above this is “high”.0.66
Band Mediumthresholds.bandMediumScore at or above this is “medium”.0.4
Brand Termsthresholds.brandTermsQueries containing these are excluded from low-CTR and gap rules.jithendar

Content & links: Internal linking limits (conservative by default)

Automation & AI

Keyword opportunities, internal-linking limits and search-engine submission.

SettingWhat it doesDefault
Enabledlinks.enabled—on
Max New Per Draftlinks.maxNewPerDraft—3
Words Per Linklinks.wordsPerLink—250
Min Words Betweenlinks.minWordsBetween—100
Max Inbound Per Target Per Runlinks.maxInboundPerTargetPerRun—5
Min Relevancelinks.minRelevance—0.12
Anchor Min Wordslinks.anchorMinWords—2
Anchor Max Wordslinks.anchorMaxWords—6
Auto › Enabledlinks.auto.enabled—on
Auto › Weekdaylinks.auto.weekday—2
Auto › Hour Utclinks.auto.hourUtc—9
Auto › Max Articles Per Runlinks.auto.maxArticlesPerRun—5
Auto › Max External Per Articlelinks.auto.maxExternalPerArticle—2
Auto › Cooldown Dayslinks.auto.cooldownDays—30
Check › Enabledlinks.check.enabled—on
Check › Weekdaylinks.check.weekday—3
Check › Hour Utclinks.check.hourUtc—4
Check › Max External Per Runlinks.check.maxExternalPerRun—400
Check › Recheck Dayslinks.check.recheckDays—7

Content & links: Search-engine submission (kill switch: SEO_SUBMISSION_ENABLED)

Automation & AI

Keyword opportunities, internal-linking limits and search-engine submission.

SettingWhat it doesDefault
Index Nowsubmission.indexNow—on
Google Sitemapsubmission.googleSitemap—on
Url Inspectionsubmission.urlInspection—on
Inspection Delay Hourssubmission.inspectionDelayHours—60

Content & links: Keyword opportunities

Automation & AI

Keyword opportunities, internal-linking limits and search-engine submission.

SettingWhat it doesDefault
Brand Regexkeywords.brandRegex—jithendar
Rising Min Growthkeywords.risingMinGrowth—0.5
Declining Positionskeywords.decliningPositions—3
Tracked Alert Positionskeywords.trackedAlertPositions—3
Classify With Llmkeywords.classifyWithLlm—on
Cluster Similaritykeywords.clusterSimilarity—0.5

AI & drafts: LLM enrichment (optional; off by default)

Automation & AI

Claude drafting (always stops at human review), the optional explanation model, and AI visibility (are AI assistants citing the site?).

SettingWhat it doesDefault
Enabledllm.enabled—off
Providerllm.provider—openai
Modelllm.model—empty
Base Urlllm.baseUrlOnly for OpenAI-compatible endpoints (e.g. Ollama in the cluster).empty
Regionllm.region—us-east-1
Timeout Msllm.timeoutMs—30000
Max Output Tokensllm.maxOutputTokens—900
Daily Request Limitllm.dailyRequestLimitRequests per day for the optional explanation model; 0 = none.100

AI & drafts: Claude drafts (automation stops at “ready for review”; empty models/budget = environment defaults)

Automation & AI

Claude drafting (always stops at human review), the optional explanation model, and AI visibility (are AI assistants citing the site?).

SettingWhat it doesDefault
Enableddrafts.enabled—on
Draft Modeldrafts.draftModel—empty
Classify Modeldrafts.classifyModel—empty
Monthly Budget Usddrafts.monthlyBudgetUsd0 = SEO_LLM_MONTHLY_BUDGET_USD (default $15). The environment value is a ceiling this cannot raise.0
Effortdrafts.effort—medium
Max Output Tokensdrafts.maxOutputTokens—16000
Max Rewrite Ratiodrafts.maxRewriteRatioA draft may change at most this share of the article's text.0.25
Auto Eligible › Title metadrafts.autoEligible.title_meta—on
Auto Eligible › Striking expansiondrafts.autoEligible.striking_expansion—on
Auto Eligible › Freshnessdrafts.autoEligible.freshness—on
Auto Eligible › Internal linksdrafts.autoEligible.internal_links—on
Auto Eligible › Alt textdrafts.autoEligible.alt_text—on
Auto Eligible › Faq headingsdrafts.autoEligible.faq_headings—on
Auto Eligible › New articledrafts.autoEligible.new_article—off
News › Enableddrafts.news.enabled—on
News › Categoriesdrafts.news.categories—title_meta, alt_text, internal_links
Weekly › Enableddrafts.weekly.enabled—on
Weekly › Weekdaydrafts.weekly.weekday—2
Weekly › Hour Utcdrafts.weekly.hourUtc—4
Weekly › Max Articlesdrafts.weekly.maxArticles—20
Digest › Enableddrafts.digest.enabled—on
Digest › Weekdaydrafts.digest.weekday—6
Digest › Hour Utcdrafts.digest.hourUtc—5
Digest › Recipientsdrafts.digest.recipients—none

AI & drafts: AI visibility (weekly prompts to AI assistants with web search; API keys only in the site's Secret)

Automation & AI

Claude drafting (always stops at human review), the optional explanation model, and AI visibility (are AI assistants citing the site?).

SettingWhat it doesDefault
EnabledaiVisibility.enabledMaster switch for the weekly run. Each assistant also needs its switch below and its API key.off
WeekdayaiVisibility.weekday—4
Hour UtcaiVisibility.hourUtc—6
Max PromptsaiVisibility.maxPrompts—25
Monthly Budget UsdaiVisibility.monthlyBudgetUsdHard cap per calendar month (UTC) across all assistants; the run stops before a call that would cross it.10
Cost Per Answer UsdaiVisibility.costPerAnswerUsdChatGPT, Perplexity and Gemini do not return a price: each answer is counted at this estimate. Set it from their pricing.0.03
Brand NamesaiVisibility.brandNamesNames that count as a mention besides the site name and host, e.g. the author's name.none
Providers › ClaudeaiVisibility.providers.claude—on
Providers › ChatgptaiVisibility.providers.chatgpt—off
Providers › PerplexityaiVisibility.providers.perplexity—off
Providers › GeminiaiVisibility.providers.gemini—off
Providers › Google ai overviewaiVisibility.providers.google_ai_overviewThe AI Overview on Google's results page, read through DataForSEO (needs its credentials; billed by DataForSEO, counted here).off
Models › ClaudeaiVisibility.models.claudeAnthropic model id (web search needs a current model).claude-opus-5-5
Models › ChatgptaiVisibility.models.chatgptOpenAI model id with web search support; required to switch ChatGPT on.empty
Models › PerplexityaiVisibility.models.perplexityPerplexity Sonar model id (sonar, sonar-pro).sonar
Models › GeminiaiVisibility.models.geminiGemini model id with Google Search grounding; required to switch Gemini on.empty

Crawler: Technical crawler

Automation & AI

Limits for the technical SEO crawl of this site.

SettingWhat it doesDefault
Requests Per Secondcrawler.requestsPerSecondPoliteness limit against your own site.1
Max Pagescrawler.maxPages—500
Timeout Mscrawler.timeoutMs—10000
Max Bytescrawler.maxBytes—2000000
Max Redirectscrawler.maxRedirects—5

Reports: Reports (email only after recipients are set and email is enabled)

Automation & AI

Weekly and monthly report e-mail.

SettingWhat it doesDefault
Email Enabledreports.emailEnabled—off
Recipientsreports.recipients—none

MCP servers and scopes

MCP access

No scope can approve, publish, roll back or submit to search engines.

SettingWhat it doesDefault
Admin serverOAuth 2.1 with PKCE; switch ADMIN_MCP_ENABLED.off
Public serverRead-only, published articles only, no sign-in; switch PUBLIC_MCP_ENABLED.off
Scope seo:readseo:readRead SEO metrics, keyword opportunities, the review queue, draft diffs, audit issues, flow runs and LLM usage—
Scope seo:flowsseo:flowsStart drafting, sync, audit and report flows (drafts still wait for your approval on the site)—
Scope seo:review:rejectseo:review:rejectReject drafts and add review notes—
Connected clientsEach client with its scopes, who allowed it, when it was last used and its status; Revoke ends its access at once.—

Search engine verification

Advanced settings

Proves ownership of jithendar.com in Google Search Console and Bing Webmaster Tools (rendered as <meta> tags). Several tokens: separate with commas. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Google Search Console tokenGOOGLE_SITE_VERIFICATION—from the environment
Bing Webmaster tokenBING_SITE_VERIFICATION—from the environment

Analytics, ads and consent

Advanced settings

Google Analytics 4 and AdSense load only in production, only on public pages, and only after consent where the law requires it. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
GA4 measurement IDGA4_MEASUREMENT_ID—from the environment
AdSense publisher IDADSENSE_CLIENT_IDEmpty: ca-pub-2479369059565142 (jithendar.com's account). "off" disables ads.from the environment
Ad slot: end of articleADSENSE_SLOT_ARTICLE_END—from the environment
Ad slot: listingsADSENSE_SLOT_LISTING—from the environment
Show Google test ads outside productionADSENSE_TEST_MODE—off
Consent defaultCONSENT_DEFAULTOptions: Regional: ask in EEA, UK and Switzerland; allowed elsewhere, Strict: ask everyone before analytics or ads.from the environment
ads.txtADS_TXTExactly the line(s) your AdSense account gives you; served at /ads.txt. Empty: /ads.txt returns 404.from the environment

Human verification (Cloudflare Turnstile)

Advanced settings

Protects sign-in, sign-up, comments and the contact form. Cloudflare dashboard → Turnstile → your widget. Wrong keys block sign-in: test in a private window after saving. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Site keyTURNSTILE_SITE_KEY—from the environment
Secret keyTURNSTILE_SECRET_KEYSecret: encrypted, never shown again.from the environment

Cal.com bookings

Advanced settings

Bookings, reschedules and cancellations from Cal.com appear in Admin → Bookings. In Cal.com: Settings → Developer → Webhooks → New: subscriber URL https://jithendar.com/api/cal/webhook, events Booking created, rescheduled, cancelled, requested and rejected, and a secret. Paste the same secret here; requests without a valid signature are refused. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Webhook secretCAL_WEBHOOK_SECRETAt least 16 characters; any printable characters without spaces. Secret: encrypted, never shown again.from the environment

Razorpay payments (paid calls)

Advanced settings

Paid calls on /hire-me (Admin → Appearance → Hire me → Paid calls). Razorpay Dashboard → Account & Settings → API keys: Key ID and Key secret (use rzp_test_ keys first). Then Webhooks → Add: URL https://jithendar.com/api/razorpay/webhook, events payment.captured, payment.failed and order.paid, and a secret; paste the same secret here. Payments in USD need International payments enabled on the Razorpay account. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Key IDRAZORPAY_KEY_IDPublic: sent to the visitor's browser to open Checkout.from the environment
Key secretRAZORPAY_KEY_SECRETSecret: encrypted, never shown again.from the environment
Webhook secretRAZORPAY_WEBHOOK_SECRETAt least 12 printable characters, no spaces. Secret: encrypted, never shown again.from the environment

Image generation limits

Advanced settings

Caps on Gemini usage (each image costs money). The key and model are in Integrations. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Images per author per hourGEMINI_IMAGE_USER_HOURLY_LIMIT—from the environment
Images per day (whole site)GEMINI_IMAGE_DAILY_LIMIT—from the environment
Parallel generations per authorGEMINI_IMAGE_USER_CONCURRENCY—from the environment
Timeout (milliseconds)GEMINI_IMAGE_TIMEOUT_MS—from the environment

Video generation

Advanced settings

Short AI clips for articles (editor → Generate → Video), made with a Veo model through the Gemini API using the Gemini key from Integrations. Off until a model is set. Each clip costs far more than an image, so the limits are low. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Video modelGEMINI_VIDEO_MODELThe model code from ai.google.dev (Veo). Empty turns video generation off.from the environment
Resolution (optional)GEMINI_VIDEO_RESOLUTIONSent only when set; not every model accepts every value.from the environment
Clip length in seconds (optional)GEMINI_VIDEO_SECONDS—from the environment
Videos per author per hourGEMINI_VIDEO_USER_HOURLY_LIMIT—from the environment
Videos per day (whole site)GEMINI_VIDEO_DAILY_LIMIT—from the environment
Give up after (milliseconds)GEMINI_VIDEO_TIMEOUT_MS—from the environment

Members-only articles

Advanced settings

A post marked “Members only” in the editor shows signed-out readers the first part of the article and a prompt to sign in or create an account. This is how much they see by default; a single post can set its own percentage in the editor. An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Public preview (% of the article)MEMBERS_PREVIEW_PERCENTThe cut is made between paragraphs, so the real share is the nearest whole block at or above this.from the environment

Video destinations

Advanced settings

Where a generated video can go when an author inserts it. The editor offers only destinations that are switched on here and fully filled in. This site's own media library (R2) plays the file directly; Cloudflare Stream, Mux and Bunny Stream encode it for adaptive streaming and the article embeds their player (the video then lives in that service's account, not in Admin → Media). An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Turn OFF this site's own media library (R2) as a destinationVIDEO_DEST_R2_DISABLEDIt is on unless this is ticked.off
Cloudflare StreamCF_STREAM_ENABLED—off
Cloudflare account IDCF_STREAM_ACCOUNT_ID—from the environment
Cloudflare API tokenCF_STREAM_API_TOKENA token with the Stream: Edit permission only. Secret: encrypted, never shown again.from the environment
Stream customer codeCF_STREAM_CUSTOMER_CODEShown in any Stream embed code in the Cloudflare dashboard.from the environment
MuxMUX_ENABLED—off
Mux token IDMUX_TOKEN_ID—from the environment
Mux token secretMUX_TOKEN_SECRETAn access token with Mux Video read and write. Secret: encrypted, never shown again.from the environment
Bunny StreamBUNNY_STREAM_ENABLED—off
Bunny video library IDBUNNY_STREAM_LIBRARY_ID—from the environment
Bunny library API keyBUNNY_STREAM_API_KEYThe Stream library's own key (Stream → library → API), not the account key. Secret: encrypted, never shown again.from the environment

Profile pictures

Advanced settings

Limits for pictures readers upload on their account page (always re-encoded to 512 px WebP). An empty field uses the deployment's environment variable of the same name.

SettingWhat it doesDefault
Largest upload (bytes)AVATAR_MAX_BYTES2097152 = 2 MBfrom the environment
Largest side (px)AVATAR_MAX_DIMENSION—from the environment
Smallest side (px)AVATAR_MIN_DIMENSION—from the environment