Cookies

Jun writing. Cookies on Word Craft are simple on purpose: this is a late-night notebook, not a shop with seventeen vendors.

Essential storage records whether you accepted, rejected or customised categories. Name: sg_blog_consent. Value: JSON with essential true, functional and analytics booleans, ISO timestamp, version 1. Max-Age about 15552000 seconds (180 days), Path=/, SameSite=Lax, Secure on HTTPS. localStorage key cookie_consent_v1 mirrors the value when cookies are blocked.

Functional means Google Maps. Thirteen content pages each carry one neighbourhood iframe for Bukit Panjang / Petir / Zhenghua — approximate centre, not my unit number. Accept functional → maps render. Reject → placeholder card, Load map button, same dimensions, no layout jump.

Analytics toggle exists but nothing listens to it here. No GA4, no heatmaps, no ad tags. Default off.

The strip anchors to the bottom; pages remain readable while it is visible. Accept all enables maps. Reject all hides them. Customise exposes switches — buttons with aria-pressed, never form fields — and Save choices persists immediately.

Reload, navigate, hard refresh: your decision should persist until expiry. Manage cookies on this page reopens the panel even after a decision, so you can flip functional on or off and see maps appear or revert to placeholders.

Google may process technical data when an iframe loads. I do not sell or repackage that data. Maps disclosure also appears on /privacy.php.

No other embeds: no video, no social widgets, no comment systems.

Keyboard: full reachability, Escape closes the sheet, no focus trap.

Motion: banner slide respects reduced-motion preferences.

Write [email protected] if something misfires. Privacy: /privacy.php.

Table — sg_blog_consent · consent state · ~6 months · essential. cookie_consent_v1 · mirror · same intent. Analytics scripts: none installed.

Table — sg_blog_consent · consent state · ~6 months · essential. cookie_consent_v1 · mirror · same intent. Analytics scripts: none installed.

Why document cookies on a one-person blog? Because maps and consent memory are still storage, and readers deserve plain words about them.

Essential category always active. It stores your banner decision so the strip does not return on every page load within the six-month window.

Functional category controls Google Maps iframes on thirteen content pages. Each page has exactly one map region with a unique title attribute.

Reject functional and you will see a card the same height as the map with a Load map button. One tap enables the embed for that session and updates stored consent.

Customise opens an inline panel with switches implemented as buttons with aria-pressed. Save choices writes immediately without a form post.

Hard refresh should not resurrect the banner within the retention window. If it does, tell me — that is a fault, not a feature.

Manage cookies below reopens the panel even after a decision so you can flip functional on or off and watch maps appear or revert to placeholders.

Keyboard users can Tab to every control, activate switches with Enter or Space, and close the panel with Escape without focus traps.

Motion: banner slide respects prefers-reduced-motion where supported. No other animation depends on consent.

No other third-party embeds load — no video players, no comment plugins, no social feeds, no heatmaps.

Cookie name sg_blog_consent holds URL-encoded JSON. Mirror key cookie_consent_v1 in localStorage when cookies are blocked.

Version field in the JSON is 1 so future builds can migrate without silently resetting reader choices.

SameSite=Lax and Secure on HTTPS reduce cross-site leakage. Path is / for the whole site.

Analytics toggle changes stored preference only. No GA4, no Meta pixels, no ad tags are installed.

Privacy.php contains a short pointer here for map specifics. Both pages mention Google Maps by name.

Testing checklist for deploy: Accept all persists, Reject all persists, Customise saves partial, Manage reopens, maps respect choice.

If you clear site data manually, the banner will return — that is expected browser behaviour, not a bug.

Contact [email protected] if the banner ignores clicks. Include browser name and whether cookies are blocked.

Summary for auditors: one consent cookie, optional functional maps, no analytics scripts, no visitor message forms.

Functional maps load from Google domains; blocking third-party cookies may still allow essential consent storage on this domain.

If your browser is in private mode, retention may shorten — the banner may reappear next session by design of the browser.

This notebook belongs to one person. What you read here is drawn from evenings, walks and ordinary rooms — not from a newsroom or a consultancy. These lines are impressions, not instruction. When a note mentions something serious that happened within earshot, I stay with what reached me and what I still cannot verify. Tell me if a detail is wrong; I keep a corrections page for exactly that.

This notebook belongs to one person. What you read here is drawn from evenings, walks and ordinary rooms — not from a newsroom or a consultancy. These lines are impressions, not instruction. When a note mentions something serious that happened within earshot, I stay with what reached me and what I still cannot verify. Tell me if a detail is wrong; I keep a corrections page for exactly that.

Approximate neighbourhood — not the flat door.

Map waiting until functional cookies are allowed or you tap once below.