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.

EventWhen it firesParameters
reactionA reaction is saved successfullyreaction_type, comic_slug
submit_ideaA comic idea submission is acceptedOptional theme_slug only
copy_linkCopy-link control used on a comic pagecomic_slug
share_comicNative share sheet used for a comiccomic_slug
random_comicRandom comic navigation followedNone
collection_viewA curated collection page is viewedcollection_slug
related_comic_clickA related comic link is clickedsource_slug, target_slug
feed_clickAn RSS or feed link is clickedlocation (e.g. footer)
panel_reader_startedPanel reader opened for a comiccomic_slug, optional panel indices
panel_reader_completedFinal panel reached in the readercomic_slug, optional panel indices
panel_next_buttonNext panel via buttoncomic_slug, optional panel indices
panel_previous_buttonPrevious panel via buttoncomic_slug, optional panel indices
panel_next_swipeNext panel via swipecomic_slug, optional panel indices
panel_previous_swipePrevious panel via swipecomic_slug, optional panel indices
panel_reader_exit_to_full_pageReader closed to full comic pagecomic_slug, optional panel indices
panel_reader_reaction_clickedReaction control used inside the readercomic_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.