Privacy Policy
Last Updated: 2026-09-16
Cookie Usage
We use the following cookies:
1. Essential Cookies:
- cookie-consent-given: Records that you have made a choice
- analytics-enabled, marketing-enabled, functional-enabled: Store your choices
- Duration: 1 year
- Purpose: Remember your consent choices
2. Analytics Cookies (Only if consented):
- _ga, _ga_*: Google Analytics cookies
- Duration: 2 years
- Purpose: Site usage statistics
- Data collected: Page views, article views and reading events, subscription request and confirmation events, return visits, and page performance
- Cookie identifiers distinguish browsers and sessions
- A local browser timestamp records the last consented visit to recognize a return after at least 30 minutes
- These reading events do not include email addresses, subscription tokens, URL queries, or URL fragments
3. Sign-in and Security Cookies:
- Keep signed-in sessions active and help protect form submissions
- Required for the features that use them
4. Marketing Cookies (Only if consented):
- Currently not in use
- Included in preferences for future use
See the Cookie Policy for cookie settings and browser controls.
Contact Submissions
When you submit the contact form, we collect:
Fields Collected:
- Name (required)
- Email address (required)
- Message content
Storage and Processing:
- Messages are delivered to kevin@kevinbytes.com through Resend
- Security logs may include your email address and request metadata
- Rate limiting uses your email address and IP address in Redis
Retention:
- Contact messages are kept as email correspondence
- Contact kevin@kevinbytes.com to request deletion
- Rate-limiting counters expire separately from email and security records
Purpose:
- To respond to your inquiry
- To prevent spam and abuse via rate limiting
- No marketing use without explicit consent
Newsletter Signups
When you subscribe to updates, we collect:
Fields Collected:
- Email address (required)
- Signup page or form location
- IP address and user agent for abuse prevention
Storage and Processing:
- Newsletter signups are stored in a PostgreSQL database hosted by Neon
- Resend delivers a confirmation email before a new subscription becomes active, followed by a welcome email
- Confirmation links expire after 24 hours; only token hashes are stored in the database
- A notification is sent to kevin@kevinbytes.com after confirmation
- Rate limiting data is temporarily stored in Redis
Retention:
- Unsubscribing marks your record as unsubscribed so it is excluded from future research updates
- Signup records, including unconfirmed requests and unsubscribe status, remain until deletion is requested
- Every research email includes an unsubscribe link; you can also contact kevin@kevinbytes.com
- Rate-limiting counters expire separately from signup and security records
Purpose:
- To send research notes and site updates
- To prevent spam and abuse via rate limiting
- To maintain an accurate subscriber list
Data Storage
Data stored by the site includes:
- Consent preferences in browser storage
- Newsletter signup records in PostgreSQL
- Contact messages delivered by email
- Request metadata and security logs, which may include IP addresses, user agents, timestamps, and requested paths
- Temporary rate-limiting counters for forms and sign-in attempts
Your Rights
You have the right to:
- Access your data
- Delete your data
- Withdraw consent
- Change preferences
- Export your data
Contact kevin@kevinbytes.com for data requests.
Third-Party Services
We use:
- Google Analytics and Vercel Analytics (site usage analytics, enabled only with analytics consent)
- Neon (PostgreSQL hosting for form submissions and security logs)
- Vercel (for hosting and edge functions)
- Resend (for email delivery)
- Upstash (for rate limiting via Redis)
- OpenRouter (when you request AI label suggestions)
- Cloudflare R2 (for voice recordings you choose to upload)
Updates
Changes to this policy are published here with an updated date.