---
import Partition from "../components/Partition.astro";

import BaseLayout from "../layouts/BaseLayout.astro";
import PortfolioProject from "../components/PortfolioProject.astro";

import { Picture } from "astro:assets";

const Project = PortfolioProject;

import ItchCoverSmol from "../img/projects/ItchCoverSmol.png";

const pageTitle = "Portfolio";
const description =
    "Aria's portfolio, a page completely full of her little projects!";

const languagesUsed = ["Rust", "GDScript", "Go", "Python", "JavaScript", "C#"];

// languagesUsed.sort((a, b) => a.localeCompare(b.firstname))
---

<BaseLayout pageTitle={pageTitle} description={description}>
    <Partition>
        <h1 class="text-4xl text-center">Portfolio</h1>

        <p>
            This is a list of some of my projects that I've worked on over the
            years.
        </p>
        <p>
            Not all of them are complete or expansive but with each project I've
            grown as a developer.
        </p>
        <br />
        <p>I have worked in these languages:</p>
        <ul class="list-disc pl-5">
            {languagesUsed.map((language) => <li>{language}</li>)}
        </ul>
        <br />
        <br />
        <h2 class="text-xl">
            Remember that the project titles can be clicked!
        </h2>
    </Partition>
    <main class="max-w-[1600px]">
        <!--<Project-->
        <!--        name="Lorem ipsum"-->
        <!--        date="29th December 2024"-->
        <!--        tags="Lorem, ipsum"-->
        <!--        link="https://aria.coffee"-->
        <!-- > -->
        <!--    Lorem ipsum dolor sit amet-->
        <!--</Project>-->
        <Project
            name="Soul Abscence 🌟"
            date="21st April 2025"
            tags="Godot, GDScript, GameDev, GameJam, godotwildjam"
            link="https://itch.io/jam/godot-wild-jam-80/rate/3491084"
        >
            I worked together with a small group to make my first proper game
            jam game! This was for <a
                href="https://itch.io/jam/godot-wild-jam-80/rate/3491084"
                class="nav-btn backdrop-contrast-150"
                target="_blank">Godot Wild Jam #80</a
            ><br />
            Soul Abscence is a resource managment simulation game inpired by <a
                href="https://store.steampowered.com/app/503560/911_Operator/"
                class="nav-btn backdrop-contrast-150"
                target="_blank">911 operator</a
            >.<br />
            Adding 113 commits totalling around 12K lines of formatted code(no number
            is most likely smaller!) I worked on things like level loading, A⭐ path
            finding, Menus and Options.<br />
            It was made over the course of about 9 days and I'm super happy with
            the work we've all put in! There is of coure a lot of things I'd do differently
            if we made the game again but that's just how it is when you make effectively
            a "prototype" game.<br /><br />
            <Picture
                src={ItchCoverSmol}
                alt="Cover image for Sould Absence from itch.io"
                width={ItchCoverSmol.width}
                height={ItchCoverSmol.height}
                formats={["avif", "webp", "jpg"]}
                quality="90"
            />
        </Project>
        <Project
            name="Open-FBT"
            date="26th July 2021"
            tags="Rust, Discord, Bot, Redis, Docker, Python"
            link="https://github.com/BuyMyMojo/open-fbt"
        >
            Open-FBT is an open sourced public variant of the <a
                href="https://fbtsecurity.fbtheaven.com/"
                target="_blank"
                class="nav-btn backdrop-contrast-150">FBTHeaven discord bot</a
            >, a bot I created to help moderate discord communities. This bot is
            in 419 servers as of the 29th December 2024 and has processed over
            36,000 user commands since July 31 2022.
            <br /><br />
            In 2021 I was approached by a friend who runs a VRChat dance club to
            help work on their Discord bot, this was originally written in Python
            using <span class="backdrop-contrast-150">discord.py</span> which eventually
            got dropped by the developer so we had to migrate to <span
                class="backdrop-contrast-150">nextcord</span
            >.
            <br /><br />
            After a year of building the bot, and dealing with the strange performance
            characteristics of nextcord, in July 2022 I decided to start rewriting
            the bot in Rust to make use of the increased performance and portability
            that the new language afforded. I also moved to using Redis as the database
            of choice instead of SQLite for much faster access to our thousands of
            DB entries.
            <br /><br />
            After a few hundred commits and a couple years of work I decided to fork
            my own code to strip out any confidential info and release an open variant
            to the world as a final send off to the longest running project I have
            worked on.
        </Project>
        <Project
            name="discord-chat-parser"
            date="4th August 2021"
            tags="Python, Golang, Discord, CLI"
            link="https://github.com/BuyMyMojo/discord-chat-parser"
        >
            This was an additional tool made to be used with Open-FBT's
            predecessor. It takes exported csv files from <a
                href="https://github.com/Tyrrrz/DiscordChatExporter"
                target="_blank">DiscordChatExporter</a
            > and extracts the UserIDs within. This was made to log users found within
            discord servers centered around VRChat piracy and trolling to then bar
            them from entry of any server that both used Open-FBT's predecessor and
            opted in to this functionality. Originally written in Python this was
            another project I transferred to a new language, unlike the bot itself
            I decided to write this in Go for simplicity.
        </Project>
        <Project
            name="Mojo's Kitchen Chaos(Course work)"
            date="23rd Febuary 2023"
            tags="Unity, C#, GameDev, Course"
            link="https://buymymojo.itch.io/mojos-kitchen-chaos"
        >
            <sub
                ><a
                    href="https://github.com/BuyMyMojo/mojo-kitchen-chaos"
                    target="_blank">Source code</a
                ></sub
            >
            <hr />
            In order to learn more about working in Unity I followed <a
                href="https://www.youtube.com/watch?v=AmGSEH7QcDg"
                target="_blank">this</a
            > course from <a
                href="https://www.youtube.com/@CodeMonkeyUnity"
                target="_blank">Code Monkey</a
            > on YouTube.
        </Project>
        <Project
            name="Godot Micro Games(Course work)"
            date="23rd Febuary 2023"
            tags="Godot, GDScript, GameDev, Course"
            link="https://buymymojo.itch.io/"
        >
            <ul class="list-disc pl-5">
                <li>
                    <a
                        href="https://buymymojo.itch.io/speedy-saucer"
                        target="_blank">Speedy Saucer(2D)</a
                    >
                </li>
                <li>
                    <a
                        href="https://buymymojo.itch.io/alien-attack"
                        target="_blank">Alien Attack(2D)</a
                    >
                </li>
                <li>
                    <a
                        href="https://buymymojo.itch.io/martian-mike"
                        target="_blank">Martian Mike(2D)</a
                    >
                </li>
                <li>
                    <a
                        href="https://buymymojo.itch.io/project-boost"
                        target="_blank">Project Boost(3D)</a
                    >
                </li>
            </ul>
            <hr />
            These are some small games made while following <a
                href="https://www.gamedev.tv/"
                target="_blank">GameDev.tv</a
            >'s Godot 2D and 3D courses.
        </Project>
        <Project
            name="Rust 3x+1"
            date="5th March 2022"
            tags="Rust, Math, CLI"
            link="https://github.com/BuyMyMojo/rust-3xp1"
        >
            I found myself watching a <a
                href="https://youtu.be/094y1Z2wpJg"
                target="_blank"
                class="nav-btn backdrop-contrast-150">Veritasium video</a
            > about the Collatz Conjecture, more simply known as 3x+1, and I found
            myself drawn to it for a time.
            <br /><br />
            I was looking for a small project to work on and figured I'd try my hand
            at writing my own tool to brute force the Conjecture to find another
            looping sequence. I never found one sadly but the project was a great
            learning exercise during my early days of Rust development.
        </Project>
        <Project
            name="RedisFS"
            date="14th July 2022"
            tags="Rust, Redis, CLI"
            link="https://github.com/BuyMyMojo/RedisFS"
        >
            I had a really silly Idea while working on the bot behind Open-FBT,
            what if I used a Redis database to store files? well the answer if a
            pretty fast but inefficient RAM based file storage server.
        </Project>
        <Project
            name="verify-rs"
            date="8th January 2023"
            tags="Rust, Hashing, CLI"
            link="https://github.com/BuyMyMojo/verify-rs"
        >
            verify-rs is a simple cli tool for printing out several kinds of
            hashes from an input file. I just needed a simple tool to do this so
            I decided to write my own. It supports sha1, sha256, sha512,
            sha3_256, sha3_512, sha3_224, sha3_384, blake2s256, blake2b512 and
            blake3.
        </Project>
        <Project
            name="Another ssimulacra2 cli(as2c)"
            date="23rd October 2023"
            tags="Rust, CLI"
            link="https://github.com/BuyMyMojo/another_ssimulacra2_cli"
        >
            as2c was a fork of the initial release of <a
                href="https://github.com/rust-av/ssimulacra2_bin"
                target="_blank">ssimulacra2_bin</a
            > I made to add "video" support.
            <br /><br />
            This was accomplished by having the user export both the Source and Distorted
            videos as image sequences into separate folders and then comparing files
            with matching names. Since the ssimulacra2 calculation is single threaded
            I added the ability to run the calculations across multiple threads when
            working in "video mode".
            <br />
            Another addition I made was allowing the user to specify the colour space
            and colour transfer of the images, in the initial implementation of the
            tool it defaulted to SRGB BT709.
        </Project>
        <Project
            name="AI-Gopher"
            date="4th Febuary 2022"
            tags="Golang, Twitter, Bot"
            link="https://github.com/BuyMyMojo/AI-Gopher"
        >
            AI-Gopher is a bot that automatically posted a tweet generated by
            ChatGPT3. Honestly nothing great or useful but it was at least a
            good opportunity to learn more about Go and interacting with some
            APIs and OAuth 1.0.
            <br /><br />
            This project was technically against the Twitter TOS at the time but
            I didn't know that, oops!
        </Project>
    </main>
</BaseLayout>
