Compare commits
164 commits
Author | SHA1 | Date | |
---|---|---|---|
592df7d71d | |||
85a95c3812 | |||
9b0c82834c | |||
b54d89b92b | |||
2de9d62b76 | |||
66f30e0645 | |||
1c5be72e77 | |||
ff45976e1f | |||
d47996b308 | |||
e14e66bcf9 | |||
2bdd0f351b | |||
17cbf928ef | |||
713ee6ef64 | |||
be256fc00e | |||
7c40abc424 | |||
ec39af67d7 | |||
a95fde9df7 | |||
203414e26e | |||
eec691aac0 | |||
83d634817a | |||
de43493c31 | |||
bf50b23910 | |||
fc4d13ed3c | |||
d877b6974a | |||
4b207959be | |||
bf3fcde4c7 | |||
98f86ef576 | |||
0a5d5ca92d | |||
fce732ee41 | |||
7548baa72d | |||
6d3b723e3c | |||
9ba8c0ca48 | |||
95866a046b | |||
48eff602bc | |||
7bca28e484 | |||
f8207b4e07 | |||
ed552c5084 | |||
7cdee5396d | |||
1555212dbd | |||
a7bf919a3d | |||
96bba4677d | |||
d7bb294622 | |||
a60d770461 | |||
1a1f6ea39d | |||
54c676b1bd | |||
1df985e246 | |||
c8c13c8c9e | |||
5dbbf7d550 | |||
865798bf1a | |||
fa7ffbe64a | |||
06eae936fc | |||
b70dce674c | |||
ea8d10f1be | |||
4cb622a7c5 | |||
afa4f5489a | |||
fbcb222a60 | |||
b934ed6296 | |||
|
698b5b8a14 | ||
|
ddc9055800 | ||
cd97fabf9d | |||
7c46749c8b | |||
77b8fd39bd | |||
2f1e668b94 | |||
a2190f3187 | |||
0bcba9da9e | |||
a0c01dc4cc | |||
eb20467cf2 | |||
44096a8802 | |||
252a9652b1 | |||
9b70f945ff | |||
22c295c82e | |||
795ccb7f7a | |||
79e8144fe2 | |||
a25e8c2d07 | |||
ecc6cbd35e | |||
16f233de2e | |||
bb7bcc59a8 | |||
31037308e8 | |||
ab9baf0322 | |||
394306db77 | |||
ce488850ef | |||
59a25e79d6 | |||
ad149cfce5 | |||
06c376ca3f | |||
71797a760f | |||
02a267bfd6 | |||
2826325d8c | |||
2d39184d0a | |||
|
5613e2f2f9 | ||
|
eedba4c364 | ||
3bf39af153 | |||
febd3eacbf | |||
113de9fbf2 | |||
|
4d3a1f5cf3 | ||
|
eb3fb830b8 | ||
|
5153e2deef | ||
|
5a72c0519e | ||
|
46fd39d6a1 | ||
|
b7f702b4b6 | ||
|
0bb8b1c16a | ||
|
c3970dca5b | ||
|
54f1588091 | ||
303658c314 | |||
|
fa9a8c2724 | ||
|
dcd92d0d6a | ||
|
4fe40bed6b | ||
|
6e55b498f8 | ||
|
983ae3ae80 | ||
|
fcf86cefa3 | ||
|
5b9dd52a6d | ||
|
f84e9a2465 | ||
|
5862d78613 | ||
|
c78d23920a | ||
501a3a2062 | |||
|
be7bc85ad1 | ||
|
4053fbad1e | ||
|
68f698aea8 | ||
|
aa7cf4a987 | ||
|
1490a0b269 | ||
|
d5fc90ff78 | ||
|
be848a1d04 | ||
|
e14a8dd894 | ||
|
4cfbebaf35 | ||
|
651c4ef318 | ||
|
42dcc2ec6f | ||
|
1c053c714c | ||
|
599a07e6c0 | ||
|
ed2eafd664 | ||
|
ff8adf421c | ||
|
895fba4138 | ||
|
92992c6142 | ||
|
9c6d49e14f | ||
|
73266c5455 | ||
|
6fc2e356fe | ||
|
6be2479c08 | ||
|
b9f80f9787 | ||
|
16458c6f59 | ||
|
90d6d10292 | ||
|
489ee77341 | ||
|
8439519feb | ||
|
6a99f94759 | ||
|
7721ded376 | ||
|
2683be2626 | ||
|
edbb0381ad | ||
f2d240ebe2 | |||
e88c5452e1 | |||
435319af5e | |||
8cb1515f6d | |||
4f347285bb | |||
e1ee5f3fa5 | |||
121d0898a6 | |||
e75e001368 | |||
23050eea56 | |||
9f5dd40f89 | |||
9319d53bc9 | |||
ebc6168caa | |||
7a030a0a67 | |||
a872096063 | |||
30845e5d63 | |||
62955a7837 | |||
cdf2653993 | |||
2f0eeecb9e | |||
07255c57a0 | |||
84044fbe3d |
7
.cz.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[tool.commitizen]
|
||||||
|
name = "cz_conventional_commits"
|
||||||
|
tag_format = "v$version"
|
||||||
|
version_scheme = "semver"
|
||||||
|
version_provider = "npm"
|
||||||
|
update_changelog_on_bump = true
|
||||||
|
major_version_zero = true
|
1
.env.example
Normal file
|
@ -0,0 +1 @@
|
||||||
|
PUBLIC_REPOURL=https://github.com/BuyMyMojo/aria.coffee/
|
79
.forgejo/workflows/deploy.yaml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
name: Deploy to Web Server
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
# runs-on: WebDeployment
|
||||||
|
runs-on: 3900x
|
||||||
|
container:
|
||||||
|
image: docker.io/node:24-bookworm
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
uses: https://github.com/pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Install Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 24
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
# - uses: https://github.com/denoland/setup-deno@v2
|
||||||
|
# with:
|
||||||
|
# deno-version: vx.x.x
|
||||||
|
# cache: true
|
||||||
|
|
||||||
|
- name: Install SSH key
|
||||||
|
uses: https://github.com/shimataro/ssh-key-action@v2
|
||||||
|
with:
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
name: aria-coffee-deploy # optional
|
||||||
|
known_hosts: ${{ secrets.KNOWN_HOSTS }}
|
||||||
|
if_key_exists: fail
|
||||||
|
|
||||||
|
- run: pnpm install
|
||||||
|
# - run: deno install
|
||||||
|
|
||||||
|
- name: Build website
|
||||||
|
run: pnpm run build-action
|
||||||
|
# run: deno run build-action
|
||||||
|
|
||||||
|
- name: Create folder if not exists
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/aria-coffee-deploy ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "mkdir -p /var/www/Aria/"
|
||||||
|
|
||||||
|
- name: Clear old backup
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/aria-coffee-deploy ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "[ -d "/var/www/Aria/dist-old" ] && rm -r /var/www/Aria/dist-old"
|
||||||
|
|
||||||
|
- name: Backup current install
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/aria-coffee-deploy ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "[ -d "/var/www/Aria/dist" ] && mv /var/www/Aria/dist /var/www/Aria/dist-old"
|
||||||
|
|
||||||
|
- name: Copy over new build-action
|
||||||
|
run: |
|
||||||
|
scp -i ~/.ssh/aria-coffee-deploy -rC ./dist ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }}:/var/www/Aria
|
||||||
|
|
||||||
|
# - name: install rsync
|
||||||
|
# run: |
|
||||||
|
# apt-get update -y && apt-get install rsync -y
|
||||||
|
|
||||||
|
# - name: rsync deployments
|
||||||
|
# run: |
|
||||||
|
# rsync -avzrP -e "ssh -i ~/.ssh/aria-coffee-deploy" ./dist ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }}:/var/www/Aria
|
||||||
|
|
||||||
|
|
||||||
|
- name: Set permissions on the deployed files
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/aria-coffee-deploy ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "chmod -R 755 /var/www/Aria/dist"
|
5
.gitattributes
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.avi filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ogg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
|
@ -7,7 +7,7 @@ name: Deploy Astro site to Pages
|
||||||
on:
|
on:
|
||||||
# Runs on pushes targeting the default branch
|
# Runs on pushes targeting the default branch
|
||||||
push:
|
push:
|
||||||
branches: ["main"]
|
branches: []
|
||||||
|
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
|
@ -2,11 +2,11 @@ name: Docker Image CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "main" ]
|
branches: [ ]
|
||||||
# Publish semver tags as releases.
|
# Publish semver tags as releases.
|
||||||
tags: [ 'v*.*.*' ]
|
tags: [ 'v*.*.*' ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "main" ]
|
branches: [ ]
|
||||||
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
@ -14,6 +14,7 @@ env:
|
||||||
REGISTRY: ghcr.io
|
REGISTRY: ghcr.io
|
||||||
# github.repository as <account>/<repo>
|
# github.repository as <account>/<repo>
|
||||||
IMAGE_NAME: ${{ github.repository }}
|
IMAGE_NAME: ${{ github.repository }}
|
||||||
|
DOCKER_BUILD: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
@ -29,12 +30,6 @@ jobs:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install cosign
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
uses: sigstore/cosign-installer@f3c664df7af409cb4873aa5068053ba9d61a57b6 #v2.6.0
|
|
||||||
with:
|
|
||||||
cosign-release: 'v1.11.0'
|
|
||||||
|
|
||||||
- name: Setup Docker buildx
|
- name: Setup Docker buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
@ -56,17 +51,12 @@ jobs:
|
||||||
id: build-and-push
|
id: build-and-push
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: "{{defaultContext}}:src"
|
# context: "{{defaultContext}}"
|
||||||
push: ${{ github.event_name != 'pull_request' }} # Don't push on PR
|
push: ${{ github.event_name != 'pull_request' }} # Don't push on PR
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
- name: Sign the image with cosign
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
run: |
|
|
||||||
cosign sign --key cosign.key ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:
|
|
||||||
|
|
||||||
# - name: Build the Docker image
|
# - name: Build the Docker image
|
||||||
# run: docker build . --file Dockerfile --tag aria-coffee:$(date +%s)
|
# run: docker build . --file Dockerfile --tag aria-coffee:$(date +%s)
|
6
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: BuyMyMojo
|
||||||
|
ko_fi: buymyaria
|
||||||
|
buy_me_a_coffee: buymymojo
|
||||||
|
thanks_dev: d/gh/buymymojo
|
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
||||||
[submodule "public/static/BACKUPS/SteamReplays"]
|
|
||||||
path = public/static/BACKUPS/SteamReplays
|
|
||||||
url = https://github.com/BuyMyMojo/SteamReplays.git
|
|
68
CHANGELOG.md
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
## v0.2.0 (2025-05-30)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **Aria-Board**: add 4 new imaged to the mood board of motoko kusanagi
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- **old/**: remove old unused version of website
|
||||||
|
|
||||||
|
## v0.1.0 (2025-05-27)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **.cz.toml**: add commitizen config
|
||||||
|
- **FriendLink**: add high variant
|
||||||
|
- **<FriendLink>**: add two lower quality version of FriendLink
|
||||||
|
- Add a portfolio to the website
|
||||||
|
- **friends.astro**: Add tess' buttons
|
||||||
|
- **other buttons.astro**: Add button for eightyeightthirty.one
|
||||||
|
- **other buttons.astro**: Add two additional buttons
|
||||||
|
- **Docker Image**: Add a docker image that uses bun for the server for testing later
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **Docker Image**: output SSR site when in docker
|
||||||
|
- **Docker Image**: output SSR site when in docker
|
||||||
|
- **GH actions**: fix docker build context
|
||||||
|
- **GH actions**: remove cosine from docker action
|
||||||
|
|
||||||
|
### Perf
|
||||||
|
|
||||||
|
- **NavHeader**: reduce background quality a smidge
|
||||||
|
- **index**: move all FriendLinks over to high variant
|
||||||
|
- **index**: try 0x5066's button with FriendLinkLow
|
||||||
|
- **index**: move 0x5066's button to FriendLinkMid for further file size improvements
|
||||||
|
- **index**: Swap 0x5066's button to v2 for smaller file size
|
||||||
|
|
||||||
|
## v0.0.1 (2024-12-20)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **Gh actions**: Auto build and push docker builds to GH registry
|
||||||
|
- :zap: Setup preconnect and dns-prefetch for transing.neocities.org
|
||||||
|
- :sparkles: Move from FontAwesome to astro-icons + iconify
|
||||||
|
- **NavHeader.astro**: use image-set to supply multiple file types for heder background
|
||||||
|
- **NavHeader**: Supply client with avif, webp, jpeg and png options for profile picture
|
||||||
|
- Add SteamReplay backups repo as submodule
|
||||||
|
- **other buttons.astro**: add increment counter
|
||||||
|
- trans the internet a little more
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **aria.css**: :ambulance: Fix comic mono never being served from website
|
||||||
|
- **aria.css**: :ambulance: Fix comic mono never being served from website
|
||||||
|
- **friends.astro**: :bug: move my own button to using `<img />` again over Astro's `<Image />`
|
||||||
|
- **NavHeader.astro**: I had 33x31 instead of 88x31...
|
||||||
|
- repair miyuko's button being stretched for some reason
|
||||||
|
- manually install sharp so the pipeline doesn't get mad
|
||||||
|
- **astro.yml**: specify pnpm in
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- **aria.css**: dont serve Comic Shanns font file
|
||||||
|
- **NavHeader.astro**: :recycle: Increase quality of header images
|
||||||
|
- **NavHeader.astro**: :zap: Optimise size and scale of pfp in header
|
||||||
|
- **NavHeader.astro**: :zap: Optimise the header background image size and resolution
|
||||||
|
- **FriendLink.astro**: Move from <img /> to <Image /> for buttons
|
|
@ -5,6 +5,7 @@ RUN npm install -g pnpm
|
||||||
RUN pnpm install --shamefully-hoist
|
RUN pnpm install --shamefully-hoist
|
||||||
|
|
||||||
|
|
||||||
|
COPY . .
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN apt-get update -y
|
RUN apt-get update -y
|
||||||
|
@ -14,7 +15,7 @@ RUN wget https://github.com/shssoichiro/oxipng/releases/download/v9.1.3/oxipng_9
|
||||||
RUN apt-get install -y ./oxipng_9.1.3-1_amd64.deb
|
RUN apt-get install -y ./oxipng_9.1.3-1_amd64.deb
|
||||||
RUN rm ./oxipng_9.1.3-1_amd64.deb
|
RUN rm ./oxipng_9.1.3-1_amd64.deb
|
||||||
|
|
||||||
RUN pnpm run build
|
RUN PUBLIC_COMMIT="" pnpm run build
|
||||||
|
|
||||||
ENV HOST=0.0.0.0
|
ENV HOST=0.0.0.0
|
||||||
ENV PORT=4321
|
ENV PORT=4321
|
||||||
|
|
24
Dockerfile-bun
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
FROM node:lts AS runtime
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package.json pnpm-lock.yaml ./
|
||||||
|
RUN npm install -g pnpm
|
||||||
|
RUN npm install -g bun
|
||||||
|
|
||||||
|
RUN pnpm install --shamefully-hoist
|
||||||
|
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN apt-get update -y
|
||||||
|
RUN apt-get install -y jpegoptim
|
||||||
|
|
||||||
|
RUN wget https://github.com/shssoichiro/oxipng/releases/download/v9.1.3/oxipng_9.1.3-1_amd64.deb
|
||||||
|
RUN apt-get install -y ./oxipng_9.1.3-1_amd64.deb
|
||||||
|
RUN rm ./oxipng_9.1.3-1_amd64.deb
|
||||||
|
|
||||||
|
RUN pnpm run build
|
||||||
|
|
||||||
|
ENV HOST=0.0.0.0
|
||||||
|
ENV PORT=4321
|
||||||
|
EXPOSE 4321
|
||||||
|
CMD bun ./dist/server/entry.mjs
|
23
README.md
|
@ -1 +1,24 @@
|
||||||
# Wowie what a gay little website for my gay little self
|
# Wowie what a gay little website for my gay little self
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
You must create a `.env` file with the contents of `.env.example` and set the URL of your repo for the commit footer.
|
||||||
|
|
||||||
|
Example URL: `https://github.com/BuyMyMojo/aria.coffee/` - Notice the trailing `/`, this is required
|
||||||
|
|
||||||
|
## Deploy steps (Pre-rendered website)
|
||||||
|
|
||||||
|
On dev machine:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm run build && rm -r ./dist-new && mv ./dist ./dist-new && croc send --zip ./dist-new
|
||||||
|
```
|
||||||
|
|
||||||
|
The `--zip` is required as there is some file name somewhere that croc doesn't like so putting in a zip fixes this.
|
||||||
|
|
||||||
|
on server:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
CROC_SECRET="XXXX-word-word-word" croc
|
||||||
|
rm -r ./dist-old/ && mv ./dist ./dist-old && mv ./dist-new ./dist
|
||||||
|
```
|
||||||
|
|
|
@ -1,17 +1,59 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from "astro/config";
|
||||||
|
import { remarkModifiedTime } from "./remark-modified-time.mjs";
|
||||||
|
|
||||||
import preact from "@astrojs/preact";
|
import preact from "@astrojs/preact";
|
||||||
|
|
||||||
import tailwind from "@astrojs/tailwind";
|
import tailwind from "@astrojs/tailwind";
|
||||||
|
import node from "@astrojs/node";
|
||||||
|
|
||||||
import icon from "astro-icon";
|
import icon from "astro-icon";
|
||||||
|
|
||||||
|
import mdx from "@astrojs/mdx";
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
site: "https://aria.coffee",
|
output: process.env.DOCKER_BUILD ? "server" : "static",
|
||||||
integrations: [preact(), tailwind(), icon()],
|
site: "https://aria.coffee",
|
||||||
image: {
|
integrations: [preact(), tailwind(), icon(), mdx()],
|
||||||
domains: ["buymymojo.net", "aria.coffee", "github.com", "githubusercontent.com", "avatars.githubusercontent.com", "camo.githubusercontent.com", "user-images.githubusercontent.com", "private-user-images.githubusercontent.com"],
|
|
||||||
},
|
image: {
|
||||||
});
|
domains: [
|
||||||
|
"buymymojo.net",
|
||||||
|
"aria.coffee",
|
||||||
|
"github.com",
|
||||||
|
"githubusercontent.com",
|
||||||
|
"avatars.githubusercontent.com",
|
||||||
|
"camo.githubusercontent.com",
|
||||||
|
"user-images.githubusercontent.com",
|
||||||
|
"private-user-images.githubusercontent.com",
|
||||||
|
"alyxia.dev",
|
||||||
|
"nanoshinono.me",
|
||||||
|
"ata.moe",
|
||||||
|
"buh.moe",
|
||||||
|
"hayden.moe",
|
||||||
|
"onz.ee",
|
||||||
|
"notnite.com",
|
||||||
|
"erisdump.neocities.org",
|
||||||
|
"espi.me",
|
||||||
|
"alula.me",
|
||||||
|
"sapphic.moe",
|
||||||
|
"calayucu.com",
|
||||||
|
"meow-d.github.io",
|
||||||
|
"girlthi.ng",
|
||||||
|
"lenooby09.tech",
|
||||||
|
"ackwell.au",
|
||||||
|
"ari.express"
|
||||||
|
],
|
||||||
|
},
|
||||||
|
markdown: {
|
||||||
|
remarkPlugins: [remarkModifiedTime],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Bellow is for when dedicated server is wanted?
|
||||||
|
|
||||||
|
// ,
|
||||||
|
//
|
||||||
|
// adapter: node({
|
||||||
|
// mode: "standalone",
|
||||||
|
// })
|
||||||
|
|
|
@ -1,17 +1,3 @@
|
||||||
#!/bin/bash
|
find ./dist \( -iname "*.jpg" -o -iname "*.jpeg" \) | jpegoptim -p -P --files-stdin -w $(nproc --all)
|
||||||
|
oxipng -o max -a -r ./dist
|
||||||
|
|
||||||
if command -v jpegoptim >/dev/null 2>&1 ; then
|
|
||||||
echo "jpegoptim found"
|
|
||||||
find ./public \( -iname "*.jpg" -o -iname "*.jpeg" \) | jpegoptim -p -P --files-stdin -w $(nproc --all)
|
|
||||||
else
|
|
||||||
echo "jpegoptim was not found! install either with your package manager or get the binary from the github"
|
|
||||||
echo "https://github.com/tjko/jpegoptim/releases/latest"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v oxipng >/dev/null 2>&1 ; then
|
|
||||||
echo "oxipng found"
|
|
||||||
oxipng -o max -a -r ./public
|
|
||||||
else
|
|
||||||
echo "oxipng was not found! install with your package manager, cargo or get the binary from the github"
|
|
||||||
echo "https://github.com/shssoichiro/oxipng/releases/latest"
|
|
||||||
fi
|
|
||||||
|
|
27
flake.lock
generated
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1742669843,
|
||||||
|
"narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1e5b653dff12029333a6546c11e108ede13052eb",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
17
flake.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs }:
|
||||||
|
let
|
||||||
|
pkgs = nixpkgs.legacyPackages."x86_64-linux";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
devShells."x86_64-linux".default = pkgs.callPackage ./shell.nix { inherit pkgs; };
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,25 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link rel="stylesheet" href="src/aria.css" />
|
|
||||||
<title>Aria</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<div style="align-self: end">
|
|
||||||
<a href="https://aria.coffee"
|
|
||||||
><img
|
|
||||||
class="logo"
|
|
||||||
src="img/buttons/aria.gif"
|
|
||||||
style="width: 16em"
|
|
||||||
/></a>
|
|
||||||
<div style="align-self: start">
|
|
||||||
<p>This is a test</p>
|
|
||||||
<p>again</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,32 +0,0 @@
|
||||||
html {
|
|
||||||
font-size: 100%;
|
|
||||||
line-height: 1.5;
|
|
||||||
-ms-text-size-adjust: 100%;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: black;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
background-color: #1f2d39;
|
|
||||||
|
|
||||||
max-width: 756px;
|
|
||||||
|
|
||||||
height: 500px;
|
|
||||||
|
|
||||||
border-radius: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
image-rendering: pixelated;
|
|
||||||
border-radius: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.badge {
|
|
||||||
image-rendering: pixelated;
|
|
||||||
}
|
|
34
package.json
|
@ -1,29 +1,37 @@
|
||||||
{
|
{
|
||||||
"name": "astro",
|
"name": "astro",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.0.1",
|
"version": "0.2.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"build": "astro check && ./compress-images.sh && astro build",
|
"build": "astro check && astro build && ./compress-images.sh",
|
||||||
|
"build-action": "astro build",
|
||||||
"preview": "astro preview",
|
"preview": "astro preview",
|
||||||
"astro": "astro"
|
"astro": "astro"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.4",
|
"@astrojs/check": "^0.9.4",
|
||||||
"@astrojs/preact": "^4.0.0",
|
"@astrojs/mdx": "^4.3.0",
|
||||||
"@astrojs/rss": "^4.0.10",
|
"@astrojs/node": "^9.2.2",
|
||||||
"@astrojs/tailwind": "^5.1.3",
|
"@astrojs/preact": "^4.1.0",
|
||||||
"astro": "^5.1.0",
|
"@astrojs/rss": "^4.0.11",
|
||||||
"astro-icon": "^1.1.4",
|
"@astrojs/tailwind": "^5.1.5",
|
||||||
"preact": "^10.25.2",
|
"astro": "^5.8.1",
|
||||||
|
"astro-icon": "^1.1.5",
|
||||||
|
"dayjs": "^1.11.13",
|
||||||
|
"preact": "^10.26.8",
|
||||||
"sharp": "^0.33.5",
|
"sharp": "^0.33.5",
|
||||||
"tailwindcss": "^3.4.16",
|
"tailwindcss": "^3.4.17",
|
||||||
"typescript": "^5.7.2"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iconify-json/mdi": "^1.2.2",
|
"@iconify-json/cib": "^1.2.2",
|
||||||
|
"@iconify-json/hugeicons": "^1.2.5",
|
||||||
|
"@iconify-json/mdi": "^1.2.3",
|
||||||
"@iconify-json/meteor-icons": "^1.2.1",
|
"@iconify-json/meteor-icons": "^1.2.1",
|
||||||
"@iconify-json/tabler": "^1.2.13",
|
"@iconify-json/tabler": "^1.2.18",
|
||||||
"@tailwindcss/typography": "^0.5.15"
|
"@iconify-json/token": "^1.2.16",
|
||||||
|
"@tailwindcss/typography": "^0.5.16",
|
||||||
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3804
pnpm-lock.yaml
generated
3
pnpm-workspace.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
onlyBuiltDependencies:
|
||||||
|
- esbuild
|
||||||
|
- sharp
|
1
public/jxl.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!function(){"use strict";let e={useCache:!0,imageType:"png"},a,t={};function s(s,i,n,r){let l=s.dataset.jxlSrc;if(i instanceof Blob)c(s,URL.createObjectURL(i),n,r);else if("OffscreenCanvas"in window){let d=new OffscreenCanvas(i.width,i.height);t[l].postMessage({canvas:d,imgData:i,imageType:e.imageType},[d]),t[l].addEventListener("message",t=>{t.data.url&&t.data.blob&&(c(s,t.data.url,n,r),e.useCache&&a&&a.put(l,new Response(t.data.blob)))})}else{let g=document.createElement("canvas");g.width=i.width,g.height=i.height,g.getContext("2d").putImageData(i,0,0),g.toBlob(t=>{c(s,URL.createObjectURL(t),n,r),e.useCache&&a&&a.put(l,new Response(t))},"image/"+e.imageType)}}function c(a,t,s,c){s?a.style.backgroundImage='url("'+t+'")':c?(a.srcset=t,a.type="image/"+e.imageType):a.src=t}async function i(c,i,n){let r=c.dataset.jxlSrc=i?getComputedStyle(c).backgroundImage.slice(5,-2):n?c.srcset:c.currentSrc;if(i||n||(c.srcset="",c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="),e.useCache){try{a=a||await caches.open("jxl")}catch(l){}let d=a&&await a.match(r);if(d){let g=await d.blob();requestAnimationFrame(()=>s(c,g,i,n));return}}let o=await fetch(r),u=await o.arrayBuffer();t[r]=new Worker("https://aria.coffee/jxl_dec.js"),t[r].postMessage({jxlSrc:r,image:u}),t[r].addEventListener("message",e=>e.data.imgData&&requestAnimationFrame(()=>s(c,e.data.imgData,i,n)))}new MutationObserver(e=>e.forEach(e=>e.addedNodes.forEach(e=>{e instanceof HTMLImageElement&&e.src.endsWith(".jxl")?e.onerror=()=>i(e,!1,!1):e instanceof HTMLSourceElement&&e.srcset.endsWith(".jxl")?i(e,!1,!0):e instanceof Element&&getComputedStyle(e).backgroundImage.endsWith('.jxl")')&&i(e,!0,!1)}))).observe(document.documentElement,{subtree:!0,childList:!0})}();
|
2
public/jxl_dec.js
Normal file
BIN
public/jxl_dec.wasm
Normal file
|
@ -1 +0,0 @@
|
||||||
Subproject commit ea17d4eb7c76aa7602daf369f9a2d50ba7142fee
|
|
BIN
public/static/img/88x31/BuhMoe.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
public/static/img/88x31/Button.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
public/static/img/88x31/EndeavourOS-88x31.webp
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
public/static/img/88x31/PWsbutton.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
public/static/img/88x31/brainmade.avif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/static/img/88x31/caddy.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
public/static/img/88x31/eyes.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/static/img/88x31/firefox.gif
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
public/static/img/88x31/handcoded.avif
Normal file
BIN
public/static/img/88x31/jellyfin.gif
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/static/img/88x31/kde.gif
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
public/static/img/88x31/lain.gif
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
public/static/img/88x31/qbittorrent.png
Normal file
After Width: | Height: | Size: 326 B |
BIN
public/static/img/88x31/vscbutton.gif
Normal file
After Width: | Height: | Size: 812 B |
BIN
public/static/img/sites/avatar.avif
Normal file
After Width: | Height: | Size: 1 MiB |
BIN
public/static/img/sites/avatar.jxl
Normal file
BIN
public/static/img/tests/mage-demon-queen-fastflix-0bb2.avif
Normal file
13
public/static/keys/49776EAC872B884B_public.asc
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mDMEaCHi6hYJKwYBBAHaRw8BAQdAUkJKd5594hqQ6PmzlENC4drfNZ6snlgNzOIw
|
||||||
|
c7IHbbC0GEFyaWEgPGhlbGxvQGFyaWEuY29mZmVlPoiTBBMWCgA7FiEEfr0+DH09
|
||||||
|
XH1cqKA/SXdurIcriEsFAmgh4uoCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC
|
||||||
|
F4AACgkQSXdurIcriEvFtgD/b9xp7v1K0Yf7RwfDr586bp08M7t2d6YViLSq3+l+
|
||||||
|
sSQBAIsabbm5pOroeBEKVCWVbu4KHujVxekE6O8h8FMklW4CuDgEaCHi6hIKKwYB
|
||||||
|
BAGXVQEFAQEHQIUP1QGeR6y4ofAg+sWHQsUw4TkSXRe1Nuwg83vJ+twPAwEIB4h4
|
||||||
|
BBgWCgAgFiEEfr0+DH09XH1cqKA/SXdurIcriEsFAmgh4uoCGwwACgkQSXdurIcr
|
||||||
|
iEtkXwEA7iAz732NYxpWFJqzBiD+4j1CMxwFrCslY+4Bsi07Ky0A/RFfz9OIHuSm
|
||||||
|
rvZLEtze+HO+dJDRGTRoHCbjEeVQey0D
|
||||||
|
=LJQZ
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
29
public/static/messages/keys_and_addrs.txt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
|
Hash: SHA512
|
||||||
|
|
||||||
|
Email: hello@aria.coffee
|
||||||
|
Website: aria.coffee
|
||||||
|
Main Git: https://git.aria.coffee/aria
|
||||||
|
Backup Git(GitHub): https://github.com/BuyMyMojo
|
||||||
|
Alt Git: https://git.witchcraft.systems/Aria
|
||||||
|
|
||||||
|
bsky: https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn
|
||||||
|
bsky alt (pds.witchcraft.systems): https://bsky.app/profile/did:plc:valun42etpm73we7bgyh64ge
|
||||||
|
|
||||||
|
PGP fingerprint: 7EBD 3E0C 7D3D 5C7D 5CA8 A03F 4977 6EAC 872B 884B
|
||||||
|
PGP Key: https://aria.coffee/static/keys/49776EAC872B884B_public.asc
|
||||||
|
PGP Keyservers: https://keyserver.ubuntu.com & https://keys.openpgp.org
|
||||||
|
SSH key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBi5QCHIPTT6Uvq2SLxWUKxcN7RgdtrgJxVs2muVUbqe
|
||||||
|
|
||||||
|
Crypto Wallets:
|
||||||
|
XMR: 48NZQ5rYpiNEjNtsWKbyniVY3FpJ9kLVA815cxfSMPF5gvjrBiHH9x5JLr3aBYhvKvENCdhrYgzQ9LhBnR5NoinWDCGBzNm
|
||||||
|
BTC: bc1qeqz2fswpn4hjjy373gyvjgkq63hv7mknwd6cau
|
||||||
|
LTC: LW4tGWNzYQ21eJ8G2LZaLqroYU67nSNwnY
|
||||||
|
ETH/USDC/USDT: 0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iHUEARYKAB0WIQTnt7jSDIdTwHf5sXEZq3qkYrirOwUCaCIXOQAKCRAZq3qkYrir
|
||||||
|
OyZvAQDPFtFOpgFumJBjL5AuwBv2ezxBu//WmQcwMIY6NDReewEAq6i+Q0GOC8FI
|
||||||
|
1lqnI9uxr10FIGSemJ4FbUmve6GrWgE=
|
||||||
|
=J+Ky
|
||||||
|
-----END PGP SIGNATURE-----
|
BIN
public/static/videos/extreme-format-test/TOTK60-web-av1.mp4
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-mpeg2.mp4
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-mpeg4.avi
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-mpeg4.mp4
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-theora.ogg
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-vp9.mp4
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-x264.mp4
Normal file
BIN
public/static/videos/extreme-format-test/TOTK60-web-x265.mp4
Normal file
9
remark-modified-time.mjs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import { execSync } from "node:child_process";
|
||||||
|
|
||||||
|
export function remarkModifiedTime() {
|
||||||
|
return (tree, file) => {
|
||||||
|
const filepath = file.history[0];
|
||||||
|
const result = execSync(`git log -1 --pretty="format:%cI" "${filepath}"`);
|
||||||
|
file.data.astro.frontmatter.lastModified = result.toString();
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,10 +1,16 @@
|
||||||
---
|
---
|
||||||
title: 'The beginning (Again)'
|
title: 'The beginning (Again)'
|
||||||
pubDate: 2024-12-17T00:49:00.000+11
|
pubDate: 2024-12-17T00:49:00.000+11
|
||||||
description: 'This is the first post of my new website.'
|
description: 'This is the first post of my new website. featuring information on why I chose Astro to rewrite it and some extra fun information along the way!'
|
||||||
author: 'Aria'
|
author: 'Aria'
|
||||||
tags: ["blogging", "learning in public", "development"]
|
tags: ["blogging", "learning in public", "development"]
|
||||||
|
draft: false
|
||||||
---
|
---
|
||||||
|
import { Picture, getImage } from "astro:assets";
|
||||||
|
import FriendLink from "../components/FriendLink.astro";
|
||||||
|
|
||||||
|
import orderConfirmedImg from "../img/blog/aira.coffee-cloudflair-alldone.png";
|
||||||
|
import useAFrameworkImg from "../img/blog/UseAFramework_20241217_002719.png";
|
||||||
|
|
||||||
I'll be expanding this as I work on it but for now this is my first more indepth website
|
I'll be expanding this as I work on it but for now this is my first more indepth website
|
||||||
|
|
||||||
|
@ -18,28 +24,51 @@ Recently I joined a community for some very **🏳️⚧️**(mostly, there a
|
||||||
|
|
||||||
We where discussing domain names and this one wasn't owned! I'm addicted to coffee so it seemed like the perfect fit for me~
|
We where discussing domain names and this one wasn't owned! I'm addicted to coffee so it seemed like the perfect fit for me~
|
||||||
|
|
||||||

|
<a href ={orderConfirmedImg.src} target="_blank">
|
||||||
|
<Picture
|
||||||
|
src={orderConfirmedImg}
|
||||||
|
quality={95}
|
||||||
|
densities={[0.75, 1, 2]}
|
||||||
|
formats={['avif', 'webp', 'jpeg']}
|
||||||
|
alt="A picture of the 'Order Confirmed' pafe from cloudflair"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
|
||||||
After purchasing I needed to decide what I wanted to do with it, for a little over a day (Until not long before I started to write this) it just redirected to my [BlueSky](https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn) account.
|
After purchasing I needed to decide what I wanted to do with it, for a little over a day (Until not long before I started to write this) it just redirected to my [BlueSky](https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn) account.
|
||||||
|
|
||||||
I eventually got inspired by both [Alyxia](https://alyxia.dev/) and [Annie's](https://buh.moe/) websites. Finally convinced to make something from scratch I made the website you're looking at now!
|
I eventually got inspired by both [Alyxia](https://alyxia.dev/) and [Alex's](https://buh.moe/) websites. Finally convinced to make something from scratch I made the website you're looking at now!
|
||||||
|
|
||||||
This has been my first time working mostly from scratch to make my personal website, more on that described bellow!
|
This has been my first time working mostly from scratch to make my personal website, more on that described bellow!
|
||||||
|
|
||||||
## The How
|
## The How
|
||||||
|
|
||||||
This website was made using [Astro](https://astro.build/) for the build system and I decided to use [Tailwind](https://tailwindcss.com/) instead of basing my own css off Annie's after she convinced me.
|
This website was made using [Astro](https://astro.build/) for the build system and I decided to use [Tailwind](https://tailwindcss.com/) instead of basing my own css off Alex's after she convinced me.
|
||||||
|
|
||||||

|
<a href ={useAFrameworkImg.src} target="_blank">
|
||||||
|
<Picture
|
||||||
|
src={useAFrameworkImg}
|
||||||
|
quality={95}
|
||||||
|
width={630}
|
||||||
|
densities={[0.75, 1, 2,]}
|
||||||
|
formats={['avif', 'webp', 'jpeg']}
|
||||||
|
alt="A discord screenshot containing the following messages: Sent by @BuyMyMojo: 'getting my brain around css and styling hurts, I'm man handling some of your css @amemoia', Sent by @amemoia: 'DONT LOOK AT MY CSS ITS SO BAD', 'EVERYTHING HAS ITS OWN CLASS', 'USE A FRAMEWORK'"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
|
||||||
While I got started early on following the basic [blog tutorial](https://docs.astro.build/en/tutorial/0-introduction/) but took a break to make my very first 88x31px button!
|
While I got started early on following the basic [blog tutorial](https://docs.astro.build/en/tutorial/0-introduction/) but took a break to make my very first 88x31px button!
|
||||||
|
|
||||||

|
<a href="https://aria.coffee/" target="_blank">
|
||||||
|
<img
|
||||||
|
alt="88x31 pixel button with the text 'Aria' and the top half of a human human face on the right hand side"
|
||||||
|
src="https://aria.coffee/static/img/buttons/aria.gif"
|
||||||
|
style="min-width: 88px; width: 176px; min-height: 31px; height: 62px; image-rendering: pixelated;"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
<sub>This is a version of the image hosted on archive.org so the blog doesn't change</sub>
|
<sub>This is a version of the image hosted on archive.org so the blog doesn't change</sub>
|
||||||
|
|
||||||
I made it pretty quickly in Krita using the lovely picute of me which was drawn by Auryn!
|
I made it pretty quickly in Krita using the lovely picute of me which was drawn by Auryn!
|
||||||
|
|
||||||
88x31 buttons have a history that I wont get into here, you can read more [here](https://tekeye.uk/computer_history/powered-by) and if you'd like to see thhe buttons of my friends then go to the [friends page](/friends)
|
88x31 buttons have a history that I wont get into here, you can read more in <a alt="This article looks back at a couple of popular screen elements in early web pages. The Powered By logo and 88x31 pixel buttons." href="https://tekeye.uk/computer_history/powered-by" target="_blank">this article</a> and if you'd like to see thhe buttons of my friends then go to the [friends page](/friends)
|
||||||
<sub>If you wanna exchange buttons shoot me a message on <a href="https://discord.com/users/383507911160233985" target="_blank">discord!</a></sub>
|
<sub>If you wanna exchange buttons shoot me a message on <a href="https://discord.com/users/383507911160233985" target="_blank">discord!</a></sub>
|
||||||
|
|
||||||
## Final thoughts
|
## Final thoughts
|
93
src/blog/post-2.mdx
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
---
|
||||||
|
title: 'Pre-HRT musing'
|
||||||
|
pubDate: 2025-03-10T14:35:00.000+11
|
||||||
|
description: 'HRT appointment is getting closer and I have some thoughts and want to go over the story'
|
||||||
|
author: 'Aria'
|
||||||
|
tags: ["personal", "HRT", "🏳️⚧️"]
|
||||||
|
draft: false
|
||||||
|
---
|
||||||
|
|
||||||
|
## The story so far
|
||||||
|
|
||||||
|
### In the beginning
|
||||||
|
|
||||||
|
At first I tried to sort this out through a local <abbr title="General Practitioner">GP</abbr> and they where genuinely pretty helpful, this was around this time last year(2024).
|
||||||
|
I first reached out to them over email asking if there was a GP there willing to help me out, I thought this email wasn't tied to me but apparently it was on file..
|
||||||
|
|
||||||
|
It was terrifying when they used my first name in the response, it wasn't good news right away either. No GP in my town had experience with trans related issues and most GPs where booked out so they couldn't fit me in anyway.
|
||||||
|
|
||||||
|
I felt pretty dejected by that *but then* the very next day they emailed me again! The worker who received the email was talking to some of the GPs and one was more than willing to help! he even squeezed me in his extremely packed schedule to help me out.
|
||||||
|
|
||||||
|
I went and talked to him a bit, he got some blood tests ordered for me and I went in for another appointment after getting the results, once again less than stellar news followed.
|
||||||
|
|
||||||
|
I cleared for any issues relating to blood clot risk which was nice, then I found that they weren't comfortable prescribing HRT themselves since they weren't trained in the field (Sad but fair enough!).
|
||||||
|
|
||||||
|
We looked through option for clinics and of course the only one is in the city 4~ hours away and with a *2 freaking year* waiting list.
|
||||||
|
|
||||||
|
whatever, __put me on the list__.
|
||||||
|
|
||||||
|
### The waiting game
|
||||||
|
|
||||||
|
Waiting and waiting and waiting with no word felt terrible.
|
||||||
|
|
||||||
|
While waiting I was shown the <a href="https://www.ttgc.com.au/" target="_blank"><abbr title="The Telehealth Gender Clinic">TTGC</abbr></a>, an all online Telehealth clinic specializing in gender affirming care!
|
||||||
|
|
||||||
|
Sadly they are pretty expensive and not covered by health care. I saved up and a little after christmas 2024 I was able to schedule an appointment, I'll get back to this~
|
||||||
|
|
||||||
|
### Update from the GPs referral
|
||||||
|
|
||||||
|
On the 11th of Feb I got a call from [Monash Health](https://monashhealth.org/services/gender-clinic/), if you check out the website at the time of writing<sub>[archive](https://web.archive.org/web/20250310025317/https://monashhealth.org/services/gender-clinic/)</sub> then you'll see the issue I faced.
|
||||||
|
|
||||||
|
__2+ years of wait time!!__
|
||||||
|
|
||||||
|
I still did have a lovely call with the lady on the phone, I am on the very long wait list for *free* 1 on 1 voice coaching (24 months) which is nice and I'm on a waiting list for again __free__ laser hair removal (only 2-4 months! target areas: arms + face).
|
||||||
|
|
||||||
|
They left me on the waiting list for HRT just in case, no harm done there but encouraged me to try and get a local GP to handle it.
|
||||||
|
|
||||||
|
### Back to the Telehealth appointment
|
||||||
|
|
||||||
|
Okay so the appointment is scheduled for `2PM Friday the 21st of March` which is less than 2 weeks away at time of writing!
|
||||||
|
|
||||||
|
As the actual date gets closer I get more and more impatient, it's finally so close.
|
||||||
|
|
||||||
|
This is an initial video call to do the usual thing of going over what my goals are, discussing how HRT will affect me and stuff, typically they will order blood work but since I got mine done "recently" I'm going to see if that is worth using or if I need to get it done again.
|
||||||
|
|
||||||
|
After this appointment I will send them the paper work and schedule a second appointment. if they approve the treatment (which they most likely will thanks to my previous clean bill of health from the GP) then they will sort out my prescription right there and I can order my HDR treatment.
|
||||||
|
|
||||||
|
Finally once I've started I will need to get a quick 10 minute review appointment with repeat blood work to check on my progress and update dosages every 3 months for the first year and then every 6 - 12 months in subsequent years.
|
||||||
|
|
||||||
|
## The thoughts going around my noggin
|
||||||
|
|
||||||
|
### 🥚🥚🥚
|
||||||
|
|
||||||
|
As the date rappidly draws closer I can feel my brain going over my past and realizing "Wow girl.. you where such an 🥚 this whole time".
|
||||||
|
|
||||||
|
I didn't let myself explore much during high school, thinking my general disgust for my appearance and body was just because of body weight or depression but after going from 120KG+ fo 78KG in a year and being in a much less toxic environment that high school I can really see that those reasons dont fir the bill.
|
||||||
|
|
||||||
|
Thinking about how I try to not look at myself in the mirror when my facial hair grows out or how general masculine traits of myself were off putting to me for such a long time.
|
||||||
|
|
||||||
|
I went through the funny timeline of: Maybe I'm gay? -> Bi? -> okay I'm pan? -> sure okay but along with that I could be a femboy right? they seem cool -> wait... I can just *be* a woman? -> Shit maybe I've been a woman this whole time...
|
||||||
|
|
||||||
|
I've since worn a skirt, tried to feel more feminine, desired to sound feminine, and more. I've let myself explore who I *want to be* not just who *I should be by others' standards*.
|
||||||
|
|
||||||
|
It's freeing.
|
||||||
|
|
||||||
|
### What next?
|
||||||
|
|
||||||
|
I'm so ready to move forward in this journey. I ~im~-patiently await for the appointment and plan for the hardest step yet; coming out to people in meatspace.
|
||||||
|
|
||||||
|
It has been well over a year now since I've been publicly She/Her online with friends and strangers alike but coming out in person is a much larger beast to tackle.
|
||||||
|
|
||||||
|
For context I live in bum-fuck nowhere, Victoria, Australia. I've had the pleasure of listening to my family be generally hostile towards marginalized groups in "jokes" and conversation, when gay marriage was made legal in Australia I was in the room with my <abbr title="Grand Father">pop</abbr> when it was shown on the news and without missing a beat I got to hear him say "Those kinds of people shouldn't exist".
|
||||||
|
|
||||||
|
In a small town where these views are prevalent I run a business, a small phone repair shop that barely scrapes by so the idea of being my true self here is scary.
|
||||||
|
|
||||||
|
It might not be right away but I'll get there, I got some very encouraging words from some close friends of mine and I'll hopefully make some more "local" like minded friends in the TTRPG game store the next town over(46 minute drive).
|
||||||
|
|
||||||
|
## Thanks
|
||||||
|
|
||||||
|
I guess thanks for reading! I doubt anyone has but hey I needed to just get this out of my system. this is such a dry ass post with 0 images or intrigue but at least it helped me resolidify my *need* to live as myself how I want to.
|
||||||
|
|
||||||
|
I'll hopefully share more once HRT is started but we will see how long that takes ;;;
|
||||||
|
|
||||||
|
Take care of yourselves and don't let anyone tell you who you should be, be who you feel comfortable being \<3
|
267
src/blog/post-3.mdx
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
---
|
||||||
|
title: 'My Online Identity and Security'
|
||||||
|
pubDate: 2025-05-13T01:47:00.000+11
|
||||||
|
description: 'Time to get my keys and addresses all sorted'
|
||||||
|
author: 'Aria'
|
||||||
|
tags: ["learning in public", "security", "GPG"]
|
||||||
|
draft: false
|
||||||
|
---
|
||||||
|
import { Picture, getImage } from "astro:assets";
|
||||||
|
import ssh_autofill from "../img/blog/Screenshot_20250513_004022.png";
|
||||||
|
|
||||||
|
## Email
|
||||||
|
|
||||||
|
My past emails, like hello@buymymojo.net, have been shackled to google because I relied on "Login with google" a little too much when I was younger and now I'm stuck with it... at least until I wanna deal with *the horrors* of figuring out what accounts I'll lose access too.
|
||||||
|
|
||||||
|
In the mean time I need a new personal email that actually fits my needs! For this I decided on [purelymail](https://purelymail.com/) as it is just one of the best deals around if you just *need email*, which is what I'm here for.
|
||||||
|
|
||||||
|
My new email is hello@aria.coffee! More on communication standards and stuff bellow!
|
||||||
|
|
||||||
|
## GPG
|
||||||
|
|
||||||
|
So for the longest time I have handled PGP very poorly, my main use case was literally just "I want that pretty verified label on my github commits" which is NOT a good reason!
|
||||||
|
|
||||||
|
I am setting out to fix this and learn why things are done the way they are, my main goals is to have a key I can proudly display on my website and know I did everything properly and have taken proper measures to not lose it.
|
||||||
|
|
||||||
|
First thing first is to generate the key, so one ed25519 generation later and we have it!
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gpg --full-generate-key
|
||||||
|
```
|
||||||
|
|
||||||
|
Next I need to make revoke keys just in case. I will create two keys, one for if the key is compromised and one for if I replace this key in the future.
|
||||||
|
```bash
|
||||||
|
gpg --gen-revoke 49776EAC872B884B > 49776EAC872B884B_revoke_comp.asc
|
||||||
|
# Please select the reason for the revocation:
|
||||||
|
# 0 = No reason specified
|
||||||
|
# 1 = Key has been compromised
|
||||||
|
# 2 = Key is superseded
|
||||||
|
# 3 = Key is no longer used
|
||||||
|
# Q = Cancel
|
||||||
|
# (Probably you want to select 1 here)
|
||||||
|
# Your decision? 1
|
||||||
|
# Enter an optional description; end it with an empty line:
|
||||||
|
# > Please look https://aria.coffee/blog for more details!
|
||||||
|
|
||||||
|
gpg --gen-revoke 49776EAC872B884B > 49776EAC872B884B_revoke_superseded.asc
|
||||||
|
# Please select the reason for the revocation:
|
||||||
|
# 0 = No reason specified
|
||||||
|
# 1 = Key has been compromised
|
||||||
|
# 2 = Key is superseded
|
||||||
|
# 3 = Key is no longer used
|
||||||
|
# Q = Cancel
|
||||||
|
# (Probably you want to select 1 here)
|
||||||
|
# Your decision? 2
|
||||||
|
# Enter an optional description; end it with an empty line:
|
||||||
|
# > Please look https://aria.coffee/blog for more details!
|
||||||
|
```
|
||||||
|
|
||||||
|
Now I need to store these keys securely. I will create a 7z file that is encrypted
|
||||||
|
```bash
|
||||||
|
7z a -mx9 -mmt=off -pPASSWORDHERE 49776EAC872B884B_revoke_keyz.7z 49776EAC872B884B_revoke_comp.asc 49776EAC872B884B_revoke_superseded.asc
|
||||||
|
```
|
||||||
|
|
||||||
|
Since I want to store these files digitally somewhere and 7z [doesn't have redundancy](https://en.wikipedia.org/wiki/7z#Limitations) I will have to create some recovery data myself using [par2cmdline](https://github.com/Parchive/par2cmdline)
|
||||||
|
```bash
|
||||||
|
par2 c -r25 ./49776EAC872B884B_revoke_keyz.7z.par2 ./49776EAC872B884B_revoke_keyz.7z
|
||||||
|
```
|
||||||
|
|
||||||
|
Here I am using `-r25` to specify that I want enough recovery data that 25% of the archive could be corrupt and I still want to get it back, it is over kill and produces files totalling more than the origional archive but total these files are tiny so it is fine for me. This is now what the folder contains:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.par2
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.vol00+01.par2
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.vol01+02.par2
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.vol03+04.par2
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.vol07+08.par2
|
||||||
|
├── 49776EAC872B884B_revoke_keyz.7z.vol15+16.par2
|
||||||
|
└── 49776EAC872B884B_revoke_keyz.7z.vol31+11.par2
|
||||||
|
```
|
||||||
|
|
||||||
|
One encrypted 7z containing the keys and 8 files that hold all the data I need to keep it safe from bitrot.
|
||||||
|
|
||||||
|
just a quick cleanip before I do the same with a backup of my private key
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir pgp_revoke_keys && mv ./*.* ./pgp_revoke_keys/
|
||||||
|
# .
|
||||||
|
# └── pgp_revoke_keys
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.par2
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.vol00+01.par2
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.vol01+02.par2
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.vol03+04.par2
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.vol07+08.par2
|
||||||
|
# ├── 49776EAC872B884B_revoke_keyz.7z.vol15+16.par2
|
||||||
|
# └── 49776EAC872B884B_revoke_keyz.7z.vol31+11.par2
|
||||||
|
```
|
||||||
|
|
||||||
|
now to quickly backup my private and public keys
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Export
|
||||||
|
gpg --export-secret-keys --armor 49776EAC872B884B > 49776EAC872B884B_secret.asc
|
||||||
|
gpg --export --armor 49776EAC872B884B > 49776EAC872B884B_public.asc
|
||||||
|
|
||||||
|
# Encrypt
|
||||||
|
7z a -mx9 -mmt=off -pPASSWORDHERE 49776EAC872B884B_revoke_keyz.7z 49776EAC872B884B_secret.asc
|
||||||
|
|
||||||
|
# Parity
|
||||||
|
par2 c -r25 ./49776EAC872B884B_keys.par2 -- ./49776EAC872B884B_secret.7z 49776EAC872B884B_public.asc
|
||||||
|
# .
|
||||||
|
# ├── 49776EAC872B884B_keys.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol00+01.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol01+02.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol03+04.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol07+08.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol15+16.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol31+32.par2
|
||||||
|
# ├── 49776EAC872B884B_keys.vol63+33.par2
|
||||||
|
# ├── 49776EAC872B884B_public.asc
|
||||||
|
# └── 49776EAC872B884B_secret.7z
|
||||||
|
```
|
||||||
|
|
||||||
|
This time I did parity a little different! we created the same 8 files but now they handle recovery for both `49776EAC872B884B_public.asc` and `49776EAC872B884B_secret.7z` since I plan on keeping those two together!
|
||||||
|
|
||||||
|
Now I have all the backups I need I can upload my keys linked to hello@aria.coffee to key servers!
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gpg --send-keys 49776EAC872B884B # Defaults to https://keyserver.ubuntu.com
|
||||||
|
gpg --keyserver https://keys.openpgp.org --send-keys 49776EAC872B884B
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now find my key on both places by searching hello@aria.coffee!
|
||||||
|
<sub>
|
||||||
|
[ubuntu key server](https://keyserver.ubuntu.com/pks/lookup?search=hello%40aria.coffee&fingerprint=on&op=index)
|
||||||
|
|
||||||
|
[openpgp key server](https://keys.openpgp.org/search?q=hello@aria.coffee)
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
## Passwords & Secure Managment
|
||||||
|
|
||||||
|
I was going to go directly into SSH here but I needed to take care of something else first.
|
||||||
|
|
||||||
|
After talking to [Ari](https://ari.express/) I was convinced to move my password and key managment over to [1password](https://1password.com/).
|
||||||
|
|
||||||
|
After making anew account you are given an "Emergency Kit" PDF which contains the email you signed up with, a secret key generated directly by your device and not their servers for recovering your account and a blank space to enter in your password.
|
||||||
|
|
||||||
|
Before this I used bitwarden so I exported my vault as a CSV file and took the time to clear out some unwanted fluf that I did not need saved... this experince was not very enjoyable, needing to manually tell 1password how to read the bitwarden CSV file isn't fun.
|
||||||
|
|
||||||
|
Now that is over I can get into the real goodies that convinced me to switch, the `1password-cli`!
|
||||||
|
|
||||||
|
Using this cli I can manage my vault from the terminal as you'd expect but I can also use it to handle ssh auth and git commit signing! There are also a ton of [shell plugins](https://developer.1password.com/docs/cli/shell-plugins) to automatically handle auth for different cli tools.
|
||||||
|
|
||||||
|
We will now move onto the next section where I can go more indepth into using 1password
|
||||||
|
|
||||||
|
## SSH
|
||||||
|
|
||||||
|
Now that I have 1password I can quickly generate the ssh key:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
op item create --category ssh --title "hello@aria.coffee"
|
||||||
|
# ID: [REDACTED]
|
||||||
|
# Title: hello@aria.coffee
|
||||||
|
# Vault: Personal ([REDACTED])
|
||||||
|
# Created: now
|
||||||
|
# Updated: now
|
||||||
|
# Favorite: false
|
||||||
|
# Version: 1
|
||||||
|
# Category: SSH_KEY
|
||||||
|
# Fields:
|
||||||
|
# public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBi5QCHIPTT6Uvq2SLxWUKxcN7RgdtrgJxVs2muVUbqe
|
||||||
|
# fingerprint: SHA256:WqtcVnDMrv1lnUlNah5k31iywFUI/DV+5yHzCTO4Vds
|
||||||
|
# private key: [use 'op item get [REDACTED] --reveal' to reveal]
|
||||||
|
# key type: ed25519
|
||||||
|
```
|
||||||
|
|
||||||
|
this quickly generated an ssh key with the public key `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBi5QCHIPTT6Uvq2SLxWUKxcN7RgdtrgJxVs2muVUbqe` and saves it to my vault.
|
||||||
|
|
||||||
|
once the kay I need to add a simple section to my ssh config:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
Host *
|
||||||
|
IdentityAgent ~/.1password/agent.sock
|
||||||
|
```
|
||||||
|
|
||||||
|
from here I just need to add the public key to clients and git hosts and we're gaming, auth is even handles by 1password which can get set to use the same login flow as your system so if you have a finger print scanner setup you could use that for your ssh connections.
|
||||||
|
|
||||||
|
while adding my key to https://git.aria.coffee and https://git.witchcraft.systems I noticed something very cool, 1password has autofill support for Forgejo and github!
|
||||||
|
|
||||||
|
<a href ={ssh_autofill.src} target="_blank">
|
||||||
|
<Picture
|
||||||
|
src={ssh_autofill}
|
||||||
|
quality={95}
|
||||||
|
densities={[0.75, 1, 2]}
|
||||||
|
formats={['avif', 'webp']}
|
||||||
|
fallbackFormat="jpeg"
|
||||||
|
alt="A picture of the 'Order Confirmed' pafe from cloudflair"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
finally after [editing my gitconfig](https://developer.1password.com/docs/ssh/git-commit-signing/#step-1-configure-git-commit-signing-with-ssh) all my commits are now signed with the same ssh key!
|
||||||
|
|
||||||
|
## AGE
|
||||||
|
|
||||||
|
For encrypted messaging and files I prefer to use [age](https://github.com/FiloSottile/age)! This tool can take in ssh keys as the identity for encryption so I have setup some fish aliases to to the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
op read "op://Personal/[REDACTED]/public key" | age --encrypt --armor -R - input.txt # the fish alias would end at the - so I can both pass in my own files and add recipients
|
||||||
|
op read "op://Personal/[REDACTED]/private key?ssh-format=openssh" | age -d -i - input.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
This uses 1password to fetch the correct key for encryption and decryption, making sure I can always decrypt my own files if needed.
|
||||||
|
|
||||||
|
## Crypto
|
||||||
|
|
||||||
|
Thanks to me being trans in rurual middle of nowhere I have been ordering my [HRT online](https://www.youtube.com/watch?v=o2Ggwe2j0Gc) and the most cost effective method to do so is crypto.
|
||||||
|
|
||||||
|
For holding onto my coin I chose to go with [Exodus](https://www.exodus.com/), Ari reccomended it when I brought up this topic with a group chat and it was a wallet I had already heard of before.
|
||||||
|
|
||||||
|
I decided to go with XMR, BTC, LTC and ETH wallets, not that I have funding in them all but they seem like solid contenders to just *have*.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
XMR: 48NZQ5rYpiNEjNtsWKbyniVY3FpJ9kLVA815cxfSMPF5gvjrBiHH9x5JLr3aBYhvKvENCdhrYgzQ9LhBnR5NoinWDCGBzNm
|
||||||
|
BTC: bc1qeqz2fswpn4hjjy373gyvjgkq63hv7mknwd6cau
|
||||||
|
LTC: LW4tGWNzYQ21eJ8G2LZaLqroYU67nSNwnY
|
||||||
|
ETH/USDC/USDT: 0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58
|
||||||
|
```
|
||||||
|
|
||||||
|
## Finale
|
||||||
|
|
||||||
|
Here are the addresses & keys I have settled on, signed with the mentioned GPG key.
|
||||||
|
|
||||||
|
[here](/static/messages/keys_and_addrs.txt) is the origional signed file if you want it~
|
||||||
|
|
||||||
|
```md
|
||||||
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
|
Hash: SHA512
|
||||||
|
|
||||||
|
Email: hello@aria.coffee
|
||||||
|
Website: aria.coffee
|
||||||
|
Main Git: https://git.aria.coffee/aria
|
||||||
|
Backup Git(GitHub): https://github.com/BuyMyMojo
|
||||||
|
Alt Git: https://git.witchcraft.systems/Aria
|
||||||
|
|
||||||
|
bsky: https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn
|
||||||
|
bsky alt (pds.witchcraft.systems): https://bsky.app/profile/did:plc:valun42etpm73we7bgyh64ge
|
||||||
|
|
||||||
|
PGP fingerprint: 7EBD 3E0C 7D3D 5C7D 5CA8 A03F 4977 6EAC 872B 884B
|
||||||
|
PGP Key: https://aria.coffee/static/keys/49776EAC872B884B_public.asc
|
||||||
|
PGP Keyservers: https://keyserver.ubuntu.com & https://keys.openpgp.org
|
||||||
|
SSH key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBi5QCHIPTT6Uvq2SLxWUKxcN7RgdtrgJxVs2muVUbqe
|
||||||
|
|
||||||
|
Crypto Wallets:
|
||||||
|
XMR: 48NZQ5rYpiNEjNtsWKbyniVY3FpJ9kLVA815cxfSMPF5gvjrBiHH9x5JLr3aBYhvKvENCdhrYgzQ9LhBnR5NoinWDCGBzNm
|
||||||
|
BTC: bc1qeqz2fswpn4hjjy373gyvjgkq63hv7mknwd6cau
|
||||||
|
LTC: LW4tGWNzYQ21eJ8G2LZaLqroYU67nSNwnY
|
||||||
|
ETH/USDC/USDT: 0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iHUEARYKAB0WIQTnt7jSDIdTwHf5sXEZq3qkYrirOwUCaCIXOQAKCRAZq3qkYrir
|
||||||
|
OyZvAQDPFtFOpgFumJBjL5AuwBv2ezxBu//WmQcwMIY6NDReewEAq6i+Q0GOC8FI
|
||||||
|
1lqnI9uxr10FIGSemJ4FbUmve6GrWgE=
|
||||||
|
=J+Ky
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
|
```
|
27
src/blog/post-4.mdx
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
title: 'Storage & backup of my security'
|
||||||
|
pubDate: 2025-05-21T01:47:00.000+11
|
||||||
|
description: 'Where do you even keep all these?!'
|
||||||
|
author: 'Aria'
|
||||||
|
tags: ["learning in public", "security", "GPG", "storage", "backups"]
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
import { Picture, getImage } from "astro:assets";
|
||||||
|
|
||||||
|
## Why backup?
|
||||||
|
|
||||||
|
This probably doesn't need an explanation for anyone reading this but backups are important!
|
||||||
|
|
||||||
|
When you're online accounts rely on just a few files or physical devices for access making sure you have securely stored backups is essential to not loose access to those accounts.
|
||||||
|
|
||||||
|
## What did I need to backup?
|
||||||
|
|
||||||
|
I'll expand on some more of the security stuff I have setup from the last post here too.
|
||||||
|
|
||||||
|
- SSH key(s)
|
||||||
|
- PGP Key(s)
|
||||||
|
- 2FA codes
|
||||||
|
- Security Keys ([Yubikey](https://www.yubico.com/au/product/yubikey-5-series/yubikey-5-nfc/))
|
||||||
|
- 1password Emergency Kit
|
||||||
|
- Account 2FA backups codes (For example discord provides codes to recover your account if you cannot access your codes)
|
||||||
|
- Exodus wallet backup keys
|
89
src/components/Donations.astro
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
---
|
||||||
|
const kofi = "https://ko-fi.com/buymyaria";
|
||||||
|
const buymeacoffee = "https://buymeacoffee.com/buymymojo";
|
||||||
|
|
||||||
|
|
||||||
|
import Partition from "../components/Partition.astro";
|
||||||
|
|
||||||
|
import { Icon } from "astro-icon/components";
|
||||||
|
---
|
||||||
|
|
||||||
|
<Partition>
|
||||||
|
<h1>Feel free to fund me at these places:</h1>
|
||||||
|
<ul class="list-disc p-4 whitespace-nowrap">
|
||||||
|
<li>
|
||||||
|
<a href={kofi} class="p-1" target="_blank"
|
||||||
|
><Icon name="hugeicons:ko-fi" class={"svg-inline"} /> Ko-Fi</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href={buymeacoffee} class="p-1" target="_blank"
|
||||||
|
><Icon name="cib:buy-me-a-coffee" class={"svg-inline"} /> Buy Me a Coffee</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:xmr" class={"svg-inline"} /> XMR: <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="95"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>48NZQ5rYpiNEjNtsWKbyniVY3FpJ9kLVA815cxfSMPF5gvjrBiHH9x5JLr3aBYhvKvENCdhrYgzQ9LhBnR5NoinWDCGBzNm</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:btc" class={"svg-inline"} /> BTC: <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="42"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>bc1qeqz2fswpn4hjjy373gyvjgkq63hv7mknwd6cau</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:ltc" class={"svg-inline"} /> LTC: <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="34"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>LW4tGWNzYQ21eJ8G2LZaLqroYU67nSNwnY</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:eth" class={"svg-inline"} /> ETH: <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="42"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:usdc" class={"svg-inline"} /> USDC(ETH): <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="42"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Icon name="token:usdt" class={"svg-inline"} /> USDT(ETH): <textarea
|
||||||
|
onclick="this.select()"
|
||||||
|
readonly
|
||||||
|
cols="42"
|
||||||
|
rows="1"
|
||||||
|
class="rounded backdrop-brightness-0"
|
||||||
|
style="background-color: var(--third-colour); resize: none;"
|
||||||
|
>0xDd947270bCE2bBB3a3E3eCc4eA5095c14aa9ec58</textarea
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</Partition>
|
|
@ -1,9 +1,8 @@
|
||||||
---
|
---
|
||||||
const description = "Just my little website do be gay and do crime on~";
|
|
||||||
const embedImage = "https://aria.coffee/static/img/sites/avatar.png";
|
const embedImage = "https://aria.coffee/static/img/sites/avatar.png";
|
||||||
const embedColour = "#380A84";
|
const embedColour = "#380A84";
|
||||||
|
|
||||||
const { pageTitle } = Astro.props;
|
const { pageTitle, description } = Astro.props;
|
||||||
---
|
---
|
||||||
<meta content={pageTitle} property="og:title" />
|
<meta content={pageTitle} property="og:title" />
|
||||||
<meta content={description} property="og:description" />
|
<meta content={description} property="og:description" />
|
||||||
|
|
|
@ -2,17 +2,42 @@
|
||||||
const buttonFormat = "gif";
|
const buttonFormat = "gif";
|
||||||
|
|
||||||
import { Icon } from "astro-icon/components";
|
import { Icon } from "astro-icon/components";
|
||||||
|
import { execSync } from "node:child_process";
|
||||||
|
|
||||||
|
const commitURL = `https://git.aria.coffee/aria/aria.coffee/commit/${execSync(`git log -1 --pretty="format:%H"`)}`;
|
||||||
|
const COMMIT = `<a href=${commitURL} target="_blank">${execSync(`git log -1 --pretty="format:%h"`)}</a>`;
|
||||||
---
|
---
|
||||||
|
|
||||||
<hr class="h-1" style="" />
|
<hr class="h-1" style="" />
|
||||||
<footer class="flexcol">
|
<footer class="flexcol">
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<p>
|
<p class="text-center">
|
||||||
<a href="https://github.com/BuyMyMojo/aria.coffee" target="_blank"
|
| <a
|
||||||
><Icon name="mdi:source-branch" class={"svg-inline"}/> Source Code</a
|
href="https://github.com/BuyMyMojo/aria.coffee"
|
||||||
> | <a href="https://aria.coffee/rss.xml" target="_blank"
|
target="_blank"
|
||||||
><Icon name="mdi:rss" class={"svg-inline"}/> RSS Feed</a
|
|
||||||
>
|
>
|
||||||
|
<Icon name="mdi:source-branch" class={"svg-inline"} />Source</a
|
||||||
|
> - Commit:<Fragment set:html={COMMIT} /> | <a
|
||||||
|
href="https://aria.coffee/rss.xml"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
<Icon name="mdi:rss" class={"svg-inline"} />RSS Feed</a
|
||||||
|
> | <span class="tooltip"
|
||||||
|
><a href="/special_blog">
|
||||||
|
<Icon name="mdi:rss" class={"svg-inline"} />blog for robots!</a
|
||||||
|
>
|
||||||
|
<span class="tooltiptext"><nobr>AI Honeypot~</nobr></span></span
|
||||||
|
> | <a
|
||||||
|
href="https://git.aria.coffee/aria/aria.coffee/actions?workflow=deploy.yaml"
|
||||||
|
target="_blank"
|
||||||
|
><img
|
||||||
|
src="https://git.aria.coffee/aria/aria.coffee/badges/workflows/deploy.yaml/badge.svg"
|
||||||
|
width="130px"
|
||||||
|
height="23"
|
||||||
|
style="display: inline-block;"
|
||||||
|
/></a
|
||||||
|
> |
|
||||||
|
<br />
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
|
@ -24,6 +49,10 @@ import { Icon } from "astro-icon/components";
|
||||||
/>
|
/>
|
||||||
<script is:inline defer src="https://transring.neocities.org/ring.js"
|
<script is:inline defer src="https://transring.neocities.org/ring.js"
|
||||||
></script>
|
></script>
|
||||||
|
<div id="wcb" class="carbonbadge wcb-d"></div>
|
||||||
|
<script
|
||||||
|
src="https://unpkg.com/website-carbon-badges@1.1.3/b.min.js"
|
||||||
|
defer></script>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
<style is:global>
|
<style is:global>
|
||||||
|
@ -35,4 +64,4 @@ import { Icon } from "astro-icon/components";
|
||||||
height: 1em;
|
height: 1em;
|
||||||
vertical-align: -0.125em;
|
vertical-align: -0.125em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
---
|
---
|
||||||
import { Image } from "astro:assets";
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
const { name, image, target } = Astro.props;
|
const { name, image, target } = Astro.props;
|
||||||
---
|
---
|
||||||
<a href={`${target}`} target="_blank"><Image src={image} width={88} height={31} alt={`${name}`} /></a>
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="max" decoding="async" loading="lazy" formats={['avif', 'webp']} /></a>
|
||||||
<style>
|
<style>
|
||||||
img {
|
img {
|
||||||
image-rendering: pixelated;
|
image-rendering: pixelated;
|
||||||
width: 88px;
|
min-width: 88px;
|
||||||
height: 31px;
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
16
src/components/FriendLinkHigh.astro
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
|
const { name, image, target } = Astro.props;
|
||||||
|
---
|
||||||
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="high" decoding="async" loading="lazy" formats={['avif', 'webp']} /></a>
|
||||||
|
<style>
|
||||||
|
img {
|
||||||
|
image-rendering: pixelated;
|
||||||
|
min-width: 88px;
|
||||||
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
16
src/components/FriendLinkLow.astro
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
|
const { name, image, target } = Astro.props;
|
||||||
|
---
|
||||||
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="low" decoding="async" loading="lazy" formats={['avif', 'webp']} /></a>
|
||||||
|
<style>
|
||||||
|
img {
|
||||||
|
image-rendering: pixelated;
|
||||||
|
min-width: 88px;
|
||||||
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
16
src/components/FriendLinkLowAnimated.astro
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
|
const { name, image, target } = Astro.props;
|
||||||
|
---
|
||||||
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="low" decoding="async" loading="lazy" formats={['webp']} /></a>
|
||||||
|
<style>
|
||||||
|
img {
|
||||||
|
image-rendering: pixelated;
|
||||||
|
min-width: 88px;
|
||||||
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
16
src/components/FriendLinkMid.astro
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
|
const { name, image, target } = Astro.props;
|
||||||
|
---
|
||||||
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="mid" decoding="async" loading="lazy" formats={['avif', 'webp']} /></a>
|
||||||
|
<style>
|
||||||
|
img {
|
||||||
|
image-rendering: pixelated;
|
||||||
|
min-width: 88px;
|
||||||
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
16
src/components/FriendLinkMidAnimated.astro
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
import { Image, Picture } from "astro:assets";
|
||||||
|
|
||||||
|
const { name, image, target } = Astro.props;
|
||||||
|
---
|
||||||
|
<a href={`${target}`} target="_blank"><Picture src={image} width={88} height={31} alt={`${name}`} class="flex" quality="mid" decoding="async" loading="lazy" formats={['webp']} /></a>
|
||||||
|
<style>
|
||||||
|
img {
|
||||||
|
image-rendering: pixelated;
|
||||||
|
min-width: 88px;
|
||||||
|
width: 176px;
|
||||||
|
min-height: 31px;
|
||||||
|
height: 62px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -8,10 +8,11 @@ export default function Greeting({ messages }) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<h3>{greeting}! Thank you for visiting!</h3>
|
<h2>{greeting}! Thank you for visiting!</h2>
|
||||||
<button
|
<button
|
||||||
class="greetButton px-2 rounded-xl"
|
class="greetButton px-2 rounded-xl"
|
||||||
onClick={() => setGreeting(randomMessage())}
|
onClick={() => setGreeting(randomMessage())}
|
||||||
|
type="submit"
|
||||||
>
|
>
|
||||||
New Greeting
|
New Greeting
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -8,32 +8,27 @@ import myBackground from "../img/sites/avatar-ht-f.png";
|
||||||
const optimizedBackground = await getImage({
|
const optimizedBackground = await getImage({
|
||||||
src: myBackground,
|
src: myBackground,
|
||||||
format: "avif",
|
format: "avif",
|
||||||
quality: 50,
|
quality: 45,
|
||||||
width: 680,
|
width: 512,
|
||||||
});
|
});
|
||||||
const optimizedBackgroundLQ = await getImage({
|
const optimizedBackgroundLQ = await getImage({
|
||||||
src: myBackground,
|
src: myBackground,
|
||||||
format: "jpeg",
|
format: "webp",
|
||||||
quality: 60,
|
quality: 45,
|
||||||
width: 680,
|
width: 512,
|
||||||
});
|
});
|
||||||
---
|
---
|
||||||
<style is:inline>
|
|
||||||
image-set(
|
|
||||||
url("image1.avif") type("image/avif"),
|
|
||||||
url("image2.jpg") type("image/jpeg")
|
|
||||||
);
|
|
||||||
</style>
|
|
||||||
<div
|
<div
|
||||||
style={`width: 670px; border: 1px solid var(--border); background-image: image-set(url('${optimizedBackground.src}') type("image/avif"), url('/static/img/sites/avatar-ht-f.webp') type("image/webp"), url('${optimizedBackgroundLQ.src}') type("image/jpeg"));`}
|
style={`border: 1px solid var(--border); background-image: image-set(url('${optimizedBackground.src}') type("image/avif"), url('/static/img/sites/avatar-ht-f.webp') type("image/webp"), url('${optimizedBackgroundLQ.src}') type("image/jpeg"));`}
|
||||||
class="rounded-2xl flex flex-col shadow-xl shadow-black py-8 mb-8 items-center bg-center bg-cover"
|
class="rounded-2xl flex flex-col shadow-xl shadow-black py-8 mb-8 items-center bg-center bg-cover"
|
||||||
>
|
>
|
||||||
<Picture
|
<Picture
|
||||||
src={pfp}
|
src={pfp}
|
||||||
class="size-40 rounded-full shadow shadow-black m-4"
|
class="size-40 rounded-full shadow shadow-black m-4"
|
||||||
width={320}
|
width={192}
|
||||||
height={320}
|
height={192}
|
||||||
quality={70}
|
quality={65}
|
||||||
|
densities={[1, 1.25, 1.5, 1.75, 2, 3, 4]}
|
||||||
formats={['avif', 'webp', 'jpeg']}
|
formats={['avif', 'webp', 'jpeg']}
|
||||||
alt="Arias's profile picture"
|
alt="Arias's profile picture"
|
||||||
/>
|
/>
|
||||||
|
@ -45,10 +40,13 @@ const optimizedBackgroundLQ = await getImage({
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Partition>
|
<Partition>
|
||||||
<a href="/" class="nav-btn">Home</a> |
|
<p class="text-center">
|
||||||
|
| <a href="/" class="nav-btn">Home</a> |
|
||||||
<a href="/blog" class="nav-btn">Blog</a> |
|
<a href="/blog" class="nav-btn">Blog</a> |
|
||||||
<a href="/about" class="nav-btn">About</a> |
|
<a href="/about" class="nav-btn">About</a> |
|
||||||
<a href="/tags" class="nav-btn">Tags</a> |
|
<!-- <a href="/friends" class="nav-btn">Friends</a> | -->
|
||||||
<a href="/friends" class="nav-btn">Friends</a> |
|
<a href="/directory" class="nav-btn">Other Pages</a> |
|
||||||
<a href="/other buttons" class="nav-btn">Moar 88x31</a>
|
<a href="/portfolio" class="nav-btn">Portfolio</a> |
|
||||||
|
<a href="/pay-me" class="nav-btn">Donate</a> |
|
||||||
|
</p>
|
||||||
</Partition>
|
</Partition>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="rounded-xl flex-row p-4 mb-4 shadow"
|
class="rounded-xl flex-row p-4 mb-4 shadow"
|
||||||
style="width: 670px; border: 1px solid var(--border); background-color: var(--third-colour);"
|
style="border: 1px solid var(--border); background-color: var(--third-colour);"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
|
12
src/components/PortfolioProject.astro
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
import Partition from "./Partition.astro";
|
||||||
|
|
||||||
|
const { name, date, tags, link } = Astro.props;
|
||||||
|
---
|
||||||
|
<Partition>
|
||||||
|
<h2><a class="nav-btn text-2xl" href={link} target="_blank">{name}</a></h2>
|
||||||
|
<p>Date: {date}</p>
|
||||||
|
<p>Tags: <sub>{tags}</sub></p>
|
||||||
|
<hr/>
|
||||||
|
<p><slot /></p>
|
||||||
|
</Partition>
|
|
@ -4,6 +4,7 @@ const discord = "https://discord.com/users/383507911160233985";
|
||||||
const github = "https://github.com/BuyMyMojo";
|
const github = "https://github.com/BuyMyMojo";
|
||||||
const steam = "https://steamcommunity.com/profiles/76561198227003516";
|
const steam = "https://steamcommunity.com/profiles/76561198227003516";
|
||||||
const bsky = "https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn";
|
const bsky = "https://bsky.app/profile/did:plc:bzrn33tcfgjxnsanvg6py3xn";
|
||||||
|
const bskybackup = "https://bsky.app/profile/did:plc:valun42etpm73we7bgyh64ge";
|
||||||
const bskyArchive = "https://buymymojo.net/bsky/";
|
const bskyArchive = "https://buymymojo.net/bsky/";
|
||||||
|
|
||||||
import { Icon } from "astro-icon/components";
|
import { Icon } from "astro-icon/components";
|
||||||
|
@ -15,7 +16,14 @@ import { Icon } from "astro-icon/components";
|
||||||
<a href={bsky} class="p-1" target="_blank"
|
<a href={bsky} class="p-1" target="_blank"
|
||||||
><Icon name="meteor-icons:bluesky" class={"svg-inline"} /> Bluesky</a
|
><Icon name="meteor-icons:bluesky" class={"svg-inline"} /> Bluesky</a
|
||||||
> - <button id="bskypid"
|
> - <button id="bskypid"
|
||||||
>@femgo.buymymojo.net (Click to copy DID)</button
|
>@aria.coffee (Click to copy DID)</button
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href={bskybackup} class="p-1" target="_blank"
|
||||||
|
><Icon name="meteor-icons:bluesky" class={"svg-inline"} /> Bluesky Backup</a
|
||||||
|
> - <button id="bskypid-backup"
|
||||||
|
>@aria.pds.witchcraft.systems (Click to copy DID)</button
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -51,10 +59,17 @@ import { Icon } from "astro-icon/components";
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const bskypid = document.querySelector("#bskypid");
|
const bskypid = document.querySelector("#bskypid");
|
||||||
|
const bskypidbackup = document.querySelector("#bskypid-backup");
|
||||||
|
|
||||||
if (bskypid != null) {
|
if (bskypid != null) {
|
||||||
bskypid.addEventListener("click", () => {
|
bskypid.addEventListener("click", () => {
|
||||||
navigator.clipboard.writeText("did:plc:bzrn33tcfgjxnsanvg6py3xn");
|
navigator.clipboard.writeText("did:plc:bzrn33tcfgjxnsanvg6py3xn");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bskypidbackup != null) {
|
||||||
|
bskypidbackup.addEventListener("click", () => {
|
||||||
|
navigator.clipboard.writeText("did:plc:valun42etpm73we7bgyh64ge");
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
3
src/components/jxl-loader.astro
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<link rel="prefetch" href="https://aria.coffee/jxl_dec.js" fetchpriority="high">
|
||||||
|
<link rel="prefetch" href="https://aria.coffee/jxl_dec.wasm" fetchpriority="high">
|
||||||
|
<script src="https://aria.coffee/jxl.min.js" type="text/javascript"></script>
|
|
@ -1,17 +1,31 @@
|
||||||
|
// Import utilities from `astro:content`
|
||||||
|
import { defineCollection, z } from "astro:content";
|
||||||
|
|
||||||
// Import the glob loader
|
// Import the glob loader
|
||||||
import { glob } from "astro/loaders";
|
import { glob } from "astro/loaders";
|
||||||
// Import utilities from `astro:content`
|
|
||||||
import { z, defineCollection } from "astro:content";
|
|
||||||
// Define a `loader` and `schema` for each collection
|
// Define a `loader` and `schema` for each collection
|
||||||
const blog = defineCollection({
|
const blog = defineCollection({
|
||||||
loader: glob({ pattern: "**/[^_]*.md", base: "./src/blog" }),
|
loader: glob({ pattern: "**/[^_]*.{md,mdx}", base: "./src/blog" }),
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
pubDate: z.date(),
|
pubDate: z.date(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
author: z.string(),
|
author: z.string(),
|
||||||
tags: z.array(z.string()),
|
tags: z.array(z.string()),
|
||||||
|
draft: z.boolean(),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const albums = defineCollection({
|
||||||
|
type: "data",
|
||||||
|
schema: ({ image }) =>
|
||||||
|
z.object({
|
||||||
|
title: z.string(),
|
||||||
|
description: z.string().optional(),
|
||||||
|
cover: image(),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
// Export a single `collections` object to register your collection(s)
|
// Export a single `collections` object to register your collection(s)
|
||||||
export const collections = { blog };
|
export const collections = { blog, albums };
|
||||||
|
|
3
src/content/albums/aria-board.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
title: Aria Board
|
||||||
|
description: A bunch of images making up my vibes
|
||||||
|
cover: ./aria-board/1-Tw1nkPad.webp
|
BIN
src/content/albums/aria-board/1-Tw1nkPad.webp
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
src/content/albums/aria-board/2-Tw1nkPadLaptop.jpg
Normal file
After Width: | Height: | Size: 5.7 MiB |
BIN
src/content/albums/aria-board/3-kusanagi.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
src/content/albums/aria-board/3-kusanagi1.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
src/content/albums/aria-board/3-kusanagi2.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
src/content/albums/aria-board/3-kusanagi3.png
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
src/content/albums/aria-board/3-kusanagi4.png
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-1.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-10.jpg
Normal file
After Width: | Height: | Size: 555 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-2.jpg
Normal file
After Width: | Height: | Size: 575 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-3.jpg
Normal file
After Width: | Height: | Size: 639 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-4.jpg
Normal file
After Width: | Height: | Size: 833 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-5.jpg
Normal file
After Width: | Height: | Size: 793 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-6.jpg
Normal file
After Width: | Height: | Size: 402 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-7.jpg
Normal file
After Width: | Height: | Size: 421 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-8.jpg
Normal file
After Width: | Height: | Size: 545 KiB |
BIN
src/content/albums/aria-board/4-Synergia-frame-9.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
src/content/albums/aria-board/9999-1.png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
src/content/albums/aria-board/9999-10.png
Normal file
After Width: | Height: | Size: 361 KiB |
BIN
src/content/albums/aria-board/9999-11.jpg
Normal file
After Width: | Height: | Size: 249 KiB |
BIN
src/content/albums/aria-board/9999-12.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
src/content/albums/aria-board/9999-13.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/content/albums/aria-board/9999-14.webp
Normal file
After Width: | Height: | Size: 3.8 MiB |
BIN
src/content/albums/aria-board/9999-15.jpg
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
src/content/albums/aria-board/9999-16.jpg
Normal file
After Width: | Height: | Size: 133 KiB |