Compare commits

...

10 commits

16 changed files with 287 additions and 187 deletions

View file

@ -0,0 +1,38 @@
[
{
"id": 1,
"title": "Good old times",
"artist": "Agahnim",
"src": "/static/assets/music/times.mp3"
},
{
"id": 2,
"title": "Identification",
"artist": "Infinity Frequencies",
"src": "/static/assets/music/infinity.mp3"
},
{
"id": 3,
"title": "Flip the Switch",
"artist": "Stevia Sphere",
"src": "/static/assets/music/switch.mp3"
},
{
"id": 4,
"title": "Machines Vs Water",
"artist": "Stevia Sphere",
"src": "/static/assets/music/machines.mp3"
},
{
"id": 5,
"title": "Elevator 1",
"artist": "Stevia Sphere",
"src": "/static/assets/music/elevator.mp3"
},
{
"id": 6,
"title": "Somewhere Dark",
"artist": "Monodrone",
"src": "/static/assets/music/dark.mp3"
}
]

View file

@ -1,38 +1,14 @@
[ [
{ {
"id": 1, "id": 1,
"title": "Good old times", "title": "At The Stranger's House",
"artist": "Agahnim", "artist": "efdemin",
"src": "/static/assets/music/times.mp3" "src": "/static/assets/music/miniplayer/stranger.opus"
}, },
{ {
"id": 2, "id": 2,
"title": "Identification", "title": "Sleep Dealer",
"artist": "Infinity Frequencies", "artist": "Oneohtrix Point Never",
"src": "/static/assets/music/infinity.mp3" "src": "/static/assets/music/miniplayer/sleep-dealer.opus"
},
{
"id": 3,
"title": "Flip the Switch",
"artist": "Stevia Sphere",
"src": "/static/assets/music/switch.mp3"
},
{
"id": 4,
"title": "Machines Vs Water",
"artist": "Stevia Sphere",
"src": "/static/assets/music/machines.mp3"
},
{
"id": 5,
"title": "Elevator 1",
"artist": "Stevia Sphere",
"src": "/static/assets/music/elevator.mp3"
},
{
"id": 6,
"title": "Somewhere Dark",
"artist": "Monodrone",
"src": "/static/assets/music/dark.mp3"
} }
] ]

View file

@ -2,7 +2,7 @@ use std::sync::Arc;
use agahnim_web_v2::{ use agahnim_web_v2::{
domain::AppState, domain::AppState,
templates::{home::home, music::music, notfound::notfound}, templates::{about::about, home::home, music::music, notfound::notfound},
}; };
use axum::{Router, routing::get}; use axum::{Router, routing::get};
use tower_http::services::ServeDir; use tower_http::services::ServeDir;
@ -16,6 +16,7 @@ async fn main() {
let app = Router::new() let app = Router::new()
.route("/home", get(home)) .route("/home", get(home))
.route("/music", get(music)) .route("/music", get(music))
.route("/about", get(about))
.nest_service("/static", ServeDir::new("static")) .nest_service("/static", ServeDir::new("static"))
.fallback(notfound) .fallback(notfound)
.with_state(state); .with_state(state);

33
src/templates/about.rs Normal file
View file

@ -0,0 +1,33 @@
use askama::Template;
use axum::{
extract::State,
http::HeaderMap,
response::{Html, IntoResponse},
};
use std::sync::Arc;
use crate::domain::AppState;
#[derive(Template)]
#[template(path = "about.html")]
struct AboutTemplate<'a> {
tracks: &'a Vec<crate::domain::Track>,
}
#[derive(Template)]
#[template(path = "partials/about.html")]
struct AboutPartialTemplate {}
pub async fn about(headers: HeaderMap, state: State<Arc<AppState>>) -> impl IntoResponse {
if headers.contains_key("hx-request") {
Html(AboutPartialTemplate {}.render().unwrap())
} else {
Html(
AboutTemplate {
tracks: &state.mp_tracks,
}
.render()
.unwrap(),
)
}
}

View file

@ -1,3 +1,4 @@
pub mod about;
pub mod home; pub mod home;
pub mod music; pub mod music;
pub mod notfound; pub mod notfound;

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

View file

@ -217,8 +217,8 @@ table {
} }
body { body {
background-size: cover;
background-position: center; background-position: center;
background-size: auto;
min-height: 100lvh; min-height: 100lvh;
width: 100lvw; width: 100lvw;
overflow: auto; overflow: auto;
@ -231,7 +231,6 @@ body {
&:has(#content music) { &:has(#content music) {
background-image: url(assets/gifs/hmmmbg.gif); background-image: url(assets/gifs/hmmmbg.gif);
background-size: auto;
} }
&:has(#content katcenkat) { &:has(#content katcenkat) {
@ -257,21 +256,6 @@ body {
animation: marquee 8s linear infinite; animation: marquee 8s linear infinite;
} }
cute-container {
background-image: url(assets/gifs/weirdstone.png);
width: min(90svw, 1000px);
min-height: 70svh;
height: auto;
border: 5px solid var(--lavender);
padding: 1rem 2rem;
box-sizing: border-box;
img {
width: 80%;
display: block;
margin-inline: auto;
}
}
} }
/* CRT Effect */ /* CRT Effect */
@ -457,6 +441,14 @@ home-content {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
a {
color: var(--darkerer-pink);
&:hover {
color: var(--lavender)
}
}
welcome { welcome {
margin-bottom: 3rem; margin-bottom: 3rem;
text-align: center; text-align: center;
@ -559,13 +551,6 @@ home-content {
font-weight: bold; font-weight: bold;
} }
a {
color: var(--darkerer-pink);
&:hover {
color: var(--lavender)
}
}
article-body { article-body {
padding-bottom: 1rem; padding-bottom: 1rem;
@ -669,6 +654,99 @@ home-content {
} }
} }
/* About page */
about {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: stretch;
gap: 2rem;
>smaller-container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: center;
background-image: url(assets/gifs/beatingpurple.gif);
border: 5px solid var(--darkerer-pink);
font-size: 2rem;
name {
color: var(--pink);
font-weight: bold;
}
&#left {
img {
width: 10svw;
margin: 2rem;
mix-blend-mode: hard-light;
border: 5px solid var(--lavender);
}
}
}
>main-container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: center;
justify-content: center;
background-image: url(assets/gifs/heart-mosh.gif);
background-size: cover;
background-position: center;
background-repeat: no-repeat;
width: min(90svw, 1000px);
min-height: 70svh;
height: auto;
border: 5px solid var(--lavender);
padding: 1rem 2rem;
box-sizing: border-box;
button {
background: none;
color: white;
border: none;
font-size: 5rem;
font-family: "DotGothic16", sans-serif;
&:hover {
color: red;
}
}
}
[popover] {
color: white;
width: min(90vw, 600px);
border: 2px solid var(--lavender);
background-color: black;
padding: 2rem;
opacity: 0;
transform: scaleX(0);
transition: opacity 0.5s, transform 0.5s;
}
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
}
/* Music */ /* Music */
music { music {
display: flex; display: flex;
@ -687,7 +765,7 @@ music {
z-index: -1; z-index: -1;
pointer-events: none; pointer-events: none;
font-size: 10rem; font-size: 10rem;
animation: fadeInNOut 10s infinite; animation: fadeInNOut 5s infinite;
vertical-marquee-inner { vertical-marquee-inner {
position: absolute; position: absolute;
@ -706,20 +784,24 @@ music {
} }
} }
box {
border-radius: 0.4rem;
box-shadow:
0 4px 6px -1px rgb(0 0 0 / 0.1),
0 2px 4px -2px rgb(0 0 0 / 0.1);
background-color: white;
padding: 1rem;
}
>cute-container { >cute-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
background-image: url(assets/gifs/weirdstone.png);
width: min(90svw, 1000px);
min-height: 70svh;
height: auto;
border: 5px solid var(--lavender);
padding: 1rem 2rem;
box-sizing: border-box;
img {
width: 80%;
display: block;
margin-inline: auto;
}
} }
} }
@ -996,7 +1078,6 @@ mini-player {
} }
} }
/* Music page */
/* Miniplayer */ /* Miniplayer */
@ -1033,8 +1114,6 @@ mini-player {
} }
} }
/* Page-specific backgrounds */
/* Context Menu */ /* Context Menu */
helo { helo {
position: fixed; position: fixed;

3
templates/about.html Normal file
View file

@ -0,0 +1,3 @@
{% extends "base.html" %} {% block content %} {% include "partials/about.html" %}
{% endblock %} {% block miniplayer %} {% include "partials/miniplayer.html" %}
{% endblock %}

View file

@ -0,0 +1,29 @@
<about>
<smaller-container id="left">
<img src="/static/assets/images/pfp.webp" />
<name>AGAHNIM</name>
</smaller-container>
<main-container>
<!-- Ajouter cœur ici et tu peux l'examiner ou quoi, ça pourrait être cool, plus de créativité que juste le texte dans le div stp -->
<!-- parler viole de gambe, Spinoza, Bourdieu, SensCritique etc -->
<button popovertarget="mainpopover">D I S S E C T</button>
</main-container>
<mainpopover popover id="mainpopover">
In my personal life, I enjoy learning more about sociology, philosophy, particularly the aesthetics, and, to some
extent, economics notably through the Regulation school, although Im slightly less interested in the latter.
<br /><br />
I am eager for aesthetic experiences, as evidenced by my SensCritique account, though its still sparse for now,
as I tirelessly seek that feeling I first experienced while reading Boris Vians "I Shall Spit on Your Graves".
My favorite fields remain music and literature, but Im open to any medium, such as film or the visual arts, and
Im trying to catch up in those areas! My tastes are quite varied, and Id have a hard time defining them, but I
in fact have a preference for Baroque music and more experimental sounds, though thats not all of course.
<br /><br />
Of course, I play video games like anyone who spends a fair amount of time on their computer, and Im particularly
enjoying playing Tekken 8 and Death Stranding right now, though my all-time favorite game will always be The
Legend of Zelda: Skyward Sword; you can spot some references to it on this site if you look closely!
</mainpopover>
</about>

View file

@ -41,4 +41,4 @@
setInterval(update, 1000); setInterval(update, 1000);
} }
})(); })();
</script> </script>

View file

@ -1,10 +1,6 @@
<home-content> <home-content>
<welcome> <welcome>
<img <img src="/static/assets/images/welcome.webp" width="400px" alt="A welcome text in pink" />
src="/static/assets/images/welcome.webp"
width="400px"
alt="A welcome text in pink"
/>
<marquee> <marquee>
{% for _ in 0..12 %} &nbsp;彡★Welcome to my little corner of the {% for _ in 0..12 %} &nbsp;彡★Welcome to my little corner of the
Web★彡&nbsp; {% endfor %} Web★彡&nbsp; {% endfor %}
@ -16,112 +12,54 @@
it's still a <darkerer-pink>work in progress</darkerer-pink> but I'm sure it's still a <darkerer-pink>work in progress</darkerer-pink> but I'm sure
you will see changes if you come back from time to time :) <br /><br /> you will see changes if you come back from time to time :) <br /><br />
My name is <darkerer-pink>Agahnim</darkerer-pink> My name is <darkerer-pink>Agahnim</darkerer-pink>
<pronouns>she/her</pronouns>, I'm a <pronouns>she/her</pronouns> and I do many things, but I more notably create <darkerer-pink>music</darkerer-pink>
<darkerer-pink>developer</darkerer-pink> and with my computer and my <a href="/about">instrument</a> (less notably). I also
<darkerer-pink>music producer</darkerer-pink> from <darkerer-pink>develop</darkerer-pink> from time to time when a
<darkerer-pink>France</darkerer-pink> ! <br /><br /> project piques my interest !<br /><br />
I created this website not just to I created this website not just to
<darkerer-pink>improve</darkerer-pink> my web development skills, but also <darkerer-pink>improve</darkerer-pink> my web development skills, but also
because it's <boing>fun</boing> to build a project like this. It's a because it's <boing>fun</boing> to build a project like this. Having grown tired of social media, I find it
small, personal space on the internet, away from the social climate, which particularly pleasant to have a little personal space that weve shaped in our own way; this way, it allows us to
is getting <shitty>worse and worse.</shitty> <br /><br /> express ourselves without being overwhelmed by the increasingly <shitty>toxic social climate and the
narrow-minded,
unfounded opinions that pop up here and there</shitty>. <br /><br />
This website is inspired by the This website is inspired by the
<darkerer-pink>vaporwave aesthetic</darkerer-pink> and the old PCs I used <darkerer-pink>vaporwave aesthetic</darkerer-pink> and the old PCs I used
to tinker with when I was a kid. I always liked this type of aesthetic and to tinker with when I was a kid. I always liked this type of aesthetic and
the mix of melancholy of comfort it brings me. It feels good to bring that the mix of melancholy of comfort it brings me.
vibe into one of my projects.
<badges> <badges>
<img <img src="/static/assets/badges/88x31computer.gif" alt="88x31 pixel art badge with a retro computer" />
src="/static/assets/badges/88x31computer.gif" <img src="/static/assets/badges/cssisawesome.webp" alt="Badge with text 'CSS is Awesome'" />
alt="88x31 pixel art badge with a retro computer" <img src="/static/assets/badges/queer.webp" alt="Queer pride flag badge" />
/> <img width="100px" src="/static/assets/badges/skywardsword.webp"
<img alt="Cover art for The Legend of Zelda Skyward Sword" />
src="/static/assets/badges/cssisawesome.webp" <img src="/static/assets/badges/transrightsnow.webp" alt="Trans rights badge with text 'Trans Rights Now'" />
alt="Badge with text 'CSS is Awesome'" <img width="30%" src="/static/assets/badges/kirby.gif" alt="Kirby character animated GIF" />
/> <img width="30%" src="/static/assets/badges/pink.gif" alt="Pink animated pixel art badge" />
<img <img width="30%" src="/static/assets/badges/trans.gif" alt="Trans pride flag animated badge" />
src="/static/assets/badges/queer.webp"
alt="Queer pride flag badge"
/>
<img
width="100px"
src="/static/assets/badges/skywardsword.webp"
alt="Cover art for The Legend of Zelda Skyward Sword"
/>
<img
src="/static/assets/badges/transrightsnow.webp"
alt="Trans rights badge with text 'Trans Rights Now'"
/>
<img
width="30%"
src="/static/assets/badges/kirby.gif"
alt="Kirby character animated GIF"
/>
<img
width="30%"
src="/static/assets/badges/pink.gif"
alt="Pink animated pixel art badge"
/>
<img
width="30%"
src="/static/assets/badges/trans.gif"
alt="Trans pride flag animated badge"
/>
</badges> </badges>
</box> </box>
<box id="smallbox"> <box id="smallbox">
<socials-header> Socials ! </socials-header> <socials-header> Socials ! </socials-header>
<socials> <socials>
<a href="https://github.com/naguiagahnim" target="_blank" <a href="https://github.com/naguiagahnim" target="_blank"><img src="/static/assets/icons/github.webp"
><img width="30px" alt="GitHub logo" /></a>
src="/static/assets/icons/github.webp" <a href="https://open.spotify.com/intl-fr/artist/4BPUhsH6krKkCNFrdMZnZF?si=E3luyIf0S_yfJRmm82S5OA"
width="30px" target="_blank"><img src="/static/assets/icons/spotify.webp" width="30px" alt="Spotify logo" /></a>
alt="GitHub logo" <a href="https://www.instagram.com/agahnim_music/" target="_blank"><img src="/static/assets/icons/insta.webp"
/></a> width="30px" alt="Instagram logo" /></a>
<a
href="https://open.spotify.com/intl-fr/artist/4BPUhsH6krKkCNFrdMZnZF?si=E3luyIf0S_yfJRmm82S5OA"
target="_blank"
><img
src="/static/assets/icons/spotify.webp"
width="30px"
alt="Spotify logo"
/></a>
<a href="https://www.instagram.com/agahnim_music/" target="_blank"
><img
src="/static/assets/icons/insta.webp"
width="30px"
alt="Instagram logo"
/></a>
</socials> </socials>
<img <img width="200px" src="/static/assets/gifs/divider2.gif" alt="Decorative divider" />
width="200px" <bibou-message>Consult the wisdom of the Bibou, if thou darest...</bibou-message>
src="/static/assets/gifs/divider2.gif"
alt="Decorative divider"
/>
<bibou-message
>Consult the wisdom of the Bibou, if thou darest...</bibou-message
>
<bibou-container> <bibou-container>
<img <img class="boubou" src="/static/assets/images/boubou.webp" alt="Bibou endormi" />
class="boubou" <img class="bibou" src="/static/assets/images/bibou.webp" alt="Bibou éveillé" />
src="/static/assets/images/boubou.webp"
alt="Bibou endormi"
/>
<img
class="bibou"
src="/static/assets/images/bibou.webp"
alt="Bibou éveillé"
/>
</bibou-container> </bibou-container>
<bibou-text> </bibou-text> <bibou-text> </bibou-text>
</box> </box>
<box id="newsbox"> <box id="newsbox">
<website-news> <website-news>
<img <img width="70%" src="/static/assets/gifs/updates.gif" alt="Animated text 'Updates'" />
width="70%"
src="/static/assets/gifs/updates.gif"
alt="Animated text 'Updates'"
/>
{% for article in news %} {% for article in news %}
<article-entry> <article-entry>
@ -129,11 +67,7 @@
{{ article.date.format("%d/%m/%Y") }} {{ article.date.format("%d/%m/%Y") }}
</time> </time>
<article-body> {{ article.body_html|safe }} </article-body> <article-body> {{ article.body_html|safe }} </article-body>
<img <img width="300px" src="/static/assets/gifs/divider2.gif" alt="Decorative divider" />
width="300px"
src="/static/assets/gifs/divider2.gif"
alt="Decorative divider"
/>
</article-entry> </article-entry>
{% else %} {% else %}
<ominous-message> Nothing to see here, for now... </ominous-message> <ominous-message> Nothing to see here, for now... </ominous-message>
@ -184,4 +118,4 @@
ttText(quote); ttText(quote);
}); });
}) (); }) ();
</script> </script>

View file

@ -1,25 +1,31 @@
<music> <music>
<vertical-marquee id="bg-text"></vertical-marquee> <vertical-marquee id="bg-text" aria-hidden="true"></vertical-marquee>
<cute-container> <cute-container>
<img src="/static/assets/gifs/music.gif" alt="Animated text 'Music'" /> <img src="/static/assets/gifs/music.gif" alt="Animated text 'Music'" />
</cute-container> </cute-container>
</music> </music>
<!-- Wall of text go!! -->
<script> <script>
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; (function () {
const container = document.getElementById("bg-text"); const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const colWidth = 20; const colWidth = 20;
const rowHeight = 24; const rowHeight = 24;
const cols = Math.ceil(window.innerWidth / colWidth); const container = document.getElementById("bg-text");
const rows = Math.ceil(window.innerHeight / rowHeight); if (!container) return;
for (let c = 0; c < cols; c++) { function build() {
const col = document.createElement("vertical-marquee-inner"); container.innerHTML = "";
col.style.left = c * colWidth + "px"; const cols = Math.ceil(window.innerWidth / colWidth);
for (let r = 0; r < rows; r++) { const rows = Math.ceil(window.innerHeight / rowHeight);
const span = document.createElement("text"); for (let c = 0; c < cols; c++) {
span.textContent = chars[Math.floor(Math.random() * chars.length)]; const col = document.createElement("vertical-marquee-inner"); col.style.left = c *
col.appendChild(span); colWidth + "px"; for (let r = 0; r < rows; r++) {
} const span = document.createElement("text");
container.appendChild(col); span.textContent = chars[Math.floor(Math.random() * chars.length)]; col.appendChild(span);
} } container.appendChild(col);
</script> }
} let resizeTimer; window.addEventListener("resize", function () {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(build, 150);
}); build();
})(); </script>