aaaaaa
This commit is contained in:
parent
5f63527955
commit
f51dc7e078
31 changed files with 331 additions and 88 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/public/rss.xsl linguist-vendored
|
33
.github/workflows/houseplants-deploy.yml
vendored
Normal file
33
.github/workflows/houseplants-deploy.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
name: Deploy on Houseplants
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Tailscale
|
||||
uses: tailscale/github-action@v3
|
||||
with:
|
||||
oauth-client-id: ${{secrets.TS_OAUTH_ID}}
|
||||
oauth-secret: ${{secrets.TS_OAUTH_SECRET}}
|
||||
tags: tag:ci
|
||||
use-cache: "true"
|
||||
|
||||
- name: Deploy to Houseplants
|
||||
shell: bash
|
||||
run: |
|
||||
# Add the Tailscale IP of your VPS
|
||||
TAILSCALE_IP="100.64.20.2" # Replace with your VPS Tailscale IP
|
||||
|
||||
# SSH into the VPS and deploy
|
||||
ssh -o StrictHostKeyChecking=no "deploy@${TAILSCALE_IP}" << 'EOF'
|
||||
cd /opt/ivy.rs # Replace with the project directory on the VPS
|
||||
git pull origin main
|
||||
pnpm install # Adjust this if you're using a different build tool
|
||||
pnpm run build
|
||||
EOF
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,5 +1,7 @@
|
|||
# build output
|
||||
dist/
|
||||
redirects.caddyfile
|
||||
robots.caddyfile
|
||||
|
||||
# generated types
|
||||
.astro/
|
||||
|
|
15
Caddyfile
Normal file
15
Caddyfile
Normal file
|
@ -0,0 +1,15 @@
|
|||
# this will only work on my vps.. sorry lol
|
||||
|
||||
http://localhost:9000 {
|
||||
root * ./dist
|
||||
file_server
|
||||
|
||||
handle_errors {
|
||||
@404 {
|
||||
expression {http.error.status_code} == 404
|
||||
}
|
||||
rewrite @404 /404.html
|
||||
file_server
|
||||
}
|
||||
import ./redirects.caddyfile
|
||||
}
|
|
@ -16,7 +16,7 @@ export default defineConfig({
|
|||
],
|
||||
markdown: {
|
||||
shikiConfig: {
|
||||
theme: "gruvbox-dark-hard"
|
||||
theme: "gruvbox-dark-soft"
|
||||
},
|
||||
},
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
"dependencies": {
|
||||
"@astrojs/rss": "^4.0.11",
|
||||
"@tailwindcss/vite": "^4.0.13",
|
||||
"astro": "^5.7.5",
|
||||
"astro": "^5.7.10",
|
||||
"astro-pagefind": "^1.8.3",
|
||||
"ava": "^6.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
|
|
67
pnpm-lock.yaml
generated
67
pnpm-lock.yaml
generated
|
@ -13,13 +13,13 @@ importers:
|
|||
version: 4.0.11
|
||||
'@tailwindcss/vite':
|
||||
specifier: ^4.0.13
|
||||
version: 4.0.13(vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2))
|
||||
version: 4.0.13(vite@6.3.4(jiti@2.4.2)(lightningcss@1.29.2))
|
||||
astro:
|
||||
specifier: ^5.7.5
|
||||
version: 5.7.5(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)
|
||||
specifier: ^5.7.10
|
||||
version: 5.7.10(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)
|
||||
astro-pagefind:
|
||||
specifier: ^1.8.3
|
||||
version: 1.8.3(astro@5.7.5(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2))
|
||||
version: 1.8.3(astro@5.7.10(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2))
|
||||
ava:
|
||||
specifier: ^6.2.0
|
||||
version: 6.2.0(rollup@4.35.0)
|
||||
|
@ -867,8 +867,8 @@ packages:
|
|||
peerDependencies:
|
||||
astro: ^2.0.4 || ^3 || ^4 || ^5
|
||||
|
||||
astro@5.7.5:
|
||||
resolution: {integrity: sha512-c59YuYiXyWWnUMOBlDczrjqKzF0dJQP20EP9vqDggcyKm//tEt9iJHNwoYq4r3UeO9UJCwlGK8FwaGTAwwF3IA==}
|
||||
astro@5.7.10:
|
||||
resolution: {integrity: sha512-9TQcFZqP2w6//JXXUHfw8/5PX7KUx9EkG5O3m+hISuyeUztvjY1q5+p7+C5HiXyg24Zs3KkpieoL5BGRXGCAGA==}
|
||||
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
|
||||
hasBin: true
|
||||
|
||||
|
@ -1249,14 +1249,6 @@ packages:
|
|||
fastq@1.19.1:
|
||||
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
|
||||
|
||||
fdir@6.4.3:
|
||||
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
|
||||
peerDependencies:
|
||||
picomatch: ^3 || ^4
|
||||
peerDependenciesMeta:
|
||||
picomatch:
|
||||
optional: true
|
||||
|
||||
fdir@6.4.4:
|
||||
resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
|
||||
peerDependencies:
|
||||
|
@ -2212,10 +2204,6 @@ packages:
|
|||
tinyexec@0.3.2:
|
||||
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
|
||||
|
||||
tinyglobby@0.2.12:
|
||||
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
||||
tinyglobby@0.2.13:
|
||||
resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
@ -2296,8 +2284,8 @@ packages:
|
|||
unified@11.0.5:
|
||||
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
|
||||
|
||||
unifont@0.2.0:
|
||||
resolution: {integrity: sha512-RoF14/tOhLvDa7R5K6A3PjsfJVFKvadvRpWjfV1ttabUe9704P1ie9z1ABLWEts/8SxrBVePav/XhgeFNltpsw==}
|
||||
unifont@0.4.1:
|
||||
resolution: {integrity: sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==}
|
||||
|
||||
unist-util-find-after@5.0.0:
|
||||
resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
|
||||
|
@ -2397,8 +2385,8 @@ packages:
|
|||
vfile@6.0.3:
|
||||
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
||||
|
||||
vite@6.3.3:
|
||||
resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==}
|
||||
vite@6.3.4:
|
||||
resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==}
|
||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
|
@ -3105,13 +3093,13 @@ snapshots:
|
|||
postcss-selector-parser: 6.0.10
|
||||
tailwindcss: 4.0.13
|
||||
|
||||
'@tailwindcss/vite@4.0.13(vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2))':
|
||||
'@tailwindcss/vite@4.0.13(vite@6.3.4(jiti@2.4.2)(lightningcss@1.29.2))':
|
||||
dependencies:
|
||||
'@tailwindcss/node': 4.0.13
|
||||
'@tailwindcss/oxide': 4.0.13
|
||||
lightningcss: 1.29.2
|
||||
tailwindcss: 4.0.13
|
||||
vite: 6.3.3(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
vite: 6.3.4(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
|
||||
'@types/debug@4.1.12':
|
||||
dependencies:
|
||||
|
@ -3211,14 +3199,14 @@ snapshots:
|
|||
|
||||
arrify@3.0.0: {}
|
||||
|
||||
astro-pagefind@1.8.3(astro@5.7.5(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)):
|
||||
astro-pagefind@1.8.3(astro@5.7.10(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)):
|
||||
dependencies:
|
||||
'@pagefind/default-ui': 1.3.0
|
||||
astro: 5.7.5(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)
|
||||
astro: 5.7.10(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2)
|
||||
pagefind: 1.3.0
|
||||
sirv: 3.0.1
|
||||
|
||||
astro@5.7.5(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2):
|
||||
astro@5.7.10(jiti@2.4.2)(lightningcss@1.29.2)(rollup@4.35.0)(typescript@5.8.2):
|
||||
dependencies:
|
||||
'@astrojs/compiler': 2.11.0
|
||||
'@astrojs/internal-helpers': 0.6.1
|
||||
|
@ -3264,15 +3252,15 @@ snapshots:
|
|||
semver: 7.7.1
|
||||
shiki: 3.3.0
|
||||
tinyexec: 0.3.2
|
||||
tinyglobby: 0.2.12
|
||||
tinyglobby: 0.2.13
|
||||
tsconfck: 3.1.5(typescript@5.8.2)
|
||||
ultrahtml: 1.6.0
|
||||
unifont: 0.2.0
|
||||
unifont: 0.4.1
|
||||
unist-util-visit: 5.0.0
|
||||
unstorage: 1.15.0
|
||||
vfile: 6.0.3
|
||||
vite: 6.3.3(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
vitefu: 1.0.6(vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2))
|
||||
vite: 6.3.4(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
vitefu: 1.0.6(vite@6.3.4(jiti@2.4.2)(lightningcss@1.29.2))
|
||||
xxhash-wasm: 1.1.0
|
||||
yargs-parser: 21.1.1
|
||||
yocto-spinner: 0.2.1
|
||||
|
@ -3704,10 +3692,6 @@ snapshots:
|
|||
dependencies:
|
||||
reusify: 1.1.0
|
||||
|
||||
fdir@6.4.3(picomatch@4.0.2):
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.2
|
||||
|
||||
fdir@6.4.4(picomatch@4.0.2):
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.2
|
||||
|
@ -4927,11 +4911,6 @@ snapshots:
|
|||
|
||||
tinyexec@0.3.2: {}
|
||||
|
||||
tinyglobby@0.2.12:
|
||||
dependencies:
|
||||
fdir: 6.4.3(picomatch@4.0.2)
|
||||
picomatch: 4.0.2
|
||||
|
||||
tinyglobby@0.2.13:
|
||||
dependencies:
|
||||
fdir: 6.4.4(picomatch@4.0.2)
|
||||
|
@ -4997,7 +4976,7 @@ snapshots:
|
|||
trough: 2.2.0
|
||||
vfile: 6.0.3
|
||||
|
||||
unifont@0.2.0:
|
||||
unifont@0.4.1:
|
||||
dependencies:
|
||||
css-tree: 3.1.0
|
||||
ohash: 2.0.11
|
||||
|
@ -5072,7 +5051,7 @@ snapshots:
|
|||
'@types/unist': 3.0.3
|
||||
vfile-message: 4.0.2
|
||||
|
||||
vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2):
|
||||
vite@6.3.4(jiti@2.4.2)(lightningcss@1.29.2):
|
||||
dependencies:
|
||||
esbuild: 0.25.1
|
||||
fdir: 6.4.4(picomatch@4.0.2)
|
||||
|
@ -5085,9 +5064,9 @@ snapshots:
|
|||
jiti: 2.4.2
|
||||
lightningcss: 1.29.2
|
||||
|
||||
vitefu@1.0.6(vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2)):
|
||||
vitefu@1.0.6(vite@6.3.4(jiti@2.4.2)(lightningcss@1.29.2)):
|
||||
optionalDependencies:
|
||||
vite: 6.3.3(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
vite: 6.3.4(jiti@2.4.2)(lightningcss@1.29.2)
|
||||
|
||||
web-namespaces@2.0.1: {}
|
||||
|
||||
|
|
|
@ -15,9 +15,17 @@ import { Content as Bio } from "~/content/bio.md";
|
|||
<Prose>
|
||||
<Bio />
|
||||
</Prose>
|
||||
|
||||
<div class="mt-2 flex gap-2">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Image src={"https://cdn.laker.tech/images/tree.png"} alt={"tree"} width={200} height={300}/>
|
||||
<Image
|
||||
src={"https://cdn.laker.tech/images/tree.png"}
|
||||
alt={"tree"}
|
||||
width={200}
|
||||
height={300}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@ import Box from "~/components/ui/Box.astro";
|
|||
import CollectionList from "~/components/lists/BlogPostList.astro";
|
||||
import StyledLink from "~/components/util/StyledLink.astro";
|
||||
---
|
||||
<Box title="latest blog posts" icon="fa-solid fa-signature" class="w-8">
|
||||
<Box title="latest blog posts" icon="fa-solid fa-signature" class="w-[50%]">
|
||||
<CollectionList limit={3} />
|
||||
<div class="py-1"></div>
|
||||
<StyledLink href="/blog">see more</StyledLink>
|
||||
|
|
|
@ -5,10 +5,17 @@ import { getPublishedAndSortedPosts } from "~/lib/blog";
|
|||
|
||||
interface Props {
|
||||
limit?: number;
|
||||
featured?: boolean;
|
||||
}
|
||||
|
||||
const { limit = 1000, featured = false } = Astro.props;
|
||||
let items = getPublishedAndSortedPosts(await getCollection("blog"));
|
||||
|
||||
// Filter items to only include featured posts if the `featured` prop is true
|
||||
if (featured) {
|
||||
items = items.filter((item) => item.data.featured === true);
|
||||
}
|
||||
|
||||
const { limit } = Astro.props;
|
||||
const items = getPublishedAndSortedPosts(await getCollection("blog"));
|
||||
const limitedItems = limit ? items.slice(0, limit) : items;
|
||||
|
||||
const getPostIcon = (item: { data: { icon?: string } }) => {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
import { getFlavourText } from "~/lib/fun";
|
||||
import Navigation from "./Navigation.astro";
|
||||
import conf from "~/site.config";
|
||||
|
||||
|
@ -12,6 +11,5 @@ let headerurl = "/";
|
|||
<i class="fa-solid fa-star mr-2"></i>
|
||||
<a href={headerurl}>{headertext}</a>
|
||||
</h1>
|
||||
<p class="hidden md:block">{getFlavourText()}</p>
|
||||
<Navigation />
|
||||
</header>
|
||||
|
|
|
@ -38,7 +38,7 @@ const headerLinks = [
|
|||
];
|
||||
---
|
||||
|
||||
<nav class="flex flex-row flex-wrap gap-4 md:flex-nowrap">
|
||||
<nav class="flex flex-row flex-wrap gap-4 md:flex-nowrap text-balance">
|
||||
{
|
||||
headerLinks.map((link) => (
|
||||
<span class="">
|
||||
|
@ -54,4 +54,5 @@ const headerLinks = [
|
|||
</span>
|
||||
))
|
||||
}
|
||||
<a href="/meta/subscribe"><i class="fa-solid fa-rss text-light-or dark:text-dark-or"></i></a>
|
||||
</nav>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
---
|
||||
|
||||
<div
|
||||
class="prose dark:prose-invert prose-p:text-light-tx dark:prose-p:text-dark-tx prose-headings:mt-1 prose-a:decoration-dotted prose-a:text-light-tx dark:prose-a:text-dark-tx prose-a:underline-offset-4 prose-a:decoration-2 prose-a:underline prose-a:decoration-light-pu dark:prose-a:decoration-dark-pu prose-strong:text-light-tx dark:prose-strong:text-dark-tx prose-code:font-mono prose-ul:list-outside"
|
||||
class="prose dark:prose-invert prose-p:text-light-tx dark:prose-p:text-dark-tx prose-headings:mt-1 prose-a:decoration-dotted prose-a:text-light-tx dark:prose-a:text-dark-tx prose-a:underline-offset-4 prose-a:decoration-2 prose-a:underline prose-a:decoration-light-pu dark:prose-a:decoration-dark-pu prose-strong:text-light-tx dark:prose-strong:text-dark-tx prose-code:font-mono prose-ul:list-outside prose-ul:text-light-tx dark:prose-ul:text-dark-tx prose-headings:text-light-tx dark:prose-headings:text-dark-tx"
|
||||
>
|
||||
<slot />
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
import Notif from "../ui/Notif.astro";
|
||||
---
|
||||
|
||||
<Notif level={1} xstyle="sm:block md:hidden">
|
||||
<p>This viewport may be too small.</p>
|
||||
<Notif level={1} xstyle="sm:block md:hidden" heading="This viewport may be too small.">
|
||||
<p>Try ivy.rs on a bigger screen.</p>
|
||||
</Notif>
|
||||
|
|
|
@ -11,6 +11,7 @@ const blog = defineCollection({
|
|||
date: z.date().default(new Date()),
|
||||
tags: z.array(z.string()),
|
||||
draft: z.boolean().default(false),
|
||||
featured: z.boolean().default(false),
|
||||
icon: z.string().optional().default("fa-solid fa-star"),
|
||||
image: z
|
||||
.object({
|
||||
|
|
|
@ -1 +1 @@
|
|||
lol, nothing here yet. [ping me about it](mailto:ivy@sorbet.gay)
|
||||
Hi, I'm Ivy.
|
|
@ -1,5 +1,5 @@
|
|||
I'm a musician, student, part-time software developer and writer.
|
||||
|
||||
I like creating websites (like this one) with [Astro](https://astro.build), and going outside whenever I'm not doing either of those things.
|
||||
|
||||
I go by **ivyrs**, **ivyneedsrest** or previously `lakerjv, lxjv, losangeles` etc.
|
||||
|
||||
I'm currently studying music and performing in a band :3
|
|
@ -6,4 +6,26 @@ okay more specific this time:
|
|||
- Color scheme: [Flexoki](https://stephango.com/flexoki) (it's very pretty)
|
||||
- Deployment: [fly.io](https://fly.io) (likely to be self-hosted as soon as i get GitHub Actions working)
|
||||
|
||||
You can find the source code for this site at [ivyturner/trellis](https://github.com/ivyturner/trellis)
|
||||
You can find the source code for this site at [ivyturner/ivy.rs](https://github.com/ivyturner/ivy.rs)
|
||||
|
||||
### Design
|
||||
|
||||
ivy.rs is styled with [Tailwind CSS](https://tailwindcss.com), because I like how quick it is to make CSS do what I want.
|
||||
|
||||
The colorscheme in use is [Flexoki](https://stephango.com/flexoki), because It's Extremely Pretty.
|
||||
|
||||
The font is Inter, currently served by [Googl]
|
||||
|
||||
### the domains, [ivy], what do they MEAN?
|
||||
|
||||
i chose ivy.rs for three reasons
|
||||
- short, easy to say
|
||||
- i like the rust programming language, even if i am terrible at it
|
||||
- my name is IVY RoSe
|
||||
|
||||
laker.tech is my old personal site domain and redirects here for posterity / so i don't have to update it.
|
||||
|
||||
ivy.rs is bought through [istanco.net](https://istanco.net) as Porkbun doesnt support .rs domains (yet?)
|
||||
All of my other domains are bought through [Porkbun](https://porkbun.com).
|
||||
|
||||
DNS is hosted by [deSEC.io](https://desec.io) and controlled by [DNSControl](https://dnscontrol.org)
|
60
src/data/caddy.json
Normal file
60
src/data/caddy.json
Normal file
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"redirects": { "/now": "/me/now" },
|
||||
"blockedCrawlers": [
|
||||
"AI2Bot",
|
||||
"Ai2Bot-Dolma",
|
||||
"aiHitBot",
|
||||
"Amazonbot",
|
||||
"anthropic-ai",
|
||||
"Applebot",
|
||||
"Applebot-Extended",
|
||||
"Brightbot 1.0",
|
||||
"Bytespider",
|
||||
"CCBot",
|
||||
"ChatGPT-User",
|
||||
"Claude-Web",
|
||||
"ClaudeBot",
|
||||
"cohere-ai",
|
||||
"cohere-training-data-crawler",
|
||||
"Cotoyogi",
|
||||
"Crawlspace",
|
||||
"Diffbot",
|
||||
"DuckAssistBot",
|
||||
"FacebookBot",
|
||||
"Factset_spyderbot",
|
||||
"FirecrawlAgent",
|
||||
"FriendlyCrawler",
|
||||
"Google-Extended",
|
||||
"GoogleOther",
|
||||
"GoogleOther-Image",
|
||||
"GoogleOther-Video",
|
||||
"GPTBot",
|
||||
"iaskspider/2.0",
|
||||
"ICC-Crawler",
|
||||
"ImagesiftBot",
|
||||
"img2dataset",
|
||||
"imgproxy",
|
||||
"ISSCyberRiskCrawler",
|
||||
"Kangaroo Bot",
|
||||
"Meta-ExternalAgent",
|
||||
"Meta-ExternalFetcher",
|
||||
"NovaAct",
|
||||
"OAI-SearchBot",
|
||||
"omgili",
|
||||
"omgilibot",
|
||||
"Operator",
|
||||
"PanguBot",
|
||||
"Perplexity-User",
|
||||
"PerplexityBot",
|
||||
"PetalBot",
|
||||
"Scrapy",
|
||||
"SemrushBot-OCOB",
|
||||
"SemrushBot-SWA",
|
||||
"Sidetrade indexer bot",
|
||||
"TikTokSpider",
|
||||
"Timpibot",
|
||||
"VelenPublicWebCrawler",
|
||||
"Webzio-Extended",
|
||||
"YouBot"
|
||||
]
|
||||
}
|
|
@ -9,18 +9,11 @@ import Notif from "~/components/ui/Notif.astro";
|
|||
const { title, date, description } = Astro.props;
|
||||
---
|
||||
|
||||
<html class="font-inter bg-light-bg text-light-tx dark:bg-dark-bg dark:text-dark-tx">
|
||||
<html class="font-sans bg-light-bg text-light-tx dark:bg-dark-bg dark:text-dark-tx">
|
||||
<Head title={title} date={date} description={description} />
|
||||
<body class="pl-1 md:px-24 sm:pt-2 md:pt-6">
|
||||
<ClientRouter />
|
||||
<SizeWarning />
|
||||
{
|
||||
() => {
|
||||
if (!isProd()) {
|
||||
return <Notif level={1} xstyle="w-fit p-2 mb-2">dev mode, hang tight</Notif>;
|
||||
}
|
||||
}
|
||||
}
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
|
@ -3,6 +3,16 @@ import Layout from "~/layouts/Base.astro";
|
|||
import Header from "~/components/ui/Header.astro";
|
||||
import Strapline from "~/components/ui/Strapline.astro";
|
||||
import Footer from "~/components/ui/Footer.astro";
|
||||
|
||||
interface Props {
|
||||
title: string,
|
||||
description: string,
|
||||
icon?: string,
|
||||
date?: Date,
|
||||
back?: string,
|
||||
backLabel?: string
|
||||
}
|
||||
|
||||
const { title, description, icon, date, back, backLabel } = Astro.props;
|
||||
---
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ export async function GET(context) {
|
|||
const blog = await getCollection('blog');
|
||||
return rss({
|
||||
// `<title>` field in output xml
|
||||
title: conf.site.title,
|
||||
title: `${conf.site.title} blog`,
|
||||
// `<description>` field in output xml
|
||||
description: conf.site.description,
|
||||
// Pull in your project "site" from the endpoint context
|
||||
// https://docs.astro.build/en/reference/api-reference/#site
|
||||
site: context.site,
|
||||
site: context.site + "/blog",
|
||||
stylesheet: "/feed.xsl",
|
||||
// Array of `<item>`s in output xml
|
||||
// See "Generating items" section for examples using content collections and glob imports
|
||||
|
|
|
@ -4,13 +4,17 @@ import BlogPostList from "~/components/lists/BlogPostList.astro";
|
|||
import StyledLink from "~/components/util/StyledLink.astro";
|
||||
---
|
||||
|
||||
<Page
|
||||
title="Blog"
|
||||
description="writing"
|
||||
icon="fa-solid fa-signature"
|
||||
>
|
||||
<Page title="Blog" description="writing" icon="fa-solid fa-signature">
|
||||
<StyledLink href="/blog/tags">See all the tags</StyledLink>
|
||||
<StyledLink href="/blog/feed.xml" icon="fa-solid fa-rss">Subscribe via RSS</StyledLink>
|
||||
<StyledLink
|
||||
href="/blog/feed.xml"
|
||||
icon="fa-solid fa-rss"
|
||||
>
|
||||
Subscribe via RSS
|
||||
</StyledLink>
|
||||
<div class="mb-4"></div>
|
||||
<h3>Featured</h3>
|
||||
<BlogPostList featured={true} />
|
||||
<div class="mb-4"></div>
|
||||
<BlogPostList />
|
||||
</Page>
|
||||
|
|
|
@ -14,5 +14,5 @@ import LatestNotes from "~/components/home/LatestNotes.astro";
|
|||
<LatestBlogPosts />
|
||||
<LatestNotes />
|
||||
</div>
|
||||
<Footer />
|
||||
</Layout>
|
||||
<Footer />
|
||||
|
|
46
src/pages/landing.astro
Normal file
46
src/pages/landing.astro
Normal file
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
import Navigation from "~/components/ui/Navigation.astro";
|
||||
import Base from "~/layouts/Base.astro";
|
||||
import siteConfig from "~/site.config";
|
||||
import Prose from "~/components/ui/Prose.astro";
|
||||
import Image from "astro/components/Image.astro";
|
||||
import { Content as Bio } from "~/content/bio.md";
|
||||
---
|
||||
|
||||
<Base>
|
||||
<div class="flex items-center flex-col">
|
||||
<div
|
||||
class="border-4 border-light-pu dark:border-dark-pu w-fit p-4 rounded-br-3xl rounded-tl-3xl"
|
||||
>
|
||||
<div>
|
||||
<h1 class="font-bold text-3xl text-center">{siteConfig.site.title}</h1>
|
||||
<Navigation />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="mt-4 border-4 border-light-pu dark:border-dark-pu w-fit p-4 rounded-br-3xl rounded-tl-3xl"
|
||||
>
|
||||
<h1
|
||||
class="text-2xl font-bold underline decoration-wavy underline-offset-8 decoration-3 decoration-light-pu dark:decoration-dark-pu mb-6"
|
||||
>
|
||||
Hi! I'm Ivy, welcome to my website!
|
||||
</h1>
|
||||
|
||||
<Prose>
|
||||
<Bio />
|
||||
</Prose>
|
||||
|
||||
<div class="mt-2 flex gap-2"></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Image
|
||||
src={"https://cdn.laker.tech/images/tree.png"}
|
||||
alt={"tree"}
|
||||
width={200}
|
||||
height={300}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Base>
|
|
@ -5,14 +5,12 @@ import others from "~/data/others.json";
|
|||
---
|
||||
|
||||
<Page
|
||||
title="Other people and sites I like"
|
||||
title="Other people and places on the internet that I like"
|
||||
description="also some webrings, wow!"
|
||||
icon="fa-solid fa-users"
|
||||
>
|
||||
<h3>Friends</h3>
|
||||
{others.friends.map((item) => {
|
||||
switch (item.b) {
|
||||
{others.friends.map(() => {
|
||||
|
||||
}
|
||||
})}
|
||||
</Page>
|
||||
|
|
24
src/pages/meta/subscribe/index.astro
Normal file
24
src/pages/meta/subscribe/index.astro
Normal file
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
import Page from "~/layouts/Page.astro";
|
||||
---
|
||||
|
||||
<Page title="Subscribe" description="hit that bell gamers" icon="fa-solid fa-rss">
|
||||
<ul class="fa-ul mb-2">
|
||||
<li class="mb-1">
|
||||
<i class="fa-li fa-solid fa-signature"></i>
|
||||
<b>Blog</b>:
|
||||
<a class="link" href="/blog/feed.xml">RSS</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fa-li fa-solid fa-sticky-note"></i>
|
||||
<b>Notes</b>:
|
||||
<a class="link" href="/notes/feed.xml">RSS</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
I also post most of the stuff here on <a
|
||||
href="https://social.lol/@ivy"
|
||||
class="link">Mastodon</a
|
||||
> & <a href="https://bsky.app/profile/ivy.rs" class="link">Bluesky</a>.
|
||||
</p>
|
||||
</Page>
|
|
@ -34,9 +34,9 @@ function stripHtmlAndAddFootnotes(html) {
|
|||
export async function GET(context) {
|
||||
const blog = await getCollection('notes');
|
||||
return rss({
|
||||
title: conf.site.title,
|
||||
title: `${conf.site.title} notes`,
|
||||
description: conf.site.description,
|
||||
site: context.site,
|
||||
site: context.site + "notes",
|
||||
// stylesheet: "/feed.xsl",
|
||||
items: blog.map((post) => {
|
||||
const contentWithFootnotes = stripHtmlAndAddFootnotes(parser.render(post.body));
|
||||
|
|
|
@ -1,8 +1,24 @@
|
|||
@import url(https://fonts.bunny.net/css?family=ibm-plex-mono:400,700i|ibm-plex-sans:300,300i,400,400i,500,500i,700,700i);
|
||||
@import "tailwindcss";
|
||||
@plugin "@tailwindcss/typography";
|
||||
|
||||
@theme {
|
||||
--font-mono: "IBM Plex Mono", monospace;
|
||||
--font-sans: "IBM Plex Sans", ui-sans-serif,
|
||||
system-ui,
|
||||
sans-serif,
|
||||
"Apple Color Emoji",
|
||||
"Segoe UI Emoji",
|
||||
"Segoe UI Symbol",
|
||||
"Noto Color Emoji";
|
||||
--font-mono: "IBM Plex Mono", ui-monospace,
|
||||
SFMono-Regular,
|
||||
Menlo,
|
||||
Monaco,
|
||||
Consolas,
|
||||
"Liberation Mono",
|
||||
"Courier New",
|
||||
monospace;
|
||||
|
||||
/* Disable default colors to prevent their use; feel free to re-enable as needed. */
|
||||
--color-amber-*: initial;
|
||||
--color-lime-*: initial;
|
||||
|
@ -204,6 +220,7 @@ hr {
|
|||
@apply border-0 h-0.5 my-4 bg-light-pu dark:bg-dark-pu;
|
||||
}
|
||||
|
||||
[aria-current="page"] { /* used for the header thing */
|
||||
[aria-current="page"] {
|
||||
/* used for the header thing */
|
||||
@apply font-bold decoration-light-ma dark:decoration-dark-ma;
|
||||
}
|
25
trellis.sh
Executable file
25
trellis.sh
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
caddy_config="./src/data/caddy.json"
|
||||
|
||||
gen_redirects () {
|
||||
caddyfile="redirects.caddyfile"
|
||||
|
||||
# clean before we append
|
||||
rm -rf $caddyfile;
|
||||
touch $caddyfile;
|
||||
# Append the redirects
|
||||
jq -r '.redirects | to_entries[] | "redir \(.key) \(.value)"' "$caddy_config" >> "$caddyfile";
|
||||
}
|
||||
|
||||
gen_robots () {
|
||||
caddyfile="robots.caddyfile"
|
||||
|
||||
rm -rf $caddyfile;
|
||||
touch $caddyfile;
|
||||
|
||||
jq -r '.blockedCrawlers | to_entries | "respond \(.value) "Access Denied" 403';
|
||||
}
|
||||
|
||||
gen_robots
|
||||
gen_redirects
|
Loading…
Add table
Add a link
Reference in a new issue