mirror of
https://codeberg.org/andyscott-pages/andyscott-dot-me.git
synced 2024-12-22 09:43:11 -05:00
Compare commits
3 commits
c3532d9224
...
77abf317f5
Author | SHA1 | Date | |
---|---|---|---|
77abf317f5 | |||
3a03fe5f81 | |||
e66fcf6b5e |
38 changed files with 469 additions and 484 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -17,3 +17,6 @@ pnpm-debug.log*
|
|||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# Astro
|
||||
.astro/
|
4
.vscode/extensions.json
vendored
4
.vscode/extensions.json
vendored
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
11
.vscode/launch.json
vendored
11
.vscode/launch.json
vendored
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,11 +1,11 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import mdx from '@astrojs/mdx';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
import { defineConfig } from "astro/config";
|
||||
import mdx from "@astrojs/mdx";
|
||||
import sitemap from "@astrojs/sitemap";
|
||||
|
||||
import tailwind from "@astrojs/tailwind";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: 'https://andyscott.me',
|
||||
integrations: [mdx(), sitemap(), tailwind()]
|
||||
site: "https://andyscott.me",
|
||||
integrations: [mdx(), sitemap(), tailwind()],
|
||||
});
|
||||
|
|
162
package-lock.json
generated
162
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "Astro Modern Personal Website",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "Astro Modern Personal Website",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.11.1",
|
||||
"@astrojs/rss": "^1.0.1",
|
||||
|
@ -33,9 +33,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@astrojs/compiler": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.1.0.tgz",
|
||||
"integrity": "sha512-C4kTwirys+HafufMqaxCbML2wqkGaXJM+5AekXh/v1IIOnMIdcEON9GBYsG6qa8aAmLhZ58aUZGPhzcA3Dx7Uw=="
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.0.1.tgz",
|
||||
"integrity": "sha512-77aacobLKcL98NmhK3OBS5EHIrX9gs1ckB/vGSIdkVZuB7u51V4jh05I6W0tSvG7/86tALv6QtHTRZ8rLhFTbQ=="
|
||||
},
|
||||
"node_modules/@astrojs/language-server": {
|
||||
"version": "0.28.3",
|
||||
|
@ -162,42 +162,6 @@
|
|||
"tailwindcss": "^3.0.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/tailwind/node_modules/postcss-load-config": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
|
||||
"integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
|
||||
"dependencies": {
|
||||
"lilconfig": "^2.0.5",
|
||||
"yaml": "^2.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"postcss": ">=8.0.9",
|
||||
"ts-node": ">=9.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"postcss": {
|
||||
"optional": true
|
||||
},
|
||||
"ts-node": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/tailwind/node_modules/yaml": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz",
|
||||
"integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==",
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/telemetry": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.0.0.tgz",
|
||||
|
@ -484,9 +448,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.20.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
|
||||
"integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==",
|
||||
"version": "7.20.13",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
|
||||
"integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
|
@ -1435,11 +1399,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/astro": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-2.0.10.tgz",
|
||||
"integrity": "sha512-Jg2JYPA6Nlip27So1+O0p9VFL98H+LiDLEt+F65e6536LkWE5oiV0fDSbK8aI8hKeCvOQzLiEZiD21eXbug0XQ==",
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-2.0.5.tgz",
|
||||
"integrity": "sha512-ZuTbCOZLOnVOQ/np+82H3apL4TQ9jRUtIMfnAAUr4BG8NthwoY718avm5lfiI25bDqs7QA012Zh6l1h3RpJwtw==",
|
||||
"dependencies": {
|
||||
"@astrojs/compiler": "^1.1.0",
|
||||
"@astrojs/compiler": "^1.0.1",
|
||||
"@astrojs/language-server": "^0.28.3",
|
||||
"@astrojs/markdown-remark": "^2.0.1",
|
||||
"@astrojs/telemetry": "^2.0.0",
|
||||
|
@ -1501,9 +1465,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/es-module-lexer": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.1.1.tgz",
|
||||
"integrity": "sha512-n3ruqU8Te7I5prBd6d0darM8ajFuVNhLWvgo04hN7goWSaSrxe7ENOZitac7akN0A2o+8fMomBDsNPvW/eE3CQ=="
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.1.0.tgz",
|
||||
"integrity": "sha512-fJg+1tiyEeS8figV+fPcPpm8WqJEflG3yPU0NOm5xMvrNkuiy7HzX/Ljng4Y0hAoiw4/3hQTCFYw+ub8+a2pRA=="
|
||||
},
|
||||
"node_modules/astro/node_modules/github-slugger": {
|
||||
"version": "2.0.0",
|
||||
|
@ -2092,9 +2056,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/deepmerge-ts": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz",
|
||||
"integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==",
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.2.2.tgz",
|
||||
"integrity": "sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==",
|
||||
"engines": {
|
||||
"node": ">=12.4.0"
|
||||
}
|
||||
|
@ -2151,9 +2115,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/devalue": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz",
|
||||
"integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA=="
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.2.3.tgz",
|
||||
"integrity": "sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ=="
|
||||
},
|
||||
"node_modules/didyoumean": {
|
||||
"version": "1.2.2",
|
||||
|
@ -4402,9 +4366,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/open": {
|
||||
"version": "8.4.1",
|
||||
"resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz",
|
||||
"integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==",
|
||||
"version": "8.4.0",
|
||||
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
|
||||
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
|
||||
"dependencies": {
|
||||
"define-lazy-prop": "^2.0.0",
|
||||
"is-docker": "^2.1.1",
|
||||
|
@ -4715,15 +4679,15 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-load-config": {
|
||||
"version": "3.1.4",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
|
||||
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
|
||||
"integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
|
||||
"dependencies": {
|
||||
"lilconfig": "^2.0.5",
|
||||
"yaml": "^1.10.2"
|
||||
"yaml": "^2.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
"node": ">= 14"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
@ -4792,9 +4756,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
|
||||
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz",
|
||||
"integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==",
|
||||
"bin": {
|
||||
"prettier": "bin-prettier.js"
|
||||
},
|
||||
|
@ -5639,6 +5603,42 @@
|
|||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss/node_modules/postcss-load-config": {
|
||||
"version": "3.1.4",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
|
||||
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
|
||||
"dependencies": {
|
||||
"lilconfig": "^2.0.5",
|
||||
"yaml": "^1.10.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"postcss": ">=8.0.9",
|
||||
"ts-node": ">=9.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"postcss": {
|
||||
"optional": true
|
||||
},
|
||||
"ts-node": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss/node_modules/yaml": {
|
||||
"version": "1.10.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/tiny-glob": {
|
||||
"version": "0.2.9",
|
||||
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
|
||||
|
@ -5741,9 +5741,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/undici": {
|
||||
"version": "5.18.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.18.0.tgz",
|
||||
"integrity": "sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==",
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.16.0.tgz",
|
||||
"integrity": "sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==",
|
||||
"dependencies": {
|
||||
"busboy": "^1.6.0"
|
||||
},
|
||||
|
@ -5998,14 +5998,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz",
|
||||
"integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz",
|
||||
"integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.16.14",
|
||||
"postcss": "^8.4.21",
|
||||
"esbuild": "^0.16.3",
|
||||
"postcss": "^8.4.20",
|
||||
"resolve": "^1.22.1",
|
||||
"rollup": "^3.10.0"
|
||||
"rollup": "^3.7.0"
|
||||
},
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
|
@ -6239,11 +6239,11 @@
|
|||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "1.10.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz",
|
||||
"integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==",
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/yargs-parser": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "Astro Modern Personal Website",
|
||||
"description": "Astro Modern personal website template with Project Section, CV Section, Paginated Blog, Shop, RSS Feed, SEO Friendly, Visual themes and Responsive Desing.",
|
||||
"type": "module",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
|
|
|
@ -22,3 +22,17 @@ const { title, description, image = '/social_img.png' } = Astro.props;
|
|||
<title>{title}</title>
|
||||
<meta name="title" content={title} />
|
||||
<meta name="description" content={description} />
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content={Astro.url} />
|
||||
<meta property="og:title" content={title} />
|
||||
<meta property="og:description" content={description} />
|
||||
<meta property="og:image" content={new URL(image, Astro.url)} />
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:card" content="summary_large_image" />
|
||||
<meta property="twitter:url" content={Astro.url} />
|
||||
<meta property="twitter:title" content={title} />
|
||||
<meta property="twitter:description" content={description} />
|
||||
<meta property="twitter:image" content={new URL(image, Astro.url)} />
|
||||
|
|
|
@ -5,26 +5,18 @@ const today = new Date();
|
|||
<footer class="footer footer-center block mb-5 pt-10">
|
||||
<div class="inline opacity-75">
|
||||
<!-- Thanks for using this template. Please keep this line to support my work :) -->
|
||||
<a
|
||||
href="https://github.com/manuelernestog/astro-modern-personal-website"
|
||||
target="_blank"
|
||||
class="font-bold">Website Template</a
|
||||
>
|
||||
developed by
|
||||
<a href="https://manuelernestog.github.io" target="_blank" class="font-bold"
|
||||
>Manuel Ernesto ⚡️</a
|
||||
>
|
||||
<a href="https://astro-modern-personal-website.netlify.app/" target="_blank" class="font-bold">Website Template</a> developed by
|
||||
<a href="https://manuelernestog.github.io" target="_blank" class="font-bold">Manuel Ernesto ⚡️</a>
|
||||
</div>
|
||||
<div class="pb-2">
|
||||
<p>
|
||||
Excluding the template, all page content for
|
||||
<br />
|
||||
<div class="inline opacity-75">
|
||||
All content for
|
||||
<a href="https://andyscott.me" class="font-bold">andyscott dot me</a>
|
||||
© 2021 Andrew Scott
|
||||
<a
|
||||
href="https://creativecommons.org/licenses/by-sa/4.0/"
|
||||
class="font-bold">CC BY-SA 4.0</a
|
||||
> unless otherwise noted
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<style>
|
||||
|
|
|
@ -4,23 +4,13 @@
|
|||
<div class="navbar">
|
||||
<div class="navbar-start">
|
||||
<label for="my-drawer" class="btn btn-square btn-ghost">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
class="inline-block w-5 h-5 stroke-current"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M4 6h16M4 12h16M4 18h16"
|
||||
></path>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="inline-block w-5 h-5 stroke-current"
|
||||
><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
|
||||
</svg>
|
||||
</label>
|
||||
</div>
|
||||
<div class="navbar-center">
|
||||
<a class="btn btn-ghost normal-case text-xl" href="/">Andrew Scott</a>
|
||||
<a class="btn btn-ghost normal-case text-xl" href="/">Andy Scott</a>
|
||||
</div>
|
||||
<div class="navbar-end"></div>
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@ const { title, img, desc, url, badge, tags, target = '_blank' } = Astro.props;
|
|||
<div class="rounded-lg bg-base-100 hover:shadow-xl transition ease-in-out hover:scale-[102%]">
|
||||
<a href={url} target={target}>
|
||||
<div class="hero-content flex-col md:flex-row">
|
||||
<img src={img} alt={title} class="max-w-full md:max-w-[13rem] rounded-lg" />
|
||||
{img && <img src={img} alt={title} class="max-w-full md:max-w-[13rem] rounded-lg" />}
|
||||
<div class="grow w-full">
|
||||
<h1 class="text-xl font-bold">
|
||||
{title}
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
---
|
||||
const {
|
||||
title,
|
||||
img,
|
||||
desc,
|
||||
url,
|
||||
badge,
|
||||
target = "_self",
|
||||
pricing,
|
||||
oldPricing,
|
||||
checkoutUrl,
|
||||
details = true,
|
||||
custom_link = false,
|
||||
custom_link_label = "",
|
||||
} = Astro.props;
|
||||
---
|
||||
|
||||
<div class="rounded-lg bg-base-100 hover:shadow-xl transition ease-in-out hover:scale-[102%]">
|
||||
<div class="hero-content flex-col md:flex-row">
|
||||
<img src={img} alt={title} class="max-w-full md:max-w-[13rem] rounded-lg" />
|
||||
<div class="grow w-full p-5 md:p-0">
|
||||
<h1 class="text-xl font-bold">
|
||||
{title}
|
||||
{badge && <div class="badge badge-secondary mx-2">{badge}</div>}
|
||||
</h1>
|
||||
<div>
|
||||
<span class="text-xl mr-1"> {pricing}</span>
|
||||
<span class="text-md opacity-50 line-through">{oldPricing}</span>
|
||||
</div>
|
||||
<p class="py-1 text-1xl">{desc}</p>
|
||||
<div class="card-actions md:justify-end mt-3 md:mt-0 flex">
|
||||
<a class="btn btn-primary grow md:grow-0" href={checkoutUrl} target="_blank">Buy</a>
|
||||
{
|
||||
custom_link && (
|
||||
<a href={custom_link} target="_blank" class="btn btn-outline grow md:grow-0">
|
||||
{custom_link_label}
|
||||
</a>
|
||||
)
|
||||
}
|
||||
{
|
||||
details && (
|
||||
<a href={url} class="btn btn-outline grow md:grow-0">
|
||||
Details
|
||||
</a>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,6 +1,8 @@
|
|||
<div class="drawer-side bg-base-200">
|
||||
<label for="my-drawer" class="drawer-overlay bg-base-200"></label>
|
||||
<div class="menu p-4 overflow-y-auto overflow-x-hidden w-[19rem] bg-base-200 text-base-content">
|
||||
<div
|
||||
class="menu flex flex-col flex-nowrap p-4 overflow-y-auto w-[21rem] bg-base-200 text-base-content"
|
||||
>
|
||||
<div class="w-fit">
|
||||
<a href="/">
|
||||
<div
|
||||
|
@ -16,89 +18,15 @@
|
|||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<ul>
|
||||
<ul class="grow shrink">
|
||||
<!-- Sidebar content here -->
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/projects">Projects</a></li>
|
||||
<li><a href="/blog/1">Blog</a></li>
|
||||
<li><a href="/cv">CV</a></li>
|
||||
<li><a id="home" href="/">Home</a></li>
|
||||
<li><a id="projects" href="/projects">Projects</a></li>
|
||||
<li><a id="blog" href="/blog/">Blog</a></li>
|
||||
<li><a id="cv" href="/cv">CV</a></li>
|
||||
<li><a href="mailto:hello@andyscott.me">Contact</a></li>
|
||||
</ul>
|
||||
<div class="grow"></div>
|
||||
<div class="social-icons px-4 my-2 flex self-center">
|
||||
<a
|
||||
href="https://codeberg.org/andyscott"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="Git"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><path
|
||||
d="M3 19h18a1.002 1.002 0 0 0 .823-1.569l-9-13c-.373-.539-1.271-.539-1.645 0l-9 13A.999.999 0 0 0 3 19z"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
href="https://fosstodon.org/@ascott"
|
||||
rel="me"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="Mastodon"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><path
|
||||
d="M16 17.24c2.5-.3 4.69-1.84 5-3.25a33.59 33.59 0 0 0 .4-5.42C21.33 4.23 18.48 3 18.48 3A17.64 17.64 0 0 0 12 2a17.64 17.64 0 0 0-6.48 1S2.68 4.23 2.68 8.57v3.44c.1 4.24.78 8.42 4.7 9.46A14.73 14.73 0 0 0 12 22a9.21 9.21 0 0 0 3.54-.81l-.07-1.64A11.41 11.41 0 0 1 12 20c-1.8-.06-3.71-.19-4-2.4a4.26 4.26 0 0 1 0-.63 22.68 22.68 0 0 0 4 .54 23.6 23.6 0 0 0 4-.27zm-6.54-9.8q-1.35 0-1.35 1.62v5.1H6V8.9a3.78 3.78 0 0 1 .82-2.56 2.85 2.85 0 0 1 2.23-1 2.68 2.68 0 0 1 2.4 1.23l.52.87.52-.87a2.68 2.68 0 0 1 2.4-1.23 2.85 2.85 0 0 1 2.23 1A3.78 3.78 0 0 1 18 8.9v5.26h-2.11v-5.1q0-1.62-1.35-1.62c-1 0-1.51.64-1.51 1.92v2.79H11V9.36c0-1.28-.54-1.92-1.54-1.92z"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
href="xmpp:andrew@chat.acscott.dev?omemo-sid-1469474723=2f136a2443193c56bf6106509f126cb91a06d2765a1cab2b3ef49d7dedef4d12"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="XMPP"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><path
|
||||
d="M5 18v3.766l1.515-.909L11.277 18H16c1.103 0 2-.897 2-2V8c0-1.103-.897-2-2-2H4c-1.103 0-2 .897-2 2v8c0 1.103.897 2 2 2h1zM4 8h12v8h-5.277L7 18.234V16H4V8z"
|
||||
></path><path
|
||||
d="M20 2H8c-1.103 0-2 .897-2 2h12c1.103 0 2 .897 2 2v8c1.103 0 2-.897 2-2V4c0-1.103-.897-2-2-2z"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://www.linkedin.com/in/andcscott"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="Linkedin"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><circle cx="4.983" cy="5.009" r="2.188"></circle><path
|
||||
d="M9.237 8.855v12.139h3.769v-6.003c0-1.584.298-3.118 2.262-3.118 1.937 0 1.961 1.811 1.961 3.218v5.904H21v-6.657c0-3.27-.704-5.783-4.526-5.783-1.835 0-3.065 1.007-3.568 1.96h-.051v-1.66H9.237zm-6.142 0H6.87v12.139H3.095z"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://keyoxide.org/24D8D7C03F430A0A59A40667F8539CA70FB13B5A/"
|
||||
target="_blank"
|
||||
|
@ -116,8 +44,68 @@
|
|||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="/rss.xml" target="_blank" class="mx-3" aria-label="RSS Feed">
|
||||
<a
|
||||
href="https://git.andyscott.me/explore"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label=""
|
||||
Git"
|
||||
title="Git"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><path
|
||||
d="m21.62 11.108-8.731-8.729a1.292 1.292 0 0 0-1.823 0L9.257 4.19l2.299 2.3a1.532 1.532 0 0 1 1.939 1.95l2.214 2.217a1.53 1.53 0 0 1 1.583 2.531c-.599.6-1.566.6-2.166 0a1.536 1.536 0 0 1-.337-1.662l-2.074-2.063V14.9c.146.071.286.169.407.29a1.537 1.537 0 0 1 0 2.166 1.536 1.536 0 0 1-2.174 0 1.528 1.528 0 0 1 0-2.164c.152-.15.322-.264.504-.339v-5.49a1.529 1.529 0 0 1-.83-2.008l-2.26-2.271-5.987 5.982c-.5.504-.5 1.32 0 1.824l8.731 8.729a1.286 1.286 0 0 0 1.821 0l8.69-8.689a1.284 1.284 0 0 0 .003-1.822"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
href="https://fosstodon.org/@ascott"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="Mastodon"
|
||||
title="Mastodon"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><path
|
||||
d="M16 17.24c2.5-.3 4.69-1.84 5-3.25a33.59 33.59 0 0 0 .4-5.42C21.33 4.23 18.48 3 18.48 3A17.64 17.64 0 0 0 12 2a17.64 17.64 0 0 0-6.48 1S2.68 4.23 2.68 8.57v3.44c.1 4.24.78 8.42 4.7 9.46A14.73 14.73 0 0 0 12 22a9.21 9.21 0 0 0 3.54-.81l-.07-1.64A11.41 11.41 0 0 1 12 20c-1.8-.06-3.71-.19-4-2.4a4.26 4.26 0 0 1 0-.63 22.68 22.68 0 0 0 4 .54 23.6 23.6 0 0 0 4-.27zm-6.54-9.8q-1.35 0-1.35 1.62v5.1H6V8.9a3.78 3.78 0 0 1 .82-2.56 2.85 2.85 0 0 1 2.23-1 2.68 2.68 0 0 1 2.4 1.23l.52.87.52-.87a2.68 2.68 0 0 1 2.4-1.23 2.85 2.85 0 0 1 2.23 1A3.78 3.78 0 0 1 18 8.9v5.26h-2.11v-5.1q0-1.62-1.35-1.62c-1 0-1.51.64-1.51 1.92v2.79H11V9.36c0-1.28-.54-1.92-1.54-1.92z"
|
||||
></path></svg
|
||||
>
|
||||
</a>
|
||||
<a
|
||||
href="https://www.linkedin.com/in/andcscott"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="Linkedin"
|
||||
title="Linkedin"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
style="fill: currentColor;transform: ;msFilter:;"
|
||||
><circle cx="4.983" cy="5.009" r="2.188"></circle><path
|
||||
d="M9.237 8.855v12.139h3.769v-6.003c0-1.584.298-3.118 2.262-3.118 1.937 0 1.961 1.811 1.961 3.218v5.904H21v-6.657c0-3.27-.704-5.783-4.526-5.783-1.835 0-3.065 1.007-3.568 1.96h-.051v-1.66H9.237zm-6.142 0H6.87v12.139H3.095z"
|
||||
></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
href="/rss.xml"
|
||||
target="_blank"
|
||||
class="mx-3"
|
||||
aria-label="RSS Feed"
|
||||
title="RSS Feed"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
|
@ -134,3 +122,27 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
const homeLink = document.getElementById("home");
|
||||
const projectsLink = document.getElementById("projects");
|
||||
const blogLink = document.getElementById("blog");
|
||||
const cvLink = document.getElementById("cv");
|
||||
|
||||
var isHome = true;
|
||||
|
||||
const url = window.location.href;
|
||||
|
||||
const pages = [projectsLink, blogLink, cvLink];
|
||||
|
||||
const activeClass = "bg-base-300"; // For primary color replace with `active` class
|
||||
|
||||
pages.forEach((elem) => {
|
||||
if (url.includes(elem.id)) {
|
||||
isHome = false;
|
||||
elem.classList.add(activeClass);
|
||||
}
|
||||
});
|
||||
if (isHome) {
|
||||
homeLink.classList.add(activeClass);
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
// You can import this data from anywhere in your site by using the `import` keyword.
|
||||
|
||||
export const SITE_TITLE = "Andy Scott";
|
||||
export const SITE_DESCRIPTION = "Personal and Portfolio Site for Andy Scott";
|
||||
export const SITE_DESCRIPTION = "A personal site for my portfolio and blog";
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Fall '22 Term"
|
||||
description: "Reflecting on the Fall 2022 term at OSU"
|
||||
pubDate: "Dec 11 2022"
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "First Post"
|
||||
description: "It's time for the inaugural post!"
|
||||
pubDate: "Jan 11 2022"
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Exercise Tracker"
|
||||
description: "Single Page Application using the MERN Stack"
|
||||
pubDate: "Jun 16 2022"
|
||||
|
@ -10,6 +9,6 @@ I was finally able to make the first of my projects from this spring public toda
|
|||
page application uses the MongoDB, Express, React, and Node (MERN) Stack to implement
|
||||
a REST API and a graphical interface for logging exercises. The home page greets the user
|
||||
with a table of past exercises. An exercise can be edited, or deleted, by clicking on the
|
||||
appropriate icon within the table. [source code](https://codeberg.org/andyscott/ExerciseTracker)
|
||||
appropriate icon within the table. [source code](https://git.andyscott.me/a/ExerciseTracker)
|
||||
|
||||
*Updated Dec 9 2022*
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Hash Maps"
|
||||
description: "Two hash maps with different collision avoidance mechanisms"
|
||||
pubDate: "Jun 25 2022"
|
||||
|
@ -14,4 +13,4 @@ colisions: open addressing with quadratic probing; and separate chaining.
|
|||
While data structures might seem bit mundane I actually had a lot of fun with this one!
|
||||
I felt much more confident in this project than I have in the past as well. It's really
|
||||
exciting to see the progress I've made since last fall and I can't wait to share more in
|
||||
the future. [source code](https://codeberg.org/andyscott/HashMaps)
|
||||
the future. [source code](https://git.andyscott.me/a/HashMaps)
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "MASM & Low Level I/O"
|
||||
description: "Using the Microsoft Macro Assembler for low-level operations"
|
||||
pubDate: "Mar 26 2022"
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "OpenWeather gRPC API"
|
||||
description: "A high-performance API for gRPC clients to fetch weather data"
|
||||
pubDate: "Aug 28 2022"
|
||||
|
@ -33,4 +32,4 @@ The following features are currently available:
|
|||
- Geolocation data (latitude and longitude) for a particular city or zip code
|
||||
- Choose your preferred units among imperial, metric, or the OpenWeather default (Kelvin/meters per second)
|
||||
|
||||
[source code](https://codeberg.org/andyscott/OpenWeather-gRPC-API)
|
||||
[source code](https://git.andyscott.me/a/OpenWeather-gRPC-API)
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Ship Game"
|
||||
description: "A backend for the Battleship-like 'Ship Game'"
|
||||
pubDate: "Apr 11 2022"
|
||||
|
@ -14,6 +13,6 @@ Python.
|
|||
Each player has a 10x10 grid on which they place their ships. On their turn, the player
|
||||
fires a torpedo at a square on their opponents grid. Player 'first' gets the first turn, after
|
||||
which the players alternate. A ship is sunk when all of its squares have been hit. A player
|
||||
wins when all of their opponents ships have been sunk. [source code](https://codeberg.org/andyscott/ShipGame)
|
||||
wins when all of their opponents ships have been sunk. [source code](https://git.andyscott.me/a/ShipGame)
|
||||
|
||||
*Updated Dec 10 2022*
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Spring '22 Term"
|
||||
description: "Wrapping Up Spring '22"
|
||||
pubDate: "May 31 2022"
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Winter '22 Term"
|
||||
description: "Winter 2022 at Oregon State is almost over!"
|
||||
pubDate: "Mar 16 2022"
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
layout: "../../layouts/PostLayout.astro"
|
||||
title: "Halfway through Winter '23"
|
||||
description: "Database design and a little fun with shaders"
|
||||
pubDate: "Feb 10 2023"
|
18
src/content/config.ts
Normal file
18
src/content/config.ts
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { z, defineCollection } from "astro:content";
|
||||
|
||||
const blogSchema = z.object({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
pubDate: z.coerce.date(),
|
||||
updatedDate: z.string().optional(),
|
||||
heroImage: z.string().optional(),
|
||||
badge: z.string().optional(),
|
||||
});
|
||||
|
||||
export type BlogSchema = z.infer<typeof blogSchema>;
|
||||
|
||||
const blogCollection = defineCollection({ schema: blogSchema });
|
||||
|
||||
export const collections = {
|
||||
blog: blogCollection,
|
||||
};
|
1
src/env.d.ts
vendored
1
src/env.d.ts
vendored
|
@ -1 +1,2 @@
|
|||
/// <reference path="../.astro/types.d.ts" />
|
||||
/// <reference types="astro/client" />
|
||||
|
|
|
@ -6,11 +6,11 @@ import SideBar from "../components/SideBar.astro";
|
|||
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from "../config";
|
||||
|
||||
const { image, title = SITE_TITLE, description = SITE_DESCRIPTION } = Astro.props;
|
||||
const { image, title = SITE_TITLE, description = SITE_DESCRIPTION, includeSidebar = true } = Astro.props;
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="coffee">
|
||||
<html lang="en" data-theme="lofi">
|
||||
<head>
|
||||
<BaseHead title={title} description={description} image={image} />
|
||||
</head>
|
||||
|
@ -26,7 +26,7 @@ const { image, title = SITE_TITLE, description = SITE_DESCRIPTION } = Astro.prop
|
|||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<SideBar />
|
||||
{includeSidebar && <SideBar />}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,28 +1,24 @@
|
|||
---
|
||||
import BaseHead from "../components/BaseHead.astro";
|
||||
import { BlogSchema } from "../content/config";
|
||||
import BaseLayout from "./BaseLayout.astro";
|
||||
import dayjs from "dayjs";
|
||||
import localizedFormat from "dayjs/plugin/localizedFormat";
|
||||
|
||||
export interface Props {
|
||||
content: {
|
||||
title: string;
|
||||
description: string;
|
||||
pubDate?: string;
|
||||
updatedDate?: string;
|
||||
heroImage?: string;
|
||||
};
|
||||
}
|
||||
export interface Props extends BlogSchema {}
|
||||
|
||||
const {
|
||||
content: { title, description, pubDate, updatedDate, heroImage }
|
||||
} = Astro.props;
|
||||
const { title, description, pubDate, updatedDate, heroImage, badge } = Astro.props;
|
||||
dayjs.extend(localizedFormat);
|
||||
const displayDate = dayjs(pubDate).format("ll");
|
||||
---
|
||||
|
||||
<BaseLayout title={title} description={description} image={heroImage}>
|
||||
<main class="md:flex md:justify-center">
|
||||
<article class="prose prose-lg max-w-[750px] prose-img:mx-auto">
|
||||
{heroImage && <img src={heroImage} alt={title} class="w-full mb-6" />}
|
||||
{heroImage && <img src={heroImage} alt={title} class="max-w-[500px] mb-6" />}
|
||||
<h1 class="title my-2 text-4xl font-bold">{title}</h1>
|
||||
{pubDate && <time>{pubDate}</time>}
|
||||
{pubDate && <time>{displayDate}</time>}
|
||||
<br>
|
||||
{badge && <div class="badge badge-secondary my-1">{badge}</div>}
|
||||
{
|
||||
updatedDate && (
|
||||
<div>
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
---
|
||||
import BaseHead from "../components/BaseHead.astro";
|
||||
import BaseLayout from "./BaseLayout.astro";
|
||||
|
||||
const {
|
||||
content: {
|
||||
title,
|
||||
description,
|
||||
pubDate,
|
||||
updatedDate,
|
||||
heroImage,
|
||||
pricing,
|
||||
oldPricing,
|
||||
checkoutUrl,
|
||||
badge,
|
||||
custom_link,
|
||||
custom_link_label,
|
||||
},
|
||||
} = Astro.props;
|
||||
---
|
||||
|
||||
<BaseLayout title={title} description={description} image={heroImage}>
|
||||
<main class="md:flex md:justify-center">
|
||||
<article class="prose prose-lg max-w-[750px] prose-img:mx-auto">
|
||||
{heroImage && <img src={heroImage} alt={title} class="w-full mb-6" />}
|
||||
<div class="">
|
||||
<h1 class="title my-2 text-4xl font-bold">
|
||||
{title}
|
||||
{badge && <div class="badge badge-secondary mx-2">{badge}</div>}
|
||||
</h1>
|
||||
<div class="flex place-content-between items-center">
|
||||
<div class="grow md:grow-0">
|
||||
<span class="text-xl mr-1"> {pricing}</span>
|
||||
<span class="text-md opacity-50 line-through">{oldPricing}</span>
|
||||
</div>
|
||||
<div>
|
||||
{
|
||||
custom_link && (
|
||||
<a class="btn btn-outline grow md:grow-0 ml-4" href={custom_link} target="_blank">
|
||||
{custom_link_label}
|
||||
</a>
|
||||
)
|
||||
}
|
||||
<a class="btn btn-primary grow md:grow-0 ml-4" href={checkoutUrl} target="_blank">Buy Now</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
updatedDate && (
|
||||
<div>
|
||||
{" "}
|
||||
Last updated on <time>{updatedDate}</time>{" "}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
<div class="divider my-2"></div>
|
||||
<slot />
|
||||
</article>
|
||||
</main>
|
||||
</BaseLayout>
|
12
src/pages/404.astro
Normal file
12
src/pages/404.astro
Normal file
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||
---
|
||||
|
||||
<BaseLayout title = "404: Not Found" includeSidebar={false}>
|
||||
<div class="text-center">
|
||||
<h1 class="text-9xl font-bold mb-4">🏝</h1>
|
||||
<h1 class="text-9xl font-bold mb-2">404</h1>
|
||||
<h3 class="text-2xl">The page you're looking for couldn't be found.</h3>
|
||||
<a class="btn btn-accent mt-9" href="/">Home</a>
|
||||
</div>
|
||||
</BaseLayout>
|
73
src/pages/blog/[...page].astro
Normal file
73
src/pages/blog/[...page].astro
Normal file
|
@ -0,0 +1,73 @@
|
|||
---
|
||||
import BaseLayout from "../../layouts/BaseLayout.astro";
|
||||
import HorizontalCard from "../../components/HorizontalCard.astro";
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export async function getStaticPaths({ paginate }) {
|
||||
const posts = await getCollection("blog");
|
||||
return paginate(posts, { pageSize: 10 });
|
||||
}
|
||||
|
||||
const { page } = Astro.props;
|
||||
---
|
||||
|
||||
<BaseLayout title="Blog">
|
||||
<ul>
|
||||
{
|
||||
page.data.map((post) => (
|
||||
<>
|
||||
<HorizontalCard
|
||||
title={post.data.title}
|
||||
img={post.data.heroImage}
|
||||
desc={post.data.description}
|
||||
url={"/blog/" + post.slug}
|
||||
target="_self"
|
||||
badge={post.data.badge}
|
||||
/>
|
||||
<div class="divider my-0" />
|
||||
</>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<div class="flex justify-between">
|
||||
{
|
||||
page.url.prev ? (
|
||||
<a href={page.url.prev} class="btn btn-ghost my-10 mx-5">
|
||||
{" "}
|
||||
<svg
|
||||
class="h-6 w-6 fill-current md:h-8 md:w-8"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path d="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z" />
|
||||
</svg>{" "}
|
||||
Recent posts
|
||||
</a>
|
||||
) : (
|
||||
<div />
|
||||
)
|
||||
}
|
||||
{
|
||||
page.url.next ? (
|
||||
<a href={page.url.next} class="btn btn-ghost my-10 mx-5">
|
||||
Older Posts{" "}
|
||||
<svg
|
||||
class="h-6 w-6 fill-current md:h-8 md:w-8"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
{" "}
|
||||
<path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" />
|
||||
</svg>
|
||||
</a>
|
||||
) : (
|
||||
<div />
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</BaseLayout>
|
|
@ -1,37 +0,0 @@
|
|||
---
|
||||
import BaseLayout from "../../layouts/BaseLayout.astro";
|
||||
import HorizontalCard from "../../components/HorizontalCard.astro";
|
||||
|
||||
export async function getStaticPaths({ paginate }) {
|
||||
const posts = (await Astro.glob("./*.{md,mdx}")).sort(
|
||||
(a, b) => new Date(b.frontmatter.pubDate).valueOf() - new Date(a.frontmatter.pubDate).valueOf()
|
||||
);
|
||||
|
||||
return paginate(posts, { pageSize: 10 });
|
||||
}
|
||||
const { page } = Astro.props;
|
||||
---
|
||||
|
||||
<BaseLayout title = "Blog">
|
||||
<ul>
|
||||
<!--List the array of astronaut info-->
|
||||
{page.data.map(( post ) => (
|
||||
<HorizontalCard
|
||||
title={post.frontmatter.title}
|
||||
img={post.frontmatter.heroImage}
|
||||
desc={post.frontmatter.description}
|
||||
url={post.url}
|
||||
target="_self"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
||||
))}
|
||||
</ul>
|
||||
|
||||
|
||||
<div class="flex justify-between">
|
||||
{page.url.prev ? <a href={page.url.prev} class="btn btn-ghost my-10 mx-5" > <svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z"></path></svg> Recent posts</a> : <div></div>}
|
||||
{page.url.next ? <a href={page.url.next} class="btn btn-ghost my-10 mx-5">Older Posts <svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"> <path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z"></path></svg></a> : <div></div>}
|
||||
</div>
|
||||
|
||||
</BaseLayout>
|
30
src/pages/blog/[slug].astro
Normal file
30
src/pages/blog/[slug].astro
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
import { CollectionEntry, getCollection } from 'astro:content';
|
||||
import { BlogSchema } from '../../content/config';
|
||||
import PostLayout from '../../layouts/PostLayout.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const postEntries = await getCollection('blog');
|
||||
return postEntries.map(entry => ( {
|
||||
params: { slug: entry.slug }, props: { entry },
|
||||
} ));
|
||||
}
|
||||
|
||||
interface Props {
|
||||
entry: CollectionEntry<"blog">;
|
||||
}
|
||||
|
||||
const { entry } = Astro.props;
|
||||
const post : BlogSchema = entry.data;
|
||||
const { Content } = await entry.render();
|
||||
---
|
||||
|
||||
<PostLayout
|
||||
title={post.title}
|
||||
description={post.description}
|
||||
pubDate={post.pubDate}
|
||||
heroImage={post.heroImage}
|
||||
updatedDate={post.updatedDate}
|
||||
badge={post.badge}>
|
||||
<Content/>
|
||||
</PostLayout>
|
|
@ -9,15 +9,26 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
|
|||
</div>
|
||||
|
||||
<div class="mb-10 text-justify">
|
||||
My first memorable experience with technology was at age five - Nintendo
|
||||
introduced me to Mario, Tetris, and Zelda. My love of games took hold
|
||||
immediately, and I've been hooked on technology ever since. Games, and the
|
||||
hardware necessary to play them, were always evolving so I became determined
|
||||
to build my own desktop computer in high school. Since then, I've built at
|
||||
least another dozen computers and a couple home servers to host my own
|
||||
privacy focused cloud services. These experiences have led me to become a
|
||||
strong proponent of open source software, in part due to its transparency,
|
||||
quality, innovation, and diversity.
|
||||
<div class="mb-5">
|
||||
I was interested in computers at a very young age. In fact, my first
|
||||
memorable experience with technology was at age five when Nintendo
|
||||
introduced me to Tetris and Zelda. I went on to build my first desktop
|
||||
when I was in high school. Since then I’ve built many more as well as a
|
||||
few home servers to host my own cloud services. These experiences have led
|
||||
me to become a strong proponent of free and open source software due to
|
||||
its transparency, quality, innovation, and diversity.
|
||||
</div>
|
||||
<div class="mb-5">
|
||||
Despite my interest in computing I had always considered it a hobby, and
|
||||
my first degree was in Ethics, History, and Public Policy. I ended up
|
||||
working in insurance for seven years until, unfortunately, I experienced
|
||||
some health issues that forced me to leave the workforce altogether. It
|
||||
was not a happy time, yet as with any life-changing event it also brought
|
||||
new perspective. As I began to recover I realized that, despite the
|
||||
setbacks, I had a very rare opportunity to pursue an entirely new course
|
||||
in life. I am currently in the progress of finishing my Computer Science
|
||||
degree and I can't wait to start the next chapter!
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-5">
|
||||
|
@ -27,7 +38,7 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
|
|||
<div class="time-line-container grid gap-4 mb-10">
|
||||
<TimeLineElement
|
||||
title="Bachelor of Science – Computer Science"
|
||||
subtitle="2021 to Present at Oregon State University, Corvallis, OR"
|
||||
subtitle="2021 to 2023 at Oregon State University, Corvallis, OR"
|
||||
/>
|
||||
<TimeLineElement
|
||||
title="Bachelor of Arts – Ethics, History, and Public Policy"
|
||||
|
@ -36,31 +47,43 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
|
|||
</div>
|
||||
|
||||
<div class="mb-5">
|
||||
<div class="text-3xl w-full font-bold">Work Experience</div>
|
||||
<div class="text-3xl w-full font-bold">Work History</div>
|
||||
</div>
|
||||
|
||||
<div class="time-line-container mb-10">
|
||||
<TimeLineElement
|
||||
title="Career Break: Health and Well-Being"
|
||||
subtitle="From Mar 2017 to Present"
|
||||
subtitle="Mar 2017 to Present"
|
||||
/>
|
||||
<TimeLineElement
|
||||
title="Senior Representative, Annuity Claims"
|
||||
subtitle="From Mar 2013 to Mar 2017 at New York Life Insurance Company"
|
||||
subtitle="Mar 2013 to Mar 2017 at New York Life Insurance Company"
|
||||
desc="Managed migration of annuity claims processing from legacy mainframe system to a modern web interface, conducting quality assurance testing while ensuring compliance with state laws. Implemented new correspondence templates to increase efficiency and accuracy, saving approximately 100 hours per processor per year."
|
||||
/>
|
||||
<TimeLineElement
|
||||
title="Representative"
|
||||
subtitle="From Feb 2010 to Mar 2013 at New York Life Insurance Company"
|
||||
subtitle="Feb 2010 to Mar 2013 at New York Life Insurance Company"
|
||||
desc="Processed death claims against life insurance policies and annuities. Assisted claimants and their representatives in both establishing new claims and finalizing existing claims."
|
||||
/>
|
||||
<TimeLineElement
|
||||
title="Work Study Assistant, Equal Opportunity Services"
|
||||
subtitle="From Jan 2006 to May 2009 at Carnegie-Mellon University"
|
||||
subtitle="Jan 2006 to May 2009 at Carnegie-Mellon University"
|
||||
desc="Converted existing student and employee files from traditional paper to a digital database. Proctored distraction reduced test-taking environment for learning disabled students. Acted as primary on-call contact for after hours assignments. Directly assisted the Manager of Disability Resources in meeting the needs of disabled students as delineated by federal guidelines and University policy."
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mb-5">
|
||||
<div class="text-3xl w-full font-bold">Volunteering</div>
|
||||
</div>
|
||||
|
||||
<ul class="list-disc mx-6 mb-10 grid gap-2">
|
||||
<li>
|
||||
Technical Consultant for the <a href="https://rrcms.org"
|
||||
><strong>Rocky River Chamber Music Society</strong></a
|
||||
> (2020-Present)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="mb-5">
|
||||
<div class="text-3xl w-full font-bold">Skills</div>
|
||||
</div>
|
||||
|
@ -68,10 +91,17 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
|
|||
<ul class="list-disc md:columns-5 columns-2 mx-6">
|
||||
<li>C</li>
|
||||
<li>C++</li>
|
||||
<li>C#</li>
|
||||
<li>Python</li>
|
||||
<li>Go</li>
|
||||
<li>x86 Assembly</li>
|
||||
<li>MASM</li>
|
||||
<li>OpenGL</li>
|
||||
<li>GLSL</li>
|
||||
<li>Unity</li>
|
||||
<li>Node.js</li>
|
||||
<li>MongoDB</li>
|
||||
<li>MySQL</li>
|
||||
<li>Emacs</li>
|
||||
<li>Visual Studio</li>
|
||||
<li>PyCharm</li>
|
||||
|
@ -79,7 +109,6 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
|
|||
<li>Git</li>
|
||||
<li>CI/CD</li>
|
||||
<li>Agile</li>
|
||||
<li>Kanban</li>
|
||||
<li>Jira</li>
|
||||
<li>Trello</li>
|
||||
<li>Asana</li>
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
---
|
||||
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||
import HorizontalCard from "../components/HorizontalCard.astro";
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
const posts = (await Astro.glob("./blog/*.{md,mdx}")).sort(
|
||||
(a, b) =>
|
||||
new Date(b.frontmatter.pubDate).valueOf() -
|
||||
new Date(a.frontmatter.pubDate).valueOf()
|
||||
const posts = (await getCollection("blog")).sort(
|
||||
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
|
||||
);
|
||||
|
||||
const last_posts = posts.slice(0, 3);
|
||||
|
@ -16,51 +15,35 @@ const last_posts = posts.slice(0, 3);
|
|||
<div class="text-xl py-1">Greetings, fellow human 🤘</div>
|
||||
<div class="text-5xl font-bold">I'm Andy Scott</div>
|
||||
<div class="text-3xl py-3 font-bold">
|
||||
Computer Science Student & Free Software Advocate
|
||||
CS Student & Free Software Advocate
|
||||
</div>
|
||||
<div class="py-2">
|
||||
<text class="text-lg">
|
||||
I created this site to showcase my projects as well as occasionally blog about
|
||||
developement and my journey toward earning my degree. Feel free to navigate
|
||||
the site via the sidebar, or continue reading if you’d like to know more about
|
||||
my recent work!
|
||||
I created this site to showcase my projects as well as occasionally blog
|
||||
my journey toward earning my computer science degree. Feel free to
|
||||
navigate the site via the sidebar, or continue reading if you’d like to
|
||||
know more about my recent work!
|
||||
</text>
|
||||
</div>
|
||||
<div class="mt-8">
|
||||
<a
|
||||
class="btn btn-outline ml-5"
|
||||
href="https://fosstodon.org/@ascott"
|
||||
target="_blank"
|
||||
>
|
||||
Find me on Mastodon</a
|
||||
>
|
||||
<a
|
||||
href="https://codeberg.org/andyscott"
|
||||
target="_blank"
|
||||
class="btn btn-outline ml-5"
|
||||
>
|
||||
I Just Want the Code</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="text-3xl w-full font-bold mb-2">Latest projects {"</>"}</div>
|
||||
<div class="text-3xl w-full font-bold mb-2">Recent Projects {"</>"}</div>
|
||||
</div>
|
||||
|
||||
<div class="divider my-0"></div>
|
||||
<HorizontalCard
|
||||
title="Advent of Code 2022"
|
||||
img="/project_images/advent_floristry.jpg"
|
||||
desc="My first (very casual) attempt at Advent of Code"
|
||||
url="https://codeberg.org/andyscott/advent-of-code/src/branch/main/2022"
|
||||
url="https://git.andyscott.me/a/advent-of-code"
|
||||
badge="Happy Holidays"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
<HorizontalCard
|
||||
title="2D Puzzle Solver"
|
||||
img="/project_images/2d_puzzle_solver.jpg"
|
||||
desc="Uses breadth first search (BFS) to solve 2D puzzles"
|
||||
url="https://codeberg.org/andyscott/2D-Puzzle-Solver"
|
||||
url="https://andyscott.me/a/2d-puzzle-solver"
|
||||
badge="Graphs"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -68,23 +51,24 @@ const last_posts = posts.slice(0, 3);
|
|||
title="OpenWeather gRPC API"
|
||||
img="/project_images/openweather_grpc_api.jpg"
|
||||
desc="Written in Go, this microservice uses protocol buffers to define a highly performant gRPC API"
|
||||
url="https://codeberg.org/andyscott/OpenWeather-gRPC-API"
|
||||
url="https://git.andyscott.me/a/OpenWeather-gRPC-API`"
|
||||
badge="gRPC"
|
||||
/>
|
||||
|
||||
<div>
|
||||
<div class="text-3xl w-full font-bold mb-5 mt-10">Latest posts</div>
|
||||
<div class="text-3xl w-full font-bold mb-5 mt-10">Latest Posts</div>
|
||||
</div>
|
||||
|
||||
{
|
||||
last_posts.map((post) => (
|
||||
<>
|
||||
<HorizontalCard
|
||||
title={post.frontmatter.title}
|
||||
img={post.frontmatter.heroImage}
|
||||
desc={post.frontmatter.description}
|
||||
url={post.url}
|
||||
title={post.data.title}
|
||||
img={post.data.heroImage}
|
||||
desc={post.data.description}
|
||||
url={"/blog/" + post.slug}
|
||||
target="_self"
|
||||
badge={post.data.badge}
|
||||
/>
|
||||
<div class="divider my-0" />
|
||||
</>
|
||||
|
|
|
@ -3,34 +3,23 @@ import BaseLayout from "../layouts/BaseLayout.astro";
|
|||
import HorizontalCard from "../components/HorizontalCard.astro";
|
||||
---
|
||||
|
||||
<BaseLayout title="Latest Projects">
|
||||
<BaseLayout title="Projects">
|
||||
<div>
|
||||
<div class="text-3xl w-full font-bold mb-5">Active Projects</div>
|
||||
<div class="text-3xl w-full font-bold mb-5">Projects</div>
|
||||
</div>
|
||||
<HorizontalCard
|
||||
title="New Projects Coming Soon"
|
||||
img="/project_images/coming_soon.png"
|
||||
desc="Currently focused on school"
|
||||
url="https://andyscott.me/projects"
|
||||
/>
|
||||
|
||||
<div class="divider my-0"></div>
|
||||
|
||||
<div>
|
||||
<div class="text-3xl w-full font-bold mb-5 mt-10">All Projects</div>
|
||||
</div>
|
||||
<HorizontalCard
|
||||
title="Advent of Code 2022"
|
||||
img="/project_images/advent_floristry.jpg"
|
||||
desc="My first (very casual) attempt at Advent of Code"
|
||||
url="https://codeberg.org/andyscott/advent-of-code/src/branch/main/2022"
|
||||
url="https://git.andyscott.me/a/advent-of-code/src/branch/main/2022"
|
||||
badge="Happy Holidays"
|
||||
/>
|
||||
<HorizontalCard
|
||||
title="2D Puzzle Solver"
|
||||
img="/project_images/2d_puzzle_solver.jpg"
|
||||
desc="Uses breadth first search (BFS) for graph traversal to solve 2D puzzles in the fewest moves possible"
|
||||
url="https://codeberg.org/andyscott/2D-Puzzle-Solver"
|
||||
url="https://git.andyscott.me/a/2D-Puzzle-Solver"
|
||||
badge="Graphs"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -38,7 +27,7 @@ import HorizontalCard from "../components/HorizontalCard.astro";
|
|||
title="OpenWeather gRPC API"
|
||||
img="/project_images/openweather_grpc_api.jpg"
|
||||
desc="Written in Go, this microservice uses protocol buffers to define a highly performant gRPC API for fetching weather data"
|
||||
url="https://codeberg.org/andyscott/OpenWeather-gRPC-API"
|
||||
url="https://git.andyscott.me/a/OpenWeather-gRPC-API"
|
||||
badge="gRPC"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -46,7 +35,7 @@ import HorizontalCard from "../components/HorizontalCard.astro";
|
|||
title="Hash Maps"
|
||||
img="/project_images/hash_maps.jpg"
|
||||
desc="Two hash map implementations featuring open addressing with quadratic probing and separate chaining to handle collisions"
|
||||
url="https://codeberg.org/andyscott/HashMaps"
|
||||
url="https://git.andyscott.me/a/HashMaps"
|
||||
badge="Data Structures"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -54,7 +43,7 @@ import HorizontalCard from "../components/HorizontalCard.astro";
|
|||
title="Exercise Tracker"
|
||||
img="/project_images/exercise_tracker.jpg"
|
||||
desc="A full-stack MERN app for tracking your exercises."
|
||||
url="https://codeberg.org/andyscott/ExerciseTracker"
|
||||
url="https://git.andyscott.me/a/ExerciseTracker"
|
||||
badge="SPA"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -62,7 +51,7 @@ import HorizontalCard from "../components/HorizontalCard.astro";
|
|||
title="Ship Game"
|
||||
img="/project_images/hash_maps.jpg"
|
||||
desc="A backend for the Battleship-like 'Ship Game'"
|
||||
url="https://codeberg.org/andyscott/ShipGame"
|
||||
url="https://git.andyscott.me/a/ShipGame"
|
||||
badge="Game"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
|
@ -78,13 +67,13 @@ import HorizontalCard from "../components/HorizontalCard.astro";
|
|||
title="Dotfiles"
|
||||
img="/project_images/dotfiles.jpg"
|
||||
desc="Not a project per se, but always a work in progress"
|
||||
url="https://codeberg.org/andyscott/dotfiles"
|
||||
url="https://git.andyscott.me/a/dotfiles"
|
||||
/>
|
||||
<div class="divider my-0"></div>
|
||||
<HorizontalCard
|
||||
title="Password Generator (CLI)"
|
||||
img="/project_images/password_generator_cli.jpg"
|
||||
desc="My first Python project"
|
||||
url="https://codeberg.org/andyscott/password-generator-cli"
|
||||
url="https://git.andyscott.me/a/password-generator-cli"
|
||||
/>
|
||||
</BaseLayout>
|
||||
|
|
|
@ -1,10 +1,18 @@
|
|||
import rss from '@astrojs/rss';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from '../config';
|
||||
import rss from "@astrojs/rss";
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from "../config";
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export const get = () =>
|
||||
rss({
|
||||
export async function get(context) {
|
||||
const blog = await getCollection("blog");
|
||||
return rss({
|
||||
title: SITE_TITLE,
|
||||
description: SITE_DESCRIPTION,
|
||||
site: import.meta.env.SITE,
|
||||
items: import.meta.glob('./blog/**/*.md'),
|
||||
items: blog.map((post) => ({
|
||||
title: post.data.title,
|
||||
pubDate: post.data.pubDate,
|
||||
description: post.data.description,
|
||||
link: `/blog/${post.slug}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [require("@tailwindcss/typography"),require("daisyui")],
|
||||
daisyui: {
|
||||
themes: [
|
||||
'bumblebee', // this will be the default light theme
|
||||
'business'
|
||||
],
|
||||
darkTheme: 'business' // this will be the default dark theme
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
{
|
||||
"extends": "astro/tsconfigs/base"
|
||||
"extends": "astro/tsconfigs/base",
|
||||
"compilerOptions": {
|
||||
"strictNullChecks": true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue