Data-at-Rest Encryption
Encrypt integration credentials at rest with a dedicated DATA_ENCRYPTION_KEY, decoupled from SECRET_KEY_BASE. Covers enabling the key, migrating existing credentials, key backup, and rotation.
Protect your signup and booking forms from bots with Google reCAPTCHA v3, which checks visitors invisibly without a puzzle or checkbox.
Aktualisiert am 10. April 2026
You will need:
google.com/recaptcha/admin
tymeslot.yourdomain.com). reCAPTCHA tokens are bound to a domain and do not work on
localhost
By the end of this guide, invisible reCAPTCHA v3 checks every submission to your signup and booking forms and rejects likely bots.
reCAPTCHA v3 (also called "invisible CAPTCHA" or "score-based CAPTCHA") runs in the background. Google scores each submission from 0.0 (very likely a bot) to 1.0 (very likely human) based on behaviour signals, and Tymeslot rejects submissions below your minimum score. Real visitors never see a challenge.
Do not confuse it with reCAPTCHA v2 (the "I'm not a robot" checkbox, a different product) or hCaptcha (a different provider entirely). Tymeslot integrates with v3 only.
reCAPTCHA is optional and off by default. If Google's verification service cannot be reached, Tymeslot accepts the submission rather than lose a booking; its honeypot field and rate limits still apply. The next section helps you decide whether to turn reCAPTCHA on.
Turn reCAPTCHA on if you see either of the following:
A surge of accounts with random email patterns (e.g.,
xk3m9@mailinator.com
) points to automated account creation. Bots target open signup forms to harvest confirmed email addresses or abuse free accounts, and reCAPTCHA's scoring stops these scripts before they finish registering.
Meetings booked with fake names or throwaway addresses clutter your calendar and send confirmation emails to addresses no one reads. Booking forms are especially exposed because they need no login. With reCAPTCHA on the booking form, a low minimum score blocks scripted submissions without affecting real visitors.
reCAPTCHA does not cover the sign-in form, so it is not the defence against bots cycling through leaked username and password lists. Tymeslot handles that on its own: it rate-limits sign-in attempts and throttles an account after ten failed logins within an hour, whether or not reCAPTCHA is on.
You can skip reCAPTCHA on a small or private deployment where you share your scheduling link only with people you know and registration is closed.
tymeslot.yourdomain.com. Do not include
https://
or a trailing slash.
Add the following environment variables to your Tymeslot instance, then restart it. Both minimum scores default to 0.3 and the actions default to the values shown, so you can leave those lines out unless you want different values. Each of these lines you set fixes that setting, and the admin panel's Authentication tab shows it greyed out. Leave a line out to switch that check, or change that score, from the Authentication tab with no restart.
# reCAPTCHA v3 keys from google.com/recaptcha/admin
RECAPTCHA_SITE_KEY=6Le...your-site-key
RECAPTCHA_SECRET_KEY=6Le...your-secret-key
# Accepted hostname — only tokens generated on this domain are accepted.
# Prevents token replay attacks (see explanation below).
RECAPTCHA_EXPECTED_HOSTNAMES=tymeslot.yourdomain.com
# Protect the signup form
RECAPTCHA_SIGNUP_ENABLED=true
RECAPTCHA_SIGNUP_MIN_SCORE=0.5
RECAPTCHA_SIGNUP_ACTION=signup_form
# Protect the booking form
RECAPTCHA_BOOKING_ENABLED=true
RECAPTCHA_BOOKING_MIN_SCORE=0.3
RECAPTCHA_BOOKING_ACTION=booking_form
Why does
RECAPTCHA_EXPECTED_HOSTNAMES
matter?
Google reports the hostname each token was generated on, but Tymeslot only checks it when this variable is set. Without it, an attacker could generate a valid token on their own site and replay it against your instance. Set it to your exact domain (several domains can be comma-separated) and Tymeslot rejects any token generated elsewhere.
Google scores each interaction from 0.0 to 1.0, and Tymeslot blocks submissions that score below your minimum. Use this scale as a guide:
0.0
Very likely a bot: automated traffic with no human signals
0.3
Suspicious: the default, and the recommended minimum for booking forms
0.5
Neutral: recommended minimum for signup forms
0.7
Likely human: a confident interaction pattern
1.0
Very likely human: strong human interaction signals
Why different thresholds for signup and booking? People often reach a booking form straight from a scheduling link someone sent them. They are real, but Google may score them lower because they have no history with your site, so a lower minimum (0.3) avoids turning them away. Signup forms attract more determined bots and can use a higher minimum (0.5): a false positive only means the person tries again.
reCAPTCHA stays off unless you set its enabled flags and both keys, so leave the variables out of your local
.env
file and every form accepts submissions as normal. If you do set them locally, Google rejects tokens from
localhost
unless you add it to your site's domains.
google.com/recaptcha/admin, select your site, and view the
[Analytics]
tab to confirm the score appeared. This proves the whole flow works before real users depend on it.
Once reCAPTCHA is live, use Google's admin console to see how your real visitors score and decide whether to adjust your minimum scores:
google.com/recaptcha/admin
and select your site.
Lower
RECAPTCHA_BOOKING_MIN_SCORE
to 0.2
or 0.1
and watch the reCAPTCHA admin console to see whether the score distribution shifts. Users on mobile, or with some browser extensions, can score lower than expected.
Check that
RECAPTCHA_EXPECTED_HOSTNAMES
exactly matches your production domain, with no trailing slash and no
https://
prefix. Use the bare hostname as it appears in the browser address bar. Also confirm the action variables, if you set them, still match the defaults shown in Step 2.
Verify that the Site Key
in your environment variables matches the one shown in the reCAPTCHA admin console, and that the secret key is set too. Without both keys, Tymeslot skips verification. Also confirm that
RECAPTCHA_SIGNUP_ENABLED
or
RECAPTCHA_BOOKING_ENABLED
is set to true
(not 1
or yes).
That is expected. reCAPTCHA v3 is invisible: it runs in the background and never shows the user a challenge. If you suspect it is not running at all, open the reCAPTCHA admin console at google.com/recaptcha/admin, select your site, and check the
Analytics
tab. If no scores appear after submitting the form, verify that
RECAPTCHA_SITE_KEY
is correct and that your domain is registered under the site key settings.
Tymeslot uses reCAPTCHA v3 only. Users never see a checkbox or image puzzle. Google observes behaviour signals in the background and returns a score between 0.0 (likely a bot) and 1.0 (likely human), and Tymeslot rejects submissions that score below your minimum.
No. Tymeslot supports reCAPTCHA v3 scoring only, and a v2 site key will not work because the two versions use different APIs and token formats. When you create your site in the reCAPTCHA admin console, select Score based (v3).
In the Google reCAPTCHA admin console at google.com/recaptcha/admin, open your site's settings and locate the
Domains
section. Add your domain exactly as it appears in the browser address bar, for example
tymeslot.yourdomain.com
,
without the
https://
prefix or a trailing slash. Listing a domain also covers its subdomains.
reCAPTCHA v3 validates tokens against a registered domain list.
localhost
is not on that list by default. You can add it in the reCAPTCHA admin console under your site key's
Domains
settings. Alternatively, leave
localhost
unregistered and do not set the reCAPTCHA variables on your local instance, so reCAPTCHA stays off there.
https://
prefix)
RECAPTCHA_SITE_KEY
and
RECAPTCHA_SECRET_KEY
are set in environment variables
RECAPTCHA_EXPECTED_HOSTNAMES
is set to your exact production domain
Encrypt integration credentials at rest with a dedicated DATA_ENCRYPTION_KEY, decoupled from SECRET_KEY_BASE. Covers enabling the key, migrating existing credentials, key backup, and rotation.
Set up a Google OAuth app in Google Cloud Console. One app powers Google Login, Calendar sync, and Meet rooms for Tymeslot. Covers API enabling and consent screen.
Connect Tymeslot to Google Calendar. Busy, Tentative and Out of Office events all block bookings, so you are never double-booked, and every booking is added to your calendar.