i miss otachan

This commit is contained in:
amy 2024-10-25 19:23:34 +03:30
parent 21ffad6026
commit fa8f60dcdd
No known key found for this signature in database
7 changed files with 375 additions and 277 deletions

View file

@ -1,403 +1,406 @@
:root { :root {
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;
-moz-user-select: none; -moz-user-select: none;
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
/* browsers agreeing on stuff challenge (impossible) */ /* browsers agreeing on stuff challenge (impossible) */
background-color: #121212; background-color: #121212;
font-family: monospace; font-family: monospace;
overflow-x: hidden; overflow-x: hidden;
color: #ffc8dd; color: #ffc8dd;
} }
.footer a { .footer a {
color: #cdb4db; color: #cdb4db;
} }
.footer { .footer {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
margin: 10px; margin: 10px;
z-index: 1000; z-index: 1000;
} }
.musicartist { .musicartist {
font-weight: bolder; font-weight: bolder;
margin-bottom: .5em; margin-bottom: .5em;
} }
.musicbutton { .musicbutton {
background-color: #272525; background-color: #272525;
color: pink; color: pink;
font-family: Roboto, sans-serif; font-family: Roboto, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
padding: 10px 30px; padding: 10px 30px;
box-shadow: none; box-shadow: none;
border-radius: 5px; border-radius: 5px;
transition: 639ms; transition: 639ms;
transform: translateY(0); transform: translateY(0);
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
border: none; border: none;
margin: 1em; margin: 1em;
} }
.musicdiv { .musicdiv {
background-color: rgba(0, 0, 0, 0.731); background-color: rgba(0, 0, 0, 0.731);
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
z-index: 1500; z-index: 1500;
} }
.music-close-button-div { .music-close-button-div {
display: flex; display: flex;
justify-content: end; justify-content: end;
} }
.close-button { .close-button {
padding: 2; padding: 2;
border: none; border: none;
background: none; background: none;
border-radius: 2px; border-radius: 2px;
background-color: #5e5a5a; background-color: #5e5a5a;
text-decoration: none; text-decoration: none;
color: pink; color: pink;
cursor: pointer; cursor: pointer;
margin: 1em; margin: 1em;
} }
.musiclist { .musiclist {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
font-size: larger; font-size: larger;
flex-wrap: wrap; flex-wrap: wrap;
height: 80%; height: 80%;
overflow-x: scroll; overflow-x: scroll;
} }
.innermusic { .innermusic {
width: 50%; width: 50%;
height: 50%; height: 50%;
border-radius: 2%; border-radius: 2%;
background: #121212; background: #121212;
z-index: 1000; z-index: 1000;
} }
.musicbutton:hover { .musicbutton:hover {
border-radius: 5px; border-radius: 5px;
transition: 639ms; transition: 639ms;
padding: 10px 30px; padding: 10px 30px;
transform: translateY(-1px); transform: translateY(-1px);
border: none; border: none;
box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
background-color: #5e5a5a; background-color: #5e5a5a;
animation: big 500ms infinite; animation: big 500ms infinite;
transform: translateY(-0.3em); transform: translateY(-0.3em);
transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s; transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s;
} }
.actualreviewdiv { .actualreviewdiv {
overflow-y: scroll; overflow-y: scroll;
height: 18em; height: 18em;
} }
.cardchild:hover+.actualreviewdiv { .cardchild:hover + .actualreviewdiv {
transition: 1s; transition: 1s;
transform: rotateY(100); transform: rotateY(100);
} }
.header { .header {
margin-top: 6em; margin-top: 6em;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.cardchild h1 { .cardchild h1:not(:has(.listeningto)) {
font-size: 3em; font-size: 3em;
text-align: center; text-align: center;
} }
.reviewheadertext { .reviewheadertext {
margin-bottom: -.2em; margin-bottom: -.2em;
} }
.cardchild p { .cardchild p {
margin-bottom: -1.5em; margin-bottom: -1.5em;
} }
.cardchild a { .cardchild a {
font-size: 1.5em; font-size: 1.5em;
text-align: center; text-align: center;
color: pink; color: pink;
text-decoration: underline; text-decoration: underline;
margin-bottom: 0%; margin-bottom: 0%;
animation: spawntop 1s; .fadein {
animation: spawntop 1s;
}
} }
.cardchild span { .cardchild span {
font-size: 1.5em; font-size: 1.5em;
} }
.cardchild img { .cardchild img {
max-width: 5em; max-width: 5em;
margin: 0.5em; margin: 0.5em;
} }
.cardchild:hover::-webkit-scrollbar { .cardchild:hover::-webkit-scrollbar {
display: none; display: none;
} }
/* CAN BROWSERS JUST AGREE ON ONE FUCKING THING */ /* CAN BROWSERS JUST AGREE ON ONE FUCKING THING */
.cardchild { .cardchild {
-ms-overflow-style: none; -ms-overflow-style: none;
scrollbar-width: none; scrollbar-width: none;
cursor: default; cursor: default;
background-color: #272525; background-color: #272525;
border-radius: 5%; border-radius: 5%;
width: 25em; width: 25em;
height: 25em; height: 25em;
margin-top: 1em; margin-top: 1em;
padding: 0.5em 5em 2em 5em; padding: 0.5em 5em 2em 5em;
transform: translateY(-0em); transform: translateY(-0em);
transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s; transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s;
} }
.theeaster { .theeaster {
color: pink; color: pink;
padding: 8px; padding: 8px;
font-size: 21px; font-size: 21px;
text-align: center; text-align: center;
border-width: 0; border-width: 0;
background-color: #5555557a; background-color: #5555557a;
border-style: solid; border-style: solid;
border-radius: 11px; border-radius: 11px;
} }
.theeaster:focus { .theeaster:focus {
border-color: pink; border-color: pink;
box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
transition: .5s; transition: .5s;
} }
.easteregg { .easteregg {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
} }
.easteregginner { .easteregginner {
width: 70%; width: 70%;
background-color: #272525; background-color: #272525;
height: 10em; height: 10em;
} }
.cardchild:hover { .cardchild:hover {
box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
-moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4);
background-color: #5e5a5a; background-color: #5e5a5a;
animation: big 500ms infinite; animation: big 500ms infinite;
transform: translateY(-0.3em); transform: translateY(-0.3em);
transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s; transition: background-color 1s, transform .5s, box-shadow .5s, -webkit-box-shadow .5s, -moz-box-shadow 0.5s;
} }
.linktree { .linktree {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
} }
.linktree img { .linktree img {
cursor: pointer; cursor: pointer;
} }
.singlereview img { .singlereview img {
border-radius: 12%; border-radius: 12%;
} }
.singlereview { .singlereview {
margin: 1em; margin: 1em;
border-radius: 3%; border-radius: 3%;
background-color: #00000040; background-color: #00000040;
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
} }
.cssishard { .cssishard {
background-color: #121212; background-color: #121212;
} }
.singlemusic { .singlemusic {
cursor: pointer; cursor: pointer;
min-width: 15em; min-width: 15em;
max-width: 15em; max-width: 15em;
margin: 1em; word-wrap: anywhere;
padding: 1em; margin: 1em;
border-radius: 3%; padding: 1em;
background-color: #272525; border-radius: 3%;
display: flex; background-color: #272525;
align-items: flex-start; display: flex;
align-items: flex-start;
} }
.singlemusic img { .singlemusic img {
max-width: 5em; max-width: 5em;
} }
.innermusic { .innermusic {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.reviewname { .reviewname {
margin-bottom: 0.1em; margin-bottom: 0.1em;
font-weight: bolder; font-weight: bolder;
} }
.reviewinfo { .reviewinfo {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.reviewname { .reviewname {
margin-bottom: 0.1em; margin-bottom: 0.1em;
font-weight: bolder; font-weight: bolder;
} }
.parent { .parent {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-evenly; justify-content: space-evenly;
} }
.header h1 { .header h1 {
font-size: 3.6em; font-size: 3.6em;
color: blanchedalmond; color: blanchedalmond;
display: inline-table; display: inline-table;
} }
.cardchild h2 { .cardchild h2 {
display: inline-table; display: inline-table;
vertical-align: text-bottom; vertical-align: text-bottom;
} }
.header h1:not(:active) { .header h1:not(:active) {
animation: slide-right 1.5s; animation: slide-right 1.5s;
} }
.header h1:hover { .header h1:hover {
animation: shake 10ms infinite; animation: shake 10ms infinite;
} }
.header img { .header img {
border-radius: 25%; border-radius: 25%;
margin-right: 1em; margin-right: 1em;
vertical-align: middle; vertical-align: middle;
} }
.initialanim { .initialanim {
animation: slide-left 1.5s; animation: slide-left 1.5s;
} }
.gaybackground { .gaybackground {
background-image: url("/gaybackground.png"); background-image: url("/gaybackground.png");
} }
.animate { .animate {
z-index: 10000000; z-index: 10000000;
transform: scale(10000); transform: scale(10000);
transition: 20s; transition: 20s;
} }
@keyframes slide-left { @keyframes slide-left {
from { from {
transform: translateX(-10000em); transform: translateX(-10000em);
} }
to { to {
transform: translateX(0); transform: translateX(0);
} }
} }
@keyframes slide-right { @keyframes slide-right {
from { from {
transform: translateX(10000em); transform: translateX(10000em);
} }
to { to {
transform: translateX(0); transform: translateX(0);
} }
} }
@keyframes bigsmall { @keyframes bigsmall {
0% { 0% {
max-width: 10em; max-width: 10em;
} }
50% { 50% {
width: 10.5em; width: 10.5em;
max-width: 10.5em; max-width: 10.5em;
} }
100% { 100% {
max-width: 10em; max-width: 10em;
} }
} }
@keyframes spawntop { @keyframes spawntop {
0% { 0% {
opacity: 0%; opacity: 0%;
transform: translateY(100em); transform: translateY(1em);
} }
100% { 100% {
opacity: 100%; opacity: 100%;
transform: translateY(0); transform: translateY(0);
} }
} }
@keyframes shake { @keyframes shake {
0% { 0% {
transform: translate(0, 0) rotate(0deg); transform: translate(0, 0) rotate(0deg);
} }
25% { 25% {
transform: translate(5px, 5px) rotate(5deg); transform: translate(5px, 5px) rotate(5deg);
} }
50% { 50% {
transform: translate(0, 0) rotate(0eg); transform: translate(0, 0) rotate(0eg);
} }
75% { 75% {
transform: translate(-5px, 5px) rotate(-5deg); transform: translate(-5px, 5px) rotate(-5deg);
} }
100% { 100% {
transform: translate(0, 0) rotate(0deg); transform: translate(0, 0) rotate(0deg);
} }
} }

View file

@ -121,7 +121,7 @@ function App() {
</div> </div>
</div> </div>
<AdvancedBr count={2} /> <AdvancedBr count={2} />
<div class='easteregg'> <div class='easteregg' style={{opacity: isAnimating() || animatedwoem() ? "0%" : "100%"}}>
<div class="musicbutton" onclick={() => { setpopup(!shouldpopup()) }}> <div class="musicbutton" onclick={() => { setpopup(!shouldpopup()) }}>
<p>typa shit ive been on</p><img style={{ <p>typa shit ive been on</p><img style={{
"margin-left": "0.3em", "margin-left": "0.3em",

View file

@ -1,5 +1,5 @@
import { createSignal, onMount } from "solid-js" import {createSignal, onMount} from "solid-js"
import { ishover } from "../App"; import {ishover} from "../App";
interface Review { interface Review {
reviewID: number; reviewID: number;
@ -44,8 +44,9 @@ export default function Reviews() {
<> <>
<a style={{ <a style={{
display: ishover() ? "inline" : "none" display: ishover() ? "inline" : "none"
}} href="https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Fexhq.dev%2Freview%2F&scope=identify"> }}
<p>add your reviews here</p> href="https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Fexhq.dev%2Freview%2F&scope=identify">
<p class="fadein">add your reviews here</p>
</a> </a>
<h1 class="reviewheadertext">Reviews</h1> <h1 class="reviewheadertext">Reviews</h1>
<div <div
@ -69,30 +70,31 @@ export default function Reviews() {
export const theImager = async (id: string): Promise<string> => (await fetch(`https://dc-lookup.mono.exhq.dev/v1/user/${id}`) export const theImager = async (id: string): Promise<string> => (await fetch(`https://dc-lookup.mono.exhq.dev/v1/user/${id}`)
.then(res => res.json()).then(data => data.avatar.link).catch(() => "https://http.cat/status/100")); .then(res => res.json()).then(data => data.avatar.link).catch(() => "https://http.cat/status/100"));
function SingleReview(props: NeoReview) { function SingleReview(props: NeoReview) {
const [imageSrc, setImageSrc] = createSignal(""); const [imageSrc, setImageSrc] = createSignal("");
onMount(async () => { onMount(async () => {
const url = await theImager(props.discordID); const url = await theImager(props.discordID);
setImageSrc(url); setImageSrc(url);
}); });
return ( return (
<div class="singlereview"> <div class="singlereview">
<img <img
src={imageSrc()} src={imageSrc()}
alt="User Avatar" alt="User Avatar"
style={{ "max-width": "3em", "border-radius": "30%" }} style={{"max-width": "3em", "border-radius": "30%"}}
/> />
<div class="reviewinfo"> <div class="reviewinfo">
<div class="reviewname"> <div class="reviewname">
{props.global_name === null ? props.username : props.global_name} {props.global_name === null ? props.username : props.global_name}
</div>
<div class="reviewtext">{props.reviewText}</div>
</div> </div>
<div class="reviewtext">{props.reviewText}</div>
</div> </div>
); </div>
} );
}
export async function sendReview(review: string, token: string): Promise<boolean> { export async function sendReview(review: string, token: string): Promise<boolean> {
try { try {
const response = await fetch(`https://backendreview.mono.exhq.dev/sendreview?review=${review}`, { const response = await fetch(`https://backendreview.mono.exhq.dev/sendreview?review=${review}`, {

View file

@ -0,0 +1,6 @@
.listeningto {
font-size: smaller;
display: flex;
justify-content: center;
flex-direction: column;
}

View file

@ -0,0 +1,65 @@
import {createSignal, onMount, Show} from "solid-js";
import "./cumbrainz.css"
interface ListenPayload {
payload: {
count: number;
listens: Listen[];
playing_now: boolean;
user_id: string;
};
}
interface Listen {
playing_now: boolean;
track_metadata: TrackMetadata;
}
interface TrackMetadata {
additional_info: AdditionalInfo;
artist_name: string;
release_name: string;
track_name: string;
}
interface AdditionalInfo {
duration: number;
music_service_name: string;
origin_url: string;
submission_client: string;
submission_client_version: string;
}
export function Cumbrainz() {
const [musicInfo, setMusicInfo] = createSignal({} as ListenPayload);
const [isLoading, setIsLoading] = createSignal(true);
onMount(async () => {
try {
const the = await fetch("https://api.listenbrainz.org/1/user/exhq/playing-now")
const thejson = await the.json()
setMusicInfo(thejson)
} catch (error) {
console.error("Error fetching music data from song.link:", error);
} finally {
setIsLoading(false);
}
})
return <div class="listeningto">
<h2 >Listening to</h2>
<Show when={isLoading()} fallback={
<Show when={musicInfo().payload.listens.length > 0} fallback={<span>nothing</span>}>
<Thesong song={musicInfo()} />
</Show>
}>
<span>loading</span>
</Show>
</div>
}
function Thesong({song}: { song: ListenPayload }) {
return <a
href={song.payload.listens[0].track_metadata.additional_info.origin_url.replace(/\?.*/, m => `?v=${new URLSearchParams(m).get('v') ?? ''}`).replace(/(\?v=)$/, '')}>
<div> {song.payload.listens[0].track_metadata.artist_name} - {song.payload.listens[0].track_metadata.track_name} </div>
</a>
}

View file

@ -0,0 +1,11 @@
.middleparent {
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: 100%;
height: 100%;
}
.middlechild {
text-align: center;
}

View file

@ -1,22 +1,33 @@
import { Cumbrainz } from "./cumbrainz"
import "./middlecard.css"
export interface InfoCardProps { export interface InfoCardProps {
bd: boolean bd: boolean
} }
export function InfoCard(props: InfoCardProps) { export function InfoCard(props: InfoCardProps) {
return props.bd ? <>
<h1>hi :3</h1> return <div class="middleparent">
<span>its my birthday <div class="middlechild">{
<br /> props.bd ?
please buy me stuff <>
</span> <span>
</> : its my birthday
<> <br />
<h1>hi :3</h1> please buy me stuff
<span>silly goober who does silly stuff </span>
<br /> </> : <>
self proclaimed programmer and progamer <span>silly goober who does silly stuff
<br /> <br />
shitposts for fun self proclaimed programmer and progamer
</span> <br />
</> shitposts for fun
</span>
</>}</div>
<div style={{"background-color": "gray", height: "1px"}}>
<br/>
</div>
<div class="middlechild">
<Cumbrainz></Cumbrainz>
</div>
</div>
} }