remove sass and preact from portfolio example

This commit is contained in:
Dan Jutan 2022-08-30 14:09:23 -04:00
parent 385a8f052f
commit 944199481e
25 changed files with 3664 additions and 504 deletions

View file

@ -1,7 +1,5 @@
import { defineConfig } from 'astro/config'; import { defineConfig } from 'astro/config';
import preact from '@astrojs/preact';
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
integrations: [preact()],
}); });

View file

@ -9,12 +9,7 @@
"preview": "astro preview", "preview": "astro preview",
"astro": "astro" "astro": "astro"
}, },
"devDependencies": {
"@astrojs/preact": "^1.0.2",
"astro": "^1.1.2",
"sass": "^1.52.2"
},
"dependencies": { "dependencies": {
"preact": "^10.7.3" "astro": "^1.1.1"
} }
} }

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

@ -1,13 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 36 36">
<path fill="#000" d="M22.25 4h-8.5a1 1 0 0 0-.96.73l-5.54 19.4a.5.5 0 0 0 .62.62l5.05-1.44a2 2 0 0 0 1.38-1.4l3.22-11.66a.5.5 0 0 1 .96 0l3.22 11.67a2 2 0 0 0 1.38 1.39l5.05 1.44a.5.5 0 0 0 .62-.62l-5.54-19.4a1 1 0 0 0-.96-.73Z"/>
<path fill="url(#gradient)" d="M18 28a7.63 7.63 0 0 1-5-2c-1.4 2.1-.35 4.35.6 5.55.14.17.41.07.47-.15.44-1.8 2.93-1.22 2.93.6 0 2.28.87 3.4 1.72 3.81.34.16.59-.2.49-.56-.31-1.05-.29-2.46 1.29-3.25 3-1.5 3.17-4.83 2.5-6-.67.67-2.6 2-5 2Z"/>
<defs>
<linearGradient id="gradient" x1="16" x2="16" y1="32" y2="24" gradientUnits="userSpaceOnUse">
<stop stop-color="#000"/>
<stop offset="1" stop-color="#000" stop-opacity="0"/>
</linearGradient>
</defs>
<style>
@media (prefers-color-scheme:dark){:root{filter:invert(100%)}}
</style>
</svg>

Before

Width:  |  Height:  |  Size: 873 B

View file

@ -0,0 +1,13 @@
<span>
<slot />
</span>
<style>
span {
display: inline-block;
border: 3px solid currentColor;
padding: 0.5em 1em;
font-weight: 700;
text-transform: uppercase;
}
</style>

View file

@ -1,8 +0,0 @@
import { h } from 'preact';
import Styles from './styles.module.scss';
function Button({ children }) {
return <span className={Styles.button}>{children}</span>;
}
export default Button;

View file

@ -1,7 +0,0 @@
.button {
display: inline-block;
border: 3px solid currentColor;
padding: 0.5em 1em;
font-weight: 700;
text-transform: uppercase;
}

View file

@ -0,0 +1,25 @@
---
const currentYear = new Date().getFullYear();
---
<footer>
&copy; {currentYear} Jeanine White
<small class="byline">🚀 Built by Astro</small>
</footer>
<style>
footer {
text-align: center;
padding-top: 8rem;
padding-right: 2rem;
padding-bottom: 4rem;
padding-left: 2rem;
}
.byline {
display: block;
margin-top: 1rem;
color: var(--t-subdue);
font-size: var(--f-d2);
text-transform: uppercase;
}
</style>

View file

@ -1,12 +0,0 @@
import { h } from 'preact';
import Styles from './styles.module.scss';
function Footer() {
return (
<footer className={Styles.footer}>
&copy; {new Date().getFullYear()} Jeanine White
<small className={Styles.byline}>🚀 Built by Astro</small>
</footer>
);
}
export default Footer;

View file

@ -1,15 +0,0 @@
.footer {
text-align: center;
padding-top: 8rem;
padding-right: 2rem;
padding-bottom: 4rem;
padding-left: 2rem;
}
.byline {
display: block;
margin-top: 1rem;
color: var(--t-subdue);
font-size: var(--f-d2);
text-transform: uppercase;
}

View file

@ -1,8 +1,8 @@
--- ---
import '../styles/global.scss'; import "../styles/global.css";
const { const {
title = 'Jeanine White: Personal Site', title = "Jeanine White: Personal Site",
description = 'The personal site of Jeanine White', description = "The personal site of Jeanine White",
} = Astro.props; } = Astro.props;
--- ---

View file

@ -0,0 +1,107 @@
<nav>
<a class="link" href="/">
<div class="monogram">JW</div>
</a>
<a class="link" href="/projects"> Portfolio</a>
<a class="link" href="/about"> About</a>
<a class="social" href="https://twitter.com/me">
<svg
class="socialIcon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
>
<path
d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"
></path>
</svg>
</a>
<a class="social" href="https://github.com/me">
<svg
class="socialIcon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
>
<path
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"
></path>
</svg>
</a>
<a class="social" href="https://dev.to/me">
<svg
class="socialIcon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 50 40"
style="enable-background:new 0 0 50 40"
xml:space="preserve"
>
<path
d="M15.7 15.5c-.4-.3-.7-.4-1.1-.4h-1.7v10.1h1.7c.4 0 .8-.1 1.1-.4.4-.3.6-.7.6-1.3v-6.7c0-.6-.2-1-.6-1.3z"
></path>
<path
d="M47 0H3C1.3 0 0 1.3 0 3v34c0 1.7 1.3 3 3 3h44c1.7 0 3-1.3 3-3V3c0-1.7-1.3-3-3-3zM19.1 23.5c0 1.3-.4 2.4-1.3 3.2-.8.9-1.9 1.3-3.3 1.3h-4.4V12.3h4.5c1.3 0 2.4.4 3.2 1.3.8.8 1.3 1.9 1.3 3.2v6.7zm9.1-8.4h-5.1v3.6h3.1v2.8h-3.1v3.7h5.1V28h-5.9c-.6 0-1-.2-1.4-.6-.4-.4-.6-.8-.6-1.4V14.2c0-.6.2-1 .6-1.4.4-.4.8-.6 1.4-.6h5.9v2.9zM37.5 26c-.6 1.3-1.3 2-2.2 2-.9 0-1.7-.7-2.2-2l-3.7-13.8h3.1L35.3 23l2.8-10.8h3.1L37.5 26z"
></path>
</svg>
</a>
</nav>
<style>
nav {
display: flex;
align-items: center;
padding-top: 1rem;
padding-right: 2rem;
padding-bottom: 1rem;
padding-left: 2rem;
}
.link {
color: var(--t-subdue);
display: block;
margin-left: 1rem;
text-decoration: none;
font-size: var(--f-d1);
text-transform: uppercase;
padding-top: 0.75em;
padding-bottom: 0.75em;
}
.link:hover,
.link:focus {
color: var(--t-active);
}
.monogram {
display: flex;
align-items: center;
justify-content: center;
width: 2em;
height: 2em;
margin-right: 0.5rem;
color: var(--c-black);
font-weight: 900;
letter-spacing: -0.125rem;
border: 3px solid currentColor;
border-radius: 50%;
}
.social {
display: block;
margin-left: auto;
}
.social + .social {
margin-left: 0.75rem;
}
.socialIcon {
display: block;
width: 1.25rem;
height: 1.25rem;
fill: var(--t-subdue);
transition: fill linear 150ms;
}
.socialIcon:hover {
fill: var(--t-active);
}
</style>

View file

@ -1,41 +0,0 @@
import { h } from 'preact';
import Styles from './styles.module.scss';
function Nav() {
return (
<nav className={Styles.nav}>
<a className={Styles.logolink} href="/">
<div className={Styles.monogram}>JW</div>
</a>
<a className={Styles.link} href="/projects">
Portfolio
</a>
<a className={Styles.link} href="/about">
About
</a>
<a className={Styles.social} href="https://twitter.com/me">
<svg className={Styles.socialicon} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" />
</svg>
</a>
<a className={Styles.social} href="https://github.com/me">
<svg className={Styles.socialicon} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />
</svg>
</a>
<a className={Styles.social} href="https://dev.to/me">
<svg
className={Styles.socialicon}
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 50 40"
style="enable-background:new 0 0 50 40"
xmlSpace="preserve"
>
<path d="M15.7 15.5c-.4-.3-.7-.4-1.1-.4h-1.7v10.1h1.7c.4 0 .8-.1 1.1-.4.4-.3.6-.7.6-1.3v-6.7c0-.6-.2-1-.6-1.3z" />
<path d="M47 0H3C1.3 0 0 1.3 0 3v34c0 1.7 1.3 3 3 3h44c1.7 0 3-1.3 3-3V3c0-1.7-1.3-3-3-3zM19.1 23.5c0 1.3-.4 2.4-1.3 3.2-.8.9-1.9 1.3-3.3 1.3h-4.4V12.3h4.5c1.3 0 2.4.4 3.2 1.3.8.8 1.3 1.9 1.3 3.2v6.7zm9.1-8.4h-5.1v3.6h3.1v2.8h-3.1v3.7h5.1V28h-5.9c-.6 0-1-.2-1.4-.6-.4-.4-.6-.8-.6-1.4V14.2c0-.6.2-1 .6-1.4.4-.4.8-.6 1.4-.6h5.9v2.9zM37.5 26c-.6 1.3-1.3 2-2.2 2-.9 0-1.7-.7-2.2-2l-3.7-13.8h3.1L35.3 23l2.8-10.8h3.1L37.5 26z" />
</svg>
</a>
</nav>
);
}
export default Nav;

View file

@ -1,65 +0,0 @@
.nav {
display: flex;
align-items: center;
padding-top: 1rem;
padding-right: 2rem;
padding-bottom: 1rem;
padding-left: 2rem;
}
.logolink {
display: block;
color: var(--t-fg);
text-decoration: none;
}
.link {
color: var(--t-subdue);
display: block;
margin-left: 1rem;
text-decoration: none;
font-size: var(--f-d1);
text-transform: uppercase;
padding-top: 0.75em;
padding-bottom: 0.75em;
&:focus,
&:hover {
color: var(--t-active);
}
}
.monogram {
display: flex;
align-items: center;
justify-content: center;
width: 2em;
height: 2em;
margin-right: 0.5rem;
color: var(--c-black);
font-weight: 900;
letter-spacing: -0.125rem;
border: 3px solid currentColor;
border-radius: 50%;
}
.social {
display: block;
margin-left: auto;
+ .social {
margin-left: 0.75rem;
}
}
.socialicon {
display: block;
width: 1.25rem;
height: 1.25rem;
fill: var(--t-subdue);
transition: fill linear 150ms;
&:hover {
fill: var(--t-active);
}
}

View file

@ -0,0 +1,138 @@
---
const { frontmatter, url } = Astro.props.project;
---
<div class="card">
<div class="titleCard" style={`background-image:url(${frontmatter.img})`}>
<h1 class="title">{frontmatter.title}</h1>
</div>
<div class="descCard">
<p class="desc">{frontmatter.description}</p>
<div class="tags">
Tagged:
{
frontmatter.tags.map((t) => (
<div class="tag" data-tag={t}>
{t}
</div>
))
}
</div>
<a class="link" href={url}>
<span class="linkInner">View</span>
</a>
</div>
</div>
<style>
.card {
position: relative;
color: var(--t-bg);
background: var(--t-fg);
border: 1px solid #f0f0f0;
}
.title {
position: absolute;
top: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
color: white;
flex-direction: column;
font-size: var(--f-u4);
font-weight: 900;
text-transform: uppercase;
letter-spacing: 0.0625em;
}
.titleCard {
position: relative;
background-size: cover;
background-position: 50% 100%;
padding-top: 37.5%;
}
.descCard {
padding: 1.5em;
}
.desc {
font-size: var(--f-u1);
line-height: 1.4;
margin-top: 0em;
margin-bottom: 1em;
}
.link {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--t-bg);
font-size: var(--f-u2);
font-weight: 700;
background: rgba(0, 0, 0, 0.25);
opacity: 0;
text-decoration: none;
text-transform: uppercase;
transition: opacity 150ms linear;
}
.link:focus,
.link:hover {
opacity: 1;
}
.link:focus,
.link:hover .linkInner {
transform: translateY(0);
border-color: rgba(255, 255, 255, 0.625);
}
.linkInner {
padding: 0.375em 1em;
border: 2px solid rgba(255, 255, 255, 0);
transition: transform 300ms cubic-bezier(0, 0.4, 0.6, 1),
border-color 1s linear;
transform: translateY(25%);
}
.nav {
display: flex;
justify-content: flex-end;
}
.tags {
font-size: var(--f-d2);
text-transform: uppercase;
}
.tag {
display: inline-block;
color: var(--c-yellow);
text-transform: uppercase;
margin-left: 0.5em;
}
.tag:nth-of-type(1n) {
color: var(--c-green);
}
.tag:nth-of-type(2n) {
color: var(--c-orange);
}
.tag:nth-of-type(3n) {
color: var(--c-blue);
}
.tag:nth-of-type(4n) {
color: var(--c-pink);
}
</style>

View file

@ -1,29 +0,0 @@
import { h } from 'preact';
import Styles from './styles.module.scss';
function PortfolioPreview({ project }) {
const { frontmatter } = project;
return (
<div className={Styles.card}>
<div className={Styles.titleCard} style={`background-image:url(${frontmatter.img})`}>
<h1 className={Styles.title}>{frontmatter.title}</h1>
</div>
<div className="pa3">
<p className={`${Styles.desc} mt0 mb2`}>{frontmatter.description}</p>
<div className={Styles.tags}>
Tagged:
{frontmatter.tags.map((t) => (
<div className={Styles.tag} data-tag={t}>
{t}
</div>
))}
</div>
<a className={Styles.link} href={project.url}>
<span className={Styles.linkInner}>View</span>
</a>
</div>
</div>
);
}
export default PortfolioPreview;

View file

@ -1,102 +0,0 @@
.card {
position: relative;
color: var(--t-bg);
background: var(--t-fg);
border: 1px solid #f0f0f0;
}
.title {
position: absolute;
top: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
color: white;
flex-direction: column;
font-size: var(--f-u4);
font-weight: 900;
text-transform: uppercase;
letter-spacing: 0.0625em;
}
.titleCard {
position: relative;
background-size: cover;
background-position: 50% 100%;
padding-top: 37.5%;
}
.desc {
font-size: var(--f-u1);
line-height: 1.4;
}
.link {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--t-bg);
font-size: var(--f-u2);
font-weight: 700;
background: rgba(0, 0, 0, 0.25);
opacity: 0;
text-decoration: none;
text-transform: uppercase;
transition: opacity 150ms linear;
&:focus,
&:hover {
opacity: 1;
.linkInner {
transform: translateY(0);
border-color: rgba(255, 255, 255, 0.625);
}
}
}
.linkInner {
padding: 0.375em 1em;
border: 2px solid rgba(255, 255, 255, 0);
transition: transform 300ms cubic-bezier(0, 0.4, 0.6, 1), border-color 1s linear;
transform: translateY(25%);
}
.nav {
display: flex;
justify-content: flex-end;
}
.tags {
font-size: var(--f-d2);
text-transform: uppercase;
}
.tag {
display: inline-block;
color: var(--c-yellow);
text-transform: uppercase;
margin-left: 0.5em;
&:nth-of-type(1n) {
color: var(--c-green);
}
&:nth-of-type(2n) {
color: var(--c-orange);
}
&:nth-of-type(3n) {
color: var(--c-blue);
}
&:nth-of-type(4n) {
color: var(--c-pink);
}
}

View file

@ -1,16 +1,16 @@
--- ---
import MainHead from '../components/MainHead.astro'; import MainHead from "../components/MainHead.astro";
import Button from '../components/Button/index.jsx'; import Button from "../components/Button.astro";
import Footer from '../components/Footer/index.jsx'; import Footer from "../components/Footer.astro";
import Nav from '../components/Nav/index.jsx'; import Nav from "../components/Nav.astro";
const { content } = Astro.props; const { content } = Astro.props;
--- ---
<html lang={content.lang || 'en'}> <html lang={content.lang || "en"}>
<head> <head>
<MainHead title={content.title} description={content.description} /> <MainHead title={content.title} description={content.description} />
<style lang="scss"> <style>
.hero { .hero {
padding: 8rem; padding: 8rem;
display: flex; display: flex;
@ -28,19 +28,19 @@ const { content } = Astro.props;
margin-left: 0.5em; margin-left: 0.5em;
margin-right: 0.5em; margin-right: 0.5em;
text-transform: uppercase; text-transform: uppercase;
}
&:nth-of-type(1n) { tag:nth-of-type(1n) {
color: var(--c-green); color: var(--c-green);
} }
&:nth-of-type(2n) { tag:nth-of-type(2n) {
color: var(--c-orange); color: var(--c-orange);
} }
&:nth-of-type(3n) { tag:nth-of-type(3n) {
color: var(--c-blue); color: var(--c-blue);
} }
&:nth-of-type(4n) { tag:nth-of-type(4n) {
color: var(--c-pink); color: var(--c-pink);
}
} }
.title { .title {
@ -65,6 +65,18 @@ const { content } = Astro.props;
font-size: var(--f-u1); font-size: var(--f-u1);
line-height: 2.2; line-height: 2.2;
} }
.wrapper {
padding-top: 4em;
padding-bottom: 4em;
margin-bottom: 4em;
text-align: center;
}
footer {
text-align: center;
margin-top: 3rem;
}
</style> </style>
</head> </head>
<body> <body>
@ -73,7 +85,7 @@ const { content } = Astro.props;
<h1 class="title">{content.title}</h1> <h1 class="title">{content.title}</h1>
</header> </header>
<div class="leadIn"> <div class="leadIn">
<div class="wrapper pt8 pb8 mb8 tac"> <div class="wrapper">
{content.tags.map((t) => <span class="tag">{t}</span>)} {content.tags.map((t) => <span class="tag">{t}</span>)}
<h3 class="tagline">{content.description}</h3> <h3 class="tagline">{content.description}</h3>
</div> </div>
@ -81,7 +93,7 @@ const { content } = Astro.props;
<div class="wrapper wrapper__readable"> <div class="wrapper wrapper__readable">
<div class="content"><slot /></div> <div class="content"><slot /></div>
</div> </div>
<footer class="tac mt6"> <footer>
<a href="/projects"> <a href="/projects">
<Button>View More</Button> <Button>View More</Button>
</a> </a>

View file

@ -1,19 +1,25 @@
--- ---
import MainHead from '../components/MainHead.astro'; import MainHead from "../components/MainHead.astro";
import Footer from '../components/Footer/index.jsx'; import Footer from "../components/Footer.astro";
import Nav from '../components/Nav/index.jsx'; import Nav from "../components/Nav.astro";
--- ---
<html lang="en"> <html lang="en">
<head> <head>
<MainHead title="Not Found" /> <MainHead title="Not Found" />
<style>
.wrapper {
margin-top: 2em;
margin-bottom: 2em;
}
</style>
</head> </head>
<body> <body>
<nav></nav> <Nav />
<div class="wrapper mt4 mb4"> <div class="wrapper">
<h1>Page Not Found</h1> <h1>Page Not Found</h1>
<p>Not found</p> <p>Not found</p>
</div> </div>
<footer></footer> <Footer />
</body> </body>
</html> </html>

View file

@ -1,26 +1,30 @@
--- ---
import MainHead from '../components/MainHead.astro'; import MainHead from "../components/MainHead.astro";
import Footer from '../components/Footer/index.jsx'; import Footer from "../components/Footer.astro";
import Nav from '../components/Nav/index.jsx'; import Nav from "../components/Nav.astro";
--- ---
<html lang="en"> <html lang="en">
<head> <head>
<MainHead title="About | Jeanine White" description="About Jeanine White Lorem Ipsum" /> <MainHead
<style lang="scss"> title="About | Jeanine White"
description="About Jeanine White Lorem Ipsum"
/>
<style>
.heroImg { .heroImg {
max-height: 24rem; max-height: 24rem;
object-fit: cover; object-fit: cover;
overflow: hidden; overflow: hidden;
}
img { .heroImg img {
width: 100%; width: 100%;
}
} }
.bio { .bio {
font-size: var(--f-u1); font-size: var(--f-u1);
line-height: 2; line-height: 2;
margin-top: 4em;
} }
</style> </style>
</head> </head>
@ -35,35 +39,43 @@ import Nav from '../components/Nav/index.jsx';
src="https://images.unsplash.com/photo-1581977012607-4091712d36f9?auto=format&fit=crop&w=1400&h=350&q=75" src="https://images.unsplash.com/photo-1581977012607-4091712d36f9?auto=format&fit=crop&w=1400&h=350&q=75"
/> />
</div> </div>
<div class="bio wrapper wrapper__readable mt8"> <div class="bio wrapper wrapper__readable">
<p> <p>
Cream cheese say cheese stinking bishop. Brie fondue hard cheese bocconcini feta camembert Cream cheese say cheese stinking bishop. Brie fondue hard
de normandie babybel airedale. Red leicester swiss manchego mascarpone pepper jack cheese bocconcini feta camembert de normandie babybel
airedale fromage frais ricotta. Cheese and biscuits cauliflower cheese boursin. airedale. Red leicester swiss manchego mascarpone pepper
jack airedale fromage frais ricotta. Cheese and biscuits
cauliflower cheese boursin.
</p> </p>
<p> <p>
Pepper jack cheesy feet cheese slices. Halloumi port-salut queso caerphilly roquefort Pepper jack cheesy feet cheese slices. Halloumi port-salut
cheese slices cheesy feet rubber cheese. Cheese slices smelly cheese pecorino macaroni queso caerphilly roquefort cheese slices cheesy feet rubber
cheese feta blue castello roquefort edam. Babybel pepper jack airedale cheddar fromage cheese. Cheese slices smelly cheese pecorino macaroni cheese
frais manchego. feta blue castello roquefort edam. Babybel pepper jack
airedale cheddar fromage frais manchego.
</p> </p>
<p> <p>
Cauliflower cheese lancashire macaroni cheese. Cheeseburger babybel cheese on toast Cauliflower cheese lancashire macaroni cheese. Cheeseburger
airedale cauliflower cheese who moved my cheese roquefort paneer. Stinking bishop cheddar babybel cheese on toast airedale cauliflower cheese who
taleggio port-salut port-salut stinking bishop cheesy grin babybel. Blue castello feta moved my cheese roquefort paneer. Stinking bishop cheddar
everyone loves brie. taleggio port-salut port-salut stinking bishop cheesy grin
babybel. Blue castello feta everyone loves brie.
</p> </p>
<p> <p>
Goat squirty cheese cut the cheese. Cheese and wine cheddar fondue airedale cottage cheese Goat squirty cheese cut the cheese. Cheese and wine cheddar
camembert de normandie feta babybel. Rubber cheese melted cheese pecorino port-salut fondue airedale cottage cheese camembert de normandie feta
fondue gouda cheese on toast cheesy feet. Feta edam everyone loves cheese strings babybel. Rubber cheese melted cheese pecorino port-salut
camembert de normandie. fondue gouda cheese on toast cheesy feet. Feta edam everyone
loves cheese strings camembert de normandie.
</p> </p>
<p> <p>
Caerphilly monterey jack goat. Squirty cheese cheesy grin hard cheese cheese strings Caerphilly monterey jack goat. Squirty cheese cheesy grin
cheese and biscuits croque monsieur smelly cheese danish fontina. Swiss cheese triangles hard cheese cheese strings cheese and biscuits croque
everyone loves mascarpone cheese on toast who moved my cheese lancashire cheeseburger. monsieur smelly cheese danish fontina. Swiss cheese
Fromage frais fromage frais cheese and biscuits stinking bishop cauliflower cheese. triangles everyone loves mascarpone cheese on toast who
moved my cheese lancashire cheeseburger. Fromage frais
fromage frais cheese and biscuits stinking bishop
cauliflower cheese.
</p> </p>
</div> </div>
</div> </div>

View file

@ -1,13 +1,13 @@
--- ---
// Component Imports // Component Imports
import MainHead from '../components/MainHead.astro'; import MainHead from "../components/MainHead.astro";
import Button from '../components/Button/index.jsx'; import Button from "../components/Button.astro";
import Nav from '../components/Nav/index.jsx'; import Nav from "../components/Nav.astro";
import Footer from '../components/Footer/index.jsx'; import Footer from "../components/Footer.astro";
import PortfolioPreview from '../components/PortfolioPreview/index.jsx'; import PortfolioPreview from "../components/PortfolioPreview.astro";
// Data Fetching: List all Markdown posts in the repo. // Data Fetching: List all Markdown posts in the repo.
const projects = await Astro.glob('./project/**/*.md'); const projects = await Astro.glob("./project/**/*.md");
const featuredProject = projects[0]; const featuredProject = projects[0];
// Full Astro Component Syntax: // Full Astro Component Syntax:
@ -20,14 +20,19 @@ const featuredProject = projects[0];
title="Jeanine White: Personal Site" title="Jeanine White: Personal Site"
description="Jeanine White: Developer, Speaker, and Writer..." description="Jeanine White: Developer, Speaker, and Writer..."
/> />
<style lang="scss"> <style>
$w-s: 750px; .wrapper {
margin-top: 2em;
margin-bottom: 2em;
}
.hero { .hero {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
}
@media (min-width: $w-s) { @media (min-width: 750px) {
.hero {
height: 45vw; height: 45vw;
} }
} }
@ -40,7 +45,7 @@ const featuredProject = projects[0];
.gradient, .gradient,
.gradient2 { .gradient2 {
background-image: url('/assets/mesh-gradient.jpg'); background-image: url("/assets/mesh-gradient.jpg");
background-size: cover; background-size: cover;
pointer-events: none; pointer-events: none;
mix-blend-mode: screen; mix-blend-mode: screen;
@ -69,8 +74,10 @@ const featuredProject = projects[0];
align-items: flex-start; align-items: flex-start;
justify-content: center; justify-content: center;
padding-left: 2rem; padding-left: 2rem;
}
@media (min-width: $w-s) { @media (min-width: 750px) {
.overlay {
padding-left: 4rem; padding-left: 4rem;
} }
} }
@ -80,8 +87,10 @@ const featuredProject = projects[0];
font-size: var(--f-u8); font-size: var(--f-u8);
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
margin-top: 0; margin-top: 0;
}
@media (min-width: $w-s) { @media (min-width: 750px) {
.title {
font-size: var(--f-u12); font-size: var(--f-u12);
} }
} }
@ -89,8 +98,10 @@ const featuredProject = projects[0];
.grid { .grid {
display: grid; display: grid;
grid-gap: 2rem; grid-gap: 2rem;
}
@media (min-width: 1200px) { @media (min-width: 1200px) {
.grid {
grid-template-columns: 2fr 1fr; grid-template-columns: 2fr 1fr;
} }
} }
@ -110,38 +121,32 @@ const featuredProject = projects[0];
background-color: var(--t-fg); background-color: var(--t-fg);
padding: 0.25em 0.5em; padding: 0.25em 0.5em;
z-index: 2; z-index: 2;
}
@media (min-width: $w-s) { .role + .role {
.margin-left: 1em;
}
@media (min-width: 750px) {
.role {
font-size: var(--f-u3); font-size: var(--f-u3);
} }
}
+ .role { .role:nth-of-type(1) .invert {
margin-left: 1em; background-color: var(--c-pink);
} }
&:nth-of-type(1) { .role:nth-of-type(2) .invert {
.invert { background-color: var(--c-blue);
background-color: var(--c-pink); }
}
}
&:nth-of-type(2) { .role:nth-of-type(3) .invert {
.invert { background-color: var(--c-green);
background-color: var(--c-blue); }
}
}
&:nth-of-type(3) { .role:hover .invert {
.invert { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
background-color: var(--c-green);
}
}
&:hover {
.invert {
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
}
} }
.invert { .invert {
@ -175,14 +180,19 @@ const featuredProject = projects[0];
.bio { .bio {
line-height: 2; line-height: 2;
margin-bottom: 2rem; margin-bottom: 2rem;
}
> span:first-of-type { .bio > span:first-of-type {
line-height: 1; line-height: 1;
margin-bottom: 0.5em; margin-bottom: 0.5em;
display: block; display: block;
font-weight: 700; font-weight: 700;
font-size: var(--f-u4); font-size: var(--f-u4);
} }
.buttonContainer {
text-align: center;
margin-top: 2em;
} }
</style> </style>
</head> </head>
@ -201,22 +211,29 @@ const featuredProject = projects[0];
<div class="gradient2"></div> <div class="gradient2"></div>
<div class="overlay"> <div class="overlay">
<h1 class="title"> <h1 class="title">
<small class="subtitle">The personal site of</small>Jeanine White <small class="subtitle">The personal site of</small>Jeanine
White
</h1> </h1>
<div> <div>
<span class="role">👩‍💻 Developer <span class="invert">👩‍💻 Developer</span></span>&nbsp; <span class="role"
<span class="role">🎤 Speaker <span class="invert">🎤 Speaker</span></span>&nbsp; >👩‍💻 Developer <span class="invert">👩‍💻 Developer</span>
<span class="role">✏️ Writer <span class="invert">✏️ Writer</span></span> </span>&nbsp;
<span class="role"
>🎤 Speaker <span class="invert">🎤 Speaker</span>
</span>&nbsp;
<span class="role"
>✏️ Writer <span class="invert">✏️ Writer</span>
</span>
</div> </div>
<p class="desc">Lover of dogs, roadtrips, and poetry.</p> <p class="desc">Lover of dogs, roadtrips, and poetry.</p>
</div> </div>
</header> </header>
<main class="wrapper mt4 mb4"> <main class="wrapper">
<div class="grid"> <div class="grid">
<div class="section"> <div class="section">
<h3 class="sectionTitle">Selected Work</h3> <h3 class="sectionTitle">Selected Work</h3>
<PortfolioPreview project={featuredProject} /> <PortfolioPreview project={featuredProject} />
<div class="tac mt4"> <div class="buttonContainer">
<a href="/projects"> <a href="/projects">
<Button>View All</Button> <Button>View All</Button>
</a> </a>
@ -225,9 +242,16 @@ const featuredProject = projects[0];
<div class="section"> <div class="section">
<h3 class="sectionTitle">About me</h3> <h3 class="sectionTitle">About me</h3>
<p class="bio"> <p class="bio">
<span>Hello!</span> Im Jeanine, and this is my website. It was made using{' '} <span>Hello!</span> Im Jeanine, and this is my website.
<a href="https://github.com/withastro/astro" target="_blank" rel="nofollow"> Astro</a>, It was made using{" "}
a new way to build static sites. This is just an example template for you to modify. <a
href="https://github.com/withastro/astro"
target="_blank"
rel="nofollow"
>
Astro</a
>, a new way to build static sites. This is just an
example template for you to modify.
</p> </p>
<p> <p>
<a href="/about">Read more</a> <a href="/about">Read more</a>

View file

@ -1,14 +1,15 @@
--- ---
import MainHead from '../components/MainHead.astro'; import MainHead from "../components/MainHead.astro";
import Footer from '../components/Footer/index.jsx'; import Footer from "../components/Footer.astro";
import Nav from '../components/Nav/index.jsx'; import Nav from "../components/Nav.astro";
import PortfolioPreview from '../components/PortfolioPreview/index.jsx'; import PortfolioPreview from "../components/PortfolioPreview.astro";
const projects = (await Astro.glob('./project/**/*.md')) const projects = (await Astro.glob("./project/**/*.md"))
.filter(({ frontmatter }) => !!frontmatter.publishDate) .filter(({ frontmatter }) => !!frontmatter.publishDate)
.sort( .sort(
(a, b) => (a, b) =>
new Date(b.frontmatter.publishDate).valueOf() - new Date(a.frontmatter.publishDate).valueOf() new Date(b.frontmatter.publishDate).valueOf() -
new Date(a.frontmatter.publishDate).valueOf()
); );
--- ---
@ -18,19 +19,27 @@ const projects = (await Astro.glob('./project/**/*.md'))
title="All Projects | Jeanine White" title="All Projects | Jeanine White"
description="Learn about Jeanine White's most recent projects" description="Learn about Jeanine White's most recent projects"
/> />
<style lang="scss"> <style>
.grid { .grid {
display: grid; display: grid;
grid-gap: 3rem; grid-gap: 3rem;
} }
.title {
margin-top: 2em;
margin-bottom: 2em;
}
</style> </style>
</head> </head>
<body> <body>
<Nav /> <Nav />
<div class="wrapper"> <div class="wrapper">
<h1 class="title mt4 mb4">All Projects</h1> <h1 class="title">All Projects</h1>
<div class="grid"> <div class="grid">
{projects.map((project) => <PortfolioPreview project={project} />)} {
projects.map((project) => (
<PortfolioPreview project={project} />
))
}
</div> </div>
</div> </div>
<Footer /> <Footer />

View file

@ -1,6 +1,6 @@
// Tokens /* Global variables */
:root { :root {
// (c)olor /* Colors */
--c-black: #05091e; --c-black: #05091e;
--c-blue: #46b4ff; --c-blue: #46b4ff;
--c-gray: #90aab7; --c-gray: #90aab7;
@ -10,7 +10,7 @@
--c-yellow: #ffdace; --c-yellow: #ffdace;
--c-white: #fff; --c-white: #fff;
// (f)ont /* Fonts */
--f-u18: 11.390625em; --f-u18: 11.390625em;
--f-u17: 9.950627481136905em; --f-u17: 9.950627481136905em;
--f-u16: 8.692673779389363em; --f-u16: 8.692673779389363em;
@ -48,15 +48,12 @@
--f-d17: 0.10049617492923625em; --f-d17: 0.10049617492923625em;
--f-d18: 0.0877914951989026em; --f-d18: 0.0877914951989026em;
// (t)heme
--t-fg: var(--c-black); --t-fg: var(--c-black);
--t-bg: var(--c-white); --t-bg: var(--c-white);
--t-subdue: var(--c-gray); --t-subdue: var(--c-gray);
--t-active: var(--c-blue); --t-active: var(--c-blue);
} }
// Base
body { body {
margin: 0; margin: 0;
color: var(--t-fg); color: var(--t-fg);
@ -80,77 +77,7 @@ h1 {
font-size: var(--f-u8); font-size: var(--f-u8);
} }
// Utils
// color
$colors: 'black', 'blue', 'white';
@each $color in $colors {
// text color
.tc-#{$color} {
color: var(--c-#{color});
}
// background color
.bg-#{$color} {
background-color: var(--c-#{color});
}
}
// font size
@for $i from 0 through 18 {
.f-u#{$i} {
font-size: var(--f-u#{$i});
}
.f-d#{$i} {
font-size: var(--f-d#{$i});
}
}
// margin & padding
@for $i from 0 through 36 {
.ma#{$i} {
margin: #{0.5 * $i}rem;
}
.mt#{$i} {
margin-top: #{0.5 * $i}rem;
}
.mr#{$i} {
margin-right: #{0.5 * $i}rem;
}
.mb#{$i} {
margin-bottom: #{0.5 * $i}rem;
}
.ml#{$i} {
margin-left: #{0.5 * $i}rem;
}
.pa#{$i} {
padding: #{0.5 * $i}rem;
}
.pt#{$i} {
padding-top: #{0.5 * $i}rem;
}
.pr#{$i} {
padding-right: #{0.5 * $i}rem;
}
.pb#{$i} {
padding-bottom: #{0.5 * $i}rem;
}
.pl#{$i} {
padding-left: #{0.5 * $i}rem;
}
}
// text align
.tac {
text-align: center;
}
.tal {
text-align: left;
}
.tar {
text-align: right;
}
// wrapper
.wrapper { .wrapper {
max-width: 80em; max-width: 80em;
margin-left: auto; margin-left: auto;

View file

@ -253,16 +253,9 @@ importers:
examples/portfolio: examples/portfolio:
specifiers: specifiers:
'@astrojs/preact': ^1.0.2 astro: ^1.1.1
astro: ^1.1.2
preact: ^10.7.3
sass: ^1.52.2
dependencies: dependencies:
preact: 10.10.6
devDependencies:
'@astrojs/preact': link:../../packages/integrations/preact
astro: link:../../packages/astro astro: link:../../packages/astro
sass: 1.54.6
examples/ssr: examples/ssr:
specifiers: specifiers: