remove sass and preact from portfolio example
This commit is contained in:
parent
385a8f052f
commit
944199481e
25 changed files with 3664 additions and 504 deletions
|
@ -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()],
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3193
examples/portfolio/pnpm-lock.yaml
Normal file
3193
examples/portfolio/pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
Before Width: | Height: | Size: 21 KiB |
|
@ -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 |
13
examples/portfolio/src/components/Button.astro
Normal file
13
examples/portfolio/src/components/Button.astro
Normal 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>
|
|
@ -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;
|
|
|
@ -1,7 +0,0 @@
|
||||||
.button {
|
|
||||||
display: inline-block;
|
|
||||||
border: 3px solid currentColor;
|
|
||||||
padding: 0.5em 1em;
|
|
||||||
font-weight: 700;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
25
examples/portfolio/src/components/Footer.astro
Normal file
25
examples/portfolio/src/components/Footer.astro
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
---
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
© {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>
|
|
@ -1,12 +0,0 @@
|
||||||
import { h } from 'preact';
|
|
||||||
import Styles from './styles.module.scss';
|
|
||||||
|
|
||||||
function Footer() {
|
|
||||||
return (
|
|
||||||
<footer className={Styles.footer}>
|
|
||||||
© {new Date().getFullYear()} Jeanine White
|
|
||||||
<small className={Styles.byline}>🚀 Built by Astro</small>
|
|
||||||
</footer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
export default Footer;
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -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;
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
107
examples/portfolio/src/components/Nav.astro
Normal file
107
examples/portfolio/src/components/Nav.astro
Normal 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>
|
|
@ -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;
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
138
examples/portfolio/src/components/PortfolioPreview.astro
Normal file
138
examples/portfolio/src/components/PortfolioPreview.astro
Normal 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>
|
|
@ -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;
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
<span class="role"
|
||||||
<span class="role">🎤 Speaker <span class="invert">🎤 Speaker</span></span>
|
>👩💻 Developer <span class="invert">👩💻 Developer</span>
|
||||||
<span class="role">✏️ Writer <span class="invert">✏️ Writer</span></span>
|
</span>
|
||||||
|
<span class="role"
|
||||||
|
>🎤 Speaker <span class="invert">🎤 Speaker</span>
|
||||||
|
</span>
|
||||||
|
<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> I’m Jeanine, and this is my website. It was made using{' '}
|
<span>Hello!</span> I’m 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>
|
||||||
|
|
|
@ -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 />
|
||||||
|
|
|
@ -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;
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue