[{"data":1,"prerenderedAt":258},["ShallowReactive",2],{"$figODgYpyPkTc24SgCkmns82TTwlgKB2vh8HxamhOEN4":3},{"newThing":4,"project":5,"cycle":8,"sections":22,"threads":249,"otherDocs":250,"documents":252,"images":255,"archiveItems":256,"links":257},null,{"id":6,"label":7,"liveBase":4},"www","www.qpoint.io",{"id":9,"num":10,"dir":11,"name":12,"title":13,"focus":14,"status":15,"statusNote":4,"created":16,"completed":4,"mode":4,"report":4,"recordless":17,"thumbnail":4,"imageCount":18,"artifactCount":19,"lastActivity":20,"hasPickup":17,"hasInitialPrompt":21},"c5",5,"c5.cookie-consent-audit","cookie-consent-audit","Cookie Consent Audit & Fix","Audit and fix cookie consent persistence so decisions survive deploys","active","2026-05-21",false,0,1,"2026-05-27",true,[23,46,56,122],{"key":24,"title":25,"empty":17,"ast":26},"why","Why",{"type":27,"children":28},"root",[29],{"type":30,"tag":31,"props":32,"children":33},"element","p",{},[34,37,44],{"type":35,"value":36},"text","Users are being re-prompted to accept cookies after every site release. The current implementation stores consent in ",{"type":30,"tag":38,"props":39,"children":41},"code",{"className":40},[],[42],{"type":35,"value":43},"localStorage",{"type":35,"value":45}," via a custom composable that has several reliability issues — no shared state, fragile storage, and no fallback mechanism.",{"key":47,"title":48,"empty":17,"ast":49},"objective","Objective",{"type":27,"children":50},[51],{"type":30,"tag":31,"props":52,"children":53},{},[54],{"type":35,"value":55},"Consent decisions persist reliably across deploys, browser restarts, and normal browsing conditions. The banner only re-appears when consent genuinely expires (1 year) or the user clears it manually.",{"key":57,"title":58,"empty":17,"ast":59},"scope","Scope",{"type":27,"children":60},[61],{"type":30,"tag":62,"props":63,"children":64},"ul",{},[65,112],{"type":30,"tag":66,"props":67,"children":68},"li",{},[69,75,77,83,85,91,92,98,99,105,106],{"type":30,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":35,"value":74},"In:",{"type":35,"value":76}," ",{"type":30,"tag":38,"props":78,"children":80},{"className":79},[],[81],{"type":35,"value":82},"useConsent.ts",{"type":35,"value":84},", ",{"type":30,"tag":38,"props":86,"children":88},{"className":87},[],[89],{"type":35,"value":90},"CookieConsentBanner.vue",{"type":35,"value":84},{"type":30,"tag":38,"props":93,"children":95},{"className":94},[],[96],{"type":35,"value":97},"useGTM.ts",{"type":35,"value":84},{"type":30,"tag":38,"props":100,"children":102},{"className":101},[],[103],{"type":35,"value":104},"gtm.client.ts",{"type":35,"value":84},{"type":30,"tag":38,"props":107,"children":109},{"className":108},[],[110],{"type":35,"value":111},"nuxt.config.ts",{"type":30,"tag":66,"props":113,"children":114},{},[115,120],{"type":30,"tag":70,"props":116,"children":117},{},[118],{"type":35,"value":119},"Out:",{"type":35,"value":121}," Third-party consent platforms (OneTrust, Cookiebot), GDPR granular category UI (future cycle)",{"key":123,"title":124,"empty":17,"ast":125},"key-changes","Key Changes",{"type":27,"children":126},[127],{"type":30,"tag":62,"props":128,"children":129},{},[130,170,183,193,206,218,231],{"type":30,"tag":66,"props":131,"children":132},{},[133,135,140,142,147,149,155,157,163,164],{"type":35,"value":134},"Rewrote ",{"type":30,"tag":38,"props":136,"children":138},{"className":137},[],[139],{"type":35,"value":82},{"type":35,"value":141},": replaced ",{"type":30,"tag":38,"props":143,"children":145},{"className":144},[],[146],{"type":35,"value":43},{"type":35,"value":148}," + ",{"type":30,"tag":38,"props":150,"children":152},{"className":151},[],[153],{"type":35,"value":154},"ref()",{"type":35,"value":156}," with ",{"type":30,"tag":38,"props":158,"children":160},{"className":159},[],[161],{"type":35,"value":162},"useCookie()",{"type":35,"value":148},{"type":30,"tag":38,"props":165,"children":167},{"className":166},[],[168],{"type":35,"value":169},"useState()",{"type":30,"tag":66,"props":171,"children":172},{},[173,175,181],{"type":35,"value":174},"Cookie ",{"type":30,"tag":38,"props":176,"children":178},{"className":177},[],[179],{"type":35,"value":180},"qpoint-consent",{"type":35,"value":182}," now persists consent (survives deploys, readable server-side)",{"type":30,"tag":66,"props":184,"children":185},{},[186,191],{"type":30,"tag":38,"props":187,"children":189},{"className":188},[],[190],{"type":35,"value":169},{"type":35,"value":192}," ensures all components share a single reactive state",{"type":30,"tag":66,"props":194,"children":195},{},[196,198,204],{"type":35,"value":197},"Added one-time migration: reads old ",{"type":30,"tag":38,"props":199,"children":201},{"className":200},[],[202],{"type":35,"value":203},"qpoint-cookie-consent",{"type":35,"value":205}," from localStorage, writes to cookie, deletes old key",{"type":30,"tag":66,"props":207,"children":208},{},[209,211,216],{"type":35,"value":210},"Simplified ",{"type":30,"tag":38,"props":212,"children":214},{"className":213},[],[215],{"type":35,"value":90},{"type":35,"value":217},": removed redundant local ref and watchEffect",{"type":30,"tag":66,"props":219,"children":220},{},[221,223,229],{"type":35,"value":222},"Updated ",{"type":30,"tag":38,"props":224,"children":226},{"className":225},[],[227],{"type":35,"value":228},"DevDebugger.vue",{"type":35,"value":230}," to read from cookie instead of localStorage",{"type":30,"tag":66,"props":232,"children":233},{},[234,236,242,244],{"type":35,"value":235},"Removed stale ",{"type":30,"tag":38,"props":237,"children":239},{"className":238},[],[240],{"type":35,"value":241},"consentGiven",{"type":35,"value":243}," reference from ",{"type":30,"tag":38,"props":245,"children":247},{"className":246},[],[248],{"type":35,"value":97},[],[251],"initial-prompt.md",[253],{"file":251,"title":254},"— Cookie Consent Audit",[],[],[],1794599416469]