Privacy notes

What an inquiry stores, where it is stored, when it is deleted, and what the privacy policy template says.

This page lists what goodnight-web stores for each inquiry, where it is stored, and when it is deleted. Use it when you adapt the privacy policy template to your company.

This page is not legal advice. Have a professional review your privacy policy before you publish your site.

Adapt the template

The starter has the template in Japanese and English:

  • src/content/pages/ja/privacy.md
  • src/content/pages/en/privacy.md

It uses the sample company's details, including the representative's name and the contact desk for requests to disclose, correct, or delete personal information.

  1. Replace the company details and the contact desk with your own.
  2. If you add a field that collects another kind of personal data, update the "Information we collect" section (The fields visitors fill in).
  3. If you change the retention period, update the days in "Retention and deletion". On the Workers paid plan, change the time until deletion takes full effect from 7 days to 30 (Deleted data).
  4. Have a professional review the policy.
  5. Remove the note at the top of the page.

What is stored

Each contact submission stores:

  • what the visitor typed
  • the time they agreed to the privacy policy
  • the page they sent it from
  • the user agent (browser and OS information)
  • the country that Cloudflare reports
  • a hash of the IP address (ip_hash), which cannot be turned back into the address

The raw IP address is not stored. See No raw IP addresses.

The fields visitors fill in

The email address is always collected. Your admins choose the other fields in the admin screen. The initial form (version 1) asks for name, company, phone number, category, and message (Customizing the contact form).

When you add a field that collects another kind of personal data, also update the "Information we collect" section of your privacy policy.

Retention

Inquiries older than the retention period (180 days by default) are deleted by a cleanup that runs at most once an hour during normal requests: a new inquiry, the admin list, or a sign-in attempt. So an inquiry is deleted some time after the period ends, not on the exact day, and on a site with no requests nothing is deleted until the next one. Suspected spam follows the same rule. The template says this. See Deleting old inquiries without Cron.

form_definitions.created_by keeps the email address of the admin who saved each form version. The table is append-only, so the address stays even after that admin is removed. It is your admin's address, not a visitor's.

Data is stored outside Japan

D1 lets you restrict where data is stored only to the EU, FedRAMP, or the US. You cannot pin a database to Japan (Cloudflare: D1 data location).

Japan's Act on the Protection of Personal Information requires a business that handles personal data abroad to understand the personal information rules of that country. So the template says:

  • that data may be stored on servers in other countries, such as the United States
  • who the storage provider is
  • that the company has checked the privacy rules of those countries

A comment in the template points to the country surveys published by the Personal Information Protection Commission, for when you describe those rules in detail.

Deleted data can be restored for a while

You delete inquiries one at a time with Delete on the inquiry's detail page in the admin screen. A dialog asks you to confirm first.

The Delete this inquiry? dialog with Cancel and Delete buttons.The Delete this inquiry? dialog with Cancel and Delete buttons.
The dialog says this cannot be undone, but for a while D1 Time Travel can still restore the whole database.

D1 Time Travel can restore a database to an earlier point in time: up to 7 days back on the Workers free plan, and up to 30 days on the paid plan (Cloudflare: Time Travel).

So a deleted inquiry is fully gone only after that period. The template follows the free plan and says that deletion takes full effect after up to 7 days. Change it to 30 if you use the paid plan.

Third parties

  • Turnstile: the contact form uses Cloudflare Turnstile. The template says so.
  • Fonts: no web fonts are loaded. The starter site, the admin screen, and this documentation site use the fonts already installed on the visitor's device (a system font stack). No font service receives your visitors' requests. See Styles and fonts.
  • Slack: if you turn on Slack notifications, a message contains only the site name, the path of the page the form was on, the time the inquiry was received, and a link to the admin screen. No personal data and no form field values are sent to Slack, whatever fields the form has.

On this page