new projects page
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
|
|
||||||
import __ASTRO_IMAGE_IMPORT_3KcDr from "src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md";
|
|
||||||
import __ASTRO_IMAGE_IMPORT_1G57ng from "src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
import __ASTRO_IMAGE_IMPORT_1G57ng from "src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
||||||
import __ASTRO_IMAGE_IMPORT_Z1ESWoO from "src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
import __ASTRO_IMAGE_IMPORT_Z1ESWoO from "src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
||||||
import __ASTRO_IMAGE_IMPORT_rrnp from "src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
import __ASTRO_IMAGE_IMPORT_rrnp from "src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
|
||||||
|
import __ASTRO_IMAGE_IMPORT_3KcDr from "src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md";
|
||||||
import __ASTRO_IMAGE_IMPORT_Zi2DqH from "src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
import __ASTRO_IMAGE_IMPORT_Zi2DqH from "src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
||||||
import __ASTRO_IMAGE_IMPORT_1OkzEl from "src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
import __ASTRO_IMAGE_IMPORT_1OkzEl from "src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
||||||
import __ASTRO_IMAGE_IMPORT_FYQiW from "src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
import __ASTRO_IMAGE_IMPORT_FYQiW from "src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
||||||
export default new Map([["src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md", __ASTRO_IMAGE_IMPORT_3KcDr], ["src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_1G57ng], ["src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_Z1ESWoO], ["src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_rrnp], ["src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_Zi2DqH], ["src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_1OkzEl], ["src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_FYQiW]]);
|
export default new Map([["src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_1G57ng], ["src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_Z1ESWoO], ["src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_rrnp], ["src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md", __ASTRO_IMAGE_IMPORT_3KcDr], ["src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_Zi2DqH], ["src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_1OkzEl], ["src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_FYQiW]]);
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"_variables": {
|
"_variables": {
|
||||||
"lastUpdateCheck": 1756244081510
|
"lastUpdateCheck": 1757801179888
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
interface Props {
|
||||||
|
title?: string;
|
||||||
|
image?: ImageMetadata;
|
||||||
|
links?: {
|
||||||
|
label: string;
|
||||||
|
href: string;
|
||||||
|
newWindow?: boolean;
|
||||||
|
}[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const { title, image, links } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
{image && <img src={image.src} alt="" />}
|
||||||
|
<div>
|
||||||
|
{title && <h2>{title}</h2>}
|
||||||
|
<slot />
|
||||||
|
{
|
||||||
|
links &&
|
||||||
|
links.map((link) => (
|
||||||
|
<a
|
||||||
|
href={link.href}
|
||||||
|
target={link.newWindow ? '_blank' : '_self'}
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</a>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.card {
|
||||||
|
border: var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card > div {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
object-fit: cover;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -7,7 +7,10 @@ const year = new Date().getFullYear();
|
|||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<div class="socials">
|
<div class="socials">
|
||||||
<a href="https://mastodon.social/@ghalldev" target="_blank"
|
<a
|
||||||
|
href="https://mastodon.social/@ghalldev"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
><MastodonIcon class="mastodon-icon" width={20} height={20} /> Follow me on
|
><MastodonIcon class="mastodon-icon" width={20} height={20} /> Follow me on
|
||||||
Mastodon</a
|
Mastodon</a
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import autodockImg from '@assets/projects/autodock.png';
|
||||||
|
import keystashImg from '@assets/projects/keystash.png';
|
||||||
|
import bggClientImg from '@assets/projects/bgg-client.png';
|
||||||
|
|
||||||
|
export interface Project {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
image: ImageMetadata;
|
||||||
|
link: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const projects: Project[] = [
|
||||||
|
{
|
||||||
|
title: 'AutoDock',
|
||||||
|
description:
|
||||||
|
'A MacOS menubar utility for automatically hiding and showing the Dock based on the screen size of the connected displays.',
|
||||||
|
image: autodockImg,
|
||||||
|
link: 'https://github.com/ghall89/AutoDock',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'KeyStash',
|
||||||
|
description:
|
||||||
|
'A MacOS application for managing software license keys for software purchased outside the Mac App Store.',
|
||||||
|
image: keystashImg,
|
||||||
|
link: 'https://github.com/ghall89/KeyStash',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'bgg-client',
|
||||||
|
description:
|
||||||
|
'A TypeScript client for working with the BoardGameGeek.com API.',
|
||||||
|
image: bggClientImg,
|
||||||
|
link: 'https://www.npmjs.com/package/bgg-client',
|
||||||
|
},
|
||||||
|
];
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
import Layout from '@layouts/Layout.astro';
|
||||||
|
import Card from '@components/Card.astro';
|
||||||
|
import { projects } from '@data/projects';
|
||||||
|
|
||||||
|
const title = 'Projects';
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout title={title}>
|
||||||
|
<h1>{title}</h1>
|
||||||
|
<div class="projects-grid">
|
||||||
|
{
|
||||||
|
projects.map((project) => (
|
||||||
|
<Card
|
||||||
|
title={project.title}
|
||||||
|
image={project.image}
|
||||||
|
links={[
|
||||||
|
{
|
||||||
|
label: 'More...',
|
||||||
|
href: project.link,
|
||||||
|
newWindow: true,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<div class="project-content">
|
||||||
|
<p>{project.description}</p>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.projects-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 8rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
---
|
|
||||||
layout: ../layouts/Layout.astro
|
|
||||||
title: Projects
|
|
||||||
---
|
|
||||||
|
|
||||||
# Projects
|
|
||||||
|
|
||||||
## Mac Apps
|
|
||||||
|
|
||||||
### [AutoDock](https://github.com/ghall89/AutoDock)
|
|
||||||
|
|
||||||
A MacOS menubar utility for automatically hiding and showing the Dock based on the screen size of the connected displays.
|
|
||||||
|
|
||||||
### [KeyStash](https://github.com/ghall89/KeyStash)
|
|
||||||
|
|
||||||
A MacOS application for managing software license keys for software purchased outside the Mac App Store.
|
|
||||||
|
|
||||||
## Node Packages
|
|
||||||
|
|
||||||
### [bgg-client](https://www.npmjs.com/package/bgg-client)
|
|
||||||
|
|
||||||
A Typescript client for working with the BoardGameGeek.com API.
|
|
||||||
|
|
||||||
### [try-catcher-ts](https://www.npmjs.com/package/try-catcher-ts)
|
|
||||||
|
|
||||||
A type-safe try/catch wrapper.
|
|
||||||
|
|
||||||
### [tunes-js](https://www.npmjs.com/package/tunes-js)
|
|
||||||
|
|
||||||
A Node package for controlling Music.app on macOS.
|
|
||||||
|
|
||||||
## Other
|
|
||||||
|
|
||||||
### [BGG Search (Raycast Extension)](https://www.raycast.com/graham_hall/board-game-geek)
|
|
||||||
|
|
||||||
A Raycast extension for searching [BoardGameGeek.com](https://boardgamegeek.com).
|
|
||||||
+2
-1
@@ -7,7 +7,8 @@
|
|||||||
"@components/*": ["src/components/*"],
|
"@components/*": ["src/components/*"],
|
||||||
"@layouts/*": ["src/layouts/*"],
|
"@layouts/*": ["src/layouts/*"],
|
||||||
"@styles/*": ["src/styles/*"],
|
"@styles/*": ["src/styles/*"],
|
||||||
"@images/*": ["src/images/*"]
|
"@assets/*": ["src/assets/*"],
|
||||||
|
"@data/*": ["src/data/*"]
|
||||||
},
|
},
|
||||||
"plugins": [{ "name": "@astrojs/ts-plugin" }]
|
"plugins": [{ "name": "@astrojs/ts-plugin" }]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user