From ce00df24eb390087b2a241a9c287db21f91568de Mon Sep 17 00:00:00 2001 From: Elvis020 Date: Sun, 1 Nov 2026 23:51:08 +0000 Subject: [PATCH] feat(devcon26): show live conference programme - Load the saved public programme and display sessions, panel speakers, and speaker-free rows with distinct empty and unavailable states. - Replace speaker placeholders with a directory deduplicated by public speaker ID and keep names visible when portraits fail. - Relay programme requests from website-owned Cloudflare previews through a fixed, bounded, credential-free Worker endpoint while retaining direct requests elsewhere. - Add regression coverage, documentation, and synthetic desktop and mobile review screenshots. Verification: pnpm build, programme and relay regression checks passed; desktop and mobile fixture previews inspected. --- docs/changelog.md | 4 + docs/devcon26-homepage.md | 4 + .../devcon26/programme-desktop.webp | Bin 0 -> 99450 bytes .../devcon26/programme-mobile.webp | Bin 0 -> 26744 bytes package.json | 2 +- scripts/check-devcon26-programme-relay.mjs | 66 ++++ scripts/check-devcon26-programme.mjs | 162 ++++++++++ src/lib/devcon26-programme.ts | 177 +++++++++++ src/pages/devcon26/index.astro | 285 +++++++----------- src/worker.ts | 70 +++++ wrangler.jsonc | 1 + 11 files changed, 586 insertions(+), 185 deletions(-) create mode 100644 docs/screenshots/devcon26/programme-desktop.webp create mode 100644 docs/screenshots/devcon26/programme-mobile.webp create mode 100644 scripts/check-devcon26-programme-relay.mjs create mode 100644 scripts/check-devcon26-programme.mjs create mode 100644 src/lib/devcon26-programme.ts diff --git a/docs/changelog.md b/docs/changelog.md index 2f4d511..79978cc 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 2026-11-01 — Live DevCon26 programme + +- Show the saved EMS programme and linked speakers on the DevCon26 page, including distinct empty and unavailable states. Route website-owned Cloudflare previews through a bounded public programme relay. + ## 2026-10-31 — Mobile DevCon26 hero - Keep the theme on two centred lines with a compact centred tagline, tighter introduction spacing and a centred content-sized ticket button on mobile. Centre the date and balance the wrapped venue text beneath it. Preserve the exact approved wording and desktop layout. diff --git a/docs/devcon26-homepage.md b/docs/devcon26-homepage.md index eea7a6c..039a057 100644 --- a/docs/devcon26-homepage.md +++ b/docs/devcon26-homepage.md @@ -86,3 +86,7 @@ The navbar logo links to `/devcon26/` on all DevCon26 routes, and to `/` elsewhe The conference landing page places “Back to DevCongress” beside the hero conference label and year, wrapping on narrow screens. The return link appears only on `/devcon26/`, not its sub-routes. Shared header dividers use a light single-pixel rule. The hero retains its wide top image and two smaller images beneath. Its rotation includes the original sixteen photos plus six selected April/May photos; three initial images load, with subsequent images prepared one at a time. Original source files remain untouched. + +## Live programme (2026-11-01) + +The Inside the day section loads the saved public programme from EMS in the browser using `GET /api/public/annual-conference/2026/programme`, so saves appear on the next page load without rebuilding the static site. `PUBLIC_DEVCON26_API_ORIGIN` selects the EMS origin; the production default is `https://em.devcongress.org`. A different origin must also be allowed by the site CSP and EMS CORS policy. Requests omit credentials and bypass the browser cache. Website-owned Cloudflare preview hosts use a same-origin, GET-only Worker relay to the fixed public EMS programme endpoint; production and other hosts request EMS directly. The relay forwards no client headers or query, rejects redirects and limits the response to 1 MiB. Rows show their time, title, overview and any speaker names and photos. The speakers section uses the same response, listing each linked speaker once by public speaker ID, with separate empty and unavailable messages. Broken photos are removed while names remain visible. Empty programmes and unavailable or invalid responses have distinct messages; without JavaScript the page explains how to view the programme. The public API controls which fields and rows are exposed. diff --git a/docs/screenshots/devcon26/programme-desktop.webp b/docs/screenshots/devcon26/programme-desktop.webp new file mode 100644 index 0000000000000000000000000000000000000000..224516cf0f91bfa945a42ef0965ce244ceaaa4ee GIT binary patch literal 99450 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 a1+Q!q&NUBQdUcBU-{-Xk|DEFhtNDKgtLXy( literal 0 HcmV?d00001 diff --git a/docs/screenshots/devcon26/programme-mobile.webp b/docs/screenshots/devcon26/programme-mobile.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b14ec7a19908fd14f65e75056879594deb3384d GIT binary patch literal 26744 zcmY)UV~{R9(=`l_ZQHhO+qP}n_RKNX9^2Ss+qP|MkH7P}-{;SlAE{I&>FP?atd&l+ zinN4;lNAt%RkmO+Oc(9k--E zl>d59=~cfmKlh#k`VAWW&b|WQ_8$6Pe%pMoel5R;-UL7Iet(mHxqm8uY`-9H4c`%e ze}e=^e{+5le%?P@e{g?)zxrANX9Ih_exDsbBR?760uO%K1N!??0}XzYzn8wwZX_4? z9{#)tP6U>H7rqw0kG=hV7@hlzTF>~^9Gt7xM?CZw#jY>c?mpGyzG(Zv%#Cdu5SqqY?xNhV6Ad5 z?!vBO2}SpCFi_${!A~$R8ckQr{1Iy3srE7jwPxRK5O<6`XxE6==kw3Upjl+q3lh)ixxHf%`xi z3bf5pM!)sO{fKa%l87D02jjn!4kgnMhgBRh+2RdS(NrDO<*!3Lkoq_xL^|FG#xaEb zZvh3F8a6XY!8D!+0=5^;L$M+npKJy33JLP*EPOZmAGT$aVUVs|!-!FLs%4Tk)8ayp z?XEgCMLCNYP0Xdz{I7knZC{ejN5;tV($vu@RR^$IrWOpr0phWM{FNem>`$rxF9g~9 ziJ27LbpHUAZ5ztwhr&bj=JeeV(Q;Hk4I1)4Ju>`b{4cLBqoWnL@kTiglRSCSkJ~$? zEk3gpe3O}0U5s$3N-ilOPxv4%u~s%9A2)q#;VZpB;r=-Lc)3_?@WEgTd6CGaMI$M( z(93_%c5<0({+|2~F&>)cK$@ro$H8LnArE08@X2JSH@^v33&XUU>nQXU1tO+HTjq!2 z!oh7F1_K`1Y!CmzCH(iljb4`A8tR|sz-bf&XM0(Fa>6Vn-S)@duh|%#B1ev32x*IE zey)S<9FKci2iDuUf%8@sw+|!*6H#qXTmKU6g;)C$*p@;>8|dT+H*O^Y$4&B%RD&j- zRrHQF<7^!X914C8wB${)-h#!eNaT>Mp@12p(#`r84PU(Z(7^r|f`guUrP`$*^FpP& z`7OaI80xTum}v_5m%WMFEPoYnG@<>LBqu)Ht3H4(%f|pkPPh=dKw8Q;%paKvGjPRH zv&N4K{9>i3+Ady@q2XFFYw3_Qlg-?HLK>NuGlc+msK{ucq`93|hLxaTf9N5SeQ1aT zxkFq$G6>lW^n7wYHobIS?=vVc@A~-Ei@$B%uEzu&SOQO*5JK=IM%C>~|5nuP;VX(N zlZ57|EWhhqAD#6va9UY9W}})v`cxYd8$c-$ije@C9VtX4Hz3lI^TFmpdq&dd8V18Z zU9#(_q%&rb$XjcLg`qDGy^+}|9pA%|iA4|Ak53m+7_8Pb4lAh6b^iq3{JY~LCWt$n z8ocgMXy7tqnmH)48kaMJ%J_g2Bc*MaA-*klC_37iQ_s;k%XMcNl}#`3FdllWN;s%N z^g(6phObOH+=rxndCcAy1Qmc8D{Lo0L}`Tq|1*}Xoxn%SOgF$rb=>&xWY zrvKxD$~-v0ylnyT{^_gP3w))_G%T34n{!4D5#kJh$@&0_0+u4hth8$Jk; z1-WX#PmYv)?jfp;3UofHOcb!R_KfpF!1iE|9A^#AK`-U?G+x-`!2?J7pcf%WAuV4N zoW&qWxnK8Sc;{|Lgn@nR_1s zwR+DA4vd3fUH-(E98ZO8-Nrkw#s^q3e~ZQEi!EOA^cn3jMmmh~cnHe-JuyftbNH%VaSR(m2>T&)pS`rrIhh5z1zxxq*`Fa%m z^Ek(;>hXr1lP!DIl5~`n)}BNrJg`S4qQ!*7;ESRMXSBsAB+DZCXbvj#G2T&gCoi-o zBSE{6xI;P8SDI>TC3!dnIDEsDb%o_!;#GA2J#x(VNv|h}>Xsc~jW&ep3MQCBBMiv! zSeD~$SBwoFFFuMI)hwJj;ie8|}}>KTSsZd~=gD79;-$M7G(3><0M# zF)N)ZqHG8~;zQpeA5l4*{Mvdpm5YtHlx-XtB;58uF@lG0VY6@5u`Z#;0B_TDCbf5Q zJ~^}@BR2(%Y@BsIVdejUb(XUApBAi(46oQip1u-E2q=t#)MLR!G&+Qwl<%&A4a|+> zE6;f`P9kam@`ZuX98ZvMZFS<TOSrjPp%0&hq)r3~o0R^h*Q0dZvYqPQK=5~TSYh~?p!>5R zL-I#_l-2RvA!{OazN7J%e8!{cYKaa%Z=c*$GKTEI5r-lK#15W&G#r|RP>%2mL7u## zJ+s91!A1d}nGSALDA3wqPS{+4DcrltA0DG_3%@^)$_9 z5MxIu+x%&`BvXCj2NB@=K+7dRZh0g*vadIn?!4o@+EJUa%>5FPC4`oCXF&)7I5Lk$ zP5NmT3yPmquQ&!RH^)%tVwQ4r*vSJCM8_FkUCzVt1nb-TSbt*(+;&^gBV?z8wVbMqg7wRhX0Nqbn=^x)gx1sj3 zQ%-nYg^;7?p7LhLLlKgxOg7Ht`eTZU8qFmq5cAX?kB9E;pe`R}OPq6Q{&=Pz0zA0H zLw0($Il;P{4)Iu4e?xEsc*Tis;kl@7vYLk)j6>0;rnSQEQJNh7GK1;)qF~o?9q(GV zuE33yX^FQ#>Ee$HoE+r#sE?~8=#vS54`R-OsibH*xI-hwxCYxa@q%d4X5Pvpsb(sc zvNx#k{hO-$5LuM}I@0N^yNr!lyIT~^ZmR+cRJ1Fv?*V-aOB?dpP_XwD;WZ58lyK@l0>Mcn15c3@4l< zHR^%+xm~=0p$Y@RdtoYD9W_ez)57pcgH`v>H{usciPSxjQ>pS7-7?Yx{zYOpovx}Q z=rMaS`#LDxy+=#2C0IsBNxN?Hc)vggvU{T&(*zEWkRuVU+*s!_v>$roC55A$roN7D zT&a}pPdPKJH|}n9kU?st;-d|^SrRwFcBr9(^m-{63WZ#h#1^V3JBTlAFon*W@xNgS zZpih#UDl-Pu^Dl?!o^K2&2UH#h^<-nJ<-!^PDp2CNI8PB^H#j@H=47Gs)(9tU5%fl zhcpv;z{`%%9CAsZMaoFoj4s2Yw zk#Ikm{0=*BeAU(9x(Vzqi0cC18d~?l3?T8%CDs*hAN?}Fox;Qbh)J(C2KY?>}481rk$%&#ga71&-^a%5fBmpCO!3fqAB z%o;3blfw*c|3+BTjR9l1HejYS1F^6HHP13!wx$ZO8fjp#xsAG#Uu;N!ri?IApO0HY zqMR59wlv+6t3k4$kh*X`Pq56oyJso^t(>IAZsW(erA3z9(ta?w`0*~rE>$~Je}rjL_G^GsyiUp@F{nfPLXJVu=x-SJox+Mc1~Y8 zWW;1DfM;M5la*p4L!=fToxt9hHQdpK=GFU^kSYu#1_`RmOaRTtrwv@3H#Noa8G@Cl0T9>Aq~E`5A>(Ko zS|?ElF*ureSR5*Ng_ncE%hr-9Bzo7=ND86zUR(qHowstK>UhQ48D>W8B8H6E_D_s{LAn>60)a42{ml;$<2cX6A=n*kAqdTbxhXb__3pY$aMEsHYpQ2hx zt>xr~K&l~TS{>PxHS{p;rMUd&ED`)27wN(mHNUwPe{9rbqpg#?JIBd6kw-%14x5oK zajGA|4k?IRyCx#&nM{PLP1A7AxfPH!xYn|@t+ycc1Z6$!n%o&)KoVF-y~DM_JO0_C z#|EptEvbf)NASz+7lGmZbhS6C3Dq^lywMm}+C2pD`Ix5Ntl;E&tKqe57z?eCJtoJv zzzXgRHt17?Wz6~{Ezckz?HjVK=c59^u{N`PEM^FEH? z`&r^Ax6AMWUJ&JICoG}d7S6Jyceq}tu#W6STD|J)3aeS~ktAYk6)59n*sc+QsJ*DF zXcG>39uu?t?o+R;IZ^SwLfU>(@?kh%9+d`)bMWWQ#llp7qL1AI$(E6e0J-k{oSA$= zp;}eLwO;*UxjOq*7&IP_=ME9xdzTqH0;E^27IDurP2|hUkQ|SzfM88A89G`8eXl}~ zsvg1Ovwu<3BE}4Pc69vyKl9y^Zv%Vl>jT6^+60}y>#O}R!Nk$6RfMp;@>sAfQEd}9 zgwV>|VhtAg2+#*>PH3y#I$skmAf{A^r$XxVsItXfcBK5Cp?0zu0BA=6~8Q?@#pfg;||Fkf`{}1jSj*scwOMWf^ZmQr9kCrA04{BIGV93S+=8Q79nEdMOFRnd97DEKJke z9g}Ll1eRW+a$@gXXcyPgE|Ll{(Tc#*tgyO`%;9t@U1#BQ8EVW@n7Az(n3lrqfM}vW zts4_fDCQj}9yz6JR#+6p$M^!#EWtJo@@%a(S&Ou&~7WDr^!2E zE6gB{)b{`w^-u8B#Iz%!w?T-4?9P8x@>eVB!=or{1=h{Mt^E1A#@E|kf&(xc!|o&k*3B=`F*^Ie3%M#ek-K@N`rs^h)|M7@GZh3L1DmdP zm`Z&Fv!z#l=W_*P-9E`P41g@1ObBILl`ORLY6NO%BRV)d2e3B65^}lxJ35R{N;>7UBkk8-um3 zi>mcgOm{d_J;WZue1_?>?3OxT~4lr z<<=&FJ(2>}XR7I7cO?91l1V#H15w=8eF^XL>c}(74|HHDn;NUoFqo6(&*?7~Pz#Rd z0+4~D*q8Ft1Hmjrf4N7kaJ@MWz=Qq&3~+v=`0mr-9B=Ijm6yraPc0Zf;SzMC4!s7( zn6(rq51Lw9WXZ_nYz+#09lSWVn)C7w^@MCS?-t_XoRG7hZunf(xK-bM$(O4=!jOA` zy^OnvBBcg@DHT|hyRTkVkx3qbsm#MiyBp1%1nRkzU6;PmR$5oKm zU#d;Jic=&V2Te!OlAcZZi9&?Z`6GU{aQ-d%(#LDu59^)aYg?e|SNSRxp(@rcJ@2>2 zFrJs0bG%;3lqLXmP!XYM6m)IQ+YS9HOWDUjNJXqt)fcu%Ckt~5Y!eqa zM0=E-%2dCB4Y)1$iuxSQHQWSu(nZI+A5DS5zk3ld3Nz%>1yIONFaLwT_9$e2QgBQ|z2-EECvfU1Mty?uxAfEsDuJ?I2?xs(1v*DSvZ9a`#H|==^Q6az^7+)er5N^fU{LU#@!J#Q!)z{pABIGv-5JoOhw5c9+RP6x(FGhC z4OX}%#Va4cu{NMs8KEn2R5_jrj@hk0<=LBW$b?r2%^(sW0bm_{>Zridi-JgAi!t~R zQT0)rQ|?040`6)T6CfIAvoYYqe~&#L7blyd_j}4f2j!X7KjqKgpUtL^|-J#Cx~ZZv$?cl zxWj1&-|Q|Zpl*9Q&9`cO%}TL{q*$#PqoYUAjM)6 z27)u`b>b3bP+PC0WhM6N zfB^MloQ>5kS$N8m4C`pt`m>S4y0*d^iCA6Q*M!<;s_>jxMLt`cS! zEe5RfKA26=&ou;<3$`6Q3xZceI*YN26rO>qQdLApSsUUkYb^|VQzATedr5IhOmhL# z;x^8n8d#-b7lk$^a+ZQ>D%a?YFl<_ONV*7kk7i1 z$sesT4JzA&B|kO-mQ_lHjp6bO&g<}1Cjz5cIamB>3g{VfCmZ^(AS0M9Lq8v$`#=5#-HsrD=M9 zExm==^w9^}aP|+M1fY3Pj&J0gF$V3TiBz{s$d#s=tEmJ)w##QgnH2YOGnuZ+Zp}LpIH#Regk1da3amTHk`i!Q=8UX$qhP(aZ;u^W2@ zFiXHGEYxF{&J+_lIL4>>vDsGAEs(8 zw0EFVKCojydCVz1+yzF_pg8r(eSc-{cexFE?a9JOm-HeY z^iM_~Q=A@!^lA{^#h5U?dseGObfG>X{n9kn?)G~`)AfM>FB(s^p0NJabhOq{n*t~8 zp^^p2;J@8r`eDu^)xLfKl)Xc+%#vz&4DHBey%Bd^rX;==fRdV*+9O*+Cnr|(IP@1t z1ddEoa7>V8i~*(|LvF%fFk@6w1$8Y74!d6WLL5X7R-1`lRp7~l%KGLc)#kifg3<`g zv}Po!`F}W+qvJ1i}D?ih1h1bspS}J#> z=juc}DNJ%XYQjUL9{YtT{^!N@2UCgRiFet&h+;i`<}1~(k*{H6&NK(7tvw%6&qFT0 z?FXMY$%UTZjzIklgd{qnB5JFmw9<6YCF=mTDgs&y zwh5fpz;cq^*W@iIKZzX_TnnK#bk%avCyFgF{qlq;V_sV}E21(m+6GljoJML|jeRXB zimNfWG*a;DlVC1n=~w*X-oxwUK=H_LW{hx019D?KUFun9OZ%T;9rF=p#$;W+8^7VaZk?_ z)y-&_Kaa$NNWJrY^k>o=v`Rznv|Ly@pOnNsD=>Y&5mKCSxS*LOsXjrv8`w=J9oY}9 zXYR@Mrrqnm2#8;-s{Oz}$W3R{Cfa!)Q3FJ2wYbeEbyy_HFJ=C4R}sPp0AC37pz;4c zC7^_MXI@dwkK;tq`_H@(;kjhE*hfn875>8BHtU19ovHc9#Ax(yE)bz%YcIOMw5QV) zNhHA{o)nHXkX5TLM^+$T!en#0quw&ao}yniXhK|c4}=vzS6Wp~);4^()2H{)%7pO7 zJ`C8XBHOseMwZ<88AG%m;jm~96|Ff`8>o@V-G9~RvwW5~QK^I;yFq{OpY`Q5o1gT0 z6YHat>xNXmu^;jtn0VT1K?a=@>!GWHb%5v&>gQ!w{?oN#vwj z_IcOw6hEOu;cFAE*~+OVo3oI226lFELRy($={H1wXEIB&s~O85cvwiMZc8u)SA5UZ zp74Hl9|;L3Na|s+dSdRr0+(sP3NfOThUOL(&EVA%RK%KZXv<{-1ABrrt7*ggd*vrD4L*v)!-MaZp^DzS9GZQ3O6y z@jvn^qG`iRQXpX)g`uyoQUx7j^Oe|dBkj3j|48y@G%}LsW)@!7@gv>7!mfDZ_vxA* zNX9>Os|{EikcW-j+Mnx_%9mF4f*dncs}#VT$gKMEsV&VL-NV*d0;5a81R;%PyzW{) zbD+ff&kXtgk0X08%>Yt!1%Z*0C!SpxZzfKLPQh`M5sAp#wR3u^XF*s`D#O>_tt~wdQzjh|(wCdYc}BIaa-9h5{27LS zPdCYGya`Bl<_@$Ucqmuj#)&BkD&4a~Q|rlfarx z(A{}}d-Wz^*w0P!E`P}~J}ecp=~fr!XCN5r{A+{Y>L)2>=D8~8_7DMBD`5--H4e

Mf(1rnj`Wgc5PV^lDRmeNexr|gVpkG+*Kzy~+W7*@lnthqg zQX8(qL|WPV6pR$e(y>nBiOyt0kEID+CZceAf~o;f@E9kghW=V}`n$@WINJKxqZxZU zGIg7!GE=4Npw%V9XeTw1?GdDYuV;vQ;3T5yB7>dh`@vMu zWd<)@>L)BKE1h`$J3TJ#d(M~e8Phh9hYDYJyjoJK7sEG33uGXivFGhDcO{%`XFLOlX^TN9_?2Cj+pZbW;LlkrbyrHWaamNl^5z z9Vn-}JHSFK|JZbSf-(N4Kf+vp#`RrJIscIjzW?crB_Tx^S0)9gU{OVjZx0Cscpr;x=S`1SBUbygxw>#MS^rTo+QQpgfE$ zz(7dUm!(=_hreUBVD#~ayIvd3VHzU}ow2gbf3*)qV1(;5HPoC9Dijq7L73Vu>FV7G z2p^APyN9=7D$AnvGxB>7Hx2Fph11(;b5iXqtlbgGi{%$=SvZY+lx$7o-#udCy#~{; zQxJm2mUVoagH=D=Lfe|LhcLc$y$0Z=#hMidD$Rhhd>~}7L>vPx!P0A_85k9pF5t*bhN#Bg5|K!;SnVDiHZ$3VX zA4&R5S?{9+6SII5M3a&|3w5Z&_(i|!su8e~J0 z#?K}J1O40b<2sbe33OZi%a;@5x%+|ahM3sUE=Ko?Vp7xIs{OlWxqZCU`)Ya##N~14 z=+L*YYu4oi9_8cg_xg^H`$x+3>Uh67qSDbVYmb~tHYWl|MDquep+utl6(hRsO9Z+l@1D!+FQetpk^KxDu^C)s>X?C1>5 zeK8{_o<%GU3(5uU3o0}1ApK6DD8&-RKc}tjJQBHO@-1^5m$vL7T2e7vfK9s#U~HG$ z;qxNH!1DbT7w50e)g}eOo!;nX0DlkCv7MIEFwaOkJC^SmyrIIq?=)KVK1?B(cHlJ~+Kg%}|#Fe&^)INd|$IANj-QCitnjQn|jHgW`T=aR6 zD-l5?dzo9m^AWyAj&*gHZ<~0S|4_F-_NP;DP%XhmwZbODPao!WUFZKrfVB%DHRtC8 zv*sCrL1oC35WZhS(dMv^`h;{f7v>r_KN6N-*ba5fYLKJ@&#(AS&TkH1kp~`{EC766 z!0#@__Zu30kaTKgj;s7iL%5>+hO^gNVNEkphxs^9Q$$H5M+n)C&ww(RbX%s7gaXGJ zT3&lhORm2+sxJkEm$UP-uot|{{cv}sggO@a+`NF}<7MTgutJ*2Hvixq?WGDbh`;fy zspO+M9#2@zN&sSC$+zW< zN;b!z-`hv&Pj}^--~!E@rF_okeydA!9;&^fQziG%v*wHE_%6G~;T&SXKskW?ylaJq z)CgLie{6fTmd2LYRA^Da$#`{D>nxu4iA(;|8F1@De_)li5P^#z9d1VXPQ2rT9k%#a zDm#bQ!XE}k*H4ufd+bNRT#9IJtHhs6c^BN8bg)fwj%l2KwhakVWQ}N8txD`Mc8^e$ zma>v-#bp9;i_#BdCRxSGH{aE?!la80G>Ew}0A^hlaW%*_(WMaenY1Q{*t>eULk~$IH(|&zEY@mThw7K6{2jnHI8QVABCdhSZG=iN2~KT!0!WEB@e6B)K*^vZtf1hs47v$o%&6#G~&7W|;oK4>>Zn zY>hd@&T9{Vgf>gukbYyHmYBsHS($6bl_uYu5tnzyyket$PA#Tb{#nXwQ9XtaEs(GR>~~RdmJr^4?Rs& z+;E<6pa02#+o~Q}_oVbD9=(9(uVO#;P!mgWKSThHj8R{ zB981?z&H2<4;vyp6+8v0!V^6s`8ynVH(ATd5tOUy6kd6XO8kR&)kkDte}+{J1V??Y zK@=yFR{cOFfB6;>9DPRhs|Ng-gN{CRi1l$?8X$+r3b~9(xeyhQ&lb)2TbjpRf=^Wp zyPju=V1pt4oqNI6h01`$GbGkRF=alYdar4`65bWIfD<7wln6GCnBY|+72tfStp?Yv z#0NQs%p&1{_4CWsTovBSOGo_`-kV*AD*l>90=4^%9R2r(U3?_ErsAKXMqjaj(=9l1 z^z`K2_I7`1Ltl-AEw|MeUtf+mrRz|9n|^G!6ph5)Xh2f42IksLk`bt_oBsDP)*29E zZ0NW6N55Se{5-rRrhp(wh=KO$AWw4@d7I?o$Zd%srH^BEt8Y!Pt?a4z+&E{RO~V!9 zlk4$W5Lnt}LLuNobfS#6JLvhxR4PhY-Mfo7QexdLT#HyP@{%TUZ+?5G@Pn|ri-q)& zICPVy-5}LMFrQL{PBB6wkp1=6hA)!Qd7=oA9*(vUW1LxQ1vZ+ zZDL5xve?V{|MEQEn5U|B~oP4kV2+^5(spgDm69l|9a4M+yIsIE)zycR1y#=)QP_ zPmnCq8B2kZCsL*;X?Uh>**ny!dZyD4lzfezcf$hJqNPjm#(SFxEhtgBLc*C3bd@9>9HTW%bWeoCzQ(P~HHy1IKcWP>CRLj|U&7lNk2cH7yZLgI zBjejtGNFroG<96k0jAWub4i`tbwqUwRV+?~)Y^A}6Vg;B!4Bh+QVJK-v zVeT6C*$OH>=i8B%&6c zZzf2oQ;$BemECA2dlX%|O)w_i$E!;cg816vyR_GgLM?tw|L&>>`Up;&?AWzvSMe9W1XTgmI{hyD${+U!l-wK4{g6t1A#T zWw_`QEvzo;E+DNZ?#J$ZDgwQe2$5SQq+#r6<7F<~4M06LccJOb$Ufx$1v=SXM0k{u zVL^)mQ9KV!94!bB>g{GU2-W+w+TA)e2HMk2TG z?yU5O&$3mE62n+f=EBsXC%n0l!7wAzI8T_A7^id>VH4pULSYz~BLbSzRI0z0Oa9o_ zF`eS#A-cz$gsnTSoo&BodMQ|8;EEP@-4J}lcFV)e@)5zgic2M=<;of~G8IOdsMGnluj79L`#9SX}3(6#6?Knc)c>nlLsY!=an37&Zr z#M|s>)Aa=B&a^fMt2aimhEzFY>S)Mi;EbI9DBI$P(G-!F)oupeyJil`I|Ei~`*m-@ zBF;b(@GbRPs9d))L=Ru^Idzq?{qS%5D#vTtS-kM`0U4-Galnb4UW z{^bhxR8y#Hgs$Fbd<5HuD)zr@F0hrJE^ote|A0d6I5Jc#!lFYx_%?wSn3rH-?iP2e zn}H>1t?#fu(>XndpIhJfZZSqd`~I&O@C?-(sY33Fx@fkmBER7zwr<4@+0Q<-dXJL) zL`;tV;)_~!RRbKMO5l3PfEI?dPd|yUhtsc|n5fCxKyd7qI3_wrLuH`D!i@p=qwDku zcFk-vq~=OPAr7wZfv7c#!IT6S3I8`~)>T9^%J9pL|EY|nqvuIx@`l+&A9XS_ad^v2 zk*w;qNt?vV|2pF+WorIGAHcCxVwuNY>)Y1(44Xc6kjq!Jn4xDq3KDsv5o$f7E;6X{ z7YxP2&1TE)Kk)(CGzlIYYdBiyAcRWPXEJDQWk-t8z-7r(!t7?gD{}E;5(hy?=jo{; znpb~5A5i~ZB?|Tm<#?gnUEcyyj6%K0DVY?$iP7~`TvUsLX;8}N8(Zo=(srG zVJO-?u`ifwi&yqLaphETpSWa=a|zlyC{*Blbf8^iu_<@Kt@eRVSSGH|kp729cvz~a zmtZcLf#oj1eh)1!(s64U$rUbbDxHuHS4VhM?-->;z@qe}vGU=}VdN_t`6?pa>daJ` z-QF;UVZ+>WwKGDXy>Y?!X$aU~cV@J^2eFr?nnxoobMms#1;aPcvOW6?RWUSu9O4+{ z)gWo6V~IGY*ai#~84XM5AtDc`ubv8>7bna|b+-AQRuhqA{C=+o+s<5{jz7cDQ-;mYgJ<-rPuq;atxZ#!;!h2e_Nl^O^YDdK~cU2_h0#g&@je)&G$; z#-%8!Xvpy40d0}Q!9YwSNo)$Agf~RMR_oyR@H4=@F{&jo3+}920WRsa{uayx9i$XI z=6p;(Rx1cV&kSQRRb`O8SRQ=QU{3B4`d`5!oY#p2lDcRVu!H`m$AiC?zmWCFBkkDO zCc#s14RKwe%HJpU`_f$~nHJxPD5AfNe+Q-2++kw!uixKtbWuyY7wz_wsV3pa8Xkw@ zFaB^xUfLVy@F^Q@lj6Dssmi)aydl4i`?2xP)_~#y=@PgA@KuF(5*@%%+~u)d|0G*& z1_2G-3p~*z+ck(;<~TP^AiCj2b%Q9DX0{9;gAc^Bh-YfuOn#|EfFz=mT$ zuqS3-Qc-6l(%ZR^7*oO+WU>JDYmn3X$U4U?{qEK17olqe!OD*{lxjwB7Ly-Ap@atJ z@|P{iLP9Kam+T%4GN29DM8}3YTyG-oZFIQcjS8CD<`XjXpcJ){@Hw6OdRBm1iqD_e zco} zrEVp9!G~FM-I$6VL*YX^#F(P;ku)`Z1Wfg19n`;IqJj;l|3Iq1wWh`t{Uok+2Rj$Q z(gJLee5Ba`N!9D3RkDDq9r;pL(~$ePt22dfS^pz9efkg{|CblSjW=YOMLmE+kCKjQ zBm#xc^QhtkDZxBfPu;FS`=s&YAr(cqe7{-#IujdhH9%$ebzp5g#k2U4+j^08SJbR{ z%>~RWN#eZDq&xtc0@!p4Q4Qh98|0BR9?Nkp!}NI4#1nWvi{8F#M5CTr+u3JciTI*L zX44^dNmx!d)E_ypa z(l-H280ZbxVjfJEs@HD&H(ZQBH#p%nzm`pDnX0x`o{Md6ONa)u8g@}i>Y*~yM=Jv) zRT4Eo&N#2*31fKnLYkr%nY`-@Ug^(fp{F|jR$qv(Q1rHY@rfj3tOo>>Km&@Iwfg-! zs`cx{GvZpcUU`DhIc~q?y9CxZa2rLU$Y^8W(G04%S4p7pWZz^u;g!{BwyZ^Z?3o@; zteZLS!@o;NXD*m}-z|7Cm_Xhd;58G)Dls7#T9R3~?VoWkDxGqT5kZ`U!N z2wrE`6xtx!4(*}KgM`fiNbsKpIqhH?ql6(hqU%mn3u#XX3eAXc3<<*8*IVN_&4?px zm0DYj4GtUwiXF&a>c1@lgYTCIc`i)ZUk<3{WVaX6c;f!CX1lqLhA!GlgAF(PV4e#~ zEHH6XGG2>-#vn)43ru^5VAiAC%oFKA%tkJ!Ko(&zuJb1uw}nmOg+;JXp~prhYsx30 zu+awF!J{hJzl$+uR{E_~@>aL~xtJfXWgx2g&Lm|^!>4w9++~P{Mp8u!EM5#+a-3fA zyXBORY9Mfs7dZ^0&ANYh$0d2a8YX+hzg4Sp>DzS`usU$xTx?5oZJ;C(1s`m*38sN# zK(QeN;I$x<4v{yIEKcFiZ->84=<8BDSI_tO+|QE}nL6QMH09Tu_|`mHCJl#7M&Vas zFHn8{!PuV%)DwnQn|Enjaxp5O0#!M*;Dm)7o$M$NX)Ne*m-FS9idMKV@mSX-O7r5( z3S!-D^FfAE-DtB)5BA^^O#-+h9H?W+LYl>i?Q zCQ83v6=lh4QR7d5>xmW_*_cVZpG^K^`7#h>n8L7UmF;@^<%awTl1?1^@a4Qw9%^T= zyxw^hctain|e&K`)E_z-w@30GN_GC^! zyg78ahJW#^{jgu_a8wH(R2{k`Jt6X$k?T-|Z(TG_gh06+qe5^8GA&3eh>M}g&pwcn#fwkX^ zbMdb#5h24da{byy)l|9&f~|AZ0mPDPuMhEeR2!w1YWNk6X*LMXd|Lbp!K_RQT}w0Q zpmaqrQ4tQ-Rr3Jfy=po;o#v=_2E!W1Z!r^i>1OPxp!lUx1c9LEVDkcaHzft+WwA;v_S%8xsavpGDEBR1_|za1rbCh))ZV)F4=enSj?afgDo zaAWNK{%H-jra&f#Q*4Y#KP2|h-{I zgxw5j0BWm@6_P=~N!(?|r;Rt*h!SAYwd^M2;U=;&@<5*<=wA7vOX?tG1ZZq5eHEaE zvRg)XbB~XV;9bpz%*(6hf>bs*lOT9IlOA5DtciwRwx=-}%TEaGDdn2spOF7Ub%sw+ z)m{q+72LNh3(La;07$QLYLz_IgWd1{Cq)s}{SZk1Ol~Sp$LuXye24Lap}WB0#I;&&z+E8TNA z&-npaSd#%4NX6*A?7)d6(xOTCb4?8lWX)2bF+_kDKPw69vJLObB8OKLR_WZE>ea3vN!)W)NEUHUSqb)OhwA=k!v|SBE$A7# zZO)uHzw{)|?aZJQhQ{ah4S;Ii35KLm7qVcSf*N65@F;A}>NRm#xcf?5)Ud}Tg`Tsn zeSwyjgXEuDAq-!;@K+!y0GO~9v^2|?ku>`p9&n2@#h2soUY9By!}uEY9f~^WrM5rt zPX>gE)%ix_>4z1Xoydwh$^HjAb^U}>WzHzL4FiZ|Yp;vL4oW=iL;kB&Hog0jHn@tE zpmyD4ZqTBfwPh3qVA$|vS|=C{6)&LidDtWljol9V+F@4u%Lf%L)hVl{DZ8uDdE@*I zqTm&O2*6;);?udsYV>f5azIpJ(IdZHwr)FUn;c$;`s*qMFeib}1RarD9s7;cDn#c| zO_eyQJFa?9McsAdu$r}p+`J+6he=goDnUeaLPQENFzB{FQWHP$%N$_iRVv#lo5 zoHxL^liJMYIO`3asm+35-C_P$m#Lf_tGm1Kc~BW(MzLO$zAk)qQ=5@5p(Oo&g(BN> z)Pkq;`$=b-BP|V3yH1^|oRKB42@lShgYW5eYRaXd$-Nb#Xu*%ot$wMVr}+;9d`AC) z1`64i>*M$X&7%K_uk=SqhlSK}h}<3ZPIj!z77jpq23<47s$?8dVn|cs*LYy<^1Tbn zB>AJx^F&x8DGj+mv);%mj#yfbT<0#WwJOt)NJ)=k|BqLQEEFRRB>{2>81eD4$j1pv z5J{VwWlViV%Ji!%dMZ+C+IZyl_M^^>@0QMe(wQ!BLlQs#(o*e+D)>=>MCC#)8hBvH zLjar6c)@HL1==Af23FAG;WuhpJ-cb;Wu>pe)M$!aR@5o{vR1}=4D4MJ4}e>%boYLS zoE4bb#lG$r-1X8<0q-v-lK%WmP+z$xAFyfx^s{-k1_BBI>#b9}r10#7Gde{gW>7mC zG-xV;KHOSB>r6FWuM5Ph)S-x0k9>s;gB59vXG5rS_^IT2`8$ z8legDfHFAXXy#=TO);;fPnBK*W#tv|+qgGXOiM8c2WfcJtJi1cS~nXVrVefA>ez$0Wz4hTwcx^8?H^rb1h6Ou1UH05=d5V+!KU@<*yPXPEJZj^q2v{X); z2b!2r>O@SzecfvJX{OkC7qRP$VEv@p117AC(|dUeZ*zdc_EK&fxCq0=(K)WhJC&k( z-y?Bi!KFAESYnF|nfo+P{c~_o!jFm@od)!>PQfb#4pvN16L0_k00ENifLzgdvc6GN zj$)<*L0Pf8$loU8@{LFUcbFdlMp9McDkzRPmUG6(Ayh8#(gBD=UmuS zCKDd;@@Op_4A0Zfq3!VYwbCEtVe6rR!o%DmkC8Wlds?`?Vqa7CeAtqSR`MfBg7fSu zW^Y?iMcBh0A?WlYxAlqkd`xTQ6R{P$j4JP#Zy!(u=$H3)t_!mR>QYmR&CNqCKOcTG zIVyUA4mV#zhO*HJE%}pCgdA&p1gNa#w(_mQsQ4cs@c(TvF;exkHOPO#QdVx6#Izd7 zfih*%8VS>eXiLo9Bsk^BO+$C!1tW7@lKd;Xz~nORIJG1~kh9aSK^VV#S*jP^LbxIv z47^Dolnf8`$m+2^nxGw_2g!&YEmS0bM%|faC=n$e>WjZeX2#zOT-T^GbtdQ+Yf+0y+jE)9SxJ=IRYU3AwwhO4$kTFcz2rrtS&K@qgR6rD8X^gqwKUB%?~FZtNS|sv}Pl z(4tfU5xy~CcmMTqn$tb0_S0 z`d|A>jlQxb4$o1^euBk}+CZs_L5Agu`zQ{=`gO|oM?9mgOgF#_QsS*Hc|X1gI~#FTQF^#6JCXl zb57F54`MCOOQifIa>)y3<;u(Qr=P|pdBY9Ytg2mDiUpaot_(%?`42blq0lh4Q}m0e?D-3D2apTk<3zAkBm z5DNpbygWZ_0L=#x#I}20)IWffCBsZtD9qGeCR+|S3$UrEgV55QL(GR6`(lwOcIZ?( z8GuauY&5cHwrf0nLZGKUagb~3l~{`J=`7C4@2ciN5W(Eg9w&LQ(`RYE1Veeo`q#zZ z7kk4^^ht{*7?2>&#o*jj{hmVOntJOC{88RHi*v>$$jx&V#BNSSb$B=Rhe=~IHu}EM z{+``QA8wk$5Oel<%Ua#lDsl=RdjZPEkl=zEbCyQE8cfE@*oPhcF}AV+$fRd6u4Ao* zb4dCcRY}%hLIfd{Bwh>cFneo8AOIOG^QXDEvDlWJRx=8bL(Sg*yN5KqUCdn=xv=X| zkhH^2Xj;rL;4r4##Q3f3ctwG?aP-)kujv%^2zsy6C91j&`FwkI(4oL**loI^)Pdt$ z1UYd_N=&lICW&oHK$;Pqe(5A{a+2lZZwQ9yRab!n8Aa@9Pc^GamLdbc3EzHQU5RaY z%5+!}iAh%R)0lGx-a+vR&F0b)`sZ_Th1#}Z|2nyRq*L465XvBeYJqku?<;%jAL?ix z5pMS(vK*X{PllMTJxMRrOSq4@a{3_#PDkb{4hN!SQH@c4Ff3COFT#Y%Iah{n!c@hK zv`(G%HKA2@q&z#WkbFbG6=Y4-2WL;Dy9tv1r0t{3Vc8l}xoT>>-Rd(#%;vPp)|i1} z*lU$)q9rjh+xHox4Xkbb$P`!Yvep|EIo*K8c7dcUklFn6Rhu3{*2mpVcyc!U*BUfk zI~hYd-cocEGGrL^FQ(_7IS?34KO7<}KHWiJG15^AScE<9p4>SK-RUF;SF@`!nm_Fj zz?bp#Z6k%9a^O}Uuvfa4)Rz+Mkli=DvsXp`6+mc(umFNqjXnnq?HKHRUIWwcyTyFttZ$&*c|eipp6 zd!2^KaW1wtM><22Ke}m*q`TAYC;K5lk@jGH(olbpIj`Sz>f0WTh2(PYi-~8VR8#5> zMwpyJfkQ%YY%1OR-){gGTOh#ei@#LQUG?_Iv1@i;TXgn07)De#PI4#nEUX>&IK|tK z)V(!ZD%YI-@A=q+Iue%9D9v~0*8{VQ@3-XSMz1#-TBs-50DY*vKAZEOCZJ}Sj8lmS+~aL)q@{@vUDlMTPj4rq`9&F|vkEd2}36O0dg7PZF75`@#5@ z@GcP<6P2`f6Zus)p@f}GGPH(NEV*_;QKEY_Y?Eh*_jLSZU|1!1d3E~Bpfl@@_shA^ zi&LY9*)Mk}-q(%}1``f}Z{F8BXjy~`_Ov2Mf9zhfQ7Xii*KFvx*(UOJD7>bSTg>VA zBXW!GkK!@B6$8>_Qf!VWNx3?$)r0Wi56I0nuy*PTPd~NI2o=Ts5^k8#(AZ35*`xk0 z0e7QFYjq^@XsBIM*vW4fAnZ;b;x5ju%CH!4Je$kkf(4Ntdyv7P)u#`yU z+2OvZnb|I}2KY=_!j-h1)y6)KeCyWh-o*1M*)++BrQJW71MDHME2QR=5uj9bRx#A{ zR2p_C_==C~HQ6{yg-@-Gd#C=XU#4ZJs@z5yxP#0d+d>6);KWipQoTy!s7w$#`e3Dp zvmYWJum9xaniKZ!hE4lFVvjKGj>{_Ys(3a#Z8u{A_1#Km)Zfu-m8M+w08o4fm_aM7 zFX3~KU1d4Q7i(*%lOYdr4E#=%)^N|2S8;k(6=fiQRb?4wB|U`L^tDgnzK`lm|M;(+ zCcGx9C>g*aszkw@tU8o%q;8cbg$BA37A#_!J!o>YR*meHb=yD9^9aS#)BNfKB7rtz z;DD}t1Ui>~sbUj6tC0rf8d7zJ)8m~D%q5b&Daw_sZ3+8_=CFA&P&5Try&D3)^3akq zu0Ei7JHV1EpKth`eIBv59KXP6?pz)D0bwjnU!Ph(KSMSWAT1pH;|G$Ef{s)GjZlXh z{y#q4+Yw(nApX*@-~U;}r|QlogUm^9XD2k?&j2;?+{3YnkO;M31J^GEM_GLLe#Lk-GNS-dRe3+`v=svlFop&z0we&gE)cn|3PXKsyRg>C~~{K||ZYr~L| zd|5<;J4Ib9C>FOVB=^f)t=pDd=9)SAceLbba}hKMy=F9|j4}*EQjnRY(_CTPdmof2 z9n)FOo-u_0UWHIA$CcwXR5H@<_4P|-C25i*4smfzGMc|^cnUNwBiTm~k!XPMPMLbHIZ{Pp)D#hCP*bb$PXd9hJYt@CGs}!Px)d^^=cjp@ z$$NJgR@@|eWBcbevK9WHO8s4(Yla%49pbmZKt|;uAV}!af4g*R!swk@ouYdY97!Mi zQ&z?2YR*cmRrnmf{;!440yGWVd~D?YeXUuXp`GdM@{!dYLMW zD9&@(;@zL0Sj_JKmLdLNEBmVrTQzyR8kXUVokgA2pKX@&VT>OMyt|kV)q%%b6)3`PgJ zSi?~cdHo=70-l}OgoT|)0O%xd{%0+FPaZ-98#Ki=I*2hsZ)4UEEX*S(+n zJ6>&*Iv9x86(?8?#*A?Bl+yi4l8cMfg&2{YR0>mo_FVbSTah1QqEE7xY~k{;C)*1d zpfA)G!?$H_>k zPloPs4MFA*3KYE=iz!qK6R&Kt1GYOFi&cXg5?bQi4TvA2&ghPM!(5bi5$V<>rGc_- z&GjVL_e$|zLGOzi6-%#`Rkv1`m2$k<{A|7ZbVXXY98lOo*kJ0?6(@ONyIveIc zjzfXP$~o*o=EzpTa&ImG%#{c!{-!9-o7@psMttB9sr*vt{}&Mo^1JN&Uu^n26hVam zmb!L|Tq0m#=D~L{=sp7_1w;5KQksyV2j-#Pu(=auHj88(;S0PvoZhEUIg(3V=ZGX) zVeY4A(ZYa_;5JtcK}ozKo17yU0At$i{FFg-+~yO%(4zc zykx8p*1ERYm>s2q)qn$P{tvQDpay{W0QcQ1Gm6KLhBr}eVm}5S_B69FVdm-NU~E7p ztzXq4BLY~kLbkQ?C5uU$9NRgnAnJenZdN}IzY-}3I*)q>p92x z>trNnD984p30ik;BpX>OKFD*X%2a|(lU-O9y2TU%Y??2Q5CSm0YY{Q2nO;r&Pd;|2 zf)LPKq`wF49J>CMY=2iyOmSQcp!cw@S~1vRPDei_n>6#O_$`E!+Mit3o~JCEH>oY; zBWTiD^aRsbJn)dsg53fKU%1V4cWq@Y@aP@aR1rRral+d!-rN~9(L-=+=f zIsE=Z@)Cj~Y(m6O4Zx;0@{xsgY&oe9DTr`kR{7;U_7eYeMAYZ9&sX8DM-A+o00e|c z#Z&|-57HKr#%)bO~X;hBbFI=24ufs=FFqO4I)v=c@lp!}H~3lv>}VTOg)78wo; zE|Jtn7>cmL(dckWU9yGB?RDriIcaUzNf%VHsi*%U$IPa(?#^)kZYjp=#qy)z9dle^ z&;WmHkNY-gz|KcZ3T1YeNT96H%+~Npq*K8E-}JXVzh*^a+y!40L@S29AfAJFY^Ow> zKHbChxR!Mp{q)H9=;3gwc|m)ZqYJ%TxkXzY7>BR%nVE;&(4^2SrlGtg!^MUqnZKOf ztd-kSd>5W}Rpd`Cnr1Ey-kU%$p6Hg(JA*q|!2!T^R#&~^6mOc4e)9d-YR@&jOWzFu z$VXLy2w*5^AG`Y0S2X>hZVKtyia&M^;h#OMk_fP0U%t|7fuj`?lN*5m+Z#VfKIOsMcaS5Xa=dT-;*wQlO#7E9*Cw01q z>#zMtXFr5w1m+<&j)g=NY@L3nRH*#p+1TNRWjI-?&qY>IAHz-fJm+AOsc+(*3KvM} zI)6lK(!@{%?6Qrq1m^DmBP)wSMkIBG^6Q-UbBJKbd}WL^6=`<{P>A#>5jLHf?q3cj zOni>iv)z4N=#h#c*1!)AeW+S>+|W*o>v~NP7X)r^bfRI(<#bM1^EdYMa0%4kixp`+ z4cb)sslQ-n=Bjd9w_HlKITvu6SK(A6;^=#te>fr%?6u02zVL5K*}EFlz(jqg^Y1N0 z4oWjYs1({|)KF;i?tu!B_-C;QK_Vny$wWQZb9+&a1 zune^o@cPr63L$PZgAYi$Ew7nxa@@gEd>Djkx!Q_ggM>=f;hLAJ=|u%NST9OXJqCtH zt#+hE{rXM7S^P)yt4>u&U8U8gM)uO8_}PK#Wvew4@qtL+XpvTuw#Y zoEV~%#m`Y~?3MOX#oS{eYI`K?{h&cK$a4=Gr{ZEzqTZ!Nm74s}fxQxSUB~0je&x3$ zYVG#G1SFv;nSOV&8L*f55oFl`Olz*Am2AVwjIa)CDOBpIyAC4%ps z7q-);bppKS^2(D)Pr2VfDIN5z9K4C?W7x7+ ztl0RAzuPAgTrsU1d-R>3v_Pwv>*p|gN&ZCY=`lvwJr}#=uoVxzKHHk*^v-_6LYRCN zHl=Fp>~pf9GM4hPhuYhTxPIoFVn#sCNqiyDUap*Nk_!=sUS$`*)cOe!>;_RTxN)`+ zt$`!=BX+n!Fu{aj^PTtk98C@6Y61EdBd$!|9WeP-y~;Q9rJoz9r<}oCs(PTjt3Cm>m-j%dvneR9MD__a(~icIs4pi%uH$yoJ_E5PTU^ z7}kUt@INk}xbJVK=wgUI>~?_ofZ#0c+H27|eFb&*%3RdylqvJnYAZ|;wgh@n>igPB zlOebQ7>4OY1QCGV_$Mf*;-Td`?t$O(bd4bsJWID!>n{Or(t*Sa8e4f>^L=nY#Kf}j z*ppCcPgei&E!)wE1WO{Nu{BKY58;$FIj|V&n$+qE_^0*_^Sf;`O1UnfS|0O)YN4he zrpGRh99snh!2}(R=8esK+y7h_oqW_5{2dWt==^MeBJy=ln-Ul8M-)i)$OG`|$42|A zmQi%bs9ez4Zsqc{qCO${IhK2d(gxH@!8~<69Dh28@EeGzAvU_{A#tS z7#*=CPnuGg_Z|3N**CJE8A;-a3frJJc(bYz)1TbYu%)lnMw6)94g~9hj&m?#<8RlPj|bv*p2HY+YH^A4u|3-v|-K6Jab>|ResZcYWwq{^kx!lpDJ?h7up(+HE{dbgW&HX z{uB4WiIUT|ZDkj;FRmXlG|#37ynXNcmQ|nOAdHw&Q`4i{B7>dNM zU7TY_9d0j?znDnZ0thifOjB^uP4D*`0y1m|37-)ZxXU|um>Hn9JR7jRqmDP9y`jR6 z(1pdt+d&DqVPSZ=XmlU*yxXy|wM|dg$F%)g6Zpk2N&Sx(NS}<-STnN)o1eY#2RPneCAOe`+C(aA(jKZqu#OZ(j1D&s2qT*qYVR~U2KP8wB;%Hd3=OC$=c)|L}-{KQ~^*z{h9*RDm&0h^Tm{OEb_GbUrXhjkOA1) z@`wCGewOEjptdlfUC_V8Ag{(spw<$(Hzg5;KEj}$(>5wsm3Q^>kG-oHj=}PyP2a%e zsY@%O9$VFEK5I446+%yHkJG96B;G+508re21E{Utr!>0B5e-N9CVC3ps#(=v3{rnK zr{t=<>*zIqaImI0$(_?S$vFB}&S^91Bwgv6^#C{`>)e)YSbORL2dN6aG>%GqTSrFI z5(9y|Y=Y#;V)Uzps5DC>SkvMI&MaLs9iZWQKFksOCnL)&^{q;r=noY0$TJoeq<4ed zw>O_TR@7baj!)0Iwtz4+?mt8_U$XocdDY_D^-2J>g+fE3Gn8QCRIW5`xg`5}Xsj&S zianB9nutl)G~oTBm8&%w?dJYML<}vlZQ6fvF85=X20>qN zo1F-A`d^J1EZ}T9?0MUgV7tc|;K)PV7H(vD=7k^<`yBAxg)1J4-WB4#Z@~Hx&!$3O zN(AF=1e6Ge`pIj$b(ECv%iN>yEtqsKb;_*mylp89R$ zQ#;}EhfD$K^xe1u0*asWL{e4891mJg=G_URcP%wDC&D9Rf1G{DG$W`%i1SZ z$X+po)FjB?feFh;o9#uVjX6!R64v*VsUgW6IL96p5e60#=Vie)AWOwvGX6ybvO#aGVIs zx0!1M9D5VIwwg+a#|Z#GRQE(a!`i`Wd>Ysz-(RU=-tdAqgPzL2N_*iGJXT%WLaBiq WaEtHTB|y4xijV*R000000000f6fffd literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 99c37de..2709b9b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "deploy:dry-run": "pnpm build && wrangler deploy --dry-run", "astro": "astro", "check:donation": "node scripts/check-donation-checkout.mjs", - "check:tickets": "node scripts/check-devcon26-managed-checkout.mjs && node scripts/check-community-tickets.mjs && node scripts/check-devcon26-payment-confirmation.mjs && node scripts/check-payment-receipts.mjs && node scripts/check-devcon26-badge.mjs && node scripts/check-devcon26-checkout.mjs" + "check:tickets": "node scripts/check-devcon26-managed-checkout.mjs && node scripts/check-devcon26-programme.mjs && node scripts/check-devcon26-programme-relay.mjs && node scripts/check-community-tickets.mjs && node scripts/check-devcon26-payment-confirmation.mjs && node scripts/check-payment-receipts.mjs && node scripts/check-devcon26-badge.mjs && node scripts/check-devcon26-checkout.mjs" }, "dependencies": { "@inttegro/js": "0.7.2", diff --git a/scripts/check-devcon26-programme-relay.mjs b/scripts/check-devcon26-programme-relay.mjs new file mode 100644 index 0000000..cdcc595 --- /dev/null +++ b/scripts/check-devcon26-programme-relay.mjs @@ -0,0 +1,66 @@ +import assert from 'node:assert/strict'; +import { createRequire } from 'node:module'; +import vm from 'node:vm'; + +const require = createRequire(import.meta.url); +const astroRequire = createRequire(require.resolve('astro/package.json')); +const { build } = astroRequire('esbuild'); +const bundle = await build({ + entryPoints: [new URL('../src/worker.ts', import.meta.url).pathname], + bundle: true, + format: 'cjs', + platform: 'browser', + write: false, +}); +const worker = { exports: {} }; +let upstreamRequest; +let upstream = Response.json({ year: 2026, rows: [] }); + +vm.runInNewContext(bundle.outputFiles[0].text, { + module: worker, + exports: worker.exports, + URL, + Request, + Response, + Headers, + AbortSignal, + Uint8Array, + console, + fetch: async (url, options) => { + upstreamRequest = { url, options }; + + return upstream; + }, +}); + +const preview = 'https://feature-devcon26-live-programme-devcongress-website.admins-a7d.workers.dev'; +const path = '/__public/devcon26/programme'; +const env = { ASSETS: { fetch: async () => new Response('asset') } }; +const run = (url, options) => worker.exports.default.fetch(new Request(url, options), env, {}); +const response = await run(preview + path + '?url=https://evil.example', { + headers: { Cookie: 'private=secret', Authorization: 'Bearer secret' }, +}); + +assert.equal(response.status, 200); +assert.deepEqual(await response.json(), { year: 2026, rows: [] }); +assert.equal(response.headers.get('Cache-Control'), 'no-store'); +assert.equal(upstreamRequest.url, 'https://em.devcongress.org/api/public/annual-conference/2026/programme'); +assert.equal(upstreamRequest.options.method, 'GET'); +assert.equal(upstreamRequest.options.redirect, 'manual'); +assert.deepEqual(Object.keys(upstreamRequest.options.headers), ['Accept']); +assert.equal((await run(preview + path, { method: 'POST' })).status, 405); +assert.equal((await run('https://devcongress.org' + path)).status, 404); +assert.equal((await run('https://evil-devcongress-website.admins-a7d.workers.dev.evil.example' + path)).status, 404); +assert.equal(await (await run(preview + '/other')).text(), 'asset'); + +for (const failed of [ + new Response(null, { status: 302, headers: { Location: 'https://evil.example' } }), + new Response('bad', { status: 500 }), + new Response('not json', { headers: { 'Content-Type': 'text/html' } }), + new Response(new Uint8Array(1024 * 1024 + 1), { headers: { 'Content-Type': 'application/json' } }), +]) { + upstream = failed; + assert.equal((await run(preview + path)).status, 503); +} + +console.log('PASS programme relay: exact preview routing, fixed upstream, request isolation, failure and size bounds.'); diff --git a/scripts/check-devcon26-programme.mjs b/scripts/check-devcon26-programme.mjs new file mode 100644 index 0000000..7610f09 --- /dev/null +++ b/scripts/check-devcon26-programme.mjs @@ -0,0 +1,162 @@ +import assert from 'node:assert/strict'; +import { createRequire } from 'node:module'; +import vm from 'node:vm'; + +const require = createRequire(import.meta.url); +const astroRequire = createRequire(require.resolve('astro/package.json')); +const { build } = astroRequire('esbuild'); +const bundle = await build({ + entryPoints: [new URL('../src/lib/devcon26-programme.ts', import.meta.url).pathname], + bundle: true, + format: 'cjs', + platform: 'browser', + write: false, + define: { 'import.meta.env.PUBLIC_DEVCON26_API_ORIGIN': '"https://em.devcongress.org"' }, +}); + +class Element { + constructor(tag) { + this.tag = tag; + this.children = []; + this.attributes = {}; + this.textContent = ''; + } + + append(...children) { + this.children.push(...children); + } + + replaceChildren(...children) { + this.children = children; + } + + setAttribute(key, value) { + this.attributes[key] = value; + } + + querySelector(selector) { + return selector.includes('status') ? this.status : this.list; + } + + addEventListener(_name, callback) { + this.onError = callback; + } + + remove() { + this.removed = true; + } + +} + +function createRoot() { + const root = new Element('root'); + + root.status = new Element('status'); + root.list = new Element('list'); + + return root; +} + +const data = { + year: 2026, + rows: [ + { + id: 'panel', time: '9:00', title: 'Talk', description: 'Overview', type: 'panel', + speakers: [ + { id: 'ada', name: 'Ada', photoUrl: 'https://example.org/ada.png' }, + { id: 'ben-1', name: 'Ben', photoUrl: null }, + { id: 'ben-2', name: 'Ben', photoUrl: null }, + { id: 'ada', name: 'Ada Variant', photoUrl: null }, + ], + }, + { id: 'break', time: '10:00', title: 'Break', description: '', type: 'break', speakers: [] }, + ], +}; + +let response = { ok: true, json: async () => data }; +let request; +const module = { exports: {} }; + +vm.runInNewContext(bundle.outputFiles[0].text, { + module, + exports: module.exports, + URL, + AbortSignal, + window: { location: { origin: 'https://devcongress.org' } }, + document: { + createElement: tag => new Element(tag), + createDocumentFragment: () => new Element('fragment'), + }, + fetch: async (url, options) => { + request = { url, options }; + + return response; + }, +}); + +const { initializeDevcon26Programme } = module.exports; +const programme = createRoot(); +const speakers = createRoot(); + +await initializeDevcon26Programme(programme, speakers); + +const rows = programme.list.children[0].children; +const directory = speakers.list.children[0].children; + +assert.equal(rows.length, 2); +assert.equal(rows[0].children[1].children[0].textContent, 'Talk'); +assert.equal(rows[0].children[1].children[2].children.length, 4); +assert.equal(rows[1].children[1].children.length, 1); +assert.deepEqual(directory.map(item => item.children.at(-1).textContent), ['Ada', 'Ben', 'Ben']); +assert.equal(request.url.href, 'https://em.devcongress.org/api/public/annual-conference/2026/programme'); +assert.equal(request.options.credentials, 'omit'); +assert.equal(request.options.cache, 'no-store'); +assert.equal(programme.status.hidden, true); +assert.equal(programme.attributes['aria-busy'], 'false'); + +directory[0].children[0].onError(); +assert.equal(directory[0].children[0].removed, true); +assert.equal(directory[0].children[1].textContent, 'Ada'); + +response = { ok: true, json: async () => ({ year: 2026, rows: [] }) }; +const emptyProgramme = createRoot(); +const emptySpeakers = createRoot(); + +await initializeDevcon26Programme(emptyProgramme, emptySpeakers); +assert.match(emptyProgramme.status.textContent, /announced/); +assert.match(emptySpeakers.status.textContent, /announced/); + +for (const failedResponse of [ + { ok: false }, + { ok: true, json: async () => ({ year: 2026, rows: 'bad' }) }, +]) { + response = failedResponse; + const failedProgramme = createRoot(); + const failedSpeakers = createRoot(); + + await initializeDevcon26Programme(failedProgramme, failedSpeakers); + assert.match(failedProgramme.status.textContent, /could not be loaded/); + assert.match(failedSpeakers.status.textContent, /could not be loaded/); +} + +const previewModule = { exports: {} }; +let previewRequest; + +vm.runInNewContext(bundle.outputFiles[0].text, { + module: previewModule, + exports: previewModule.exports, + URL, + AbortSignal, + window: { location: { origin: 'https://feature-devcon26-live-programme-devcongress-website.admins-a7d.workers.dev' } }, + document: { createElement: tag => new Element(tag), createDocumentFragment: () => new Element('fragment') }, + fetch: async url => { + previewRequest = url; + + return { ok: true, json: async () => ({ year: 2026, rows: [] }) }; + }, +}); + +await previewModule.exports.initializeDevcon26Programme(createRoot(), createRoot()); +assert.equal(previewRequest.href, 'https://feature-devcon26-live-programme-devcongress-website.admins-a7d.workers.dev/__public/devcon26/programme'); + +console.log('PASS programme: speaker identity, equal names, panel and break rows, safe text, broken photos, empty and failure states.'); diff --git a/src/lib/devcon26-programme.ts b/src/lib/devcon26-programme.ts new file mode 100644 index 0000000..17ff614 --- /dev/null +++ b/src/lib/devcon26-programme.ts @@ -0,0 +1,177 @@ +import { z } from 'zod'; + +const programmeSchema = z.object({ + year: z.literal(2026), + rows: z.array(z.object({ + id: z.string(), + time: z.string(), + title: z.string(), + description: z.string(), + type: z.string(), + speakers: z.array(z.object({ + id: z.string(), + name: z.string(), + photoUrl: z.string().nullable(), + })), + })), +}); + +function safePhotoUrl(value: string | null): string | null { + if (!value) return null; + + try { + const url = new URL(value); + + return url.protocol === 'https:' || url.protocol === 'http:' ? url.href : null; + } catch { + return null; + } +} + +export async function initializeDevcon26Programme(root: HTMLElement | null, speakerRoot: HTMLElement | null): Promise { + if (!root) return; + + const status = root.querySelector('[data-programme-status]'); + const list = root.querySelector('[data-programme-list]'); + const speakerStatus = speakerRoot?.querySelector('[data-speakers-status]'); + const speakerList = speakerRoot?.querySelector('[data-speakers-list]'); + + if (!status || !list) return; + + root.setAttribute('aria-busy', 'true'); + status.hidden = false; + status.textContent = 'Loading the programme…'; + speakerRoot?.setAttribute('aria-busy', 'true'); + + if (speakerStatus) { + speakerStatus.hidden = false; + speakerStatus.textContent = 'Loading speakers…'; + } + + try { + const configuredOrigin = import.meta.env.PUBLIC_DEVCON26_API_ORIGIN?.trim() || 'https://em.devcongress.org'; + const origin = new URL(configuredOrigin); + + if (origin.protocol !== 'https:' && !(origin.protocol === 'http:' && ['localhost', '127.0.0.1'].includes(origin.hostname))) { + throw new Error('Invalid API origin'); + } + + const isWebsitePreview = /^https:\/\/[a-z0-9-]+-devcongress-website\.admins-a7d\.workers\.dev$/.test(window.location.origin); + const endpoint = isWebsitePreview && origin.origin === 'https://em.devcongress.org' + ? new URL('/__public/devcon26/programme', window.location.origin) + : new URL('/api/public/annual-conference/2026/programme', origin.origin); + const response = await fetch(endpoint, { + credentials: 'omit', + cache: 'no-store', + headers: { Accept: 'application/json' }, + signal: AbortSignal.timeout(12_000), + }); + + if (!response.ok) throw new Error('Programme unavailable'); + + const programme = programmeSchema.parse(await response.json()); + const fragment = document.createDocumentFragment(); + + for (const row of programme.rows) { + const item = document.createElement('li'); + const time = document.createElement('span'); + const content = document.createElement('div'); + const title = document.createElement('h4'); + + time.className = 'programme-time'; + time.textContent = row.time; + title.textContent = row.title; + content.append(title); + + if (row.description) { + const description = document.createElement('p'); + + description.textContent = row.description; + content.append(description); + } + + if (row.speakers.length) { + const speakers = document.createElement('div'); + + speakers.className = 'programme-speakers'; + + for (const speaker of row.speakers) { + const person = document.createElement('span'); + const photoUrl = safePhotoUrl(speaker.photoUrl); + + person.className = 'programme-speaker'; + + if (photoUrl) { + const photo = document.createElement('img'); + + photo.src = photoUrl; + photo.alt = ''; + photo.loading = 'lazy'; + photo.referrerPolicy = 'no-referrer'; + photo.addEventListener('error', () => photo.remove(), { once: true }); + person.append(photo); + } + + const name = document.createElement('span'); + + name.textContent = speaker.name; + person.append(name); + speakers.append(person); + } + + content.append(speakers); + } + + item.append(time, content); + fragment.append(item); + } + + if (speakerList && speakerStatus) { + const speakers = new Map(); + + for (const row of programme.rows) { + for (const speaker of row.speakers) { + if (!speakers.has(speaker.id)) speakers.set(speaker.id, speaker); + } + } + + const speakerFragment = document.createDocumentFragment(); + + for (const speaker of speakers.values()) { + const item = document.createElement('li'); + const photoUrl = safePhotoUrl(speaker.photoUrl); + + if (photoUrl) { + const photo = document.createElement('img'); + + photo.src = photoUrl; + photo.alt = ''; + photo.loading = 'lazy'; + photo.referrerPolicy = 'no-referrer'; + photo.addEventListener('error', () => photo.remove(), { once: true }); + item.append(photo); + } + + const name = document.createElement('span'); + + name.textContent = speaker.name; + item.append(name); + speakerFragment.append(item); + } + + speakerList.replaceChildren(speakerFragment); + speakerStatus.hidden = speakers.size > 0; + speakerStatus.textContent = speakers.size ? '' : 'Speakers will be announced here soon.'; + } + + list.replaceChildren(fragment); + status.hidden = programme.rows.length > 0; + status.textContent = programme.rows.length ? '' : 'The programme will be announced here soon.'; + } catch { + status.textContent = 'The programme could not be loaded. Please try again later.'; + if (speakerStatus) speakerStatus.textContent = 'Speakers could not be loaded. Please try again later.'; + } finally { + root.setAttribute('aria-busy', 'false'); + speakerRoot?.setAttribute('aria-busy', 'false'); + } +} diff --git a/src/pages/devcon26/index.astro b/src/pages/devcon26/index.astro index 78a98a1..82b10f9 100644 --- a/src/pages/devcon26/index.astro +++ b/src/pages/devcon26/index.astro @@ -3,7 +3,6 @@ import { getCollection } from 'astro:content'; import Base from '../../layouts/Base.astro'; import Devcon26HomeLink from '../../components/Devcon26HomeLink.astro'; -const speakerSlots = ['01', '02', '03']; const heroScenes = [ { label: 'The April community gathered together', @@ -121,7 +120,7 @@ heroSlots[0].photos.push({ const faqs = [ ['Who is DevCon26 for?', 'For the people building technology across Africa: developers, designers, founders, product people, researchers, and students.'], - ['When and where is it?', 'Meet us at Ghana Digital Center (formerly Accra Digital Center), Accra, Ghana on 19 December 2026. The programme will be announced here.'], + ['When and where is it?', 'Meet us at Ghana Digital Center (formerly Accra Digital Center), Accra, Ghana on 19 December 2026. See the programme above for the latest schedule.'], ['Can I come with my team?', 'Yes. Buy individual tickets together in one checkout, then choose who each ticket is for. Each ticket admits one person.'], ['How do I get a ticket?', 'Go to ticket checkout, choose your tickets, and complete payment. Your ticket email includes a QR ticket PDF and a link to personalize your conference badge.'], ]; @@ -278,12 +277,12 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) {

The work
behind the work.

The honest question after a talk. The story you needed to hear. The person who’s been figuring out the same thing as you.

We’re shaping DevCon26 around useful stories and enough time to talk to the people in the room.

- +
+

Programme

+ +
    + +
    @@ -295,36 +294,10 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { Apply to speak -
    - {speakerSlots.map((slot) => ( -
    - -

    Speaker announcement

    -

    To be announced

    -
    - ))} +
    + +
      +
      @@ -534,11 +507,16 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { @@ -900,37 +878,72 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { margin-top: 16px; } - .programme-note { - position: relative; - max-width: 380px; - margin: 38px 0 0 34px; - padding: 30px; - border-radius: 6px; - background: var(--dc-yellow); - box-shadow: 0 3px 3px rgb(0 0 0 / 0.03), 0 13px 24px rgb(0 0 0 / 0.06); - transform: rotate(3deg); + .programme { + margin-top: 38px; } - .note-fold { - position: absolute; - top: 12px; - right: 20px; + .programme h3 { font-size: 32px; } - .programme-note .section-caption { - padding-right: 25px; - font-size: var(--dc-text-meta); + .programme-status { + margin-top: 16px; + color: var(--dc-muted); + line-height: 1.6; } - .programme-note h3 { - font-size: 32px; + .programme-list { + margin: 20px 0 0; + padding: 0; + list-style: none; } - .programme-note > p:last-child { - margin-top: 18px; + .programme-list :global(li) { + display: grid; + grid-template-columns: minmax(76px, 110px) minmax(0, 1fr); + gap: 16px; + padding: 20px 0; + border-top: 1px solid currentColor; + } + + .programme-list :global(.programme-time) { font-size: 14px; - line-height: 1.6; + font-weight: 700; + } + + .programme-list :global(h4) { + font-size: 20px; + line-height: 1.25; + } + + .programme-list :global(p) { + margin-top: 8px; + color: var(--dc-muted); + line-height: 1.55; + white-space: pre-line; + overflow-wrap: anywhere; + } + + :global(.programme-speakers) { + display: flex; + flex-wrap: wrap; + gap: 10px 16px; + margin-top: 14px; + } + + :global(.programme-speaker) { + display: inline-flex; + align-items: center; + gap: 8px; + font-size: 14px; + font-weight: 700; + } + + :global(.programme-speaker img) { + width: 32px; + height: 32px; + border-radius: 50%; + object-fit: cover; } .speakers-section { @@ -957,82 +970,38 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { gap: 20px; } - .speaker-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 36px; - margin: 50px 35px 0; - align-items: start; - } - - .speaker-card:nth-child(2) { - margin-top: 62px; + .speakers-status { + margin-top: 32px; + color: var(--dc-muted); + line-height: 1.6; } - .speaker-card:nth-child(3) { - margin-top: 20px; + .speaker-list { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); + gap: 16px; + margin: 40px 0 0; + padding: 0; + list-style: none; } - .speaker-placeholder { - position: relative; + .speaker-list :global(li) { display: flex; - aspect-ratio: 1.08; - flex-direction: column; - justify-content: space-between; - overflow: hidden; - padding: 23px; - border-radius: 8px; - background: var(--dc-ink); - color: var(--dc-paper-light); - } - - .speaker-number { - font-size: var(--dc-text-meta); - font-weight: 600; - } - - .speaker-art { - position: absolute; - align-self: center; - top: 18%; - width: 58%; - max-width: 160px; - height: auto; - color: var(--dc-yellow); - pointer-events: none; - transform: rotate(-10deg); - } - - .speaker-card:nth-child(2) .speaker-placeholder { - background: var(--dc-yellow); - color: var(--dc-ink); - } - - .speaker-card:nth-child(2) .speaker-art { - color: var(--dc-ink); - transform: rotate(8deg); - } - - .speaker-card:nth-child(3) .speaker-art { - color: oklch(0.76 0.14 354); - transform: rotate(-4deg); - } - - .speaker-placeholder small { - position: relative; - font-size: var(--dc-text-meta); - } - - .speaker-status { - margin-top: 18px; - color: var(--dc-muted); - font-size: var(--dc-text-meta); + align-items: center; + gap: 14px; + padding: 16px 0; + border-top: 1px solid currentColor; + font-size: var(--dc-text-card); + font-weight: 700; + overflow-wrap: anywhere; } - .speaker-card h3 { - margin-top: 7px; - font-size: var(--dc-text-card); - letter-spacing: var(--tracking-heading); + .speaker-list :global(img) { + width: 56px; + height: 56px; + flex: none; + border-radius: 50%; + object-fit: cover; } .location-section { @@ -2017,11 +1986,6 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { gap: 38px; } - .speaker-grid { - gap: 25px; - margin-inline: 0; - } - .sponsors-section { column-gap: 40px; } @@ -2226,10 +2190,8 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { margin-top: 20px; } - .programme-note { - max-width: calc(100% - 20px); - margin: 30px 0 0 10px; - padding: 26px; + .programme { + margin-top: 30px; } .speakers-section { @@ -2241,54 +2203,9 @@ function packageEnquiryLink(sponsorship: (typeof sponsorshipPackages)[number]) { gap: 22px; } - .speaker-grid { + .speaker-list { grid-template-columns: minmax(0, 1fr); - gap: 24px; - margin: 30px 0 0; - } - - .speaker-card, - .speaker-card:nth-child(2), - .speaker-card:nth-child(3) { - display: grid; - grid-template-columns: 112px minmax(0, 1fr); - grid-template-rows: 1fr 1fr; - gap: 6px 18px; - margin: 0; - } - - .speaker-placeholder { - grid-row: 1 / 3; - aspect-ratio: 1; - padding: 12px; - } - - .speaker-number { - font-size: 12px; - } - - .speaker-art { - top: 28%; - width: 58%; - max-width: 72px; - } - - .speaker-placeholder small { - display: none; - } - - .speaker-status { - align-self: end; - margin: 0; - font-size: 13px; - line-height: 1.4; - } - - .speaker-card h3 { - align-self: start; - margin: 0; - font-size: 20px; - line-height: 1.2; + margin-top: 30px; } .location-section { diff --git a/src/worker.ts b/src/worker.ts index 8914708..6afc438 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -21,6 +21,10 @@ const SOCIAL_CARD_ROUTE = /^\/devcon26\/cards\/([A-Za-z0-9_-]{22,80})\/?$/; const SOCIAL_CARD_IMAGE_ROUTE = /^\/devcon26\/cards\/([A-Za-z0-9_-]{22,80})\/image\/?$/; const SOCIAL_CARD_PREVIEW_ROUTE = /^\/devcon26\/cards\/([A-Za-z0-9_-]{22,80})\/preview\.svg\/?$/; const CALENDAR_PATH = '/events/calendar.ics'; +const PROGRAMME_RELAY_PATH = '/__public/devcon26/programme'; +const PROGRAMME_UPSTREAM = 'https://em.devcongress.org/api/public/annual-conference/2026/programme'; +const WEBSITE_PREVIEW_HOST = /^[a-z0-9-]+-devcongress-website\.admins-a7d\.workers\.dev$/; +const PROGRAMME_MAX_BYTES = 1024 * 1024; const EVENT_SHELL_PATH = '/events/'; const SUPPORT_PATHS = new Set(['/support', '/support/']); const SUPPORT_URL = 'https://pages.inttegro.com/buy/sale_eLiPUNAEjfeHZOX4VHQPuy0oJWQT6n0g7Bdof5rr'; @@ -34,6 +38,17 @@ export default { async fetch(request: Request, env: Env, context: ExecutionContext): Promise { const url = new URL(request.url); + if (url.pathname === PROGRAMME_RELAY_PATH) { + if (!WEBSITE_PREVIEW_HOST.test(url.hostname)) return notFound(); + if (request.method !== 'GET') { + return new Response('Method not allowed', { + status: 405, + headers: { Allow: 'GET', 'Cache-Control': 'no-store' }, + }); + } + return servePreviewProgramme(); + } + if (SUPPORT_PATHS.has(url.pathname)) { return Response.redirect(SUPPORT_URL, 307); } @@ -78,6 +93,61 @@ export default { }, }; +async function servePreviewProgramme(): Promise { + try { + const upstream = await fetch(PROGRAMME_UPSTREAM, { + method: 'GET', + headers: { Accept: 'application/json' }, + redirect: 'manual', + signal: AbortSignal.timeout(12_000), + }); + + const contentType = upstream.headers.get('Content-Type')?.split(';')[0].trim().toLowerCase(); + + if (!upstream.ok || !upstream.body || contentType !== 'application/json') { + return serviceUnavailable('Programme temporarily unavailable'); + } + + const reader = upstream.body.getReader(); + const chunks: Uint8Array[] = []; + let total = 0; + + try { + while (true) { + const { done, value } = await reader.read(); + + if (done) break; + total += value.byteLength; + if (total > PROGRAMME_MAX_BYTES) { + await reader.cancel(); + return serviceUnavailable('Programme temporarily unavailable'); + } + chunks.push(value); + } + } finally { + reader.releaseLock(); + } + + const body = new Uint8Array(total); + let offset = 0; + + for (const chunk of chunks) { + body.set(chunk, offset); + offset += chunk.byteLength; + } + + return new Response(body, { + headers: { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'no-store', + 'X-Content-Type-Options': 'nosniff', + }, + }); + } catch { + return serviceUnavailable('Programme temporarily unavailable'); + } +} + async function serveLiveSocialCardPage(request: Request, slug: string): Promise { if (!isDevcon26SocialCardSlug(slug)) return notFound(); diff --git a/wrangler.jsonc b/wrangler.jsonc index 73afe8a..8429b05 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -12,6 +12,7 @@ "binding": "ASSETS", "run_worker_first": [ "/events/*", + "/__public/devcon26/programme", "/devcon26/cards/*", "/support", "/support/",