jedmund-svelte/src/routes/about/+page.svelte
Justin Edmund a31291d69f refactor: replace deprecated $grey- variables with $gray-
- Replace 802 instances of $grey- variables with $gray- across 106 files
- Remove legacy color aliases from variables.scss
- Maintain consistent naming convention throughout codebase

This completes the migration to the new color scale system.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:41:50 -04:00

169 lines
3.8 KiB
Svelte

<script lang="ts">
import Album from '$components/Album.svelte'
import Game from '$components/Game.svelte'
import MentionList from '$components/MentionList.svelte'
import Page from '$components/Page.svelte'
import RecentAlbums from '$components/RecentAlbums.svelte'
import StreamStatus from '$components/StreamStatus.svelte'
import { generateMetaTags } from '$lib/utils/metadata'
import { page } from '$app/stores'
import type { PageData } from './$types'
let { data } = $props<{ data: PageData }>()
let albums = $derived(data.albums)
let games = $derived(data.games)
let error = $derived(data.error)
const pageUrl = $derived($page.url.href)
// Generate metadata for about page
const metaTags = $derived(
generateMetaTags({
title: 'About',
description:
'Software designer and developer living in San Francisco. Building thoughtful digital experiences and currently working on Maitsu, a hobby journaling app.',
url: pageUrl,
type: 'profile',
titleFormat: { type: 'about' }
})
)
</script>
<svelte:head>
<title>{metaTags.title}</title>
<meta name="description" content={metaTags.description} />
<!-- OpenGraph -->
{#each Object.entries(metaTags.openGraph) as [property, content]}
<meta property="og:{property}" {content} />
{/each}
<!-- Twitter Card -->
{#each Object.entries(metaTags.twitter) as [property, content]}
<meta name="twitter:{property}" {content} />
{/each}
<!-- Canonical URL -->
<link rel="canonical" href={metaTags.other.canonical} />
</svelte:head>
<section class="about-container">
<Page>
{#snippet header()}
<h2>A little about me</h2>
{/snippet}
<section class="bio">
<p>
Hello! My name is <em>Justin Edmund</em>. I'm a software designer and developer living in
San Francisco.
</p>
<p>
Currently, I'm a product designer at <a href="https://grammarly.com" target="_blank"
>Grammarly</a
>. I spend my free time building a hobby journaling app called
<a href="https://maitsu.co" target="_blank">Maitsu</a> and running a competitive crew in
<a href="https://granbluefantasy.jp" target="_blank">Granblue Fantasy</a>. I've spent time
at several companies over the last 15 years, but you might know me from
<a href="https://www.pinterest.com/" target="_blank">Pinterest</a>, where I was the first
design hire.
</p>
<p>
I was born and raised in New York City and spend a lot of time in Tokyo. I graduated from <a
href="http://design.cmu.edu/"
target="_blank">Carnegie Mellon University</a
> in 2011 with a Bachelors of Arts in Communication Design.
</p>
</section>
</Page>
<Page>
{#snippet header()}
<h2>Notable mentions</h2>
{/snippet}
<MentionList />
</Page>
<Page noHorizontalPadding={true}>
{#snippet header()}
<h2>Now playing</h2>
{/snippet}
<RecentAlbums {albums} />
<!-- <section class="latest-games">
{#if games && games.length > 0}
<ul>
{#each games.slice(0, 3) as game}
<Game {game} />
{/each}
</ul>
{:else}
<p>Loading games...</p>
{/if}
</section> -->
</Page>
<StreamStatus />
</section>
<style lang="scss">
.about-container {
display: flex;
flex-direction: column;
gap: $unit-2x;
justify-content: center;
max-width: 700px;
margin: 0 auto;
@include breakpoint('phone') {
padding: 0 $unit-2x;
}
:global(.page) {
margin: 0;
}
}
a,
em {
color: $red-60;
font-weight: 500;
font-style: normal;
text-decoration: none;
}
a:hover {
cursor: pointer;
text-decoration: underline;
text-decoration-style: wavy;
}
h2 {
color: $accent-color;
font-size: 1.2rem;
font-weight: 500;
margin: 0;
}
.bio {
font-size: 1rem;
line-height: 1.5;
color: $gray-00;
background: $gray-100;
border-radius: $card-corner-radius;
p {
margin-bottom: $unit-2x;
}
p:first-child {
margin-top: 0;
}
p:last-child {
margin-bottom: 0;
}
}
</style>