diff --git a/content/software/_index.md b/content/software/_index.md
new file mode 100644
index 0000000..454aa1d
--- /dev/null
+++ b/content/software/_index.md
@@ -0,0 +1,102 @@
+---
+title: Software
+---
+
+# Software Showcase
+
+This page showcases a *small* subset of my personal projects.
+
+Looking for a full list of things I've worked on?
+Check out my GitHub profile.
+
+## Libraries
+
+
+
Raylib FFI
+
+`raylib-ffi` is a very low-level Rust FFI binding to the raylib graphics library.
+
+The goal of this library is to provide something that tracks the latest version of upstream raylib, and gets in the way as little as possible. The core features are:
+
+- Direct FFI bindings to C functions
+- Rust-ified enums & structs
+- Rust-ified default palette definitions
+
+Thats it! Go use this library directly, or build a higher-level abstraction on top of it if you'd like.
+
+The whole binding, mapping, and documentation process is entirely automated. Targeting a new raylib version just takes a `git pull` and `cargo build`.
+
+Check out the [Source Code](https://github.com/ewpratten/raylib-ffi) and [Documentation](https://docs.rs/raylib-ffi).
+
+
+
+
Amateur Data Interchange Format library for Rust
+
+`adif-rs` is a Rust implementation of the Amateur Data Interchange Format.
+
+This library is used to read and write ADIF files, allowing Rust programs to exchange logging data with other pieces of amateur radio software.
+
+Check out the [Source Code](https://github.com/ewpratten/adif-rs) and [Documentation](https://docs.rs/adif).
+
+
+## Programs, Tools, Add-ons, and Scripts
+
+
+
Protomask
+
+Protomask is a user space NAT64 implementation.
+
+The protomask NAT64 daemon currently powers single-stack networking inside AS54041. The project also encompasses some general-purpose Rust libraries for working with inter-protocol networking.
+
+For more information, see the [GitHub page](https://github.com/ewpratten/protomask) for this project.
+
+
+## Things that were made for fun
+
+Hey, I'm allowed to have fun with software sometimes too right?!
+
+The following projects were mostly made as one-offs for friends in tight time constraints, so don't judge 'em too hard ..ok?. Do keep in mind, that if you want to self-host any of these, you *might* need to tweak some hard-coded UUIDs and endpoints.
+
+
+
UwU Types
+
+UwU and OwO your Rust integer types.
+
+`u8` becomes `uwu8`, `i16` becomes `owo16`, and of course, `usize` is now `uwusize`.
+
+Check out the [Source Code](https://github.com/ewpratten/uwu-types) or [use it in a project](https://crates.io/crates/uwu-types) (please don't).
+
+
+
+
Other names for Rust's unsafe
keyword
+
+The `foot-gun` Rust library adds some additonal names for the `unsafe` keyword.
+
+```rust
+foot_gun!({
+ // Unsafe code here
+});
+
+here_be_dragons!({
+ // Unsafe code here
+});
+
+beware!({
+ // Unsafe code here
+});
+
+// ... etc
+```
+
+Check out the [Source Code](https://github.com/ewpratten/foot-gun) or [use it in a project](https://crates.io/crates/foot-gun).
+
+
+
+
No Bitches? Discord Bot
+
+A discord bot that tries its very best to turn images of people into the "No Bitches?" meme.
+
+
+
+[Source Code](https://github.com/ewpratten/no-bitches-bot) available on GitHub.
+
\ No newline at end of file
diff --git a/sass/styles/layout.scss b/sass/styles/layout.scss
index 0b4e78b..df90d50 100644
--- a/sass/styles/layout.scss
+++ b/sass/styles/layout.scss
@@ -62,3 +62,20 @@
max-width: unset !important;
}
}
+
+.card {
+ border: 1px solid rgb(194, 194, 194);
+ border-radius: 5px;
+ padding-left: 1em;
+ padding-right: 1em;
+ margin-top: 1em;
+ margin-bottom: 1em;
+
+ h3 {
+ margin-top: 16px !important;
+ }
+}
+
+.card.card-dropshadow {
+ box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.2);
+}
diff --git a/sass/styles/typography.scss b/sass/styles/typography.scss
index f86f50c..6d7d507 100644
--- a/sass/styles/typography.scss
+++ b/sass/styles/typography.scss
@@ -37,6 +37,9 @@ body {
.gray {
color: gray;
}
+.grey {
+ color: gray;
+}
.hover-help {
&:hover {
@@ -66,4 +69,31 @@ body {
width:max-content;
margin:auto;
padding: 5px;
+}
+
+li {
+ img {
+ margin-left: unset !important;
+ margin-right: unset !important;
+ }
+}
+
+blink {
+ animation: blinker 1s linear infinite;
+}
+
+blink-lightly {
+ animation: blinker_light 1s linear infinite;
+}
+
+@keyframes blinker {
+ 50% {
+ opacity: 0;
+ }
+}
+
+@keyframes blinker_light {
+ 50% {
+ opacity: 0.5;
+ }
}
\ No newline at end of file
diff --git a/templates/components/navbar.html b/templates/components/navbar.html
index 4a7f9d4..51c3163 100644
--- a/templates/components/navbar.html
+++ b/templates/components/navbar.html
@@ -25,8 +25,8 @@
Home
·
Blog
- {# ·
- Projects #}
+ ·
+ Software
·
Radio
·