From 41c109416f2deecfbf5a0841d8126032455a766b Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Wed, 4 Dec 2024 02:20:39 -0700 Subject: [PATCH] Some SEO stuff --- astro.config.ts | 9 +++ .../com.nebula.gruvbox/gruvbox.jpeg | Bin 9869 -> 0 bytes package.json | 1 + pnpm-lock.yaml | 32 ++++++++ public/logo.png | Bin 0 -> 34969 bytes server/config.ts | 22 +++++ server/dbSetup.ts | 2 +- src/layouts/Layout.astro | 76 ++++++++++++------ .../catalog/package/[...packageName].astro | 2 +- src/pages/[lang]/index.astro | 2 +- src/pages/index.astro | 2 +- 11 files changed, 121 insertions(+), 27 deletions(-) delete mode 100644 database_assets/com.nebula.gruvbox/gruvbox.jpeg create mode 100644 public/logo.png diff --git a/astro.config.ts b/astro.config.ts index 8c36981c..8972ea8b 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -29,6 +29,15 @@ export default defineConfig({ access: "public", optional: true, default: parsedDoc.marketplace.enabled + }), + SEO: envField.string({ + context: "client", + access: "public", + optional: true, + default: JSON.stringify({ + enabled: parsedDoc.seo.enabled, + domain: new URL(parsedDoc.seo.domain).host + }) }) } } diff --git a/database_assets/com.nebula.gruvbox/gruvbox.jpeg b/database_assets/com.nebula.gruvbox/gruvbox.jpeg deleted file mode 100644 index 3d79448f8441295b151454122031e02fba56f596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9869 zcmb7p1yodB)b^dAkybhsX@Q}UMoI+*L3)r9k?xR^5K!8plrEJ9$&nHXX(S{hhLY~i z?+*C-=Krnlzs$Ppa?jb%e)e^81c+wBg%>~}R{-DN=w}bGl8N<5HoLE^ojD$swZmbjW`M6U@Cpi$keXng zn8<2z|6v7)>#S2sNz{K>xFE5wRyFSHOA5$<9LY|*e*yggGAzCzrN3XUg;P9+kweI` z=@I9AWnCP_a(LnY)lTNnaWp$iXT#EDCkS#yh6IpN@V$u%NSOrWeCqM<&H%_zQ&a_H z%{wRUIsZVCh9r~<%rsg~uG-qTY#!0`TI1}vF2BYm+8)3>B_J?pR{#XubaUtc^- zKzN`aGXE`Ok0KgAwt6*B)a;NaQ&^9L&X#nae=}M#b`fi3$L& zDh272&(EtDH$nk$Xn(W&%W&~1Q8$Jq|BjBRUm~y>fTUWzaZQ`!Qt!xRk^xnNu%FHg z84^4rxQF?K%h$@o=VICOdyb75LvObBgw7=)1NR?Uo%s$nT_*rrYW{CTSP6zdV7Y($ zAjJcJb@`{SFQ^Sv4TL(Ke04FqmHnSSRre@%1t$h{W!`D{R7z;5m>*^aNYd_z+@|Du zt${R=TFH1aUXqZ;GNv0lwTC1+wqNN2aPp&mxuMT_L=XkQV4eGH;??71^|83H;V-_S zFo9>^i`#7aqlr}_n2`$2Kg+<*wRqZ*kL8^!hZHZlzb#AH zyx7?#^~7f@H%(<0-S??e;U-KZXfB7(-KL6W&uMWjVe}&J*yL4FkD~Us@yPb^l5O~X zNn(+eRRH)!f}msP2zuaqdJ==C%Y;cMm}QSyPDXHmv8EQ- z++cM3{M!tCIMdrp+7*R5N9Yk!AP)z?&VSD?|H?_HDnZihBubm!Oj3Sg0&^ee3$xf2 z{4u!@69n|HUNFyRtHN|I8l5%vy>2X-^gl`d!|IeCwt$4Qs_&MNy&3SQCmELiJ*{+? zF&LP)&hYFeL;h>AEBOA0r{`$CY)hZ&dx=Ho24tX2e@QIBQ+NRc%z>f*usTi8+~Q_4 zT3$7NZVeCs_pd7xdL{+rpGHLeMiLp-s3($=M&@B~;L=|bixKYss}4{Kwit8mt9Kk> z^6|e+NdBXANQ3o^iv)l|Ay7CL{EwmrRyQ~nlMz5lMovO;QAX`NGeQvi65nO8z~Mq5 zm}=MByA(al7eMfOrg(ewT3MX@zD--ZZNRXNPKli^3(8K&@V%#XDy|Ky+ELjXCH2z5 zFe*vM=%r8dk4uNk^NwsPUTIs-40mM5yN+b+WG}V(A7~4YKJtny-H`25wizOtwkcnm zbscVrymbP+j?`Tju9PAdmB>BJptG{EPw!77GX*r-s)?nfYM@ZX8})-y%y6Ut?pkol zJKnDnagE~Skh(%E^em;rn?k(Y)wtOMMo46;8&Qdw7BM-*Xll(n*4QO6nT%hN_i0oA z(;Wam^<{a z6%k7jQPlhfOi#_2V)>#trk9);Q*v*zcErCz&GSV`Qhaz6afMTD2_SRI!lNr3nz`Dv zmqkhU{-K(Seb02Gt<K!>Vi^b{pnVr}+HL^NeB4^kp z+^W1T2x+WT+ToK`qx+&GJf$=^y8@rccg;AYp4rl7V2vkY^g`rA0d3FR6jyozZ9;Qi zy6{={uA*7#uPoa~c|JbhtA8#um=_gW-0v|}$bOnjO|V$5huA!2;BEraJ zFD>S*`O9jgPKW|@m|2X9V^Y{xO3jtfOE13BOS&n*Oedr}s0^%!wN=YBYueZ7RZrx<-t(< zz>L1-@I)nUdZ>+=_0CvnQ9p`vSc{HbW9YW+P|IM9&hTS!fw7SSPzVeL`@OyZ2$U3n zk-TjN7ng+7Gj-8zlIzR0Y+2^+a*2&xG*;DegTwTC#X8$0*(z-a^8^RzA1rz4<;crBL*l z(0juE(B6(VlOl1H32T+&@i&S51+e?{GZOEf%FS)5{YS#S8}buU51})9B|Cg2kvp!s zIYf&UxcLh2wMiNC@9Zo>!dn%$$#CBFWmPyyG~J|mqcRqk^?ledzulnnyFTj@FSXO) z?fJ_M0-VJ0D6g8@rGc-B!stM@h~AG^9EO6TBLri~<-aD1sIT%(<_X(K*rtq|HWr&) z?h#g0rS+Ln6kP$uy@C-J3ddxxUpW*4g#l!6Qa&{-5^@=)iwM~}6wCsCm#&>D48KT*f!mNpC@Me(zm2KZ!P4_y3lZpq#&D!;b zK0zFQKKt?%=Rh^&_0eoQGk3;&wh$_TNWEHgrLvQyrxfjOjgQc4-H>plP$|27e;)U& zYK=}fB-UV(!6hnH^0Xb1OxKh;$*jBa^pR8C>vR_9G`)VPcm`@R(Nq=44rG*84UQ}l z$I;Kugc+=SRg3S57B*4s$*MBZ!cCn!=&Dmue57u4*~aSwl@?3MBdbB9Mzwsihd-Hh zGTt-4aBa6b=ciNi@=@ZbP|3BWa_4FV15{9^qrqC4{p?c6Nhk?cuvyGHC=q}`l+)`-+^=toJC93di;bpMkIqoKnGR&M80*eX&gX3V~f>Zi* zU?AZCq)Zq2jL0s@s@*YmfRiBj)ybJMWU8sT1IUv9Gwe`y4{Nr!=^dnWuH48-KTCMN) z@LWch-JNcV`50O`{e66>p67DsjZ9?hTSbF-6xW>?mbM9w7_K>?)|c8LZ&7^ieAJG1 z;yWeX8H)^WUaOuTtyEIiez!CSleeNTkL}6J<$|yMc%lF9haNkD2!v*cze#{{+wTP6 zd$&HeM)5Y#W4EXuS!K<$m#ng+U6y9#mpNahg8zbpV6f*xQ|9!m$E9eLmQF*OqIyqa zk5TqJGjT%ds>D4{?I#zK&kt}1%4(c{J7yL+nXf^~aW4q3p|j1Xb+N_`@!^I^yka_)>kSQUp>ShyU!W&l7h1E%OFp{C~=$TjTjZ{ zN4VXpXynz6Rhlh|^EH!^y;774SgOIo4*N=e0wD_os)CDs7e0pJ;W?JYu1#aP(u&zS zn;lPn-Sc0+!O4f+rP(O-l~o828^096v6|oOa|k8T>)}oNOnsZ_TPxWRCsT&cwrvS- z99u1Oc=}I$AyLJUFKHdkbVls82BYIfxmdH=2BCq$Hsx+<-Z>w*7aRSl^=35WR*8Gv zDQWaL!<`N9&)N(a7017PFlnKb@pP3sqE7#&DA^Uq5FW{IF)J1Zt~(b@WiF2OTHQ|> z4tAFNCCmu1I?(E*p%zuvXzGa&%-%RDqIV+jyFiK#V`;#(SNd z;$Eubi-sTAzw@T+r`<^nRoHde-+@-r@Q*UzvbBq~N3h$GDr5cVR+y^uB0;9T4(!HJ zor$y)v?_aLPr7K9ATP3kATv(y{Gpi|I%;-9#H;{5H zymylXtQ%<`5u zH`f+W7IlgXFEg4p&O1^#g)_9T(DoH^@y$1dX}ESQ+#1ZeF>jq0m)gHCN7OPsZO!H) z;2_lMq`yC1TbM5dYQC2nJvfX-(lJn&r%y(K_B1Pv^{Id6-)4DRzguIuhv<>rV9HM9F11aj6qLqv z!f{ZA^c+Xb*+vrF8$#hQ9IQXKvk+3?BA@IXV`5WgiQD9+8-N9>5J{g z787pkQ{rK)C4v!>wn$pb2m5Ya>X%tw#$39+Xx%r~`lR=*P>3D9+jR5v&q`E#sC&VwAvqJ9H%bof0=Gg`U>s)&VUStKbnzpYK^iL5R;aus4RDB zjWH(RnHq~>vi>=8ygn7}wC%Y*Q`^a7aO}!}oR^&x*I~j!Li23yqn9F0mKdk1vPpYF zH`)2=zVdosG@*2T$Mo!qE1N?V(PxV1zRGGA4>rc{65j6I(YTeW`BP(Inn04V@-rF# zmk<8fSLcPS=OmPCwIqI= zfrSrLLvB8iUZ8m@sgR25p0j6|j<=B~yHvX=?c(JinDRy|ihyQT-Oj_qW}t|7m7%r) zXp$37yYJ=ZHeo9lNb>o$SaC|DSqEE?cL%fz$vYVYZHP7y>#ePib2qHiZLQiFP#E!H zGkx5_g{^+f9!GR{ayta;(N2zf~UUm!2M z3{0W5xzn%uzN5ZTN&-&^92*B~hE_{5Yaev`T~ZcKAkMxo z>CASRq$@jXPITFy`~pWq=m#3UDwf38UbmO_CZEve3E_$;*F+cr3j)hlH?D=>CR-2^xDna3dtTpCowM*wjC|z#SC~Ua6JERxw zVev=h&sOwLFKcUMs@>RR9DySbah3}@7Om)53mB%%?{6x_iW7=<6G(7Eq?VK#yQ*G| zXj48>i}uUb70O$qQEPq9qOetKTA+RbrisU5ze$Bi-|widj7NT3I(cWhc`XT#yVb!8Hu|Z8%VsQlGJ0c*-Zee`-mN`b zdBkp{kAB;zU{zZa_jurh<5k-k4m*I;4qsb4ddi z<)ADPFz@{O(iOmL|42m8AND*>fZH{`X)+Rb8MTSGJ|C=9|LrsGhMymkzq+7m>G zzhEZ*1>=9M24r(EK>Qm<`k!oYnbJ;Sez7qi-ugEie_Y;ROi%>BVg3~qE>pms*a<+q zbrzH+@mA}<+2HbOq5= zA9Tiv?6&vij%pwO4MoT21mLZTSW}?8Yp4kz>K9h3Pk zQWzMy6X1`yAX{on>Ln;$(7`Ff*&UbZiI)^6EC78C!~x}5IQUtO>ikP55Qi5G>z6#n zr-NShm-bUMT&9@aGd^e;K`ji<{9oN*p2z+1lLBf$9JMo<)xpV=|8E?RUGd*CCu!z` zd`=zwc^~(;TRFu6hl{zvcngD5^)DQEu|ILtlQhG(7KZIIBIJSZX-%!Iv2A$!RTYPD^P)t9DeYy0s^lV0D%iJ%F zOorDCHKB^w?vuRHF6<}Qh>nmJ;s7q(^AsSM8!!+g^&QbwEML9jw$J{M;HPxFGE{0% z%luYPx{uXUdeVi+;+$gtHaSuMG@(ROa#->M(Wv$t$4<4gR4RHBw>Y80IMix{?SyD% zmAyE($i8I`w^I5D_jo)PD*cgQY6}X8q*R3M_&XmL)eMzcsMVR-$)lK2zV>GuB+x9`C(8ISW?&prz z&HHpDNc&Cs?DqIhQuf1ch&hKgc#7;Lh)3g8Jnl$nxqQ&G_lmfT5<)6oSl3yhWF|^? zC#5)rwo|=fNxm#%cY7?4Vi>!@*KWvPl;c^^;VQ{^<7-`O1s4AF3(J~*dlnYD-&QEl z%^O*PM9WT}mJ$aw+kKer63;2muX>DK{jvoyYV70f%2U?0RdKCs2$3T{Hjtsx=^bJ@ z-|{YLl4SoAL&+C{Na?%g*5TJo>`LJS$;#TnEa{Y8CKfQ3l{)JX+Lq9}0{1hdo5*de zO??A9qMv&-K2n1cKyv3#fEC_E?K^DlpZO9-Yo_7u>n|G=p3qJ%dTY-HeSu3*h`-t~ z_mge(Z5e(QOIdhJR`c~i-ed*6l$ZTs7_6`!Kjs(n*k$}Gt z0$5ONa9*FCj3FeX0C+A2x5)@K2XL1xQ&_i(?*4O+OoB?09}=0{^fn8kG7h40x;h4F zt|yM6U^OgoaF;V|FP^vFxrk|^iwvrdYpb6gC%ISiVyU?QEr%I0Sv#70HB2rcBI z6bvLc!+e)rzqZdS$z5Jet($=w^m#t`Glp2}y^^dFYfnNVUiEx+7xORuS`pP|DIe;KsuJ1Hy9w-;szZ$BMUMr&1Yj@aI%j zd`{JRKA^b;`fizVMAT!%+AyY4(=Iw*0mFH{8tVvl4ql~TR^z@`S1t4m$*s4Ly}53{ zWTn{!7aI6tKjG&A2``C-SBz-mu zsgc9Ke1YR3qS{(k7_c=pX%E8$Js^fY! ztFY5!=3e>M4{zb6sCSz5i*yX3l}at%pAy>b^Wqs8&JhWByq5~LIswGdab*T9l7_20 zb(f`5YurD)?_w-LO!0A2Cg;EGpnqvwMlSDNo93lMldp~SWf5whUaas5pq`0rN?OLzdU0LYqdT6*QhNypD z_rPb|;(6fRUOcVPK`)bZF{8p@A_A-@X+B@f^Gmpv#Q|aS$PX ziF2;4=PoQy*Sd;Sy8OF7%I+3_#K(M1r(H9>5aQNM$cyaj=&qGO?QeDu#_G9Qd#t_< z9goZ6^8oL*dgs9JRw%wJL$3c~&$HWw&p^e>-Er>$a-T{PO z`xGZpUCP*m8ux+pB#jb8&*lVh*VMFeL$c#1)0J}(AQ!$a53jxU^ttL)cic;P~88nZlOV)kT^(pfcTcNM|oV+iLEX@VL=jg?=);g&yv24YT>{&EIgcrpp-LywO`)132 z7$vWl-iemue$4RL(uMriaL!D=vu25i!oL zKOIag`0 zhN8!_dwNMpG+j=t$q+hb4eP5Ma?@5_h8R$ACVX2m(AziZdQBB<<0@V@7Z_1OK$%_|6={u15-6J%qNjPix5W zWZqlO=ewINM)N2J{G?zlqpryRx=EG6$39fr-8eeIR2}JdI9>+JN<_y%>Ry4a?*5i|PqIN$+ccQ(!Bh$QBaZ96#pFp`c3#1`o;U=9a#}RoW?h4Bw^WaVtiYOa3NB@y8wf)^ zP9+XHjUSXCxLs0jC4{5K_5|>iBT~W)&zUkaS~R)4Wy?o}g>w^U(;Cyet*q8!TRNjE zBN!~=r*6O!(sKNARyE%6k?|@r;sK^;Jr8bkUxs<3wz;<(hm_F;r@l`a%!ow|uqhjc zFf1zxBw%VfI2r1RV{P-e`kE@zh;la_-#ALqg4Gohgn64VR)(GQQ8l%W7o`CB22;JI z?j3y-AAwbNuY?M*eOPrB-i~HG7mR7eRN(a^Wv=X`DWM%P_r+5X42~irPmbTv)Cn-V zO~-FGRw-PO1lC{-9{7<$(j@2D9IGw59kL0W=}9Q1UowSXGVFc33Dv0m+3B=0pZ3+w x_}V2{T3=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} @@ -4118,6 +4130,18 @@ snapshots: '@antfu/utils@0.7.10': {} + '@astrojs/check@0.5.10(typescript@5.6.3)': + dependencies: + '@astrojs/language-server': 2.15.4(typescript@5.6.3) + chokidar: 3.6.0 + fast-glob: 3.3.2 + kleur: 4.1.5 + typescript: 5.6.3 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + '@astrojs/check@0.8.3(typescript@5.6.3)': dependencies: '@astrojs/language-server': 2.15.4(typescript@5.6.3) @@ -5377,6 +5401,14 @@ snapshots: - debug - supports-color + astro-seo@0.8.4(typescript@5.6.3): + dependencies: + '@astrojs/check': 0.5.10(typescript@5.6.3) + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + - typescript + astro@4.16.13(@types/node@22.9.0)(lightningcss@1.27.0)(rollup@4.27.2)(terser@5.36.0)(typescript@5.6.3): dependencies: '@astrojs/compiler': 2.10.3 diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3afb9bf0eeaff071f1d52bea51c74cf93ad9262c GIT binary patch literal 34969 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 I{`BpC0B4zxp#T5? literal 0 HcmV?d00001 diff --git a/server/config.ts b/server/config.ts index 5681d9fb..96b1d11a 100644 --- a/server/config.ts +++ b/server/config.ts @@ -15,6 +15,10 @@ interface TomlData { logging: boolean; }; }; + seo: { + enabled: boolean; + domain: string; + }; db: { name: string; username: string; @@ -31,6 +35,7 @@ interface Verify { name: string; typeOF: any; type: any; + verifyExtras?: () => boolean | Error; } let doc = readFileSync(fileURLToPath(new URL("../config.toml", import.meta.url))).toString(); @@ -41,6 +46,12 @@ function verify(t: Verify[]) { if (typeof t[i].typeOF !== t[i].type) { throw new Error(`Invalid structure: "${t[i].name}" should be a(n) ${t[i].type}`); } + if (t[i].verifyExtras) { + const extra = t[i].verifyExtras(); + if (extra !== true) { + throw extra; + } + } } } @@ -53,6 +64,17 @@ verify([ { name: "server.server.port", typeOF: parsedDoc.server.server.port, type: "number" }, { name: "server.server.wisp", typeOF: parsedDoc.server.server.wisp, type: "boolean" }, { name: "server.server.logging", typeOF: parsedDoc.server.server.logging, type: "boolean" }, + { name: "seo", typeOF: parsedDoc.seo, type: "object" }, + { name: "seo.enabled", typeOF: parsedDoc.seo.enabled, type: "boolean" }, + { name: "seo.domain", typeOF: parsedDoc.seo.domain, type: "string", verifyExtras: () => { + try { + new URL(parsedDoc.seo.domain); + } + catch (e) { + return Error(e); + } + return true; + }}, { name: "db", typeOF: parsedDoc.db, type: "object" }, { name: "db.name", typeOF: parsedDoc.db.name, type: "string" }, { name: "db.username", typeOF: parsedDoc.db.username, type: "string" }, diff --git a/server/dbSetup.ts b/server/dbSetup.ts index b3138ce0..7e63d3db 100644 --- a/server/dbSetup.ts +++ b/server/dbSetup.ts @@ -33,7 +33,7 @@ async function setupDB(db: ModelStatic) { { package_name: "com.nebula.gruvbox", title: "Gruvbox", - image: "gruvbox.jpeg", + image: "gruvbox.jpg", author: "Nebula Services", version: "1.0.0", description: "The gruvbox theme", diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 4365ce23..a51be1a6 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -3,6 +3,8 @@ import { ViewTransitions } from "astro:transitions"; import Header from "@components/Header.astro"; import MobileNavigation from "@components/MobileNavigation.astro"; import SettingsLoader from "@components/settings/Loader.astro"; +import { SEO } from "astro-seo"; +import { SEO as SEOC } from "astro:env/client"; interface Props { title: string; noHeader?: string; @@ -11,6 +13,8 @@ interface Props { } const { title, noHeader, description, image } = Astro.props; +const SEOConfig = JSON.parse(SEOC); +const Host = Astro.url.host; --- @@ -18,35 +22,61 @@ const { title, noHeader, description, image } = Astro.props; - - - - + + {/* I left this out of the SEO component as we need it to persist properly : D */} - - - - {title} - + {!noHeader &&
} diff --git a/src/pages/[lang]/catalog/package/[...packageName].astro b/src/pages/[lang]/catalog/package/[...packageName].astro index e77e8756..050b259e 100644 --- a/src/pages/[lang]/catalog/package/[...packageName].astro +++ b/src/pages/[lang]/catalog/package/[...packageName].astro @@ -10,7 +10,7 @@ const assetsJson = await response.json();
+
diff --git a/src/pages/index.astro b/src/pages/index.astro index 24c50b5a..6939e1ef 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -3,7 +3,7 @@ import Loading from "@components/Loading.astro"; import Layout from "@layouts/Layout.astro"; --- - +