ayco.io-astro/src/pages/index.astro

249 lines
5.6 KiB
Text

---
import Layout from '../layouts/Layout.astro'
import Card from '../components/Card.astro'
import Footer from '../components/Footer.astro'
import now from '../constants/now.json'
import { Picture } from 'astro:assets'
// fetch mastodon account
const response = await fetch(
'https://social.ayco.io/api/v1/accounts/lookup?acct=ayo'
)
const data = await response.json()
const { avatar, note } = data
const avatarSize = 150
---
<Layout>
<section class="highlighted-section">
<div class="highlighted-section__content">
<div class="invisible">
<!-- h-card details -->
<span class="p-name">Ayo Ayco</span>
<a class="u-url u-uid" href="https://ayo.ayco.io">w</a>,
<section class="p-note" set:html={note} />
</div>
<Picture
class="u-photo highlighted-section__content__profile-picture"
alt="Ayo Ayco's avatar"
formats={['avif', 'webp']}
src={avatar}
width={avatarSize}
height={avatarSize}
/>
<div class="highlighted-section__content__text">
<h1 title="Ayo Ayco | Software Engineer + Web Developer">
Hi, I'm <span class="heavy-text">Ayo</span>!
</h1>
<!--a href="https://forms.ayo.run/form/tnz7FybY" class="now-wrapper"-->
<a href="/now" class="now-wrapper">
<span class="now-label">now</span>
<span class="status">{now.title}</span>
</a>
</div>
</div>
</section>
<main>
<section class="introduction-section">
<p>
I care about the <em>Web</em>, and I love to <em>create</em> stuff to <em
>inspire</em
> and <em>serve</em> others.
<!--
<a href="/about">More?</a>
-->
</p>
</section>
<section class="cards-section">
<ul class="cards-section__grid">
<Card
href="showcase"
title="Stuff"
body="See links to my hobby projects"
/>
<Card
newTab={true}
href="/Ayco_Resume.pdf"
title="CV / Resume"
body="Download and peruse my skills and experience"
/>
</ul>
</section>
</main>
<Footer />
</Layout>
<style define:vars={{ avatarSize }}>
h1 {
margin: 0;
color: rgba(255, 255, 255, 0.75);
}
h1 span.heavy-text {
font-weight: 900;
color: white;
}
.now-wrapper {
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 40px;
padding: 8px 4px;
font-weight: normal;
color: white;
font-size: var(--font-size-sm);
text-decoration: none;
}
.now-label {
border-radius: 40px;
background-color: rgba(0, 0, 0, 0.6);
color: white;
padding: 4px 8px;
margin-right: 0.25em;
text-transform: uppercase;
font-weight: bold;
}
.status {
padding-right: 4px;
}
.highlighted-section {
background: var(--ayo-gradient);
background-size: 500% 500%;
animation: pulse 15s ease-in-out infinite;
border-bottom: 1px solid var(--color-brand-blue-3);
}
.highlighted-section__content {
margin: auto;
padding: 1rem;
max-width: var(--content-width);
font-weight: normal;
font-size: var(--font-size-lg);
color: var(--text-color-light);
}
.highlighted-section__content__profile-picture {
float: right;
margin: 1em 1em 0 0;
border: 5px solid var(--color-brand-blue-1);
background-color: var(--color-brand-blue-1);
display: block;
border-radius: 50%;
width: var(--avatarSize) px;
height: var(--avatarSize) px;
}
.highlighted-section__content ul a {
color: white;
font-weight: normal;
}
.highlighted-section__content ul {
list-style-type: none;
padding: 0;
}
.highlighted-section__content ul li {
padding: 5px 0;
}
.introduction-section {
p {
margin: 0;
font-size: var(--font-size-lg);
& a {
font-size: var(--font-size-base);
color: var(--text-color-faded);
@media (prefers-color-scheme: dark) {
color: var(--text-color-light-faded);
}
}
}
em {
font-weight: bold;
}
em,
a:hover {
color: var(--color-brand-complement-dark);
@media (prefers-color-scheme: dark) {
color: var(--color-brand-complement);
}
}
}
.cards-section {
margin: auto;
max-width: var(--content-width);
}
.cards-section__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(24ch, 1fr));
gap: 1rem;
padding: 0;
}
@media only screen and (max-device-width: 360px) {
.now-wrapper {
border: 0px;
border-radius: 0;
font-size: var(--font-size-sm);
width: 100%;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
padding: 0;
margin: 0;
}
.now-label {
display: none;
}
.status {
text-decoration: underline;
cursor: pointer;
}
.highlighted-section__content__profile-picture {
float: none;
width: 100px;
height: 100px;
}
}
@media only screen and (min-device-width: 280px) and (max-device-width: 653px) {
.highlighted-section__content {
padding: 1rem;
}
.highlighted-section__content__profile-picture {
float: none;
margin: 0;
width: 100px;
height: 100px;
}
.highlighted-section__content ul li {
font-size: var(--font-size-sm);
}
}
@media only screen and (min-device-width: 360px) and (max-device-width: 812px) {
.highlighted-section__content {
padding: 1rem;
}
.highlighted-section__content ul li {
font-size: var(--font-size-base);
}
}
</style>