Privacy
Ports and Prejudice collects only what it needs to run the public gallery, measure aggregate engagement, and review submitted ideas.
Public site analytics
The public site uses Google Analytics 4 (GA4) to understand traffic patterns and coarse engagement. GA4 loads only on public HTML pages when a measurement ID is configured for production. Analytics scripts do not run on admin pages, staging, or local development — those environments keepGA_MEASUREMENT_ID empty so no data is sent to Google.
GA4 receives automatic page views on each full page load. IP addresses are anonymised in the GA configuration. We do not use analytics to identify individual visitors, and custom events never include submitter names, email addresses, submission text, panel transcripts, or image alt text.
Custom events
When GA4 is enabled, the site may send the following custom events. Each event records only the parameters listed — no personal identifiers.
| Event | When it fires | Parameters |
|---|---|---|
reaction | A reaction is saved successfully | reaction_type, comic_slug |
submit_idea | A comic idea submission is accepted | Optional theme_slug only |
copy_link | Copy-link control used on a comic page | comic_slug |
share_comic | Native share sheet used for a comic | comic_slug |
random_comic | Random comic navigation followed | None |
collection_view | A curated collection page is viewed | collection_slug |
related_comic_click | A related comic link is clicked | source_slug, target_slug |
feed_click | An RSS or feed link is clicked | location (e.g. footer) |
panel_reader_started | Panel reader opened for a comic | comic_slug, optional panel indices |
panel_reader_completed | Final panel reached in the reader | comic_slug, optional panel indices |
panel_next_button | Next panel via button | comic_slug, optional panel indices |
panel_previous_button | Previous panel via button | comic_slug, optional panel indices |
panel_next_swipe | Next panel via swipe | comic_slug, optional panel indices |
panel_previous_swipe | Previous panel via swipe | comic_slug, optional panel indices |
panel_reader_exit_to_full_page | Reader closed to full comic page | comic_slug, optional panel indices |
panel_reader_reaction_clicked | Reaction control used inside the reader | comic_slug, optional panel indices |
Google processes analytics data under its own privacy policy. Editorial reports inside the admin area use separate D1 database aggregates (reaction counts, submission funnel statistics) and do not send that data to GA4.
Submissions
When you submit a comic idea, we store the text you provide and optional contact details if you choose to share them. Email is optional. Do not include classified, confidential, proprietary, personal, or sensitive operational information in submission text.
Submission content is reviewed privately in the admin queue. Public API error logs record route and status information only — not submission bodies, names, or email addresses.
Reactions
Anonymous reactions use a privacy-preserving fingerprint derived from a server secret, a coarse network prefix, browser metadata, and a time bucket. Raw IP addresses are not stored for reactions. Fingerprints expire automatically after the configured deduplication period.
Admin access
Administrative pages are protected by Cloudflare Access. Admin activity is limited to editorial staff. Submitter email addresses are shown only where needed for moderation and are not published.
Questions
For privacy questions or correction requests, see thecontact page.