Skip to content
Jithendar.com

User manual

How the Moks CMS behind this site works: guides with diagrams, frequently asked questions and every setting explained.

Printable manual

ContentsShow or hide

42 guides, 29 questions, 343 settings

Guides

Frequently asked questions

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

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.

Open this answer as its own page

Is the data I see as a demo user real?Getting started

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

Open this answer as its own page

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

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).

Open this answer as its own page

How do I publish a post?Content

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

Open this answer as its own page

Can I write in Markdown?Content

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

Open this answer as its own page

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

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

Open this answer as its own page

Does AI ever publish on its own?Editorial & AI

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.

Open this answer as its own page

How is AI spending kept under control?Editorial & AI

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.

Open this answer as its own page

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

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

Open this answer as its own page

Why do backlink counts differ from Google Search Console?Insights

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

In the admin: /admin/backlinks

Open this answer as its own page

How do I add a user?Site settings

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

Open this answer as its own page

A demo invitation link expired. What now?Site settings

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

Open this answer as its own page

How do I remove someone's access?Site settings

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

Open this answer as its own page

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

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

Open this answer as its own page

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

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

In the admin: /admin/appearance

Open this answer as its own page

How do I find out who changed something?Operations

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

Open this answer as its own page

Are passwords included in backups?Operations

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

Open this answer as its own page

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

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

Open this answer as its own page

Can readers see this guide?Getting started

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

Open this answer as its own page

Which AI models does the CMS use?SEO agent, AI & ML

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

Open this answer as its own page

Can I stop an ML model from being used?SEO agent, AI & ML

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

Open this answer as its own page

How do I disconnect Claude from the admin?SEO agent, AI & ML

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

Open this answer as its own page

How much does the SEO agent spend on AI?SEO agent, AI & ML

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

Open this answer as its own page

Google sign-in says redirect_uri_mismatch. What is wrong?Site settings

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

Open this answer as its own page

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

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

Open this answer as its own page

What is a “crew” and an “agent”?SEO agent, AI & ML

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.

Open this answer as its own page

Why does a number say “rule” instead of “model”?SEO agent, AI & ML

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

Open this answer as its own page

What happens if the seo-agent stops?SEO agent, AI & ML

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

Open this answer as its own page

Can I manage posts from a script?Account

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

In the admin: /admin/api-keys

Open this answer as its own page

Settings reference

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

GeneralAppearance & settings · 18

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

In the admin: /admin/appearance?section=general

BrandingAppearance & settings · 7
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.—

In the admin: /admin/appearance?section=branding

HeaderAppearance & settings · 19
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.—

In the admin: /admin/appearance?section=header

NavigationAppearance & settings · 3
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.—

In the admin: /admin/appearance?section=navigation

Typography & coloursAppearance & settings · 13
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

In the admin: /admin/appearance?section=theme

HomepageAppearance & settings · 3
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.—

In the admin: /admin/appearance?section=homepage

Blog & articlesAppearance & settings · 16
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.—

In the admin: /admin/appearance?section=blog

MediaAppearance & settings · 4
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).—

In the admin: /admin/appearance?section=media

SEO & integrationsAppearance & settings · 14
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.—

In the admin: /admin/appearance?section=seo

Hire meAppearance & settings · 21
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.—

In the admin: /admin/appearance?section=hireMe

Advanced (custom CSS)Appearance & settings · 2
SettingWhat it doesDefault
Apply custom CSSRestricted CSS applied to the public site.off
CSSValidated, up to 10,000 characters.—

In the admin: /admin/appearance?section=advanced

Social sign-in (Google, GitHub)Integrations · 4
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.—

In the admin: /admin/integrations

IndexNowIntegrations · 3
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.—

In the admin: /admin/integrations

Image generation (Google Gemini)Integrations · 5
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.—

In the admin: /admin/integrations

Media storage (Cloudflare R2)Storage & email · 4
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.—

In the admin: /admin/storage

EmailStorage & email · 7
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.—

In the admin: /admin/storage

Data sources: Google propertiesAutomation & AI · 6

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

In the admin: /admin/automation

Data sources: Sync and retentionAutomation & AI · 5

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

In the admin: /admin/automation

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

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

In the admin: /admin/automation

Schedules: Schedules (UTC; weekday 0 = Sunday)Automation & AI · 16

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

In the admin: /admin/automation

Scoring & rules: Scoring weights (relative; renormalised when an input is missing)Automation & AI · 6

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

In the admin: /admin/automation

Scoring & rules: Rule thresholdsAutomation & AI · 12

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

In the admin: /admin/automation

Content & links: Search-engine submission (kill switch: SEO_SUBMISSION_ENABLED)Automation & AI · 4

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

In the admin: /admin/automation

Content & links: Keyword opportunitiesAutomation & AI · 6

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

In the admin: /admin/automation

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

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

In the admin: /admin/automation

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

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

In the admin: /admin/automation

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

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

In the admin: /admin/automation

Crawler: Technical crawlerAutomation & AI · 5

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

In the admin: /admin/automation

Reports: Reports (email only after recipients are set and email is enabled)Automation & AI · 2

Weekly and monthly report e-mail.

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

In the admin: /admin/automation

MCP servers and scopesMCP access · 6

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.—

In the admin: /admin/automation/mcp

Search engine verificationAdvanced settings · 2

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

In the admin: /admin/advanced

Analytics, ads and consentAdvanced settings · 7

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

In the admin: /admin/advanced

Human verification (Cloudflare Turnstile)Advanced settings · 2

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

In the admin: /admin/advanced

Cal.com bookingsAdvanced settings · 1

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

In the admin: /admin/advanced

Razorpay payments (paid calls)Advanced settings · 3

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

In the admin: /admin/advanced

Image generation limitsAdvanced settings · 4

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

In the admin: /admin/advanced

Video generationAdvanced settings · 6

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

In the admin: /admin/advanced

Members-only articlesAdvanced settings · 1

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

In the admin: /admin/advanced

Video destinationsAdvanced settings · 11

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

In the admin: /admin/advanced

Profile picturesAdvanced settings · 3

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

In the admin: /admin/advanced