Guide · Site settings
Advanced settings
Lower-level options for operators.
Overview
Advanced settings holds lower-level site options. Change these only when you know what a setting does; each page section explains its options.
Where to find it
This page of the admin: /admin/advanced. Only admins (and read-only demo accounts) can open it.
Settings on this page
What each setting does and its default. Defaults only: the manual never shows the values saved on a site.
Search engine verification
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.
| Setting | What it does | Default |
|---|---|---|
| Google Search Console tokenGOOGLE_SITE_VERIFICATION | — | from the environment |
| Bing Webmaster tokenBING_SITE_VERIFICATION | — | from the environment |
Analytics, ads and consent
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.
| Setting | What it does | Default |
|---|---|---|
| GA4 measurement IDGA4_MEASUREMENT_ID | — | from the environment |
| AdSense publisher IDADSENSE_CLIENT_ID | Empty: 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_DEFAULT | Options: Regional: ask in EEA, UK and Switzerland; allowed elsewhere, Strict: ask everyone before analytics or ads. | from the environment |
| ads.txtADS_TXT | Exactly the line(s) your AdSense account gives you; served at /ads.txt. Empty: /ads.txt returns 404. | from the environment |
Human verification (Cloudflare Turnstile)
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.
| Setting | What it does | Default |
|---|---|---|
| Site keyTURNSTILE_SITE_KEY | — | from the environment |
| Secret keyTURNSTILE_SECRET_KEY | Secret: encrypted, never shown again. | from the environment |
Cal.com bookings
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.
| Setting | What it does | Default |
|---|---|---|
| Webhook secretCAL_WEBHOOK_SECRET | At least 16 characters; any printable characters without spaces. Secret: encrypted, never shown again. | from the environment |
Razorpay payments (paid calls)
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.
| Setting | What it does | Default |
|---|---|---|
| Key IDRAZORPAY_KEY_ID | Public: sent to the visitor's browser to open Checkout. | from the environment |
| Key secretRAZORPAY_KEY_SECRET | Secret: encrypted, never shown again. | from the environment |
| Webhook secretRAZORPAY_WEBHOOK_SECRET | At least 12 printable characters, no spaces. Secret: encrypted, never shown again. | from the environment |
Image generation limits
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.
| Setting | What it does | Default |
|---|---|---|
| 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
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.
| Setting | What it does | Default |
|---|---|---|
| Video modelGEMINI_VIDEO_MODEL | The model code from ai.google.dev (Veo). Empty turns video generation off. | from the environment |
| Resolution (optional)GEMINI_VIDEO_RESOLUTION | Sent 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
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.
| Setting | What it does | Default |
|---|---|---|
| Public preview (% of the article)MEMBERS_PREVIEW_PERCENT | The cut is made between paragraphs, so the real share is the nearest whole block at or above this. | from the environment |
Video destinations
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.
| Setting | What it does | Default |
|---|---|---|
| Turn OFF this site's own media library (R2) as a destinationVIDEO_DEST_R2_DISABLED | It 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_TOKEN | A token with the Stream: Edit permission only. Secret: encrypted, never shown again. | from the environment |
| Stream customer codeCF_STREAM_CUSTOMER_CODE | Shown 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_SECRET | An 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_KEY | The Stream library's own key (Stream → library → API), not the account key. Secret: encrypted, never shown again. | from the environment |
Profile pictures
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.
| Setting | What it does | Default |
|---|---|---|
| Largest upload (bytes)AVATAR_MAX_BYTES | 2097152 = 2 MB | from the environment |
| Largest side (px)AVATAR_MAX_DIMENSION | — | from the environment |
| Smallest side (px)AVATAR_MIN_DIMENSION | — | from the environment |