new homepage surprise!!

main
Midnight 2 years ago
parent fed78fc93f
commit 73fb4ef126

@ -0,0 +1,7 @@
import styles from '../styles/components/Button.module.css'
const Button = (props) => (
<a className={styles.btn} rel={props.rel} target={props.target} href={props.href}>{props.content}</a>
)
export default Button

@ -0,0 +1,19 @@
import Head from 'next/head'
import styles from '../styles/components/IndexHeader.module.css'
const Header = () => (
<div>
<Head>
<link rel="icon" href="/sign.png" />
</Head>
<div className={styles.items}>
{/* <a href="/">Home</a> */}
<a href="/commissions">Commissions</a>
<a href="/gallery">Gallery</a>
<a href="/contact">Contact</a>
</div>
</div>
)
export default Header

@ -0,0 +1,16 @@
import styles from '../styles/components/Socials.module.css'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faTwitter } from '@fortawesome/free-brands-svg-icons'
import { faTwitch } from '@fortawesome/free-brands-svg-icons'
import { faTrello } from '@fortawesome/free-brands-svg-icons'
import { faPatreon } from '@fortawesome/free-brands-svg-icons'
const Pages = () => (
<section className={styles.buttons}>
<a href="/commissions">🖌 Commissions</a>
<a href="/gallery">🖼 Gallery</a>
<a href="/contact"> Contact</a>
</section>
)
export default Pages

6974
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,9 +1,13 @@
import Head from 'next/head'
import styles from '../styles/Index.module.css'
import Header from '../components/header';
import Header from '../components/indexheader';
import Footer from '../components/footer';
import Socials from '../components/socials';
import TwitchPopup from '../components/twitchpopup';
import Pages from '../components/pages';
import Button from '../components/button';
import { faTwitch } from '@fortawesome/free-brands-svg-icons'
import { TwitchEmbed } from 'react-twitch-embed';
const client_id = "edpx4oisrkpnrlx47b7a2p3govy6qm";
const client_secret = "dqr2glvdhr7uyn3bf3biu48977rfwo";
@ -29,45 +33,98 @@ export default function Index({ motto, twitch_online, about }) {
<meta name="theme-color" content="#4f4fff" />
</Head>
<Header />
<div className="container">
<article className="content">
{/* <Header /> */}
<div>
<TwitchPopup show={twitch_online} />
<div className={styles.colorbg}>
<section className="card">
<div className={styles.avatar}>
<div>
<img src="/trickwow.png"></img>
<TwitchPopup show={twitch_online} />
<h1 className={styles.officeBanner}>
HAPPY BIRTHDAY TRICK!
</h1>
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.4.0/dist/confetti.browser.min.js"></script>
<script src="js/confetti.js"></script>
<article className={styles.pages}>
<section className={styles.top}>
<div></div>
<div className={styles.menu}>
<h4 style={{width: "100%", fontSize: "1.1em", color: "white", textAlign: "right", margin: "unset"}}>
📃 "{motto}"
</h4>
</div>
</section>
<section className={styles.contents}>
<div className={styles.info}>
<div className={styles.avatarField}>
<img src="/trickwow.png" className={styles.avatar} onClick={() => updateMeowCount()} id="clickMeow" />
<script src="js/meow.js"></script>
</div>
<div>
<h1>Hi, I'm Trick!</h1>
<h4>{motto}</h4>
<div style={{display: "flex", flexDirection: "column"}}>
<h1 style={{fontSize: "3em", margin: "unset"}}>Hi, I'm Trick! 👋</h1>
<p>{about} 🦊</p>
</div>
<Pages />
</div>
<div>
<h3>About me</h3>
<div className="flex">
<p>
{about}
</p>
<hr style={{margin: "3em 0"}}/>
<div className={styles.grid}>
<div className={styles.item + " " + styles.patreon}>
<h4 style={{textAlign: "center"}}>Become a Patron today and get cool things like:</h4>
<ul>
<li>Free monthly Icon commission</li>
<li>Free monthly Full Body commission</li>
<li>Free monthly Sketch commission</li>
<li>Access to exclusive Discord</li>
<li>First look at artworks 24 hours before anywhere else</li>
<li>20% discount on all art commissions</li>
<li>Custom Discord role</li>
</ul>
<Button href="https://patreon.com/trickthefox" target="_blank" rel="noreferrer" content="✨ Become a Patron ✨"/>
</div>
<div className={styles.item + " " + styles.art}>
<h2 style={{marginBottom: "1em"}}>🌟 Some of my artworks</h2>
<div className={styles.list}>
<img src="/2.jpeg" />
<img src="/3.jpeg" />
<img src="/1.jpeg" />
</div>
</div>
<a href="https://dubbelnull.com" target="_blank" rel="noreferrer" className={styles.item + " " + styles.credits}>
<h5 style={{textAlign: "center"}}>Website made by DubbelNull</h5>
</a>
<div className={styles.item + " " + styles.socials}>
<h4 style={{textAlign: "center", marginBottom: "1em"}}># My Socials #</h4>
<Socials/>
</div>
<div className={styles.item + " " + styles.tweets}>
<a class="twitter-timeline" data-height="600" data-dnt="true" data-theme="dark" href="https://twitter.com/Trick_the_fox?ref_src=twsrc%5Etfw">Tweets by Trick_the_fox</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
</div>
</section>
</div>
<Socials />
<div className={styles.item + " " + styles.twitch}>
<TwitchEmbed id="trick_the_fox" channel="trick_the_fox" theme="dark" autoplay="true" width="100%" withChat={false} />
</div>
<div className={styles.item}></div>
<div className={styles.item}></div>
</div>
</section>
</article>
</div>
<Footer />
</div>
)
}
@ -145,7 +202,7 @@ async function RandomMotto() {
const randomNumber = Math.floor(Math.random() * Mottos.length);
return Mottos[randomNumber];
}
export async function getServerSideProps() {
return {
props: {
@ -155,4 +212,38 @@ export async function getServerSideProps() {
}
};
}
async function updateMeowCount() {
const getMeow = await fetch("https://api.airtable.com/v0/appQnOyKBnBVQXLUM/Meows", {
method: "GET",
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer " + process.env.AIRTABLE,
}
});
let meowCount = await getMeow.json();
meowCount = parseInt(meowCount['records'][0]['fields']['count']);
meowCount++;
const updateMeow = {
"records": [
{
"id": "recR9RbScmJUPGQem",
"fields": {
"count": meowCount + ""
}
}
]
};
await fetch("https://api.airtable.com/v0/appQnOyKBnBVQXLUM/Meows", {
method: "PATCH",
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer " + process.env.AIRTABLE,
"accept": "application/json",
},
body: JSON.stringify(updateMeow)
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

@ -0,0 +1,24 @@
var colors = ["#ff55c8", "#00d4ff", "#4f4fff", "#FFF"];
function frame() {
confetti({
particleCount: 4,
angle: 60,
spread: 55,
origin: { x: 0, y: 1 },
colors: colors,
});
confetti({
particleCount: 4,
angle: 120,
spread: 55,
origin: { x: 1, y: 1 },
colors: colors,
});
if (Date.now() < Date.now() + 15000) {
requestAnimationFrame(frame);
}
}
window.onload = frame();

@ -1,44 +1,251 @@
.avatar {
.menu {
display: flex;
gap: 2em;
align-items: flex-end;
padding: 1em 1em 1em 5em;
}
.avatar div:last-child {
.contents {
border-radius: 20px;
box-shadow: 5px 0px 30px rgba(0,0,0,0.5);
display: flex;
flex-direction: column;
justify-content: center;
gap: 1em;
padding: 2em 4em 4em 4em;
color: white;
background-color: #25262C;
width: 100%;
flex-grow: 3;
}
.pages {
margin: auto;
max-width: 1800px;
animation-name: jump;
animation-duration: 1s;
animation-timing-function: ease-in-out;
}
@keyframes jump {
0% {
opacity: 0;
transform: scale(0.8) translateY(100vh);
}
100% {
opacity: 100;
transform: scale(1) translateY(0px);
}
}
.grid {
height: 100%;
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 0.5em;
width: 90%;
}
.avatar div:last-child > * {
.grid li {
font-size: 0.95em;
list-style-type: none;
margin: 10px 0;
}
.grid li:before {
content: '✨';
margin-left: -30px;
margin-right: 10px;
}
.grid > * {
height: 100%;
}
.grid h4, .grid h5, .grid h2 {
margin: unset;
}
.avatar h1 {
font-size: 2em;
.list {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 0.5em;
}
.art {
grid-row: 1 / span 2;
grid-column: 1 / span 3;
}
.socials {
grid-row: 3;
grid-column: 4 / span 1;
}
.credits {
grid-row: 4;
grid-column: 2 / span 2;
}
.tweets {
grid-row: 1 / span 2;
grid-column: 4 / span 1;
}
.twitch {
grid-row: 3;
grid-column: 1 / span 2;
}
.patreon {
grid-row: 3;
grid-column: 3 / span 1;
}
.itemhollow {
border-radius: 10px;
}
.item {
box-shadow: 5px 0px 20px rgba(0,0,0,0.3);
background-color: #1c1d22;
padding: 1em;
border-radius: 10px;
}
.item:hover, .itemhollow:hover {
animation-duration: 0.2s;
animation-name: pop;
animation-timing-function: ease-in-out;
animation-fill-mode: forwards;
}
@keyframes pop {
0% {
}
100% {
box-shadow: 0px 0px 20px rgba(255,85,200,1);
}
}
@keyframes popB {
0% {
transform: scale(1);
}
70% {
transform: scale(1.1);
}
100% {
transform: scale(1.07);
box-shadow: 0px 0px 30px rgba(0,212,255,1);
}
}
.top {
width: 100%;
padding: 0 5px;
display: grid;
grid-auto-flow: row;
grid-template-columns: 20% 80%;
}
.avatar h4 {
font-weight: normal;
.info {
display: grid;
grid-auto-flow: row;
gap: 2em;
grid-template-columns: 1fr 2fr 1fr;
}
.avatar > div:first-child {
min-width: 100px;
max-width: 200px;
transition-duration: 0.3s;
.avatarField {
animation-name: float-reverse;
animation-duration: 5s;
animation-iteration-count: infinite;
animation-timing-function: ease-in-out;
}
.avatar > div:first-child > img {
box-shadow: var(--box-shadow);
@keyframes float-reverse {
0% {
transform: translateY(0px);
}
50% {
transform: translateY(-15px);
}
100% {
transform: translateY(0px);
}
}
.avatar {
display: flex;
gap: 2em;
margin-top: -8em;
border-radius: 100%;
width: 100%;
height: auto;
animation-duration: 0.5s;
animation-name: pfp-anim-leave;
animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
animation-fill-mode: forwards;
}
.avatar > div:first-child:hover {
transition-duration: 0.3s;
transform: scale(1.1) rotate(-20deg);
.avatar:hover {
animation-duration: 0.5s;
animation-name: pfp-anim-enter;
animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
animation-fill-mode: forwards;
}
@keyframes pfp-anim-enter {
0% {
box-shadow: 0px 0px 50px rgba(0,212,255,0);
transform: scale(1.0) rotate(360deg);
}
100% {
transform: scale(1.1) rotate(-20deg);
box-shadow: 0px 0px 50px rgba(0,212,255,1);
}
}
@keyframes pfp-anim-leave {
0% {
box-shadow: 0px 0px 50px rgba(0,212,255,1);
transform: scale(1.1) rotate(-20deg);
}
100% {
transform: scale(1.0) rotate(360deg);
box-shadow: 0px 0px 50px rgba(0,212,255,0);
}
}
.colorbg {
box-shadow: -2px -2px 10px rgba(0,0,0,0.2);
background: linear-gradient(to bottom right, rgba(255,85,200,1) 0%, rgba(79,79,255,1) 100%, rgba(0,212,255,1) 100%);
background-size: 200% 100%;
min-height: 100vh;
max-width: 100vw;
animation-name: colorbar-anim;
display: flex;
flex-direction: column;
padding: 5em;
justify-content: start;
align-items: center;
animation-duration: 10s;
animation-iteration-count: infinite;
animation-timing-function: ease-in-out;
}
@keyframes colorbar-anim {
0% {
background-position: 0%;
}
50% {
background-position: 100%;
}
100% {
background-position: 0;
}
}
/* mobile */
@media (max-aspect-ratio: 4/5) {
@ -56,4 +263,40 @@
.avatar h1 {
font-size: 1.5em;
}
}
}
.officeBanner {
background-color: white;
box-shadow: 0px 0px 30px black;
padding: 0.125em;
font-size: 3em;
text-align: center;
white-space: nowrap;
position: fixed;
bottom: 10px;
left: -5%;
right: -5%;
z-index: 100;
margin-top: 0;
animation-duration: 5s;
animation-name: breathe;
animation-iteration-count: infinite;
animation-timing-function: ease-in-out;
animation-fill-mode: forwards;
}
@keyframes breathe {
0% {
transform: rotate(-2deg) scale(1.0);
}
50% {
transform: rotate(-3deg) scale(1.05);
}
100% {
transform: rotate(-2deg) scale(1.0);
}
}

@ -0,0 +1,20 @@
.btn {
display: flex;
justify-content: center;
align-items: center;
gap: 1em;
border-radius: 10px;
padding: 0.3em 2em;
font-size: 1em;
box-shadow: var(--box-shadow);
background-color: var(--theme-color);
color: white;
transition-duration: 0.1s;
font-weight: bold;
width: 100%;
}
.btn:hover {
transform: scale(0.95);
transition-duration: 0.1s;
}

@ -2,7 +2,7 @@
box-shadow: 2px 2px 10px rgba(0,0,0,0.2);
background: #25262C;
color: white;
padding: 1em 2em;
padding: 1em 1em;
}
.menu > div {

@ -0,0 +1,32 @@
.items {
display: flex;
gap: 1em;
}
.items a {
display: flex;
align-items: center;
padding: 0.3em 1.3em;
border-radius: 5px;
color: white;
transition-duration: 0.2s;
background-color: rgba(0,0,0,0.3);
}
.items a:hover {
transition-duration: 0.2s;
background-color: rgba(79,79,255,1);
}
/* mobile */
@media(max-aspect-ratio: 4/3) {
.menu > div {
flex-direction: column;
justify-content: center;
align-items: center;
}
.menu {
padding: 0.5em;
}
}

@ -1,4 +1,4 @@
.buttons {
.buttons {
display: flex;
flex-direction: column;
gap: 1em;
@ -10,8 +10,8 @@
align-items: center;
gap: 1em;
border-radius: 10px;
padding: 0.4em 2em;
font-size: 1.3em;
padding: 0.3em 2em;
font-size: 1.2em;
box-shadow: var(--box-shadow);
background-color: var(--theme-color);
color: white;

@ -28,6 +28,10 @@ h1, h2, h3 {
font-family: 'Dela Gothic One', cursive;
}
h4 {
font-size: 1.2em;
}
.link:hover {
text-decoration: underline;
}
@ -40,6 +44,10 @@ img {
hr {
width: 100%;
margin: 1em 0;
height: 0px;
border-width: 2px;
border-style: solid;
opacity: 20%;
}
.h-unset {
@ -55,6 +63,11 @@ hr {
flex-direction: column;
}
.wideContainer {
margin: 0 auto;
max-width: 1500px;
}
.container {
width: 100%;
margin: 0 auto;

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save