Tested in Blink and WebKit.

Which browsers, and when · How all of this works

geodzkdocs

reading plane · What this is, what it keeps, and how to drive it without a browser.

Operating an instance

For whoever runs the box: invitations, ceilings, moderation, and what it costs.

For whoever runs the box. The admin plane answers on its own host and only to an account with the admin role; everywhere else those paths return 404.

Accounts and invitations

  • There is no mail service attached and no email address stored, so an invitation is delivered by a person: pasted into a message, read down a phone line, written on paper.
  • The dashboard composes that message for you and lets you edit it before sending. Its wording is deliberate — an account invitation and a credential phish have the same shape, so the draft avoids urgency, secrecy and the security-noun cluster that filters score.
  • An invitation works once and expires. Revoking an unused one is immediate.
  • Sign-up is invitation-only or closed. There is no third mode.

The deployment scope

Ceilings and switches, changed from the admin plane rather than by editing a file and restarting. Lowering a ceiling below current usage warns rather than refusing — it stops new growth without deleting anybody's work.

CeilingDefaultSet by
Links per account500dashboard, and per account
Groups per account25dashboard, and per account
Links shown on one collection500environment
Live API keys per account20environment
Keys an account may ever mint100environment
Passkeys per account10environment
Accounts on the instance100dashboard
Links on the instance50,000dashboard
Masked links on the instance5,000environment
Target URL length2,048 charactersenvironment
Code length5 random, up to 64 chosenenvironment
Session lifetime14 daysenvironment
Invitation lifetime14 daysper invitation
Wait between username changes90 daysenvironment
Shortest password12 charactersenvironment

Moderation, and codes

  • Disabling an ordinary link is immediate, and a moderated link never follows a fallback — a fallback would be the owner routing around the decision.
  • A masked link can be turned off by its code, and that is all: you cannot see where it goes or who made it, because this service holds neither. Both of its addresses then answer the same 404 as a code never issued. A strict link's page is cacheable, so a copy already at the edge can keep resolving for up to 30 seconds after it is turned off. See Masked links.
  • Retired codes are listed, and can be released one at a time. Releasing a code that was printed on something is the one irreversible-feeling action here, so it asks.
  • Account holders can ask for a retired code, and those requests queue up with the answers beside them.

What the box is doing

  • The metrics panel is about the machine, not about visitors: rows, size, request counts, what this instance costs to run.
  • The audit log records administrative action. Purging it keeps the record of the purge.
  • Every audited write on this service has a number on it. That is the rule the rate limits come from, and it was learnt the hard way four times.

Rate limits as they are configured now

WhatLimitCounted per
Link creation20 / 60sper account
Group creation10 / 60sper account
Edits to links and groups120 / 300sper account
Credential writes — keys, passkeys, two-factor10 / 300sper account
QR and print renders120 / 60sper account
Sign-in, invitations, two-factor answers10 / 300sper username or token
The same, instance-wide120 / 60sone bucket
Username availability checks60 / 60sper account
Published collection renders240 / 60sper slug
The same, instance-wide3000 / 60sone bucket
Notes to the operator3 / 3600sper account
Masked-link writes — create, retarget, delete, index saves20 / 60sper account
The same, instance-wide — index saves are not counted here600 / 60sone bucket
Request body64 KBper request, declared or not
Following a short linknever limited—

Running your own

  • One Python process, one SQLite file. No ORM, no template engine, no build step, no CDN, and no outbound HTTP requests at all.
  • The service binds to loopback; a tunnel is the only ingress. That is what lets the app tell somebody on the box from somebody on the internet.
  • The whole interface is generated in Python and delivered inline in one response, which is what makes the content-security policy as tight as it is: nothing may be fetched, embedded or executed from anywhere.
  • Dependencies are pinned by version and hash, and the list is short enough to read in a minute.

Back to top

The same page as text, for a program: GET https://geodzk.com/api/docs/operating — needs a key holding docs:read.

Sign in · geodzk.com