Cookies
Farah here. Storage on Pen Swift stays minimal — a morning notebook, not a vendor hall.
Required memory keeps your banner answer — accept, reject, or customised. Cookie name sg_blog_consent; payload JSON {essential, functional, analytics, ts, v:1}; lifespan roughly 180 days; Path=/; SameSite=Lax; Secure on HTTPS. Key cookie_consent_v1 in localStorage duplicates the value if cookies are blocked.
Functional category equals map tiles. Fourteen pages embed one Queenstown neighbourhood frame each — broad area, not my unit. Allow functional → iframes load. Deny → placeholder card plus Load map control, same box size, no layout shift.
Analytics switch is inert here — no GA4, heatmaps, or ad pixels attach to it. Stays off.
Bottom strip leaves pages readable. Accept all turns maps on. Reject all hides them. Customise shows button toggles with aria-pressed — never form fields — and Save writes instantly.
Refresh, navigation, hard reload: choice should stick until expiry. Manage cookies below reopens controls after deciding.
Iframe loads may send technical identifiers to Google; I do not broker or resell that traffic. See /privacy.php for map notes.
Beyond maps: no video players, social timelines, or comment engines.
Keyboard users reach every control; Escape dismisses the sheet without trapping focus.
Banner motion honours reduced-motion settings when available.
Broken controls? [email protected] with browser details.
Audit — sg_blog_consent · choice JSON · ~6 months · essential. cookie_consent_v1 · mirror. Analytics executables: zero.
Audit line — sg_blog_consent stores JSON choices ~180 days; cookie_consent_v1 mirrors when cookies blocked; zero analytics executables ship.
Why mention cookies on a one-author site? Because remembering consent and loading maps still touches storage, and readers deserve clarity.
Essential storage always runs — it remembers banner decisions so the strip does not nag each visit inside the six-month window.
Functional storage governs fourteen single-map regions, each titled uniquely for screen readers.
Declining functional shows a card matching map height plus a Load map control that enables embeds for that session while updating stored consent.
Customise reveals button toggles with aria-pressed states; Save commits instantly without form submission.
Forced reload should not resurrect the banner inside the retention period — report failures if it does.
Manage cookies on this page reopens controls after a decision so functional can flip without hunting settings.
Keyboard paths reach every control; Enter and Space flip switches; Escape closes the sheet without trapping focus.
Banner motion honours prefers-reduced-motion when the browser exposes that preference.
Beyond maps, no video players, comment engines, social timelines, or heatmap scripts load.
sg_blog_consent value is URL-encoded JSON; localStorage mirror uses cookie_consent_v1 when cookies fail.
Version integer 1 inside JSON reserves room for future migrations without silent wipes.
SameSite=Lax plus Secure on HTTPS limits cross-site leakage; Path=/ covers the whole domain.
Analytics toggle adjusts stored preference only — no GA4, Meta, or ad network tags accompany it.
Privacy page points here for map mechanics; both documents name Google Maps explicitly.
Deploy checks: Accept persists, Reject persists, Customise partial save works, Manage reopens, maps obey choice.
Clearing site data manually will show the banner again — expected browser behaviour.
Broken banner buttons? Email [email protected] with browser name and cookie settings.
Auditor summary: one consent cookie, optional maps, no analytics executables, no visitor forms.
Map tiles originate from Google; blocking third-party cookies may still allow first-party consent storage.
Private browsing may shorten persistence — banner may return next session per browser design.
Screen magnifiers and high-contrast modes should remain usable because consent UI uses text buttons, not mystery icons.
Third-party cookie blocking in strict browsers may still permit first-party consent storage on penswift.life itself.
If you export a saved page, map placeholders will look empty offline — load maps once online after consent if needed.
Consent JSON stores ISO timestamps in SGT context at save time so you can audit when a choice was made.
Load map buttons on placeholders set functional true for the session and rewrite sg_blog_consent without reloading unrelated pages.
Cookie panel labels name Essential, Functional, and Analytics in that order on every page for predictable scanning.
Farah voice note: I would rather explain storage plainly than hide behind a single Accept wall.
Reject-all still allows essential consent memory so the banner does not loop endlessly while maps stay off.
Customise sheet never posts to a server — choices stay in your browser storage only.
This is a personal blog. Everything here reflects my own experiences, opinions, memories and impressions. Notes are personal reflections, not professional, medical, legal, financial or news-reporting advice. Where a note touches a serious event nearby, I only describe what I heard or saw from my end of the street — never as reporting. If I have got something wrong, please tell me and I will fix it.
Map waiting until functional cookies are allowed or you tap once below.
Approximate neighbourhood — not the flat door.