From c410c499e16faa2e6617702e3356e7ad22fbfe55 Mon Sep 17 00:00:00 2001 From: enscribe Date: Thu, 12 Sep 2024 16:34:38 -0700 Subject: [PATCH] feat: opengraph design --- README.md | 10 ++++++- public/1200x630.png | Bin 20467 -> 0 bytes public/512x512.png | Bin 10166 -> 0 bytes public/favicons/android-chrome-192x192.png | Bin 0 -> 856 bytes public/favicons/android-chrome-512x512.png | Bin 0 -> 1921 bytes public/favicons/apple-touch-icon.png | Bin 0 -> 838 bytes public/favicons/browserconfig.xml | 9 ++++++ public/favicons/favicon-16x16.png | Bin 0 -> 495 bytes public/favicons/favicon-32x32.png | Bin 0 -> 598 bytes public/favicons/favicon.ico | Bin 0 -> 15086 bytes public/favicons/mstile-150x150.png | Bin 0 -> 1069 bytes public/favicons/safari-pinned-tab.svg | 18 ++++++++++++ public/favicons/site.webmanifest | 19 ++++++++++++ public/static/1200x630.png | Bin 0 -> 4583 bytes public/static/512x512.png | Bin 0 -> 2286 bytes public/static/logo.png | Bin 0 -> 2287 bytes public/static/logo.svg | 20 +++++++++++++ public/static/twitter-card.png | Bin 0 -> 17703 bytes src/components/AuthorCard.astro | 10 +++---- src/components/BlogCard.astro | 9 +++--- src/components/Head.astro | 26 ++++++++++++++++- src/components/Header.astro | 7 +++-- src/components/ui/avatar.tsx | 27 ++++++++++++++++-- src/components/ui/badge.tsx | 2 +- src/components/ui/card.tsx | 2 +- src/components/ui/mode-toggle.tsx | 2 +- src/content/blog/2022.mdx | 2 +- src/content/blog/2023.mdx | 2 +- src/content/blog/2024.mdx | 2 +- .../blog/the-state-of-static-blogs.mdx | 6 ++-- src/layouts/Layout.astro | 27 +++++++++++------- src/lib/utils.ts | 4 +-- src/pages/authors/[...slug].astro | 2 +- src/pages/authors/index.astro | 2 +- src/pages/blog/[...slug].astro | 12 +++++--- src/pages/index.astro | 2 +- src/styles/global.css | 2 +- tailwind.config.ts | 21 -------------- 38 files changed, 179 insertions(+), 66 deletions(-) delete mode 100644 public/1200x630.png delete mode 100644 public/512x512.png create mode 100644 public/favicons/android-chrome-192x192.png create mode 100644 public/favicons/android-chrome-512x512.png create mode 100644 public/favicons/apple-touch-icon.png create mode 100644 public/favicons/browserconfig.xml create mode 100644 public/favicons/favicon-16x16.png create mode 100644 public/favicons/favicon-32x32.png create mode 100644 public/favicons/favicon.ico create mode 100644 public/favicons/mstile-150x150.png create mode 100644 public/favicons/safari-pinned-tab.svg create mode 100644 public/favicons/site.webmanifest create mode 100644 public/static/1200x630.png create mode 100644 public/static/512x512.png create mode 100644 public/static/logo.png create mode 100644 public/static/logo.svg create mode 100644 public/static/twitter-card.png diff --git a/README.md b/README.md index 7ef1b91..b54094c 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# erudite +![Showcase Card](/public/static/twitter-card.png) + +
+ +## astro-erudite + +astro-erudite is an opinionated, no-frills static blogging template built with [Astro](https://astro.build/) and [Tailwind](https://tailwindcss.com/). Extraordinarily loosely based on the [Astro Micro](https://astro-micro.vercel.app/) theme by [trevortylerlee](https://github.com/trevortylerlee). + +
diff --git a/public/1200x630.png b/public/1200x630.png deleted file mode 100644 index 8a517904ccadb9d85ace625f50810fb0ad6d50bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20467 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 W^yn{%z_0j$P9AqUR(jO;=6?Wk+b6{U diff --git a/public/512x512.png b/public/512x512.png deleted file mode 100644 index 8e507ea3760a72f669d3f6b11ee651f79fae0bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10166 zcmeHN`8%6i*M1U|)~l$N8l%+F32hxiNd=|aqZJ*|)=;$CBSefbB%uRQ6&>D|9zt9F zs;9=(6tfCaHH1=A3{9ej5=6`-c^}UEAAG-j-*x$EJy)``_sV+ib+3Exwc{Nf>|}PR z>;M2j=Ij}pivR!xAEAKMHqgvtyH-I13A$)!4dk_{O#px)h^Gjp~BnTDto_=r?(gH%Km8NDSkoww4AoiJK~j!5@8^D zWT0$KFvtiZ^xy`2I1ywU6=cou%oso1HN#>I*S3-tv}pb#TC7b2B`zhWX&G&KI7T2I zeRaXu8M^Vo(H&C2Z&1j_^PK~l!0$)O_bGs*00^X3ZPP+!B*dd*ZB4v4hid{UVw>~4 zeiIF}7mUZA1BXJz#etwrEA{(sIY32m@X7X#rJ@0kof{U2iG@NfX>V1JZ>}Q;v}{_< zc1KI#j&ty--!|5RLZeS?T5%Q7C7A^OFPrOF0!JnP@%t16^7>|n%&U#{q@;k+O}pjv zR;0J!v6YBh?6JkuTg7EF0$XK#OM7ezz5lC%sQ|hC#<;bTii6q2J63;B^5b(`-ov$lF$)?$L$toHpU~>-W(Z&FW4JAc`3F8v{g-Ui53xAaq1jlPjy@)y z6*Xo)ysRo(A49|qi-b$GyIEvoHNrZNrc|@s@Q_e3r?eBXKFeCjCkO&M65N7W{`$V^ zGU~Yb4w@Hit(S!mtuSWO#^65K&eWkI$F&QS=7SRsw39R84Aw`ds$adLAoAo54mvHQ z+l6L8SZQXBJV$B_t#+60M1Wo?uKK}#bF{JqJ~&F?Qm+3vZBpJreGZ?k6&n+_&40cn zR{InD5zk;{(ru}ngVZa(RNntR&$x2A!9c@5qBGTh%5t%5MM^9yJ>u7Fi;o4La64<4 zIV%hP^B^sp5jphGx8%b@SM7%TtX4FhFIT)qM+hka0F|RYV~QUOOs*Ix!CCNI4C73y zd5N@RbhSdR4=&nL2NcT}jplD%k1-!!X`>x><2_<&DV2RG$sh}AKS4Bwo`|_G+HrzK zCYlAvnZNC+nhv2^Nvan)5^4lov}{s%i&yOOSao&P`cDJcbXd)rp3&o5P)oJ48m=Fj zY050T17OEb!OY+be?2TJ*hulYP%3HF(} z51AyDHr#ZOtZ22TCKegRR-iEmLVg*3^s!;v-mu056eFU$Fg6Z8vX8a`ev_ErT5+j- z>Xw0ddM@>|jDG=daKkr_&f}#Tk${$k5KLfn6@0c$M-H#;G^tr>HPM%@S7OfxPCZ^+ zQ2%O&SnXgnf?>Hc%N!Plsu9vAQhYX`Ws(;7^&megc>NsqwB=*%Wj^@+IT?Dp0Cr#l zg|14vw6mCdN|VqJhzVL>uY~-#kQC8{ zwJ~*_6b;VcP2jBU$i3izBvjvE9Acft8OvJKIs)h3MXEZOvL2B4x_w1!M9qGtf&XHW z^~kA`-8XfPjsB42W)fB$_??C;9^*3=EZwX`b$5q4n~1|3VU0JL8;D%FI5WjFTYp34PAG$I(D< zRQN%>Znu2Baw@l^&z1xe&c?-oco#Bptu?v@lTc`FUb3a+=$@1+@{y}<^n-IDC`{MV zxE&&bNstgM2Nz!b6_=;ogV4HY_ufY13Mj*VLnwO5^~TW-czbt zkNF!V__n$W=aPGlwagC_3pFUDeI+2;k(>?!HqR?TU8t?WBkog-bx1xh1l=G_TH{wc zGf2sCo~b4Ps=9I>Ob}e90!I%W-dy5JCMTQApDX1)kdS_CUb zC$rb3{$9;piu=^>LxSnBB)gojvS!yd-puHB0HcBk4Na~b(V>$srESX?>w`@00D8*W zLK-EAPUYWT7{|hVb>6y1UcYP_xm~NxvVLb2I_vY&=vs_yln1pz&;JyaTyv^8KFCUO5 zBvtHsIe5FrDhl)#mJt{5s`^mB1-ls(-F(=&C`g=%O{N%n*(Ap^ntoq@vK2Cqrmwhq} z3chnu?kiuN8jB^Fde;V0$EM7Pwo}?4>igo5xL=nNqWn08E)dOoUTNVe-I@=ajsQ0n zpEX^)zn}xP2kG9vZsl5D?G)F$BSKBD(Y*-sZnckr4~1*X$$l?m4o({nES8k2>*IL| z=-}hlmhgTf4cUtEm-0YK|91MslEmA{W~P&3wk@U86KCMke&iljX{F%iOhl1Y`|o`S8mU#s;Y5c!aO_guJi>I{K1(4xit3r@M^azLO$7#J$E`sqW8~){%jD* zWOE}^!~C1mFAh%tM=OHd=nG3O$$j))^fsfb<8%@t%`*X!5Te*@QA#LjHKobfEy*AE zJa3!xG08|KlBuyorOO~AzCAZ?6F(C92ToV4_Nuvvn?6Tv_g=aQJqsS#?JBw*YNy$@ ztNub?u!5!yylh2E{cFN2^|Zn=6e8kpP0NwR@Q~nFb?W`ju;Wol$x>! zX|(#X9?sQS)4_^2_y#%$!OOwej?&P@%L)cS8E1xOlX6L;H&b>H4p$)Z&>PPSm<(PIIN@ zok55uNy~llQ*t8uOKNB!W&~!?8lNROJ;D@~Ttn^kqyNt{(?_`ltq}%%=$jD9Xl#W? zC5&AwCOe?{sC~Dz@FmW{TEZ7MuBQpi=ZQq?<36y{d=McwZ`dDYC=C6U7P2imm!!q9 zGUC0fHJxkiWgoX3IC$(~(iKG}*M`99s0Kr*F}3?ToOEIu>f(Lf2OzHOD&6lk<*CFR zw}!txAw;<*8M%3*EbKj8!MK#~7dV`a`NIeB%u+Q_`O8giw+C;zAM4lwXQa7H&Q9Sb zJJET8sUv2q#VaNs!KzuP!}ECWoJm>9eL}g)2BlYEzNlP!X6YNKRDuI#^tI&(%5)~c zIl;w@MEv?Yt8KxsFsVB+xxW6;lI^sfJ6$=Nny}A7X=e1o$khE<&lp!!=Osxe+_VT~ zGhB(97xu7ozC`BDaHRsKcAOM}5(e zi%+;r^T`Go;>zJncU5SiEaXv5l-Di7Kv>ma=*Uw$l3j1-^Zrndel+%j1N@>%=%LP+ zxZNirxror)y5!(*d*8Fm)_IKO!rs0{ZbWw8sT7=4`@yWV9?}`uf1awW+aj$9y~cH zb>41`SB8CkUM-idI4Q4nw1KRUjiMALRj9EapGRe7;8&OP9&#JiWV_>g<{JAGd)X7D zjwS4KmKO7n4{$r9S&orJl=$lydTL$i?|Y1^|5ZMxV_NMV@eW>-z9U7Jm~^MT=!J|gpCBH_2W}a( z&u5s&oP$6#FI~TGFI_*;Oa0CKBm-X|Ia+_O!t@#00tRZZpzyip8I=LBmmBr|gnzC% zo2YHvpRlB8bD*gbuO=X3klEv+>-}+{*5xCy)#9P9_XbO^n&BND;jZ?=YSNM zKg@YHjSqD*4CH#PK+clH2<9UsZX;V8+m58q5C$;x#GXPWOpjg>nR zY)cH=Ouc^EA4n(~D-?gZM-F)Tf?pLJldI^{+8KXEX+Tc_FwQ@jl9d#>+H#zsmx7<1 zrOCp=*p%mqeif5zg~;uXE%&f)zK9&;d@$=)Pz!Fi3Np;``aJj+;t|UIJU|{~-*1MO zdc0VSO0N9`Che!d>e9ndc_>>i9P?*5UtV~X9G}@rbv>G1TJ!bplC4|7`nTF8P*Im)Q_K%twRN`;@lj^3AZ+ z`awt>SWuV04o|SmFt4=JbCe)D(}1&1&Uuc@{J&~P8Tl6tARbpv4l}_1&++17+s$s! zBd|?lyW@@OW+O-Qk|pq^t6OpNjOu`vCb0Y91OI=zL;pqSKYb-)G~oD7uH0&KhT|Yx zo%8dP*W73#X@U9s)Ovi|<_ur97TSo(R_Hd`l3QTdOpq-w{J#W4fsJD<07!ao+y&U; zy{(d=Y597q2yWc&*wPOhR~xp#uq7rpHgH?=_YpFnJJ+YHd``{337*Srvx>Gm^D8vSIWX8Z zFjO%xeqmsG!N_ufnPUOFfCCPR8{6)_VAcQ7@ciJ%FX;{pa~Z4{OPF3E*(>&* zyXwwchR?qvz0dC!T@bnMMPdE)I$n+i!Vc;UdbSHPlwX&HWeq{Il&$SnzKWgIljhL^XCTz7Ml=ule;_o4`kLl1irl900|zJ z3qK1atmOHeLAK6i*!6`$p6~Php9M1(LIi+e_>%FVd3k%>FJri!kPra{9n?nA8glbfGSez?Ygia6?gG>hUKJ8i5|mi3P*9YgmYI{PP*Pcts*qVwlFYzRG3W6o z9*)8=4UJR&r_Xpk4Pszc=GIH*7FHJao-D#Ftl-jMayW%qd2@)u=^Iy09657D<_P=g e29E_^dJM0`1xr3TnN9^-!QkoY=d#Wzp$PzIPCQxw literal 0 HcmV?d00001 diff --git a/public/favicons/android-chrome-512x512.png b/public/favicons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..773f6339286d984b47ba3f1116185f3e74a5c9e4 GIT binary patch literal 1921 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&w3=!$sk4H6X>3?&#~tz_78O`%fY(kgt&J z5#-CjPz980XklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4ocByV>YhX3vTXZ8bm z>?NMQuIw*3dBpTBRkk-OGBB{IdAc};RNQ)dcVpj_P>F`bwy8&VNGEOEu1 z-tU>SrK_C0kFL$hcXai3O3utNkxpeTX;1PJGRrIa^zpNu|L&8P|F>6uKA(B+%)2*Y zsoR&!H$*aZ2s_MSc*G*0-eAFagj2zfp>QY)eLp%Y_5AYZzhrD9Hm)$Ij*s##e*KUg zV^eKwYr$^J_~-MVq^bhG8WxHJY4%Q;sxN25FE{63$k!ITJ6E^zT6Uf7pI1fuQ*NKX z-LEY+x03meo#f4F{FclVTNYhndFAPS=^MT|yEGc+tEb)EF?s$zxf`W{4Ek(tH+NO% ztCy9sQJe<0zbJa~_vOxQ>Gf8htj~3u)mj;zz9#DrvU9ia<^tw(l&31Ubt?C7#s94Q z=zqkAq2BIiH83*Lm@2-%0>#Q4Mv7DL*%-dPpV!_#`2YTC(e8KWrrEsydHnyI-;8;W z+C{t1?O`l)SHAs8F`e>U(yiCNZ|1!0?!I#7*?L?L9v;w;-fmyJ<=Lu#$91_LTyG5A z_U_((;oVkLiTf|RU+y$}@uVW@x+|m2ycwyl)%M9Hgfb{oCr-p-`Su>W`m_!l6+a$d zjKADmY#@A~et*0V|G7qEinHO4nWq=V*Zr@m`oQ}u_2{DAn^n(O?fYUc_%-3^B0DCE zqa0k?b+2pREP9Xf^f@R>(0j~pubTAx^=EzrRwAk;t`Q|Ei6yC4$wjF^iowXh$VAt` zQrFNZ#K_3X#N5i%T-(6F%D~_P$NC>A8glbfGSez?Ygia6?gG>hUKJ8i5|mi3P*9Yg zmYI{PP*Pcts*qVwlFYzRG3W6o9*)8=4UJR&r_Xpk4Pszc=GIH*7FHJao-D#Ftl-jM yayW%qd2@)u=^Iy09657D<_P=g29E_^dJM0`1xr3TnN9^-!QkoY=d#Wzp$P!Sb8&|N literal 0 HcmV?d00001 diff --git a/public/favicons/apple-touch-icon.png b/public/favicons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..37b821fa0100ae015631ebe5e119dc6433213828 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^TR@ltNH9n&i+l&9SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj ziKnkC`wLDUF@1~R4I8&JFfhLMba4!+xb^mqy%)2iMBB%^z7C2JDhifuH>wzP_cT>- z>RuII!M;Jn|Dj~g8k^=7oDo0uBWEY<`kR(e`TX~j%3T}0f22wpC6=pwUD6dEEX8oE zc!6VcnLx&c1+pwsCK>FFY`nJ|p+d5}YlYu=ulTl`zkSaonAl9?N4xr$ufKGw=F6W? zYqyxm-_@J8bn9xTzRU{?9IZ7}tR7eIk~7=tvGoP7t=&(tnX5P7yD)pV*5=R?hP+@4 z!czV8&TDxZOD>rg75#eocGqWRHHLqy6YtD7TmPk-BUV@Zc{QJ8-5pDW3HWgQ|rkLHeRVM%?_)L)O(@@m&nSh++SdJv0SOd^rp94 zyNn#%>P69qr|fxm$}PV8Lg?gw;#@p?4 zc-UkWE-d&jZS~ypk;6C6UQWgIoMl3`_~CC9V-ADTyViR>?)FK#IZ0z{o_` zz*5)HD8$If%Ea8t)J)sJz{ + + + + + #da532c + + + diff --git a/public/favicons/favicon-16x16.png b/public/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..99e32d6b6af2be9d7fb7bf985814d02ad5243a1b GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6S$s?w3sj|IM5hzse>EaloalUurUcn{@f!6(3 zRTY=9Wwu15zhMx1wULRLDJiH;XdUCq#*p3}$|i~8=6An8`|IhkWBGw2Cr&b-;hCe` z&~jvYzj`3^rr+Inc53NQ-m|Hp#e8ChgOQQy^5w?9YR32Uk1lk1IwL1@%B9Z8KcONv zl{Z4Q3m&HRtGXBGug+CGyQFMy1kfp}C9V-ADTyViR>?)FK#IZ0z{o_`z*5)HD8$If z%Ea8t)Lh%Zz{}CvC>nC}Q!>*kacfu@D((W*5MC7$Q4*9`u24{vpO%@Es!&o{ zkgAYbP?F5RP%-E6CmxQ%Fb$1U{-@7)J`G}ER_4}A<`z~K_MR-lEUe(tU~)KxS$T7a r!s#1VP8>ONMCJ(l=?0GlUV03##05(}IhjrcTEXDy>gTe~DWM4f$b+C4 literal 0 HcmV?d00001 diff --git a/public/favicons/favicon-32x32.png b/public/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..17155a5a5edee5ae26433ee33042ef3fe18b43b0 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKptm- zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-lRBc^Yuvb|9eDD=$J#WBR=_}Qt3euo1DT<*8$ zx9D2U5o(&EZShD$Mq$d8ISrSWELyy1L7Kj!7L&)s7zOU`nyyyvGrJOg&%Ar{=1==b z#SnHwixdVovmU`F-SC_(nR6b@=D)Z50LyV5%gsv!RJ0uu9ZC+Xdt8x{G2$0mccH+O z_hg?+ldZT-5#P?=K_A!_=j-0~nsT9tsa}sIYmv^EH7_Ufo#ZUL^KsGKqKGDaLxqR- zI|_6ka_MfLv*;yTv!(wT#nXwa_EbKLn{vURnKS0Z{+fg8Z+oTVlp`f7!Ztr(Y2Q*a zt0ZLKkq_6yHePrjobr&pq1{1FQ`m_Q=wsCq*NBpo#FA92u5DmoWngfDWBm^l4Y~O#nQ4`{H7pDjcL8b$uL_AM2}&$iC@9KL%gjkt zD5)$+RmdzTNoHWEnDh7(4@Y5`hQ=xX(`P)N1~D)zbL%B@3o8qIPZnVoR&Z%BIh?|* uyg5YS^o=Vgj+{9nbAu}N>#CfKX(RjJfY5X4q(Ewr()Q;X|u zBt+6!1Vkh%{+-{;WiHFy9P7>GW^R&M_%b_hXXd?q`{wQLWKU#|?3LMBp{(TD5s^6& zsjAKTw8%2DX-Yl5I3=<~gJZOzi!6Z3H@2BxQUBZNbh?G&gAxP%7nt zpWlC#guB@J2JHD;>cuD983U`t*jsp)3HG@!VfO(zm<7^DGA~LLO>TiyR+F`~SW`~iRcEidhJIwK6{f%6|)2iS+ z^uN>MTP}NZmbj`p=qkr7-ZI6%M7U*0v=YNC!SX@Wf zZCC@Nzmz>+e8DG=;2y+WJ2w7Loqtp7Pwjtm9d=t8EBC0Lf&63V$8p!Op#}B)8|&Vq zdIs)4$YR}lRgdfbJ1Oy=`uQvM^JnV(yGnedeE&%O{xvD{AgUepeA{A?!cdnZ{$Z%g zecEcD`WU)Sq015#^w%l)t(m@+SB!HD?s%a3AHY#K?t%8#_ntLR7U-v38-c5| zeGaPovZ(btiIVPik{pF~z5Um@8e z$d`ekN{xY`p@o6r7f`6-1p`B=0RzLU1O^7H84L{K1#@-<+5jb(lDyqr82-2SpV<%O zv6p!Iy0X9EEaktaqI2fg?Yh+62~6qr`(*x%E;Dw&^Wx?xri}_ zfvuAvudzUu;|@MI%eD=Loy{IHE{_z1*e6|?;;t-yC;9q=--NZZ`(ACCcjt?+ z{O=<<9hesKme<(XzKz>Z*uK~{bsmqnd+jT^4TaUrabKl-%|CCbW~i??3-b%IYfbKP zzC63{+V5ST*8C|utJ?Se>&5MAIkRtbA$uOG;bM%Rhy0b#FR#hZ*S9Otk1)OSbl$YP z+`oRL$fr4D39>zpKd*krD7`)W_vasrW%T>f?=qXc+i>sd<9C9uCG`4^K7YqL+f4Rq z|2y8-Gmq{!ufpmrC#${h;x;6nwp!7CSNWRpjl&=A%`y<$E((qnWS^+;Eqd5@zB#`1 zqHW^$Gpc=?t0IBHUv@U;(T)|y_h)U$#U9wa-}V&O{Q9%U?^V^Ft^cn-3jN*`dN?*O z-&dj?YamRtz@C!uh(4JAht0mzxMIzd$|9gL)e_f;l9a@fRIB8oR3OD*WME{XYhbBs zXcS^(WMyJ*WooW%U|?lnaDij}4-^f#`6-!cmAEx53>9|)Y6!0ii6{w5ELSKf%1_J8 zNmVGREJ#(zEGS84V5pe$_!AFDVVH)-DgV=FJf8+JFe`KGC36ca3wuu%VHQ?!X)rmQ v!mPYGMB(&}D<_VeIU;j}{d9xJ0xvy=SK@*tpPWpmg8b^~>gTe~DWM4fwP})W literal 0 HcmV?d00001 diff --git a/public/favicons/safari-pinned-tab.svg b/public/favicons/safari-pinned-tab.svg new file mode 100644 index 0000000..459b1e1 --- /dev/null +++ b/public/favicons/safari-pinned-tab.svg @@ -0,0 +1,18 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/public/favicons/site.webmanifest b/public/favicons/site.webmanifest new file mode 100644 index 0000000..9278c4a --- /dev/null +++ b/public/favicons/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/favicons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/favicons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#121212", + "background_color": "#121212", + "display": "standalone" +} diff --git a/public/static/1200x630.png b/public/static/1200x630.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae26882aea7b7321e875f68136f3d26d9148df0 GIT binary patch literal 4583 zcmeAS@N?(olHy`uVBq!ia0y~yVA;UHz*NS;1{CpksEz?roCO|{#S9GG!XV7ZFl&wk zP>``W$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di41zVDE{-7;jBjr-<{ohnIB;O^D@ECQ zmeZO`A8HsI=*+)c3o@Ny(LXSCh(!m)yEIA-a1hje7W{tC7!((K`k1+aRD%iQC^axa zux0b^^Pre;m@*m@G)RSP8p6P0j)B30WXhTusO^CE+jqwD4-PN^*$Td+)W8P8+c)pP zrIx_c(U=(6m_W7tt+{;Rds}dRd2K;vb|X1|j%vVOrdjX)%>yd&Tr5XpVlbtV(fVZ2 xRidNy$>40&jMgWEsOTQ8Psr&#(7xvR&0e!z@m6-ff;p(R_jL7hS?83{1OQ-~(c%CA literal 0 HcmV?d00001 diff --git a/public/static/512x512.png b/public/static/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..21022ef514888edf94e3a83b67e99cb67e8ff38d GIT binary patch literal 2286 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn2Hfk$L90|U1(2s1Lwnj--e zWGoJHcVbv~PUa<$!;&U>cv7h@-A}a#}N3*AkV@L(#+Z!8mk2nY%IAHs@@bC5A zoiWW$jmDt@HoJfGFiiMl&fw6;z|f$;$iUzTw6uu@XbvY(vk(J=fC>YHf(HYG!-T=A z;MdvXcdO4cFs!#23a-T(r0M1J85x3PhDwNI_X9)2^|J3X`GLuEaHkint_P+1bMNe! z8I}y)R0Q%v-RHvZ_ly}1X!8xFEQ}l_7jE87XJ`;%A8N%AiXS8y9&Ei^`|R+L&C&}t z?*&U>cv7h@-A}a#}M~kP6V@L(#+Z&F(M;rtW9GG|6N$MZR ztYALpc@tL$MA+^A&BHL^lR1M!9|J>!0wV*1Bhc0+7N9|#K;1$N3<4?)3<@3$3=R_p ztAbx=kKe66&%m(WVko#4Ymlaw&u3%^k{K!?j@=Io4cE)Q&*TTD&%vEuu(}?U>d(Ei zV`f+~bW;(?4|Sglzuz-vIH1ipl(H~#lw7!ZH=UtDgng(LLnwZbWO%UkZtb(fLpDn< z*t{E9q-qY?R0OK67TmA7v-dj>!-p>Bp;)hh5>!dqcS#0?ql`nfZU*_`3qNy*!n;>V S`ZmD!34^DrpUXO@geCwy!3?qh literal 0 HcmV?d00001 diff --git a/public/static/logo.svg b/public/static/logo.svg new file mode 100644 index 0000000..e43bd0f --- /dev/null +++ b/public/static/logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/static/twitter-card.png b/public/static/twitter-card.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2f6fed6d932da64457244140073304614afd28 GIT binary patch literal 17703 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 Q^NEo4)mv9;FZn$AA1xP11poj5 literal 0 HcmV?d00001 diff --git a/src/components/AuthorCard.astro b/src/components/AuthorCard.astro index e5eb8c7..91c83b2 100644 --- a/src/components/AuthorCard.astro +++ b/src/components/AuthorCard.astro @@ -1,7 +1,7 @@ --- import type { CollectionEntry } from 'astro:content' -import { Image } from 'astro:assets' import Link from '@components/Link.astro' +import AvatarComponent from '@/components/ui/avatar' type Props = { author: CollectionEntry<'authors'> @@ -15,12 +15,12 @@ const { name, avatar, bio } = author.data class="rounded-xl border p-4 transition-colors duration-300 ease-in-out hover:bg-secondary/50" > - {`Avatar

{name}

diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro index 593054d..66f25f0 100644 --- a/src/components/BlogCard.astro +++ b/src/components/BlogCard.astro @@ -4,6 +4,7 @@ import { formatDate, readingTime, parseAuthors } from '@lib/utils' import { Image } from 'astro:assets' import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' +import AvatarComponent from '@/components/ui/avatar' import Link from './Link.astro' type Props = { @@ -54,12 +55,12 @@ const authors = await parseAuthors(entry.data.authors ?? []) <> {authors.map((author) => (
- {author.name} {author.name}
diff --git a/src/components/Head.astro b/src/components/Head.astro index d36f91c..aa3788b 100644 --- a/src/components/Head.astro +++ b/src/components/Head.astro @@ -15,7 +15,7 @@ interface Props { const canonicalURL = new URL(Astro.url.pathname, Astro.site) -const { title, description, image = '/blog-placeholder-1.jpg' } = Astro.props +const { title, description, image = '/static/twitter-card.png' } = Astro.props --- @@ -28,6 +28,30 @@ const { title, description, image = '/blog-placeholder-1.jpg' } = Astro.props + + + + + + + + + + diff --git a/src/components/Header.astro b/src/components/Header.astro index e9a4fbd..d80e275 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -3,6 +3,8 @@ import Container from '@components/Container.astro' import Link from '@components/Link.astro' import { SITE } from '@consts' import { ModeToggle } from '@/components/ui/mode-toggle' +import { Image } from 'astro:assets' +import logo from '../../public/static/logo.svg' const items = [ { href: '/blog', label: 'blog' }, @@ -16,11 +18,12 @@ const items = [ transition:persist > -
+
+ Logo {SITE.TITLE}
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx index c30ed20..038f424 100644 --- a/src/components/ui/avatar.tsx +++ b/src/components/ui/avatar.tsx @@ -10,7 +10,7 @@ const Avatar = React.forwardRef< = ({ + src, + alt, + fallback, + className, +}) => { + return ( + + + {fallback} + + ) +} + +export default AvatarComponent diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx index 9f9afa2..bba7457 100644 --- a/src/components/ui/badge.tsx +++ b/src/components/ui/badge.tsx @@ -5,7 +5,7 @@ import * as React from 'react' import { cn } from '@/lib/utils' const badgeVariants = cva( - 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs transition-colors focus:outline-none focus:ring focus:ring-ring', { variants: { variant: { diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index c4e9825..5bde691 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -8,7 +8,7 @@ const Card = React.forwardRef< >(({ className, ...props }, ref) => (
)) diff --git a/src/components/ui/mode-toggle.tsx b/src/components/ui/mode-toggle.tsx index 4efbe28..f11e2b7 100644 --- a/src/components/ui/mode-toggle.tsx +++ b/src/components/ui/mode-toggle.tsx @@ -41,7 +41,7 @@ export function ModeToggle() { Toggle theme - + setThemeState('theme-light')}> Light diff --git a/src/content/blog/2022.mdx b/src/content/blog/2022.mdx index 3f7c938..4bfeb48 100644 --- a/src/content/blog/2022.mdx +++ b/src/content/blog/2022.mdx @@ -3,7 +3,7 @@ title: '2022 Post' description: 'This a dummy post written in the year 2022.' date: '2022-01-01' tags: ['dummy', 'placeholder'] -image: '/1200x630.png' +image: '/static/1200x630.png' --- This is a dummy post written in the year 2022. diff --git a/src/content/blog/2023.mdx b/src/content/blog/2023.mdx index eda353b..41e3845 100644 --- a/src/content/blog/2023.mdx +++ b/src/content/blog/2023.mdx @@ -3,7 +3,7 @@ title: '2023 Post' description: 'This a dummy post written in the year 2023.' date: '2023-01-01' tags: ['dummy', 'placeholder'] -image: '/1200x630.png' +image: '/static/1200x630.png' authors: ['enscribe'] --- diff --git a/src/content/blog/2024.mdx b/src/content/blog/2024.mdx index 2b78ab0..feb461d 100644 --- a/src/content/blog/2024.mdx +++ b/src/content/blog/2024.mdx @@ -3,7 +3,7 @@ title: '2024 Post' description: 'This a dummy post written in the year 2024 (with multiple authors).' date: '2024-01-01' tags: ['dummy', 'placeholder'] -image: '/1200x630.png' +image: '/static/1200x630.png' authors: ['enscribe', 'jktrn'] --- diff --git a/src/content/blog/the-state-of-static-blogs.mdx b/src/content/blog/the-state-of-static-blogs.mdx index 31ac3b1..1e19fc9 100644 --- a/src/content/blog/the-state-of-static-blogs.mdx +++ b/src/content/blog/the-state-of-static-blogs.mdx @@ -3,7 +3,7 @@ title: 'The State of Static Blogs in 2024' description: 'There should not be a single reason why you would need a command palette search bar to find a blog post on your own site.' date: '2024-07-25' tags: ['webdev', 'opinion'] -image: '/1200x630.png' +image: '/static/1200x630.png' authors: ['enscribe'] --- @@ -19,7 +19,7 @@ astro-erudite is written in Astro, a framework hyperoptimized for static content This is a non-exhaustive list of features I believe are essential for a frictionless developer experience: -- [shadcn/ui](https://ui.shadcn.com) is a pretty controversial component library. I love it. I don't care much for the components themselves as they are literally [Radix](https://www.radix-ui.com/) primitive wrappers. However, the best part is arguably its take on [theming](https://ui.shadcn.com/docs/theming), which introduces a convention involving CSS colors such as `background` and `foreground` into your Tailwind configuration so that styling is a breeze. These classes also automatically adapt to the user's selected theme, and as such you don't need to worry about adding an equivalent `dark:` style to all of your theming. shadcn/ui turns `"bg-neutral-50 text-neutral-900 dark:bg-neutral-900 dark:text-neutral-50"` into `"bg-background text-foreground"`, both more semantic and easier to blanket edit (if you wanted to change all your blues in your site to indigos, you would need to go around every single class and change it rather than editing a single CSS variable). Other utiliy colors such as `secondary`, `muted`, `accent`, and `destructive` also exist and are very self-explanatory in name (and also have an equivalent `-foreground` class, e.g. `secondary-foreground`, which you can apply to text on top of these colors). +- [shadcn/ui](https://ui.shadcn.com) is a pretty controversial component library. I love it. I don't care much for the components themselves as they are literally [Radix](https://www.radix-ui.com/) primitive wrappers. However, the best part is arguably its take on [theming](https://ui.shadcn.com/docs/theming), which introduces a convention involving CSS colors such as `background` and `foreground` into your Tailwind configuration so that styling is a breeze. These classes also automatically adapt to the user's selected theme, and as such you don't need to worry about adding an equivalent `dark:` style to all of your theming. shadcn/ui turns `"bg-stone-50 text-stone-900 dark:bg-stone-900 dark:text-stone-50"` into `"bg-background text-foreground"`, both more semantic and easier to blanket edit (if you wanted to change all your blues in your site to indigos, you would need to go around every single class and change it rather than editing a single CSS variable). Other utiliy colors such as `secondary`, `muted`, `accent`, and `destructive` also exist and are very self-explanatory in name (and also have an equivalent `-foreground` class, e.g. `secondary-foreground`, which you can apply to text on top of these colors). - [Tailwind Typography](https://github.com/tailwindlabs/tailwindcss-typography) is a plugin that automatically styles any content surrounded by an `
{:html}` tag in a way which makes it readable and blog-post-friendly. It does this via a `prose` class which you can wrap anything with to style the interior content. This is especially useful for HTML you don't control, e.g. a post rendered from Markdown. Although your control over the rendering is a bit less fine-grained, you're also already using Tailwind so this right has long been forsaken. - [Shiki](https://github.com/shikijs/shiki) is a syntax highlighter for code blocks. Although Astro code blocks utilize Shiki under the hood, I've actually disabled the default code blocks in this template so that they don't collide with my preferred library [rehype-pretty-code](https://rehype-pretty.pages.dev), which is _also_ powered by Shiki but allows for line numbers, line highlighting, inline code snytax highlighting, and a transformers API for advanced customization such as manual `diff` visualization and line blurring. This library does not ship with any CSS, and it's up to you to style the code blocks and code block titles as you see fit. I've provided styles in `src/styles/global.css` within the `@layer components{:css}` directive if you wish to fiddle with them. The following code block is an example of how to style code blocks using rehype-pretty-code, and was generated with the following Markdown code: @@ -115,5 +115,5 @@ Within the blog itself (as in the layout, appearance, and navigation) are featur - You really don't need a comments section via [Giscus](https://giscus.app). This opens up a can of worms involving the ability to spam comments and the necessity to moderate them. If you want organic discussion about your blog posts to happen, then share on social media and let people discuss there. - Speaking of sharing on social media, let's get rid of the share buttons. Please inform me of a single time you have used a share button on a blog post. - You really don't need a CMS unless you have thousands of posts and/or are willing to navigate through a clunky management interface. Markdown and folders is really all you need, which you can organize to your preference via folder or file naming conventions. -- If you have literally anything involving an `.env` file in a blog post, please reconsider what you are doing. +- If you have literally anything involving an `.env` file in a blogging site, please think about what you are doing very carefully. - Please do not override the browser's Ctrl + K functionality to open up a command palette. There should not be a single reason why a user would use a small context menu to browse your blog over the `/blog` route. Most of the time, command palettes on sites do nothing more than regurgitate shortcuts that are already on the same page you're hiding with the palette's modal. diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index cb9dd1a..6bb7ed7 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -7,23 +7,30 @@ import { SITE } from '@consts' type Props = { title: string description: string + image?: string } -const { title, description } = Astro.props +const { title, description, image } = Astro.props --- - + - -
-
- -
-