Site Settings

You're using a demo account — nothing you add, edit or delete here is actually saved.

Browser caching

Applies to every page on the site — public pages and every admin panel. Turn caching off while actively testing so a browser back/forward or reload never shows a stale page.

Maintenance mode

When closed, every visitor except the dev team (anyone logged into these admin tools) is redirected to a "back soon" page instead of the real site. Edit that page's message in Offline Message Editor.

Server load

System load average (1/5/15-minute), read directly from the host. Shared hosting often disables this — if so, this card will say so rather than show a wrong number.

Loading…

Testimonial

Shows or hides the testimonial quote section on the front page.

Ravn

The AI assistant visitors can ask about Henrik's background — the floating widget on the front page, plus its cost/abuse-protection limits, all in one place.

Loading…
Click to edit limits

Ravn keyword triggers

Extra context Ravn only pulls in when a visitor's question matches certain keywords — keeps ordinary questions cheap while letting Ravn answer deep-dive questions about specific parts of the site, or anything else you want it to know about only when asked.

Loading…
Click to edit

Database connection

Rewrites includes/hbr_config.php directly — tested live before anything is saved.

Loading…
Click to edit

robots.txt

Served at the site root, read by search engine crawlers.

Loading…
Click to edit

sitemap.xml

Served at the site root, linked from robots.txt.

Loading…
Click to edit

humans.txt

Served at the site root — the humanstxt.org convention for crediting who built the site. Keep "Last update" current when this changes.

Loading…
Click to edit

Site colors

Accent, background, and text colors for the public site — one independent value per theme, applied live without a redeploy.

Loading…
Click to edit

Placeholders

"[token]" text substitutions — type e.g. mailto:[hbr-email] into a Menu Editor link instead of the real address, so it's never typed or stored in plain text at that entry point.

Loading…
Click to edit

Placeholders

Each row is one "[token]" — type [token] instead of the real value anywhere below, so the real value is only ever typed here, once. Token letters/numbers/hyphens only, lowercased automatically.

Where a placeholder can currently be used:

  • Menu Editor — every text field on every item: the link/href, the title (desktop and mobile, both languages), and the description (desktop and mobile, both languages). Also works in a menu's own trigger label.
  • Skills Editor — every category name/description and every skill name/description, both languages.
  • Offline Message Editor — the heading and the WYSIWYG message body shown on the maintenance page.
  • CV page — the "Who is Henrik?" profile heading and body text specifically (not the rest of the CV yet).

How it behaves: if a placeholder's value looks like an email address (contains "@"), it's never written into the page as plain text at all — the real address only ever assembles in the visitor's browser via JavaScript, split and base64-encoded in the page source, the same anti-scraping trick this site's own hardcoded contact links already use. Any other kind of value (a phone number, a name, anything without "@") is substituted as plain text — useful for keeping one value consistent everywhere it's used, but not hidden from view.

Content Editor's general site text (headings, bio, CV career history, etc.) does not support placeholders yet — some of those strings are also reused inside <title> tags, meta tags, and structured data, where the email-hiding trick can't safely be inserted without breaking that markup. Ask for it to be added to a specific field if needed; it has to be checked field by field, not turned on everywhere at once.

Ravn keyword triggers

Comma-separated keyword phrases. If a visitor's question contains any of them (anywhere in the text, case-insensitive), the matching extra content is added to Ravn's context for that one question only.

Database connection

Ravn limits

Every request Ravn answers costs real API money — these limits are the cheapest-first defense against a runaway bill, checked in order before the Anthropic API is ever called.

The rules Ravn follows — scope, tone, the language-matching rule, and speaking about Henrik in the third person. Henrik's CV bio, work experience and skills are appended automatically below this and stay in sync with the CV on their own — this text is only the fixed instructions part.

How many questions a single IP address can ask within any rolling hour. Once hit, that visitor sees a "try again later" message instead of reaching Ravn.

How many questions a single IP address can ask within any rolling 24 hours. Catches a visitor who spreads requests out to dodge the hourly limit.

A hard stop on total answered questions per calendar day, across every visitor combined — protects against a runaway bill regardless of how traffic is distributed, independent of whatever the Anthropic dashboard itself shows.

The longest question Ravn accepts. Anything longer is rejected immediately, before it ever reaches the API — keeps a single oversized message from costing an outsized amount.

The floating chat icon is hidden when the page first loads and fades in after a random delay in this range, so it doesn't compete with the page for attention while it's still settling in.

to

If a visitor closes the chat, the icon itself hides too — reappearing on its own after this many seconds, rather than sitting on screen permanently. Resets on any page reload.

The chat offers itself automatically once the visitor has stopped scrolling for this long — resets every time they scroll again.

Extra delay after the icon first fades in before it's allowed to auto-open the chat at all — stops it from popping open the instant it appears.

Not editable here — lives in includes/hbr_config.php alongside every other credential on this site, and Ravn auto-switches its own widget off if the account runs out of credit.

Loading…

Known scripted clients and scanning tools (curl, headless browsers, sqlmap, Nikto, and similar) are refused before ever costing an API call — this list isn't editable here; see RAVN_BLOCKED_UA_PATTERN in ravn.php if it ever needs to change.

Site colors

Dark theme

Preview text

Light theme

Preview text