Compare commits

..

7 Commits

Author SHA1 Message Date
fbdfebe507 media
All checks were successful
Build and Deploy Blog / build-and-deploy-local (push) Successful in 3m7s
2026-03-31 15:11:36 +02:00
79c5a1f06e chore: use Video component in roadmap post
All checks were successful
Build and Deploy Blog / build-and-deploy-local (push) Successful in 3m8s
2026-03-31 14:52:35 +02:00
6ae23fb783 feat: register Video component in MDXRemote 2026-03-31 14:51:30 +02:00
aee0035a4f fix: video a11y and valid width attribute 2026-03-31 14:50:59 +02:00
7f04b1befd feat: add Video component 2026-03-31 14:49:55 +02:00
f6819b42bd docs: add video component implementation plan 2026-03-31 14:48:45 +02:00
650164e412 docs: add video component design spec 2026-03-31 14:48:05 +02:00
15 changed files with 54 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import { MDXRemote } from "next-mdx-remote/rsc";
import rehypePrettyCode from "rehype-pretty-code"; import rehypePrettyCode from "rehype-pretty-code";
import rehypeSlug from "rehype-slug"; import rehypeSlug from "rehype-slug";
import remarkGfm from "remark-gfm"; import remarkGfm from "remark-gfm";
import Video from "@/components/video";
interface PageProps { interface PageProps {
params: Promise<{ slug: string }>; params: Promise<{ slug: string }>;
@@ -63,6 +64,7 @@ export default async function Post({ params }: PageProps) {
<div className="prose lg:prose-lg max-w-none"> <div className="prose lg:prose-lg max-w-none">
<MDXRemote <MDXRemote
source={postData.content} source={postData.content}
components={{ Video }}
options={{ options={{
mdxOptions: { mdxOptions: {
remarkPlugins: [remarkGfm], remarkPlugins: [remarkGfm],

28
components/video.tsx Normal file
View File

@@ -0,0 +1,28 @@
interface VideoProps {
src: string;
caption?: string;
}
export default function Video({ src, caption }: VideoProps) {
return (
<figure className="my-4">
<div className="rounded-lg border border-white/30 bg-white/10 backdrop-blur-sm overflow-hidden shadow-md">
<video
src={src}
className="w-full"
aria-label={caption ?? src}
preload="metadata"
controls
loop
muted
playsInline
/>
</div>
{caption && (
<figcaption className="mt-2 text-center text-sm text-gray-500 italic">
{caption}
</figcaption>
)}
</figure>
);
}

View File

@@ -25,6 +25,8 @@ But that wasn't all I did in the first month of 2024. I had this crazy idea to c
Next, I wrote a **Minesweeper** game in C++ using Raylib. That was pretty fun! The code, however, isn't really good—it's not idiomatic C++, more like C with classes—but the point of the project was just to have fun. Thats why Im not going to link the repo. However, if someone is interested, they can easily find it on my GitHub. Next, I wrote a **Minesweeper** game in C++ using Raylib. That was pretty fun! The code, however, isn't really good—it's not idiomatic C++, more like C with classes—but the point of the project was just to have fun. Thats why Im not going to link the repo. However, if someone is interested, they can easily find it on my GitHub.
![minesweeper](/posts/minesweeper.webp)
## February - Small but Fun Projects ## February - Small but Fun Projects
February, the shortest month of the year! I hopped from project to project, but some were actually finished and published. February, the shortest month of the year! I hopped from project to project, but some were actually finished and published.
@@ -37,18 +39,28 @@ You might ask, _Why use Rust for that instead of JavaScript?_ Great question! Th
Next, I started working on a **Missile Commander clone**—a recreation of the old Atari game **Missile Command**. I actually managed to replicate the core gameplay, but since Im terrible at designing games and coming up with new mechanics, levels, and features, I abandoned it pretty quickly. I even wrote a **level editor** for it! The game and editor were both written in Rust using **macroquad**, as I wanted to export it to the web. Unfortunately, I ran into some errors when trying to export and gave up. Next, I started working on a **Missile Commander clone**—a recreation of the old Atari game **Missile Command**. I actually managed to replicate the core gameplay, but since Im terrible at designing games and coming up with new mechanics, levels, and features, I abandoned it pretty quickly. I even wrote a **level editor** for it! The game and editor were both written in Rust using **macroquad**, as I wanted to export it to the web. Unfortunately, I ran into some errors when trying to export and gave up.
![missile_commander](/posts/missile_commander.webp)
<Video src="/posts/missile_commander.mp4" />
## March - A Sokoban Game in Java ## March - A Sokoban Game in Java
In March, I only worked on one toy project—a **Sokoban game in Java** using Raylib. Why Java? No idea. I guess I just wanted to refresh my skills in the language. In March, I only worked on one toy project—a **Sokoban game in Java** using Raylib. Why Java? No idea. I guess I just wanted to refresh my skills in the language.
![Sokoban](/posts/sokoban.webp)
## April - The RTS Struggle ## April - The RTS Struggle
In April, I really wanted to create an **RTS game**. Unfortunately, I didnt succeed. Nevertheless, I made an attempt at creating an **RTS engine in Rust** using the _comfy_ crate. Later, I tried moving to Bevy, but pathfinding defeated me. I haven't given up on the idea completely, though—I may go back to it in the future, because I love RTS and strategy games so much. In April, I really wanted to create an **RTS game**. Unfortunately, I didnt succeed. Nevertheless, I made an attempt at creating an **RTS engine in Rust** using the _comfy_ crate. Later, I tried moving to Bevy, but pathfinding defeated me. I haven't given up on the idea completely, though—I may go back to it in the future, because I love RTS and strategy games so much.
<Video src="/posts/rts.mp4" caption="My failed RTS engine attempt" />
While researching RTS mechanics, I wrote my own **quadtree** in Rust and visualized it using Raylib. That was pretty fun and easy. While researching RTS mechanics, I wrote my own **quadtree** in Rust and visualized it using Raylib. That was pretty fun and easy.
I also got into **ray tracing** and, thanks to _Ray Tracing in One Weekend_, I wrote my own **software ray tracer** in Rust. I also got into **ray tracing** and, thanks to _Ray Tracing in One Weekend_, I wrote my own **software ray tracer** in Rust.
![raytracer](/posts/raytracer.webp)
Another Rust project from April was an **Otodom scraper** with a frontend in React. Otodom is a website listing real estate for sale or rent, and since I was house-hunting, I needed a better way to filter available listings. So I wrote a simple service using _Axum_ that scrapes the data every ten minutes, allowing me to easily filter through listings. Another Rust project from April was an **Otodom scraper** with a frontend in React. Otodom is a website listing real estate for sale or rent, and since I was house-hunting, I needed a better way to filter available listings. So I wrote a simple service using _Axum_ that scrapes the data every ten minutes, allowing me to easily filter through listings.
Last but not least, I created **better_notepad**, a Notepad-like app because I was annoyed that the default Windows Notepad didnt close tabs when the app was closed. I wrote mine in C++ with wxWidgets. Later, I learned that you can actually turn that behavior off in the Notepad settings... oops. Last but not least, I created **better_notepad**, a Notepad-like app because I was annoyed that the default Windows Notepad didnt close tabs when the app was closed. I wrote mine in C++ with wxWidgets. Later, I learned that you can actually turn that behavior off in the Notepad settings... oops.
@@ -57,10 +69,16 @@ Last but not least, I created **better_notepad**, a Notepad-like app because I w
In May, I started a **2D platformer in Unity**, inspired by **Brave Dwarves 2** (a childhood favorite). I focused on **composition over inheritance**, and I loved that approach—so much that I still use it in all future projects. Unfortunately, I abandoned the game. In May, I started a **2D platformer in Unity**, inspired by **Brave Dwarves 2** (a childhood favorite). I focused on **composition over inheritance**, and I loved that approach—so much that I still use it in all future projects. Unfortunately, I abandoned the game.
<Video src="/posts/dwarves.mp4" />
I also built a **tiny social network** inspired by the late 2000s and early 2010s, when social media was more about you and your friends rather than memes, ads, and algorithm-driven feeds. My idea was simple: users could publish short thoughts (up to 128 characters), follow friends, and see only their friends' posts in the feed. I used Django, but I plan to rewrite it in Rust for lower memory usage. I might even make it **decentralized using ActivityPub**, because I recently fell in love with that concept. I also built a **tiny social network** inspired by the late 2000s and early 2010s, when social media was more about you and your friends rather than memes, ads, and algorithm-driven feeds. My idea was simple: users could publish short thoughts (up to 128 characters), follow friends, and see only their friends' posts in the feed. I used Django, but I plan to rewrite it in Rust for lower memory usage. I might even make it **decentralized using ActivityPub**, because I recently fell in love with that concept.
<Video src="/posts/thoughts-2024.mp4" />
I also built my own **r/place clone** in Rust, using WebSockets via _socket.io_ and plain JavaScript for the client. It worked pretty well! However, I ran into an issue where I was sending data inefficiently, which caused massive memory usage—something like **~100MB per user connection**. I dont remember if I ever fixed it, but debugging network-related stuff is still a bit of a mystery to me. I also built my own **r/place clone** in Rust, using WebSockets via _socket.io_ and plain JavaScript for the client. It worked pretty well! However, I ran into an issue where I was sending data inefficiently, which caused massive memory usage—something like **~100MB per user connection**. I dont remember if I ever fixed it, but debugging network-related stuff is still a bit of a mystery to me.
<Video src="/posts/rplace.mp4" />
## June - A Grand Strategy Game Attempt ## June - A Grand Strategy Game Attempt
In June, I made another attempt at an **RTS/Strategy game**, this time a **turn-based grand strategy game** similar to _Civilization_. I used **Bevy** and the **hexx crate**, but as you can imagine, I didnt get very far—I got stuck on the turn system :p In June, I made another attempt at an **RTS/Strategy game**, this time a **turn-based grand strategy game** similar to _Civilization_. I used **Bevy** and the **hexx crate**, but as you can imagine, I didnt get very far—I got stuck on the turn system :p
@@ -73,16 +91,22 @@ In **August**, I experimented with **Godot** and started developing a **boomer s
This was yet another project I left unfinished. While I enjoy working with **Godot**, I found its 3D tools a bit too clunky for my workflow. This was yet another project I left unfinished. While I enjoy working with **Godot**, I found its 3D tools a bit too clunky for my workflow.
<Video src="/posts/boomer_shooter_attempt.mp4" />
## September - My Own Podcast Platform ## September - My Own Podcast Platform
In September, I built my own **podcast platform**! I wrote the backend in **Loco.rs** and the frontend in **Svelte**. I was really happy with how it turned out, but after recording just **one episode**, I lost interest. Shame. In September, I built my own **podcast platform**! I wrote the backend in **Loco.rs** and the frontend in **Svelte**. I was really happy with how it turned out, but after recording just **one episode**, I lost interest. Shame.
<Video src="/posts/podcast.mp4" />
In the meantime, I created a **mod for VTOL VR**, which currently has **623 subscribers**! One day, I would love to create my own **VR game**, but for now, I have **zero ideas** for what it could be :&lt; In the meantime, I created a **mod for VTOL VR**, which currently has **623 subscribers**! One day, I would love to create my own **VR game**, but for now, I have **zero ideas** for what it could be :&lt;
## December - Back to Game Development ## December - Back to Game Development
In December, I tried **Advent of Code**, but I gave up after **three days** :p. Instead, I started working again on my **2D platformer game, Mr. Brick Adventures**. This time, I _vow_ to finish it and release it on **Steam**! Im using **Godot** again, and I have to admit—its quite nice for 2D development. I wanted to use Rust, but it was a bit too tedious, so I stuck with GDScript. In December, I tried **Advent of Code**, but I gave up after **three days** :p. Instead, I started working again on my **2D platformer game, Mr. Brick Adventures**. This time, I _vow_ to finish it and release it on **Steam**! Im using **Godot** again, and I have to admit—its quite nice for 2D development. I wanted to use Rust, but it was a bit too tedious, so I stuck with GDScript.
<Video src="/posts/mr_brick_2024.mp4" />
--- ---
# 2025 Roadmap # 2025 Roadmap

Binary file not shown.

BIN
public/posts/dwarves.mp4 Executable file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
public/posts/mr_brick_2024.mp4 Executable file

Binary file not shown.

BIN
public/posts/podcast.mp4 Executable file

Binary file not shown.

BIN
public/posts/raytracer.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
public/posts/rplace.mp4 Executable file

Binary file not shown.

BIN
public/posts/rts.mp4 Executable file

Binary file not shown.

BIN
public/posts/sokoban.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
public/posts/thoughts-2024.mp4 Executable file

Binary file not shown.