From a1d0492d8dc15a312fcc6b9314877fe8c14d0989 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sun, 15 Mar 2026 14:15:51 +0700 Subject: [PATCH] feat(website): add OG image for social sharing Copy og-image.png to public assets and add OpenGraph and Twitter Card meta tags to the root layout so link previews work across all pages. --- packages/website/public/og-image.png | Bin 0 -> 12939 bytes packages/website/src/routes/__root.tsx | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 packages/website/public/og-image.png diff --git a/packages/website/public/og-image.png b/packages/website/public/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..93052cace6e78a74cff8fd8eeb2ca8ff1a9d0a1e GIT binary patch literal 12939 zcmc(_Wl$VJ_vnqYu(*fdE{j6~1PBg6gD<{|2PZ&);INBJ(BK+;fra3{3k0{Ifh1Uv z03kqdy*$sq>izK6t$OQzcK;i}Q4$Uojw zBg0|+3SZZQ#v()z)A<=tEh_IXTf&t@`io!i(prOTYCB6I5$ z7`Q<>ua-VY!{3V568+nM-(xeMKT-1Qykgvs4ClT1*{#cZoar*z!Yf4SN2hca2Jnn> znV<{$6h=m-_nAR|El zG6a1bBw0X~^4jyN-#$5LaV5Qa$%9aLgLYG>E$lbwf*vYypZ)P^MOv+#aVs{qb0Y3l zCxb>)$c;^6SVhsJU5h#B_ir9tfapW&^=os}QxYgE0b$|s(NHK`!DSIrR0woRoho0& zKqC!2_9KiRV{J0fN@mk#vi#~t7~rAOKu0AzOlS7ve5Vydi-Gr(yYI1pCAbE6aAWPQNQz5 z2^}F({PX@@mZuMiH|xKs_e<=E?3pLFuB$=cO+B%~NYAKzpUawV$o0LuWKlKtNH1?PBvgtQq}oU;J%GHu$pg5<%@ zOCigP(G+fRI1yThR5bokgKp2YwZ5nT@4vKMi;UakeHS3+e*u%o)^=HaZbR@oR0+(a zt5+Td*nGAn=%K&xGUO`%ThY)B30&(Itceht9RiTuHpbgQMd#Dc#oKZ^FFA;0P>7aae{ib-0iX`xc4*mr(00 z*HR?gtdf!eIAkS`soWs~LwxA%w;=7uNTdc-8*cyUtK+zHheCP#$iVINVed0U2fWTY z8rUbd`z_JvC7RQ`cER870GDw`hS`OSYI=1k$S6UAS%#=@D0P2&fCnMJ>&@z?C*+w& zOL1h0MWg`!HQ~>`S40(yj%9b~2p>#q{HVP5_tHVCwgm#8#`4jlu1*G31mmZ8(H__t z(JQ>0tq_I9y1-3BQzw2Q5Pk(A`k0!v<98Sm^o4GT8oIt^%0yoe@lQMOH_3!RgQ$1*w`EzHA`24-QdL_kf#4w_cUl<1e7Flb7#&f6jWgf1 zxVd>3zj`tr0wwknPnAC7tO~}qbEe+=OJxj^aD?nvl`~K+%(vkeIVC>WTAKMuf0&Y>TJ zuf7hSr@82-d&1;2RVDz)#NcfKzKVv!X_sC$;R^v$%!u$|Wn<1ord=bY(&i3e;%HKB zXttKFAjmLNrcOapzL;h!3^~`9Y6Z)`d)XA75$a4D-=hmYoYeNC($2PFi16#K<@aa> zo+INnXCA+eu)DH^DktD#qcSnr5G-6XN;cU~MPhIFaM4TQK$p1NVO)Heg@n8{6>ElV ztvT2sZV%H}-F>FXp_t{&6d^-6>w>DzVvldmH@3L4=GPHTp181^1l%uA3?mQ0hlu6V z!$}CojxBALyb_-QTZI^WyY}A7HqXE01odqs&P7aPsYWU}mG5Gs=`(pFhracGxfEjz zE$dVxJtQ~YXR8p&|Gn6cxMI0(RV|K0?_COd2|(Xeehf^S!e|dW_qI&DlY(M8peb>S zi7!kTd#3KgkOvepZgn3f4}LfFVEjD3sB4Bd|FcrOwZwp@)TA7IQ;h0S09PZ4M_52D znAm>8(9mZ61-jplPQHK=C}Pj0x+EWUqa#q|51?-Uqfij*Ebfvc-#}^tbRiUOGp4Xsq-Ia9TZ_X3H_-?JB%^tdgy|iB@ zoCete!Zrcff5>S(x>K{CUP%WTRB4+-yDWje8ob@<-#9_Y@JK%$N4P=C#+g3Omjc1X zbkHXsLvSXIs-xRqkB93*6H7c^gXMFZr0(XsD#&O?+>j=RirOWXV|V1xYrUkaLAfs;v7vb$Yr+wu9Fc6SZ^ z7?!m|*MC1E9)m?e*cEqpT2QPk8dmoG&t8Y3%#Xw-OF1q?lxdI?fu`6K587+SO@+_o znQxjxJ|YdNdBS$dO|0>0=R$By$v1AcFMvQbKmD+Rm`&ns6?qX-LQS}XFR?AP-{xVr z0wbj{`@7e~&;};D`Ii1bSCij49wB(82h_&$P?W-qAUy9Zb-rg~Ruygo5ALY2SMC)JIp2wN+Ak66t#EmC^$vhbZ#JdGII9DJc<#g3r z{I!^qHN){uD|3ox99Tq!h7Y& zB2s)r9l*#3`o=s(lN)8^(~3W0Px)3INB zwIiKyIEp6KHl8TpUxC8_7o9gg+z4u+#hVy8d*q*;>&90KA6;A$F4$aNFnY~phh=+6 zO>-%NNKW!8Q|`?F`+^e?`a!*QpuCpZCLyxbEEr{hHa}zZ5gZ^5s_zy2S{RSx*z;_) zeHfI%Y=7*%=xzX53U@pGsGIogJ~$?r{UZc+-DzEoFI~o75~zpXy08Jt*D^aj4Gz<`1rL3r z7t`zW@JD3k_eBC9Uo1k0*X?*Av-88C^}Dg+LH=(Hy+NFUBIB1n55kRJEVl|o^K_iw z2WH_6!5)Fk$M?lU>iai-2wyq!_eaUIvQxoQ5deN3=tt8J>qqFkp(^g;=rMKN_0U*y zYuU#k!d<201NTR#O$h$S3s~$u?_<`FZk>l#fbqeNQI3x?Gw=xCx_gIm--S=n7*2Xo zVbzcGNF4$+vqFWIGH3G7N=v|xm1Ti|OTpF7286(+KnDemg788#>zB2_f8BxyN-*4SMEcAC;GoK{Kt@uei@WN3bO%_S9*kh|$yR?PfomZa09V>0 z6r8Qfld;7jmBA0hIH+mGNvWy|6&U9uq!bdF$x1xZ1R2&u-dq|xngVA%(Lwr*S>dsk z4RjVy1|^69X#UUjQ55lvIYHcZa`%s$$GLbp)js8qp$5{D);}+{5B7Vvbb^E3uh;C1 zC@X*eA~J5ALo?JXE*WSsC#=|=Rkxi#7~A~?)Lp$l0!iYbbDl>1>G<*1wd|@jdPti5 zA;7_7ZZ(nxyiDdLS~Tl`wM}6;G7}_~jMPLO%q4^fcp~7Ii|NK&LPPjH3TbA-6(_!p z;SLCWA@2qxVS%Bxm4?vlSKl@)-})1;X|a9xA}9CepojvE#aG9_Q@=(;%H60u8kFWW z=){d>)l0Sjtd*SLrZr1RaE4OM+eOkQ+Z%~k;EI&$(xLyM-*cM5ww%hHn#;}Se;1Yb zI@V2|h}#x9c4+a(b^dre26SN~%bYM2dvfMNrVLJz2iG@oK2-(3K5<2a9x2!MY!@mH zZ>U=GQCkdq&e<&sJF9{cL z4s*Y0_8&to0rTt}kE<5G$en+|+w*_r$)Jfon5sCoATnb%h<-LbJN0ht&|(#LGkOsy zksr(H2BWT|$lRjI>yVaoHBQ`G)}eB;zR=<*DsX<6nAuOl;&m)b;$FZ4|^h*BLGPf$d zbX|T@y_RnVUY0XNHznLkXqcGD8VLRnp2;{e8VfD~GPZ~ls^ zy;uq`BL*!|2!;>tN8Od~l0GdCJh~rY?S`vvj!Z2%Gs?}=i>%o*(tXA9JQD6GQ}|f3 zI2(HkW)ksJXuI}B3Oti?6={wq@EIWCa^AhZEF&7J*?uk~`1?sIL1lP#@f^-Q92 z`Fr!i6ffrz8{YxZk?Ja@zHoPow`I?pZ$^FBeq#+ePkDB($uh-PmSp%*oI9?CQnlIG z$8p|rK~)CZM?5z4IB;{Zw#y^vI|Fb7rVWE8zscxelLQTPMc z-iL|38KcoH;r_QiMc#5f`&qxV8)-$@XpN$Hv)RviHA<6VqluwXRRZ*?5U3eTu*Pcm z44OW>xAdY0C#v`@i!|D#{~794JN@QIbWm|0Rdocd)*`f*c>iR%c12v#Q#g=Oa`Aqz zD7jd)d>Zg%%4yu3?A{8h9VZ3uLB`i>aBh$L*CQzmt)Gf5*qVPXJcpQMd95{493K%( z8hYNJUah_tD71Kk`+_>jLFa{2>4h2CVuxd1KcD3`1HFNmMJf2m%Lsz<#UbB1>vr&q9mxQ4Xh7m`dFncI8x>N7( zDmTbEmAaM7=PcS|?vo1;7+HhG&z~g^*UVZsLk!{lWJhQT(4)T&u+)1{DuXNO%&G60 z3CBzpdHPgzpTq1;p(6APm$@v0@H_ngQ^GIvJMJHmgc4U~U{x3=f*jiJNSP_<@}p1n zR1f;wIr^n&+87h_&!e6^V`DRsPM8WCXx&5E0W4g#2UWW%Laz1XjNdMl*MD2unw{sO z;ouMhDfmapf^KXB!D+U?i?wr<)HRX zQl5dN`wz>(T!3B`FkVRJ5I;uLUrJ*K8x|zj_;g&KI1mHMTC>LVws!I`L&Idt=VL09 z(kdsS>iQ)O70r1AOAPV|Jw$zcQ{PX&(ogfzO`(d!#do*l2b$1?v?4x-@1QKKr^)Wv z!gRUF4*+z3xy%ak|5WtY?A-Eqh&mX%l3d>YlfB&Lv*SnJRXDQvV=Us0Y;uLxUe8t% zbgs7`k9Z&bf5t`X@Hm6!sj9vM)>Qtb%ye79%TRcKmc|g2&P207L0MlJ5ew1l?{I(a zSXYeu9B$Mqb3jRBl`Hf(nQL0i00NI!SwWUdXA|jDZHY?x-;A%ntPR(ezHXRq$xgHCY>NUf0FYea{NVpD<@bpufd*KR>VE33w#QfmgtBEuzmt%$HooJp3qVq)hSG4<1N}$qW0Tz znEP)~SCse#fhKK7>dId>%>%b#hhC&lojDWGAq;JE?MgHWH}p>fqJ_vaPX^M?yr9KT z0~+;nEGQUo6Y^$h}^Fay&o0 zEq>hgDq2Qw)V^6({cOQJXo+@i?efVrqox=zi2wj`8aUsa-90ADJ&p&z7l29HCB%dL zR^UGp>!0|h$>8%A4H*TbjjS5G>UthKTM4t>+Q89b=u3PUvH5wa2 z64Z}1@1XXN>C#aXM|<;DZ_Hy{ls`n(KW2H*jH1VDLAEe8+vuAQ+^csl13g*(yKDaI zVHr^Ue{k>}Xr>Mi>DCd0FeF7e^~ z)Xbxm^kVECdv#c2JNxX(&t#JJ^wcinP`l&I8wUxSyAnCvvR>AH$F;A)g(G%0ge1;} zp(SB;-|#S;IW|6Cv!vfMPeA^06FIzX6a3Mdt;J=jATUH{f{}aAjIMT?X%8Lc`O=;X z-^weFB6K=SHo$lem>xGMLHS9KuQ8K{xiDSe6bWbK$s`Jw?};P|iLrXmG*^M``wK zOH?Qy0{8VxCGeN0XP7k4Us8l5j3{Hja;-Zt1mAN5_VLP*awxlvU&Wdjr&J463%zM0 z0~*k5x=y6UxRi9mK0-6hJ5WV{sR!yc zq1h4n1GRtDZGKTwiI-zPunCb%U+nTjjg&KXJB&2ycOapMB$tASh{(HxI*XsgTSHo+ z6U&%<3<`Xw)PHicb{L+V`QSSTQcR%D-fRD`btsS6_EWrQq@Mk_$9(lw38Zi?8a7jd z@EbbrgXyrGurKA)q&~E{_7nKarHuqrN&7IzoL2TPhYh1O+A*Ydd^ka~uWiPugK77P zop`@c%f?nYeY<%bhDaX?P#TjG^7+j#V+5I1b0idUIyVCo*iZdL)bYGwej!I`Jp6=5 zYR3^R8dzs|bM6zSGS+^eP|-MDHVeZ7jy+>Atrm6vn9E9&Lb$#Q&GsPh@? zuvrYzksV^Kd~;{}KN?~Al-B@lUH~JP)%UZDKR4Hd8Med@|Rmb~Uuq99hNZM`g9D9~RQuff-O(a#( zq(%@gzE++5u{`*$h<}+aQV4EDA@Bm4Cnb;^XE>Lr#YHYZ5ucLF^^c}bhyXY*!?rvl z!K3JL^K;P-xPS}f_x8ugBYIwINl;_$S0teGR4Bv%Oq@wgMOs?;nUX(e8 zD(6sEiz^7NXW~J%ZpwUW6`}&ZPa#F#bx&xA>wEQ^f}_x}5na(9I|sDr>Ra2*rL$bL z;&y)LjxPgRiLcv5{a+lP%)DAwqW+iS@+34;_g&a2`?ZlNx`y7{2;N*2-50-Q_7IDjp;8Q*Lut^?P5PlWL&}i1f;}%myz@Ts_fhL zlTAliIKHjHC1w#_VijbqHQ@AHe@O4#JX`BDl@Q~r{)N(8^(k4Vs2gd>+&joqq;&#Qy2>^f;^Y|+aYbMmyS9sM0-3(vaD9(1+1sIN}I8*b2%(5#Q%dFQx1 zJ4oN}5WirKbeRYBUCg_i-~N#=zD4YP9tCYSwB%)T5SO@b0P;&{=LiY!3PcFbDnXjT6Y^!f|Jcc z{O?DZb?SeCF3FWH`DE&-Gp#D#BoW1Y;*nDNJlRX@udE~KtBogfn zJ?j$ZZt(W)FK6bjPX0!nJl;<{_Da?^L&6?9;w!~+Qj>D!k~Tn?r4Y-%mzE4ul=KPO z(pAEUy*_m^SYdgb`acQMvczR}W@))%iv|p+6lDtvu0A|x)4R(+8cG)AE%wYMQoW1QfUEpn=?!&_yXg5RvyG8OrQ!h$!7VZ;5jN+fwTg zYF=zDMS#hKTt>&hE-2Qew(MYS@stNyU-q*zi$_Q-H)`Y@?@unX4P?3N5g>v93u%WmdqkQU0?lLdE zi|auv=`A~LQ?MCRv0BcHkG1GrLQkHvy>B_8?{;;n2U@njGR+X!HprH_I6X^7(_5+Q z^a&Jke($r}cur>iD>CK#k&4$|J-lo@PKdtZjM{q6zs0_*OId(Q`!}ttP#$z-X}u}o z8FK-_KKavuizb4!H!82>);>(3*)|G3z32M@Hedxs^I0dejTx_J=p-r)8aC=p!Bs5n zn}lo|h?}WORiT!>AD*@zJwXd-aV-b@r7gvAKQ<11aoh-=vB_r`7EHD#w%(Ym;N{>r zlU_I;?l;TtfcafZ?l*w;aFtUlB#4J;?Kd?HDW0}^31w@a1VQf18xqYCA$M?bw(zu+ zw2@DJ!67jScSpF%A`;1!HWHeEcgGHIM%@ZSwYex0OF}*&kyX5ikzdi!nuip$sD#d= zJnbP0ne`~NJHcCaI;-!$o&R*7oG;D&_&*31#xK{0zVah00OtSAUp@YJ&+cQ~z(7;b zuz;YLXe<~fNFMxH-~u$kVaUe^gtv;fWAodl^k&ufO5vCQr zpcX#!*M9rrA%N0E`|CnOMw4FNd5|EF_rLDRV4P^Y_{t7mrL$5VdJsJ#COig*hD0hy zcxH~eh=(3gBLJpP5~*QP@^uD57473<9pA|7nP?($!tq>6Oy~+9458$P9Gf`Qb%a#J znF9ovWUo?&J--?~1wD!1gIIk)(l;B}N5XxisK=3Nm0Cl`~8`DF@fY^#XomX7wfSW zX&k-V`$X+q@#V4g@IaV+1Z=0@=87QXtrDU;4;R zhemy#@KkF=;(DAytC7oUF)Y3k=Yq%NY^cUE#IH&dtDkiA!%Uax@oiN(hj83AhVrDV zjmve4q(6?29qTD;waxLrF#1T3z)6vqv%~dKX3YDb?SoDaFR2y-NA!Ls5DQe`kdvC7 zJ7D}fPYEydSc}2N${i;;FdfJ0+-NTU{&2IlGG$E={(1fhgR6^R@!4!~r68DMjIdL?lC)X^2J+ig%C_ceBNk47CCARhatP-)A8V0?5P zWlr~ss_0ydKljS*uDkQ)-qd!zqY7=Lk@v&h#cDswm26_51l)F6hErhAqk}gLNH1Zr z8P9->&}BrD;i!l);%O>X7#3CX0ckqdKdyf<`*69BFs#-+2}}2`>mHBYU!*AKrtuA_tRVyQFqUY6c}m&WjHoMEFkJ*=F{GVA^?*0pC0}Ruhs; zg(95(W(Y1NPF&0^^}_zHA<=(q8k8|rZ=qqrBEQcmYAV34+K>dV zzL;BnD2hfVpZ$tDug46>X48=QI39vq(huQW;c9A~5ClITe+DMZgbru;)i?hZeAXdG z5p}i!(q!XUKbq8I%#XuXF)~F4g&%5BsQtum;fk)Z!1y`tgR|zzUH-nOdWoOloMcOf zNyuWTKg5M>zi%fxu;8MxWO#8qs{TTn$XGRVl2vn={s)oquT(j^=C8D~cG%<>Vf-k4 zy?9sz3Ibk@j42+Y2QmKl3!QL4p`w04QeD%9d%-}tJvqSNUj|EG2XFZ6>I+)&tl*Rj zi42Q#=Nw~kNSWg)Rs21K}p1bvLBcrY*xu|z#a+is*Kyv4u`+nnV``e;D!LFiuj3k*^p+T<)G6tmf_BD*HKvXutDQquXLDr5}`P-ZeZr438dk zxE`gQ^3-JE(w_#BouX_yu8)KAlk zi;_gL_+aHpblyye5t|u^(Mx&|R`TKV5XtwA4H9XeRYUGLV;vj@;8_iE>|h{ai_kyq&?dS0mAT`k2F_mSSZ*U z#~wnuqpzSx?xf+m(aet9yx{$IP0~#L`;B7G>FdY+4%V)hGf90f_Vy=fF7)m$Pl zjRNhDrRU8Ax=DUg@;C-5+p|~zA-#RV=Jd0_Ig&I(eOyl$i^XKSgWH)&FNb}U9c&%e z3|_J~+%MK1l=cBV^WW4uev6FsWy1PvDuiOd-(T=vpcV72`Qxx^-$u;8y<0FVtE^)& z$J>rV^~e_JW;VbY*JlKis^2J+6YroJ7i~p}7a|lrT-MglDdC6Z$+Oy$97v)xNlB|A zp5xmlX;b+0cU(SwY zqRqd}K5GXW7nXCG)>MclKT z#03*}DVO&j&|d+VeovAH_h1zr{?ZM^ZM*lF!i$gmbEP9xbqL}8{8OBC(=?VM_iwq3 zlxx&B2+UWqj6wTBo1I35XyS;kI7%E0#39b)>9hRdNFV(&W347ZMULKdHL3edEfBw- zj0JZ2>dC>Ebq_kSRiT54C!s@K0J|Ev0y+HRS#pW<^jtaCnRbr5>< z_i|yu3rFV~gB0INuV@u0x?f*N4#go43|xv#&KtLXE8W2egexSfZJsobzcleh3 zFTZ4`e8!;kLeb|JcddTI5`HxBd89fADSN|DlYe(`zdHuz00bU5r2d~F;f0Z>yyn!|oMX#8!Y+iq z3C=oGlDxT?!r;}6AjO+>#e7uu%4rQgd~YJTvt@S4$exmmNAU!2?oubVUPBiV@RXX3q7w z;_y#-&(k6#^OVZ1coR@K8IRe;<6_e`JvFFQaJBL;d$CB8E#zX8Ql5dF0BC#Id<~pf z4OuZleyuT$mBbE}y0j#~mvgjyQ5{06qZ{RH4GovM3MeDts$|X5$-{FAFGZ!wP-rSE zu9f}FyNkkAwZXE(<8Tm1G@~@0!YK*DNX!3AH}AZWyqZNhten| zEYV5i{mH+K1i9M-+PDno%VUq00QD4k2i4Q?zsrG#W)mXH9NwgYPrv0AMkc>fPu%-L z6lr7=J*q5AllUYJ8#J@QnpF^|^9WD>5J5g!q(3)tM9m`>H;)Mis6DS><-x*3xEypd z8?o8A@w>kJ!-IkP9gGlJ!>iJ>xup0UJo5Kj3$GInkAIC!H?YMGjc;3E=40M-xO*&9R zoF8|L>-p}CCpiDWpc@Zkz3m_f@7)9O6qQQk7X8I%Tzj~Lr5BI!*mwX#IaM_P?C_AKd*f=l%zG r&oKTsVEg}t#35*`{~ccc|0aXv`-ewj{gNF2&l6s$=qT4ILL&YbFf@#_ literal 0 HcmV?d00001 diff --git a/packages/website/src/routes/__root.tsx b/packages/website/src/routes/__root.tsx index 63e5bd49b..7ea2de9fd 100644 --- a/packages/website/src/routes/__root.tsx +++ b/packages/website/src/routes/__root.tsx @@ -12,6 +12,11 @@ export const Route = createRootRoute({ { charSet: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { name: 'theme-color', content: '#0a0a0a' }, + { property: 'og:site_name', content: 'Paseo' }, + { property: 'og:type', content: 'website' }, + { property: 'og:image', content: 'https://paseo.sh/og-image.png' }, + { name: 'twitter:card', content: 'summary_large_image' }, + { name: 'twitter:image', content: 'https://paseo.sh/og-image.png' }, ], links: [ { rel: 'icon', href: '/favicon.ico', sizes: '48x48' },