From 602610b8064186fe7c25db35697b99e2f343da50 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Sun, 17 May 2026 08:48:09 -0700 Subject: [PATCH] Readme updates --- .github/images/cm.png | Bin 0 -> 38693 bytes README.md | 47 +++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 .github/images/cm.png diff --git a/.github/images/cm.png b/.github/images/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..eebe16bd96e9f0283fe3374fc649b59cee5e83b8 GIT binary patch literal 38693 zcmZ5`1yo$i()AGBf&`afgF6Iw7+ePl?h-V3g1bX-cLw($L4sRw2<`;;;I989_r3eS z^_|6H=1g~2@2;-eRbA(Vt0+mMqY$A0004AZ8IURf0A~vTz~mymg8t&*XJHBeBp=Cw z#MIqjjuyo}9k1sfxRqEHl@nm?(;xB%_feeU%Sw(m2RR(SPO1m>y> zixx_sF^GQ1_wI+U3&H?8bIvb}N#3+x?>dx}GgqfdKeQ?pV6&DO34g;VzTrRy0Okuy z1L(PI(o~137#MSkwDTR}6f?klICmH_}nUvhN})!a!nRta*?i;I^X zCgnqomoWi=bcTmv!<$48oGB9U(?zKU?|uRh0I+Q3zEBq|+(=Mw7HPi2u`J%QR+Z+0 zYNYQ<-CE@;t3YntOU|;`J5hDz4FIsWtSMx}Kv5_+959rT-8~451ptin3LO>ES-%~X zoHySkzE|Wr{^hs~U87~P7P8`uKw+}9x~g#B5874PStRi5i zrFdeF4FF);mR)lt&4H;6RAldPkc*!OU3gF60Kbk_)|Hli!i20lzkJr>_X9A)lZR&k zUA}Za1aWbjGhE5i_pM&+C8Qhj?ssVRJC2MTRh!K`z|BCaqeL=QAF!^n?-IGnM@<%1 z$5Q4RZ&Ebpit!Caaz=znbDo?m{$7KjAdo7hSX_mS9*}*NuW%@brNk@Vd{wQky}3;! zO~3W`OK#eqOIw_(xyDN=<{+``q(l|0a&qnEw9$*HHENZAnm4(#Pe>ya%$x6G*>Qm9{GR0VVK4$z-3t=gUcoX>3nfdv;hV ze@J->R9=(4&*L{Iu zY4=$Y_Bw%X*Yno`=~o4;alpY^*2EruYYk#>=xWDYeMUx0-|+sF#lue+0H8JBY+$%l z{Tvu~-XN{IjgFC<{%PgIuib)G`Khu;2$@&75)MdW{bq`_+?xXLuL8OVw-eTVlfA9CDv^KM9&M7M^lL7#ph_QmQ z1wajKrorU)e7uf1us4X*2ar@byCm2sXn&|G1_eY`ozIdZz_1YSw$HfpnZJxgMJ4iu zp`>UHb!`$}UWW~EJD^;)n zz->tfb&{wq(5_hz~++8Xm>0-K4km`pM>9EyqlwJ5fc;hKdo>| zcG5{@0Yf{ZWxiiMcyyowpT<{d9OC&jNHxk(7+Nw|9}u-&@}b7|Q^ZNoKVhWwphQ(e zWntz@zp8#g_-{)r6g%+0Lk>Q!j<8fY6_T~+{}tD=!eW)sDZ8)ks$R-aa&&tnsOjP1 zaUg{X0FZ+d>Sfn13pt_7(hxJ3rmf50)aG%5Vvx;%Q{wnwBwd(YtE#4=o$(&JM~6~S zZz2C5S-WBUPw$??p!6&QojzN>81hHV6)jjT9BLJ!pscpuvCe1)TzIa&Kb=788h@7h zz0Dppoe15_Fu5HlrUk|lO-cq|9grdh01#GE!4E;eOZ?NlhyaZHM+I^qs4CT>N+O`! z22Txv4lI?NUa2knGuL)?By=VtYb=c^aA8?42nPUQn+YTO3HHR|%FP8$U;dfKqb>iM z%K9h!^olA-k>JlH>pWLbAlTq3s992$LGleKt&PN1mRUg4^)UYo7#c38fKEmOHA#>< z#|JIx-_q)gkY|xU%|ju-rZxZI`Ui1YG((U5)*G-Ibc-mhZxy|_XG}|;0=~CrMV1Ug zp<`({5@;CEmkdfn(UC*`v$6j(`tHNp7cWZd*5|%ejZ@y}cN336rtRkcaNqy@-_iG0 zj<{@(7do5gd_&t7+Ef{9tAgT^9wndW$r_U$MqFU;J$UVmF3NNOGl?joteq6FcF$m)y8t+v}

aSp@aX*#G(WarAxb$u$TBH(78DQ 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 This extension is under development and will become available on [phpBB.com](https://phpbb.com) when it's ready +

+ +
+ +Simple, GDPR-ready privacy controls with category-based consent, ACP management tools, and extension-friendly integrations. + +## Features + +- Consent banner +- Preference modal +- Category-based controls +- Consent logging +- Version resets +- ACP configuration +- Extension integrations + +Supported categories: -It adds a consent banner, settings modal, and category-based controls, allowing visitors to accept all, reject all, or choose specific cookie types. A footer link lets users revisit and update their preferences at any time. +- Necessary +- Analytics +- Marketing +- Embedded media -The extension also provides an easy integration point for other phpBB extensions, enabling them to make their non-essential scripts compliant. +Necessary cookies stay enabled. The rest requires consent. -Out of the box, Consent Manager supports these categories: +## Built for phpBB admins -- Necessary (always on) -- Analytics (optional) -- Marketing (optional) -- Embedded media (optional) +Manage categories, integrations, consent resets, and audit logs directly from the ACP. -It also includes ACP settings for enabling categories, simple admin-managed integrations, detailed consent logging for audit and compliance purposes, and consent version resets to prompt users to review their choices when policies or integrations change. +- No external consent platforms +- No bloated configuration +- No enterprise dashboards -## For extension authors +## For phpBB extension developers -If your extension adds analytics, advertising, or other tracking or cookie-related JavaScript, you’ll want to integrate it with Consent Manager so those scripts only run after user consent is granted. +Consent Manager makes it easy for extension authors to ensure analytics, embeds, advertising, and other non-essential scripts only load after user consent has been granted. See the [Developer Documentation](DOCUMENTATION.md) for a complete guide.