Compare commits
7 Commits
ff22696b49
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fbdfebe507 | |||
| 79c5a1f06e | |||
| 6ae23fb783 | |||
| aee0035a4f | |||
| 7f04b1befd | |||
| f6819b42bd | |||
| 650164e412 |
@@ -7,6 +7,7 @@ import { MDXRemote } from "next-mdx-remote/rsc";
|
||||
import rehypePrettyCode from "rehype-pretty-code";
|
||||
import rehypeSlug from "rehype-slug";
|
||||
import remarkGfm from "remark-gfm";
|
||||
import Video from "@/components/video";
|
||||
|
||||
interface PageProps {
|
||||
params: Promise<{ slug: string }>;
|
||||
@@ -63,6 +64,7 @@ export default async function Post({ params }: PageProps) {
|
||||
<div className="prose lg:prose-lg max-w-none">
|
||||
<MDXRemote
|
||||
source={postData.content}
|
||||
components={{ Video }}
|
||||
options={{
|
||||
mdxOptions: {
|
||||
remarkPlugins: [remarkGfm],
|
||||
|
||||
28
components/video.tsx
Normal file
28
components/video.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@@ -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. That’s why I’m not going to link the repo. However, if someone is interested, they can easily find it on my GitHub.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
@@ -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 I’m 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.
|
||||
|
||||

|
||||
|
||||
<Video src="/posts/missile_commander.mp4" />
|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
## April - The RTS Struggle
|
||||
|
||||
In April, I really wanted to create an **RTS game**. Unfortunately, I didn’t 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.
|
||||
|
||||
I also got into **ray tracing** and, thanks to _Ray Tracing in One Weekend_, I wrote my own **software ray tracer** in Rust.
|
||||
|
||||

|
||||
|
||||
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 didn’t 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.
|
||||
|
||||
<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.
|
||||
|
||||
<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 don’t 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
|
||||
|
||||
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 didn’t 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.
|
||||
|
||||
<Video src="/posts/boomer_shooter_attempt.mp4" />
|
||||
|
||||
## 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.
|
||||
|
||||
<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 :<
|
||||
|
||||
## 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**! I’m using **Godot** again, and I have to admit—it’s 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
|
||||
|
||||
BIN
public/posts/boomer_shooter_attempt.mp4
Executable file
BIN
public/posts/boomer_shooter_attempt.mp4
Executable file
Binary file not shown.
BIN
public/posts/dwarves.mp4
Executable file
BIN
public/posts/dwarves.mp4
Executable file
Binary file not shown.
BIN
public/posts/minesweeper.webp
Normal file
BIN
public/posts/minesweeper.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
public/posts/missile_commander.mp4
Executable file
BIN
public/posts/missile_commander.mp4
Executable file
Binary file not shown.
BIN
public/posts/missile_commander.webp
Normal file
BIN
public/posts/missile_commander.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 236 KiB |
BIN
public/posts/mr_brick_2024.mp4
Executable file
BIN
public/posts/mr_brick_2024.mp4
Executable file
Binary file not shown.
BIN
public/posts/podcast.mp4
Executable file
BIN
public/posts/podcast.mp4
Executable file
Binary file not shown.
BIN
public/posts/raytracer.webp
Normal file
BIN
public/posts/raytracer.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
BIN
public/posts/rplace.mp4
Executable file
BIN
public/posts/rplace.mp4
Executable file
Binary file not shown.
BIN
public/posts/rts.mp4
Executable file
BIN
public/posts/rts.mp4
Executable file
Binary file not shown.
BIN
public/posts/sokoban.webp
Normal file
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
BIN
public/posts/thoughts-2024.mp4
Executable file
Binary file not shown.
Reference in New Issue
Block a user