From 3a64111ad29bb26d5bf054938317f1ab223ad388 Mon Sep 17 00:00:00 2001 From: DongHY1 Date: Tue, 2 Jul 2024 11:19:43 +0800 Subject: [PATCH] feat: add raytracing and react project --- public/images/raytracing.webp | Bin 0 -> 10376 bytes public/images/react.webp | Bin 0 -> 3784 bytes src/config/project.js | 16 +++++++++++++ src/pages/index/+Page.jsx | 2 +- src/pages/project/raytracing/+Page.jsx | 30 +++++++++++++++++++++++++ src/pages/project/react/+Page.jsx | 30 +++++++++++++++++++++++++ 6 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 public/images/raytracing.webp create mode 100644 public/images/react.webp create mode 100644 src/pages/project/raytracing/+Page.jsx create mode 100644 src/pages/project/react/+Page.jsx diff --git a/public/images/raytracing.webp b/public/images/raytracing.webp new file mode 100644 index 0000000000000000000000000000000000000000..b550ee285a2fadc01563e0127ac63c3ec90eaaf2 GIT binary patch literal 10376 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 literal 0 HcmV?d00001 diff --git a/public/images/react.webp b/public/images/react.webp new file mode 100644 index 0000000000000000000000000000000000000000..a0413014097679db57ca6ffc1e291e050f780c6a GIT binary patch literal 3784 zcmYL`cQhLe+r|@HDIVI!2udj}wRdewZKWEsHlZ!GXCyUZRcH}KL)E4cqeW}4)T&Xn zSIkt5qSQ{_=lh;_+<*MeeV=n(=Q`)QEe!PZ+F1Yq$USZIN9Ib`KmNU&+W|1Z+oQnC zK=o$|*#<&41PcVw(00V-L{FckU?7jIn%Aj!aqC1$U7G5r0?84{Q@Am!2^pb0L79#k zIm@~zK13XZQ5&KB2M6X*llsm=>ed{4|a7t_fwjlOW6 z!>$WRBmEwZ1Shp+appfH#O0xQ8@=)`i&y>p zf0EEpW;{G}$#@DvBfWE1{i|D}W{6-4Hrkc9R=Mq9K8Q^X;<_QKTBKm-SCB zVk=+gYQ;Ab3c?6145<{F32R1P|2uygZ2z5!%mZiG%Si642%8iAls5f$sK@`wQ?|>S@rD5Zqk{yR5B*Okj$?j{85vXOwsH7BT5AHxlnz{M zy`0!-o4U2w=dJJ~C4l;*(~Xh#uZtF@WpW`y-imX`x@wmJ6^ViG@s_mpXjgr_NpkDW z7aWH3@5!v3j`zL_xrC09M3fiQRb~%U2XcRZs?)dWRNDpebNRzMxlw`&OXv+!7jcdg z7<5!{t<5f%8b8gr1qcYi`o6}gSi{?vjzG4Sap!O4cYPYaR66a4Y6OBI%B~aPQ!sML zSv&{`@8%DsYQS4Y6!{9$TESpx`tp3QCn zO#a1?@!qF-{87RAmS;l-X2js!I0Ke(*!$blGqBMW*GN8ha9`Aw$TKu`#z&iia(_=^ zR3P>CxITGC8bsM@c{#RT;xO{65GTI|S4whrO^$CQ-h0B#N1S*|r^!e8LS^r$oMXCl zR%ipuDzS>*MSR0cil^=R-Yi5sr7S_IO20^rfE;5S$v>4cr(ZGP>X=3B$D z$I9*qb%ss{@jkZgYleIP+IJLaMdNMYB^{P=!8X@(T|eYyK7JLCL(kkt*QgYq-)_%9EOjv@paJBi86$VZ&*7;Lx!;7` zdmR&SKD;fcSsiD4V2QSfa5ozAb1K3EuDpH1nwj<-u99rmsL|73LI^ zW5H78(e#PQi~FFAjTnEy7V#W(jT7vw+4!n*-6bU7zZ1cAI8V&k2*}~#gdsRk6>mbF z^y7NC)a)e_bq5Q3_dVT5foSW=8coSha}Twva~0td=ugvB3`FgOMZLf{{9Ixr;C(1w zNd1)UL{^?BzwUleP~+v}?;$a7LyMOd;g~CL=vd+a29lI`mvOM&%G%@#+aL}juV!;f`+EtQM z|1H9$pwhY@`ZU~7)Q*|BnO%6~KW`IGU?REk$ZqJ~TTPQtoI$U6; zDM|9xbMXbH5lI{?FCkFPZD9K8d~y1zN+Zj4swXo~E!%0FqgL9yE|KaNGi2{o1azO= zMMLKpk&jXP;qO(-OMAArnt^>`n502_;7<4>{9uf$aI5^>@Qca->ZfA zJ1_G<1dJYFjxw_IHx=+rH@34*)h!#Ivv;nx!nhBU_`_OS*a|%kCZQzjGDPKF{^9fx zPPJk4>7gnd2!>;9<-r4el*oq=tiA0-yA67KoR&r)IsX~IN2z=`QGUW#{4?h!IO-j| z03sIC-F_C(nsUzZRTU*~_1rIQeYStvD=h(00o*b&m@B`BsIbMmm3-+f`1fq3=Tp+PvOJ*3YD=J$4^tC~z30 zS~k*o?sWkNe8p_z=MVV;H7+Br&EwAQamUl89Nkcl!!tRmJ&D#3nlb3!(QbZX!ObjN#ii;N zIH-Lr)=cqYYvd@>u|IYyMUg=ZJ}e&`MQ+KN-UOP=%A_gT^L*A3zeSy~TC>zfxc%Vd zk-X|VEkb2im)|7_9CL7eWYW6jOTKTKF&p#7pSVi~4@8qQ87y*Q>-~ewds|fd-_3>3 twR34HWjlGO2X#EA&d_NDD9}}MD!fc%rKavRSMW`GHbi@tpal5e{0qpka=ZWl literal 0 HcmV?d00001 diff --git a/src/config/project.js b/src/config/project.js index 682dea4..a038a69 100644 --- a/src/config/project.js +++ b/src/config/project.js @@ -34,6 +34,22 @@ const OpenSourceProjects = [ background: "/images/website.webp", keywords: ["personal website", "portfolio", "web development", "software engineer"] }, + { + name: "Raytracing", + description: "Raytracing algorithm in JavaScript.", + time: "2024", + href: "/project/raytracing", + background: "/images/raytracing.webp", + keywords: ["raytracing"] + }, + { + name: "Mini React", + description: "A Minimal implementation of React.js and ReactDOM.", + time: "2024", + href: "/project/react", + background: "/images/react.webp", + keywords: ["react", "react-dom", "hooks"] + }, { name: "Comments", description: "Add comments to your website.", diff --git a/src/pages/index/+Page.jsx b/src/pages/index/+Page.jsx index c888273..d28c568 100644 --- a/src/pages/index/+Page.jsx +++ b/src/pages/index/+Page.jsx @@ -77,7 +77,7 @@ export default function Page() {

- + ); } diff --git a/src/pages/project/raytracing/+Page.jsx b/src/pages/project/raytracing/+Page.jsx new file mode 100644 index 0000000..0d06c5a --- /dev/null +++ b/src/pages/project/raytracing/+Page.jsx @@ -0,0 +1,30 @@ +import { Image } from "@/components/ui/image"; +import { useData } from "vike-react/useData"; +export default function Page() { + const { project } = useData() + return ( +
+
+

{project.name}

+

{project.time} · {project.description}

+
+ +
+ + ); +} diff --git a/src/pages/project/react/+Page.jsx b/src/pages/project/react/+Page.jsx new file mode 100644 index 0000000..5597e36 --- /dev/null +++ b/src/pages/project/react/+Page.jsx @@ -0,0 +1,30 @@ +import { useData } from "vike-react/useData"; +export default function Page() { + const { project } = useData() + return ( +
+
+

{project.name}

+

{project.time} · {project.description}

+
+
+
+