commit ced4cd344783e556e7b0ce819e712514f94dcae0 Author: aggie Date: Sun Jun 21 06:59:48 2026 +0000 first diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..844771f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = tab +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ddb744 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +content/feed/pretty-atom-feed.xsl linguist-vendored diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9ccc88a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: npm + directory: "/" + schedule: + interval: monthly + cooldown: + default-days: 7 + labels: + - "dependency-updates" + versioning-strategy: increase + allow: + - dependency-type: all + +# - package-ecosystem: github-actions +# directory: ".github/workflows/" +# schedule: +# interval: monthly +# cooldown: +# default-days: 7 diff --git a/.github/workflows/gh-pages.yml.sample b/.github/workflows/gh-pages.yml.sample new file mode 100644 index 0000000..3209191 --- /dev/null +++ b/.github/workflows/gh-pages.yml.sample @@ -0,0 +1,76 @@ +# If you’d like to deploy this project to GitHub pages: +# +# 1. Remove the .sample file extension from this file so it ends with `.yml` +# e.g. `gh-pages.yml` +# +# 2. Go to your repository’s Settings on GitHub and find the GitHub Pages subsection. +# Under the Build and Deployment on the GitHub Pages settings, find the Source +# option and select “GitHub Actions” +# +# 3. In your project’s package.json, make sure the `build-ghpages` script has +# the `--pathprefix=` parameter set to your repository name. +# e.g. "build-ghpages": "npx @11ty/eleventy --pathprefix=/YOUR_REPO_NAME/", +# +# Exception: When using a Custom domain (example.com) with GitHub Pages, deploying +# to `example.com/` instead of `*.github.io/YOUR_REPO_NAME/` make sure to +# remove the `--pathprefix` parameter entirely. +# e.g. "build-ghpages": "npx @11ty/eleventy", +# +# 4. Commit this new `gh-pages.yml` file and push it upstream to GitHub + +name: Deploy to GitHub Pages + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 + + - name: Setup Node + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 + with: + node-version: '22' + + - name: Cache npm + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # 5.0.3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} + + - name: Cache Eleventy .cache + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # 5.0.3 + with: + path: ./.cache + key: ${{ runner.os }}-eleventy-fetch-cache + + - run: npm ci + - run: npm run build-ghpages + + - name: Upload static files as artifact + id: deployment + uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # 4.0.0 + with: + path: _site/ + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + permissions: + pages: write + id-token: write + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # 4.0.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57dccec --- /dev/null +++ b/.gitignore @@ -0,0 +1,166 @@ +node_modules/ +.cache +# ============================================================================== +# Created by https://gitignores.com/ +# COMPREHENSIVE FRAMEWORK TEMPLATE for Eleventy +# Website: https://www.11ty.dev/ +# Repository: https://github.com/11ty/eleventy +# ============================================================================== + +# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# TEMPLATE OVERVIEW & USAGE NOTES +# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# • TEMPLATE TYPE: COMPREHENSIVE FRAMEWORK TEMPLATE +# • PURPOSE: Complete Eleventy framework patterns for static site generation and build artifacts +# • DESIGN PHILOSOPHY: Self-contained with all Eleventy-specific patterns +# • COMBINATION GUIDANCE: Use standalone; optionally add IDE/OS templates +# • SECURITY CONSIDERATIONS: Includes security patterns for .env files and credentials +# • BEST PRACTICES: Review patterns before use, test with git check-ignore, customize for your project +# • OFFICIAL SOURCES: Eleventy documentation and community best practices + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# SECURITY & SENSITIVE DATA PROTECTION (ALWAYS FIRST!) +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# CRITICAL: Protect sensitive data from accidental commits to version control + +*.crt +*.key +*.keystore +*.pem +*.secret +*.token +*_keys +*_secrets +*_tokens +.env +.env.* +.env.*.local +.env.local +id_dsa +id_rsa + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# BUILD ARTIFACTS & DISTRIBUTION +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + +*.tar.gz +*.zip +_site/ +dist/ +docs/_site/ + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# DEPENDENCY MANAGEMENT & PACKAGE CACHE +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + +.cache/ +.eleventy.js.cache +.yarn-integrity +.yarn/build-state.yml +.yarn/cache +.yarn/install-state.gz +.yarn/unplugged +.yarn/versions/ +docs/_build/ +node_modules/ + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# DEVELOPMENT & RUNTIME ARTIFACTS +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + +*.log +*.log.* +*.tmp +.eslintcache +.grunt +.lock-wscript +.node_repl_history +.npm-debug.log* +.pnpm-debug.log* +.11ty-cache/ +.tern-port +eleventy.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# FRAMEWORK-SPECIFIC PATTERNS +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + +*.temp +*.ts.js +*.ts.map +.backup/ +.bak/ +.dependencies/ +.deploy/ +.deployment/ +eleventy.config.js +.eleventy.config.js.bak +.eleventy.config.json.bak +.eleventy.config.ts.bak +.eleventy.js.bak +.eleventy.js/filters/__generated__/ +.eleventy.js/plugins/__generated__/ +.eleventy.js/shortcodes/__generated__/ +.eleventy.js/transforms/__generated__/ +.eleventyignore.bak +_11ty/ +_collections/__generated__/ +_components/__generated__/ +_data/__generated__/ +_includes/__generated__/ +_layouts/__generated__/ +assets/__generated__/ +assets/css/__generated__/ +assets/images/__generated__/ +assets/js/__generated__/ +benchmark/ +benchmarks/ +static/__generated__/ + +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• +# TESTING & QUALITY ASSURANCE +# •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + +.coverage +.coverage.* +.nyc_output/ +coverage/ +test-results/ +tests/ + +# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# TEMPLATE CUSTOMIZATION & BEST PRACTICES +# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# 1. REVIEW: Examine all patterns before use +# 2. CUSTOMIZE: Adapt to your project's specific structure +# 3. TEST: Use `git check-ignore` to verify patterns +# 4. SECURE: Always protect sensitive data and credentials +# 5. UPDATE: Review periodically as technology evolves + +# RECOMMENDED USAGE PATTERNS: +# ============================================================================== +# +# BASIC USAGE (STANDALONE): +# ------------------------- +# cp frameworks/eleventy.gitignore .gitignore +# +# WITH IDE SUPPORT: +# ---------------- +# cat frameworks/eleventy.gitignore \ +# ides/visual-studio-code.gitignore | sort -u > .gitignore +# +# CROSS-PLATFORM DEVELOPMENT: +# --------------------------- +# cat frameworks/eleventy.gitignore \ +# os/linux.gitignore \ +# os/macos.gitignore \ +# os/windows.gitignore | sort -u > .gitignore +# +# IMPORTANT NOTES: +# ============================================================================== +# 1. This template is self-contained and includes security patterns +# 2. No need to add common/security.gitignore separately +# 3. Test with `git status --ignored` to ensure proper coverage diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2bd5a0a --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5027c0d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017–2024 Zach Leatherman @zachleat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..abccc6d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# AGNES.LOVE + +I'm Agnes the Alien! This is my weblog, built with Eleventy. diff --git a/_config/filters.js b/_config/filters.js new file mode 100644 index 0000000..3f247fb --- /dev/null +++ b/_config/filters.js @@ -0,0 +1,43 @@ +import { DateTime } from "luxon"; + +export default function(eleventyConfig) { + eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => { + // Formatting tokens for Luxon: https://moment.github.io/luxon/#/formatting?id=table-of-tokens + return DateTime.fromJSDate(dateObj, { zone: zone || "utc" }).toFormat(format || "dd LLLL yyyy"); + }); + + eleventyConfig.addFilter("htmlDateString", (dateObj) => { + // dateObj input: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string + return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat('yyyy-LL-dd'); + }); + + // Get the first `n` elements of a collection. + eleventyConfig.addFilter("head", (array, n) => { + if(!Array.isArray(array) || array.length === 0) { + return []; + } + if( n < 0 ) { + return array.slice(n); + } + + return array.slice(0, n); + }); + + // Return the smallest number argument + eleventyConfig.addFilter("min", (...numbers) => { + return Math.min.apply(null, numbers); + }); + + // Return the keys used in an object + eleventyConfig.addFilter("getKeys", target => { + return Object.keys(target); + }); + + eleventyConfig.addFilter("filterTagList", function filterTagList(tags) { + return (tags || []).filter(tag => ["all", "posts"].indexOf(tag) === -1); + }); + + eleventyConfig.addFilter("sortAlphabetically", strings => + (strings || []).sort((b, a) => b.localeCompare(a)) + ); +}; diff --git a/_data/eleventyDataSchema.js b/_data/eleventyDataSchema.js new file mode 100644 index 0000000..bfef5d5 --- /dev/null +++ b/_data/eleventyDataSchema.js @@ -0,0 +1,17 @@ +import { z } from "zod"; +import { fromZodError } from 'zod-validation-error'; + +// Draft content, validate `draft` front matter +export default function() { + return function(data) { + // Note that drafts may be skipped in a preprocessor (see eleventy.config.js) + // when doing a standard build (not --serve or --watch) + let result = z.object({ + draft: z.boolean().or(z.undefined()), + }).safeParse(data); + + if(result.error) { + throw fromZodError(result.error); + } + } +} diff --git a/_data/metadata.js b/_data/metadata.js new file mode 100644 index 0000000..7e8b636 --- /dev/null +++ b/_data/metadata.js @@ -0,0 +1,11 @@ +export default { + title: "Eleventy Base Blog v9", + url: "https://example.com/", + language: "en", + description: "I am writing about my experiences as a naval navel-gazer.", + author: { + name: "Your Name Here", + email: "youremailaddress@example.com", + url: "https://example.com/about-me/" + } +} diff --git a/_data/site.json b/_data/site.json new file mode 100644 index 0000000..e66ec31 --- /dev/null +++ b/_data/site.json @@ -0,0 +1,8 @@ +{ + "name": "Agnes the Alien", + "url": "http://agnes.love", + "authorName": "Agnes the Alien", + "authorUrl": "http://agnes.love", + "description": "Personal website of an alien who does things with computers and also words.", + "favicon": "http://file.garden/Zw17vw8ctXTQw7PV/mewelcome.png" +} diff --git a/_includes/agneslove-blog.njk b/_includes/agneslove-blog.njk new file mode 100644 index 0000000..fe3cd7d --- /dev/null +++ b/_includes/agneslove-blog.njk @@ -0,0 +1,35 @@ + + + + Agnes the Alien + + + + + + + + + +{% include "partials/header.njk" %} + +
{{ content | safe }} +
+
Comment Box is loading comments...
+
+ + + diff --git a/_includes/agneslove.njk b/_includes/agneslove.njk new file mode 100644 index 0000000..816c228 --- /dev/null +++ b/_includes/agneslove.njk @@ -0,0 +1,46 @@ + + + + Agnes the Alien + + + + + + + + + + + +{% include "partials/header.njk" %} + +
{{ content | safe }} +
+ + + + diff --git a/_includes/blog.css b/_includes/blog.css new file mode 100644 index 0000000..9e453ac --- /dev/null +++ b/_includes/blog.css @@ -0,0 +1,307 @@ +/* Defaults */ +:root { + --font-family: -apple-system, system-ui, sans-serif; + --font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace; +} + +/* Theme colors */ +:root { + --color-gray-20: #e0e0e0; + --color-gray-50: #C0C0C0; + --color-gray-90: #333; + + --background-color:#cfffe8; + + --text-color: var(--color-gray-90); + --text-color-link: #082840; + --text-color-link-active: #5f2b48; + --text-color-link-visited: #17050F; + + --syntax-tab-size: 2; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-gray-20: #e0e0e0; + --color-gray-50: #C0C0C0; + --color-gray-90: #dad8d8; + + /* --text-color is assigned to --color-gray-_ above */ + --text-color-link: #1493fb; + --text-color-link-active: #6969f7; + --text-color-link-visited: #a6a6f8; + + --background-color: #15202b; + } +} + + +/* Global stylesheet */ +* { + box-sizing: border-box; +} + +@view-transition { + navigation: auto; +} + +html, +body { + padding: 0; + margin: 0 auto; + font-family:Arial; + color: var(--text-color); + background-color: var(--background-color); + font-size:18px; +} +html { + overflow-y: scroll; +} +body { + max-width: 40em; +} + +header img { +width: 100px; +height: 104px; +} + +.container { +margin: 0 auto; +} +/* https://www.a11yproject.com/posts/how-to-hide-content/ */ +.visually-hidden:not(:focus):not(:active) { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +/* Fluid images via https://www.zachleat.com/web/fluid-images/ */ +img{ + max-width: 100%; +} +img[width][height] { + height: auto; +} +img[src$=".svg"] { + width: 100%; + height: auto; + max-width: none; +} +video, +iframe { + width: 100%; + height: auto; +} +iframe { + aspect-ratio: 16/9; +} + +p:last-child { + margin-bottom: 0; +} +p { + line-height: 1.5; +} + +li { + line-height: 1.5; +} + +a[href] { + color: var(--text-color-link); +} +a[href]:visited { + color: var(--text-color-link-visited); +} +a[href]:hover, +a[href]:active { + color: var(--text-color-link-active); +} + +main, +footer { + padding: 1rem; +} +main :first-child { + margin-top: 0; +} + +header { + border-bottom: 1px dashed var(--color-gray-20); + align-content: center; +} + +#skip-link { + text-decoration: none; + background: var(--background-color); + color: var(--text-color); + padding: 0.5rem 1rem; + border: 1px solid var(--color-gray-90); + border-radius: 2px; +} + +/* Prevent visually-hidden skip link fom pushing content around when focused */ +#skip-link.visually-hidden:focus { + position: absolute; + top: 1rem; + left: 1rem; + /* Ensure it is positioned on top of everything else when it is shown */ + z-index: 999; +} + +.links-nextprev { + display: flex; + justify-content: space-between; + gap: .5em 1em; + list-style: ""; + border-top: 1px dashed var(--color-gray-20); + padding: 1em 0; +} +.links-nextprev > * { + flex-grow: 1; +} +.links-nextprev-next { + text-align: right; +} + +table { + margin: 1em 0; +} +table td, +table th { + padding-right: 1em; +} + +pre, +code { + font-family: var(--font-family-monospace); +} +pre:not([class*="language-"]) { + margin: .5em 0; + line-height: 1.375; /* 22px /16 */ + -moz-tab-size: var(--syntax-tab-size); + -o-tab-size: var(--syntax-tab-size); + tab-size: var(--syntax-tab-size); + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + overflow-x: auto; +} +code { + word-break: break-all; +} + +/* Header */ +header { + display: flex; + gap: 1em; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 1em; +} +.home-link { + flex-grow: 1; + font-size: 1em; /* 16px /16 */ + font-weight: 700; +} +.home-link:link:not(:hover) { + text-decoration: none; +} + +/* Nav */ +.nav { + display: flex; + gap: .5em 1em; + padding: 0; + margin: 0; + list-style: none; +} +.nav-item { + display: inline-block; +} +.nav-item a[href]:not(:hover) { + text-decoration: none; +} +.nav a[href][aria-current="page"] { + text-decoration: underline; +} + +/* Posts list */ +.postlist { + counter-reset: start-from var(--postlist-index); + list-style: none; + padding: 0; + +} +.postlist-item { + display: flex; + flex-wrap: wrap; + align-items: baseline; + counter-increment: start-from -1; + margin-bottom: 1em; +} +.postlist-item:before { + display: inline-block; + pointer-events: none; + content: "" counter(start-from, decimal-leading-zero) ". "; + line-height: 100%; + text-align: right; +} +.postlist-date, +.postlist-item:before { + font-size: 0.8125em; /* 13px /16 */ + color: var(--color-gray-90); +} +.postlist-date { + word-spacing: -0.5px; +} +.postlist-link { + font-size: 1.1875em; /* 19px /16 */ + font-weight: 700; + flex-basis: calc(100% - 1.5rem); + padding-left: .25em; + padding-right: .5em; + text-underline-position: from-font; + text-underline-offset: 0; + text-decoration-thickness: 1px; +} +.postlist-item-active .postlist-link { + font-weight: bold; +} + +/* Tags */ +.post-tag { + display: inline-flex; + align-items: center; + justify-content: center; + text-transform: capitalize; + font-style: italic; +} +.postlist-item > .post-tag { + align-self: center; +} + +/* Tags list */ +.post-metadata { + display: inline-flex; + flex-wrap: wrap; + gap: .5em; + list-style: none; + padding: 0; + margin: 0; +} +.post-metadata time { + margin-right: 1em; +} + diff --git a/_includes/layouts/base.njk b/_includes/layouts/base.njk new file mode 100644 index 0000000..54ba61c --- /dev/null +++ b/_includes/layouts/base.njk @@ -0,0 +1,70 @@ + + + + + + Agnes the Alien + + + + {#- Uncomment this if you’d like folks to know that you used Eleventy to build your site! #} + {#- #} + + {#- + Plain-text bundles are provided via the `eleventy-plugin-bundle` plugin: + 1. CSS: + * Add to a per-page bundle using `{% css %}{% endcss %}` + * Retrieve bundle content using `{% getBundle "css" %}` or `{% getBundleFileUrl "css" %}` + 2. Or for JavaScript: + * Add to a per-page bundle using `{% js %}{% endjs %}` + * Retrieve via `{% get {#- Add the contents of a file to the bundle #} + + + {#- Or you can add from node_modules #} + {# #} + + + {#- Render the CSS bundle using inlined CSS (for the fastest site performance in producti + {#- Renders the CSS bundle using a separate file, if you can't set CSP directive style-src: 'unsafe-inline' #} + {#- #} + + {#- Add the heading-anchors web component to the JavaScript bundle #} + + + +
+ {% include "partials/header.njk" %} + + + +
+ Agnes the Alien + + {#- Read more about `eleventy-navigation` at https://www.11ty.dev/docs/plugins/navigation/ #} + +
+ +


tools: default font size | font 1x larger +| font 2x larger + {{ content | safe }} + +
+ + + + + + + + diff --git a/_includes/layouts/home.njk b/_includes/layouts/home.njk new file mode 100644 index 0000000..ee3c91b --- /dev/null +++ b/_includes/layouts/home.njk @@ -0,0 +1,6 @@ +--- +layout: agneslove.njk +--- + +{{ content | safe }} + diff --git a/_includes/layouts/post.njk b/_includes/layouts/post.njk new file mode 100644 index 0000000..bdc3a5e --- /dev/null +++ b/_includes/layouts/post.njk @@ -0,0 +1,25 @@ +--- +layout: agneslove-blog.njk +--- + +

{{ title }}

+ + + +{{ content | safe }} +{%- if collections.posts %} +{%- set previousPost = collections.posts | getPreviousCollectionItem %} +{%- set nextPost = collections.posts | getNextCollectionItem %} +{%- if nextPost or previousPost %} + +{%- endif %} +{%- endif %} diff --git a/_includes/partials/header.njk b/_includes/partials/header.njk new file mode 100644 index 0000000..b1be32e --- /dev/null +++ b/_includes/partials/header.njk @@ -0,0 +1,6 @@ + + +
A stylized bust-level drawing of me, a white feminine individual with heart shaped glasses, pink and green pigtails, and a teal halter top. I am saying WELCOME which is written in stylized pink text. + +
+
diff --git a/_includes/partials/sidebar.njk b/_includes/partials/sidebar.njk new file mode 100644 index 0000000..07b56d1 --- /dev/null +++ b/_includes/partials/sidebar.njk @@ -0,0 +1,6 @@ + diff --git a/_includes/postlist.njk b/_includes/postlist.njk new file mode 100644 index 0000000..d85ede2 --- /dev/null +++ b/_includes/postlist.njk @@ -0,0 +1,9 @@ +
    +{%- for post in postslist | reverse %} +
  1. + {% if post.data.title %}{{ post.data.title }}{% else %}{{ post.url }}{% endif %} + + {{ post.data.description }} +{%- endfor %}}
  2. +
+ diff --git a/_includes/postslist.njk b/_includes/postslist.njk new file mode 100644 index 0000000..4f65534 --- /dev/null +++ b/_includes/postslist.njk @@ -0,0 +1,10 @@ +
    +{%- for post in postslist | reverse %} +
  1. + {% if post.data.title %}{{ post.data.title }}{% else %}{{ post.url }}{% endif %} +

    +{{ post.data.description }} + +

  2. +{%- endfor %} +
diff --git a/_includes/theme.js b/_includes/theme.js new file mode 100644 index 0000000..509c925 --- /dev/null +++ b/_includes/theme.js @@ -0,0 +1,4 @@ +function myFunction() { + let element = document.body; + element.classList.toggle("theme"); + } diff --git a/bigger.css b/bigger.css new file mode 100644 index 0000000..8d2c57d --- /dev/null +++ b/bigger.css @@ -0,0 +1,186 @@ + +html { +font-size: 19px; +} +body { + background: #e0589c; +background: radial-gradient(circle, rgba(224, 88, 156, 1) 0%, rgba(179, 255, 208, 1) 100%); font-family: Arial, sans-serif; + font-size: 19px; + margin: 0; + padding: 0; +} + +header, +nav, +section, +footer { + width: 90%; + max-width: 1000px; + margin: 10px auto; + background: #F0D8E6; + + box-sizing: border-box; +} + +header { + border: 8px hotpink inset; + background: #F0D8E6; + padding: 10px; +text-align: center; +} + +header img { +width:35%; +height:35%; +} + +.sitemap { +border: 1px solid hotpink; +overflow: scroll; +max-height: 55%; +} + +.sillyheader { + margin-left: auto; +} + +nav { + padding: 0.5rem; + background: #F0D8E6; + border: 8px hotpink inset; + text-align: center; +} + +.main { + display: flex; + gap: 10px; + justify-content: center; + align-items: flex-start; + flex-wrap: wrap; + width: 90%; + max-width: 1500px; + margin: 0 auto; + background: #F0D8E6; + +} + +section .main-sitemap { + justify-content: center; + align-items: flex-start; + flex-wrap: wrap; + width: 90%; + max-width: 1500px; + margin: 0 auto; + background: #F0D8E6; + +} + + +.main-blog { + width: 60%; +border:8px inset hotpink; +padding: 1%; + +max-width: 1500px; + margin: 0 auto; + background: #F0D8E6; +line-height:160%; +} +.posts, +.intro, +.updates { + border: 1px solid hotpink; + box-sizing: border-box; + background: rgba(255,255,255,0.2); +overflow: scroll; +} + +.posts { + flex: 2 1 500px; + height: 700px; +padding-left: 4px; +padding-right: 4px; +overflow: scroll; +} + +.intro { + flex: 1 1 300px; + min-height: 700px; +} +section .updates { +width:300px; +overflow:scroll; +height:700px; +margin-top: 0; +} + +.status { + font-size: 15px; + border: 1px solid hotpink; + height: auto; +} + +.ugh { + width: 100%; + max-width: 200px; + height: 100px; + overflow-y: auto; + border: 1px solid hotpink; +} + +.main img { + max-width: 100%; + height: auto; +} + +section { + border: 8px hotpink inset; + padding: 1%; + text-align: center; +} + +footer { + padding: 1%; + border: 8px hotpink inset; +} + +a { + color: #300023; + text-decoration: underline; + text-decoration-style: dashed; +} + +/* mobile shit */ +@media (max-width: 768px) { + + body { + font-size: 1em; + } + + .main { + flex-direction: column; + align-items: center; + } + + .posts, + .intro, + .updates { + width: 100%; + min-height: auto; + } + + .sillyheader { + position: static; + float: none; + margin: 0 auto; + text-align: center; + } + + header, + nav, + section, + footer { + width: 95%; + } +} + diff --git a/blog.css b/blog.css new file mode 100644 index 0000000..e4bf9d0 --- /dev/null +++ b/blog.css @@ -0,0 +1,383 @@ +/* Defaults */ +:root { + --font-family: -apple-system, system-ui, sans-serif; + --font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace; +} + + + +#HCB_comment_box { + /* add any custom CSS for the comment box here. */ + width:10px; +height: 10px; +} + +/* the entire html comment box container. applies to everything */ +#HCB_comment_box { + font-family: verdana, serif; + color: #888; + background-color: #fff; +} + +#HCB_comment_box p.error { + border: 1px solid red; + background-color: #fee; +} + +.hcb-mod b { + color:#DD3344; +} + +#HCB_comment_box textarea, #HCB_comment_box input.text { + border-top: 1px solid #e4e4e4; + border-left: 1px solid #e4e4e4; + border-bottom: 1px solid #eaeaea; + border-right: 1px solid #eaeaea; + background-color: #f8f8f8; +} + +#HCB_comment_box .hcb-wrapper-half { + display:block; + width:50%; + float:left; +} +#HCB_comment_box .hcb-wrapper { + clear:both; +} +#HCB_comment_box input.text { + display:block; + width:97%; +} +/* the submit button */ +#HCB_comment_box input.submit { + border-top: 1px solid #eee; + border-left: 1px solid #eee; + border-bottom: 1px solid #888; + border-right: 1px solid #888; + background-color: #ccc; + color: #666; + font-weight:bold; + cursor:pointer; +} + +#HCB_comment_box span.home-desc { + font-size:10px; + opacity:0.4; +} + +/* the individual comment display containers */ +#HCB_comment_box div.comment { + border-bottom:1px dotted #eee; + margin-bottom:5px; +} + +/* the moderator message */ +.hcb-mod i{ + color:darkblue; +} + + +/* Theme colors */ +:root { + --color-gray-20: #e0e0e0; + --color-gray-50: #C0C0C0; + --color-gray-90: #333; + + --background-color:#cfffe8; + + --text-color: var(--color-gray-90); + --text-color-link: #082840; + --text-color-link-active: #5f2b48; + --text-color-link-visited: #17050F; + + --syntax-tab-size: 2; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-gray-20: #e0e0e0; + --color-gray-50: #C0C0C0; + --color-gray-90: #dad8d8; + + /* --text-color is assigned to --color-gray-_ above */ + --text-color-link: #1493fb; + --text-color-link-active: #6969f7; + --text-color-link-visited: #a6a6f8; + + --background-color: #15202b; + } +} + + +/* Global stylesheet */ +* { + box-sizing: border-box; +} + +@view-transition { + navigation: auto; +} + +html, +body { + padding: 0; + margin: 0 auto; + font-family:Arial; + color: var(--text-color); + background-color: var(--background-color); + font-size:18px; +} +.theme { +font-size:25px; +} +html { + overflow-y: scroll; +} +body { + max-width: 40em; +} + +header img { +width: 100px; +height: 104px; +} + +.container { +margin: 0 auto; +} +/* https://www.a11yproject.com/posts/how-to-hide-content/ */ +.visually-hidden:not(:focus):not(:active) { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +/* Fluid images via https://www.zachleat.com/web/fluid-images/ */ +img{ + max-width: 100%; +} +img[width][height] { + height: auto; +} +img[src$=".svg"] { + width: 100%; + height: auto; + max-width: none; +} +video, +iframe { + width: 100%; + height: auto; +} +iframe { + aspect-ratio: 16/9; +} + +p:last-child { + margin-bottom: 0; +} +p { + line-height: 1.5; +} + +li { + line-height: 1.5; +} + +a[href] { + color: var(--text-color-link); +} +a[href]:visited { + color: var(--text-color-link-visited); +} +a[href]:hover, +a[href]:active { + color: var(--text-color-link-active); +} + +main, +footer { + padding: 1rem; +} +main :first-child { + margin-top: 0; +} + +header { + border-bottom: 1px dashed var(--color-gray-20); + align-content: center; +} + +#skip-link { + text-decoration: none; + background: var(--background-color); + color: var(--text-color); + padding: 0.5rem 1rem; + border: 1px solid var(--color-gray-90); + border-radius: 2px; +} + +/* Prevent visually-hidden skip link fom pushing content around when focused */ +#skip-link.visually-hidden:focus { + position: absolute; + top: 1rem; + left: 1rem; + /* Ensure it is positioned on top of everything else when it is shown */ + z-index: 999; +} + +.links-nextprev { + display: flex; + justify-content: space-between; + gap: .5em 1em; + list-style: ""; + border-top: 1px dashed var(--color-gray-20); + padding: 1em 0; +} +.links-nextprev > * { + flex-grow: 1; +} +.links-nextprev-next { + text-align: right; +} + +table { + margin: 1em 0; +} +table td, +table th { + padding-right: 1em; +} + +pre, +code { + font-family: var(--font-family-monospace); +} +pre:not([class*="language-"]) { + margin: .5em 0; + line-height: 1.375; /* 22px /16 */ + -moz-tab-size: var(--syntax-tab-size); + -o-tab-size: var(--syntax-tab-size); + tab-size: var(--syntax-tab-size); + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + overflow-x: auto; +} +code { + word-break: break-all; +} + +/* Header */ +header { + display: flex; + gap: 1em; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 1em; +} +.home-link { + flex-grow: 1; + font-size: 1em; /* 16px /16 */ + font-weight: 700; +} +.home-link:link:not(:hover) { + text-decoration: none; +} + +/* Nav */ +.nav { + display: flex; + gap: .5em 1em; + padding: 0; + margin: 0; + list-style: none; +} +.nav-item { + display: inline-block; +} +.nav-item a[href]:not(:hover) { + text-decoration: none; +} +.nav a[href][aria-current="page"] { + text-decoration: underline; +} + +/* Posts list */ +.postlist { + counter-reset: start-from var(--postlist-index); + list-style: none; + padding: 0; + +} +.postlist-item { + display: flex; + flex-wrap: wrap; + align-items: baseline; + counter-increment: start-from -1; + margin-bottom: 1em; +} +.postlist-item:before { + display: inline-block; + pointer-events: none; + content: "" counter(start-from, decimal-leading-zero) ". "; + line-height: 100%; + text-align: right; +} +.postlist-date, +.postlist-item:before { + font-size: 0.8125em; /* 13px /16 */ + color: var(--color-gray-90); +} +.postlist-date { + word-spacing: -0.5px; +} +.postlist-link { + font-size: 1.1875em; /* 19px /16 */ + font-weight: 700; + flex-basis: calc(100% - 1.5rem); + padding-left: .25em; + padding-right: .5em; + text-underline-position: from-font; + text-underline-offset: 0; + text-decoration-thickness: 1px; +} +.postlist-item-active .postlist-link { + font-weight: bold; +} + +/* Tags */ +.post-tag { + display: inline-flex; + align-items: center; + justify-content: center; + text-transform: capitalize; + font-style: italic; +} +.postlist-item > .post-tag { + align-self: center; +} + +/* Tags list */ +.post-metadata { + display: inline-flex; + flex-wrap: wrap; + gap: .5em; + list-style: none; + padding: 0; + margin: 0; +} +.post-metadata time { + margin-right: 1em; +} + diff --git a/bundle.css b/bundle.css new file mode 100644 index 0000000..803d59e --- /dev/null +++ b/bundle.css @@ -0,0 +1,345 @@ +.epg { + color: var(--text); + margin: 20px 0; + font-size: 0.8em; +} + +img .badge { +width:20%; +height:10%; +} +img.jbb { +width:35%; +height:35%; +} + +.badgeimg img { +width:40%; +height: 40%; +} +.epg__year { + text-align: center; + font-weight: bold; + margin-bottom: 10px; +} + + +.epg__months { + display: flex; + justify-content: space-between; + margin-bottom: 10px; +} + +@media (max-width: 410px) { + .epg__months { + display: none; + } +} + +.epg__squares { + display: grid; + grid-template-rows: repeat(7, 1fr); + grid-auto-flow: column; + margin-bottom: 10px; + grid-gap: 2px; +} + +.epg__box { + aspect-ratio: 1 / 1; +width:15px; background: var(--epg-box); +} +:root { + --epg-box: #e9ecef; + --epg-box-highlight: #69db7c; + --epg-text: #000; +} + +@media (prefers-color-scheme: dark) { + :root { + --epg-box: #2d333b; + --epg-box-highlight: #69db7c; + --epg-text: #fff; + } +} + +.epg__box--empty { + background: none; +} + +.epg__hasPost { + background: var(--epg-box-highlight); +} +body { + background: #e0589c; +background: radial-gradient(circle, rgba(224, 88, 156, 1) 0%, rgba(179, 255, 208, 1) 100%); font-family: Arial, sans-serif; + font-size: 1.3em; + margin: 0; + padding: 0; +} +html.bigger { + font-size: 1.1rem; +} + +html.evenbigger { + font-size: 1.25rem; +} + +body.largest { + font-size: 1.5rem; +} + +html.biggerblog { + font-size: 1.1rem; +} + +html.evenbiggerblog { + font-size: 1.25rem; +} + +html.largestblog { + font-size: 1.5rem; +} +.footyr { +border: 1px hotpink solid; +height: 180px; +overflow: scroll; +padding:5px; +text-align: center; +align-content: center; +} + +header, +nav, +section, +footer { + width: 90%; + max-width: 1000px; + margin: 10px auto; + background: #F0D8E6; + box-sizing: border-box; +} + +.theme { +font-size: 2.0rem; +} +.ughh { +flex: 1 1 150px; +height: 100px; +overflow: scroll; +margin: 0 auto; +border: 1px solid hotpink; +} +header { + border: 8px hotpink inset; + background: #F0D8E6; + padding: 10px; +text-align: center; +} + +header img { +width:35%; +height:35%; +} + +#currently { + +border: 1px solid hotpink; +overflow: scroll; +max-height:500px; +max-width:250px; +} + +.sitemap { +flex: 1 2 250px; +border: 1px solid hotpink; +overflow: scroll; +max-width:250px; +min-height:900px; +} + +.sillyheader { + margin-left: auto; +} + +nav { + padding: 0.5rem; + background: #F0D8E6; + border: 8px hotpink inset; + text-align: center; +} + +.main { +flex: 1; +max-width:80%; +border: 8px inset hotpink; + display:flex; + gap: 10px; + justify-content: center; + align-items: flex-start; + flex-direction: row; +flex-wrap: wrap; + margin: 0 auto; + background: #F0D8E6; +height: auto; +} +.main-noflex { +text-align: center; +align-content: center; +max-width:60%; +border: 8px inset hotpink; +padding-left: 10px; +padding-right:10px; + margin: 0 auto; + background: #F0D8E6; +height: auto; +} + + +.noww { +min-width: 50%; +flex: 2; +} +.main-now { + +flex-direction: row; +border: 8px inset hotpink; +max-width:60%; + gap: 100px; + text-align: center; margin: 0 auto; + background: #F0D8E6; +height: auto; +display:flex; +padding-left: 5px; +padding-right:50px; +line-height: 35px; +} + + +section.main-sitemap { + justify-content: center; + align-items: flex-start; + flex-wrap:row wrap; + max-width: 1500px; + margin: 0 auto; + background: #F0D8E6; + +} + + +.main-blog { + width: 60%; +border:8px inset hotpink; +padding: 1%; + +max-width: 1500px; + margin: 0 auto; + background: #F0D8E6; +line-height:160%; +} +.posts, +.intro, +.updates { + border: 1px solid hotpink; + box-sizing: border-box; + background: rgba(255,255,255,0.2); + overflow: scroll; +} + +.posts { + +flex: 1; + height: 900px; +padding-left: 4px; +padding-right: 4px; +} + +.intro { +text-align: center; + flex: 1 1 300px; + min-height: 900px; + max-width: 350px; +} +.updates { +flex: 2 1 300px; +overflow:scroll; +height:700px; +margin-top: 0; +} + +.status { + border: 1px solid hotpink; + height: auto; +} + +.ugh { + width: 100%; + max-width: 200px; + height: 100px; + overflow-y: auto; + border: 1px solid hotpink; +} + +.main img { + max-width: 100%; + height: auto; +} + +section { + + padding: 1%; + text-align: center; +} +footer { + padding: 1%; + border: 8px hotpink inset; +text-align:center;z +} + +a { + color: #300023; + text-decoration: underline; + text-decoration-style: dashed; +} + +/* mobile shit */ +@media (max-width: 768px) { + + .main-now img { + +max-width:100px; +max-height: 100px; +} + + body { + font-size: 1em; + } + + .main, +.main-now { + flex-direction: column; + align-items: center; + } + + .posts, + .intro, + .updates, + .noww { + width: 100%; + min-height: auto; + } + + .sillyheader { + position: static; + float: none; + margin: 0 auto; + text-align: center; + } + + header, + nav, + section, + footer { + width: 95%; + } +} + diff --git a/bundleold.css b/bundleold.css new file mode 100644 index 0000000..a657471 --- /dev/null +++ b/bundleold.css @@ -0,0 +1,97 @@ +body { +background: #f7d0e7; +background: radial-gradient(circle,rgba(247, 208, 231, 1) 0%, rgba(209, 255, 227, 1) 100%); +font-family: Arial; +font-size:1.3em;} + +header { +border: 8px hotpink inset; +width: 50%; +background:#F0D8E6; +margin:0 auto; +} +.sillyheader { +margin-right: 0; +margin-left: auto; +float:right; +position: absolute; +} +.updates { +border:1px solid hotpink; +overflow: scroll; +width: 320px; +height: 680px; +margin-right:0; +margin-left: auto; +} +.status { +font-size: 15px; +height:auto; +border: 1px solid hotpink; +} + +.posts { +order: 1; +top: 50%; +height: 700px; +overflow:scroll; +width: 700px; +border: 1px solid hotpink; +} +.ugh { +width: 200px; +height: 100px; +overflow: scroll; +border: 1px solid hotpink; +} +header img { + width: 300px; +height: 297px; +display: block; + margin: 0 auto; +} +.intro { +width:400px; +height: 700px; +border: 1px solid hotpink; +} +.main { +text-align: center; +display: flex; +flex-flow: row; +gap: 3px; +justify-content: center; +} +.main img { +align-self: center; + +} +section { +border: 8px hotpink inset; +margin: 0 auto; +padding: 1%; +width: 60%; +align-content: center; +text-align: center;} + +a { +color: #300023; +text-decoration: underline; +text-decoration-style: dashed; +} +nav { +padding: 0.5%; +width: 50%; +background:#F0D8E6; +margin: 0 auto; +border: 8px hotpink inset; +text-align: center; +} + +footer { +padding:1%; +width: 60%; +border: 8px hotpink inset; +margin: 0 auto; + +} diff --git a/content/404.md b/content/404.md new file mode 100644 index 0000000..50a3fa9 --- /dev/null +++ b/content/404.md @@ -0,0 +1,20 @@ +--- +permalink: 404.html +eleventyExcludeFromCollections: true +--- +# Content not found. + +Go home. + + diff --git a/content/about.njk b/content/about.njk new file mode 100644 index 0000000..f80c63a --- /dev/null +++ b/content/about.njk @@ -0,0 +1,20 @@ +--- +layout: agneslove.njk +title: Agnes the Alien +--- +
+


A Tomodachi LIfe mii with pink hair and green eyebrows and pink and green leopard print on the temples. It represents me.
My site button, a very small drawing of myself (a white feminine individual with pink and green hair) that says Agnes on the side.
+Fediverse | Ko-Fi | Bluesky | AO3 | Dreamwidth
+

+ Hi! I'm Agnes the Alien (it/zhe). I also go by Holiday and a bunch of other names sometimes too :-P I'm a disabled nonbinary extraterrestrial lesbian and I live in the Midwestern USA, unfortunately. I'm not very good at writing about myself, but I'll try.

+ The main love of my life is creative writing. I've been writing since I was about four years old and I learned how to open Microsoft Word on our dinosaur desktop PC. I write pretty much everything - poetry, fanfiction, short stories, video games, scripts, things that can't be described very well. I love to write horror, sci-fi, and sci-fi horror, and I love to write about dissociation and bad people and aliens and healing in nontraditional ways. I just love writing.

Because of that a lot of my internet activity is focused around writing, usually fanfiction. I run a fork of OTW-Archive, the software behind Archive of Our Own, the largest fanfiction site in the world (and mine has status updates!), dedicated to fan and original works centered around F/F, NB/F and NB/NB sapphic relationships. I run a lot of fandom events on Dreamwidth, like Rarest of Rarepairs and (as of 2025) Sapphic Summer. I also participate in a lot of fandom events.

+I'm Quaker and currently in my freshman year of college studying theology. I'm about to start taking, for this upcoming semester: African American Literature, Intro to Ethics, and Intro to World Religions. I was originally going to be an English major, but. I think I should keep writing a hobby. +

+I have three cats, a dog, and a pet Goffin Cockatoo named Saira who I adore with my entire soul. I have a serious passion for the natural world and animals (I have a devil's hole pupfish/white spotted pufferfish tattoo on my chest...) I'm in love with the world and with love and I try to be the best and most pleasant person I can be.

+I'm a bit "cringe", but I don't care; I'm alterhuman and semi-fictosexual, and these things are major aspects of my identity! I'm an alien and that is very important to me. My fictional others are Caleb Mir from Starfleet Academy and the Negative Spirit from Doom Patrol TV, among other less serious beloveds. If you'd ever like to talk about it, hit me up at the contact information provided above. I'm very open about my identity and the things that make me who I am, so if you're respectfully curious, just ask!! +

+I’m multiply disabled–physically, intellectually, mentally. I have dissociative identity disorder. These aspects of me impact pretty much every area of my life; outside of creativity and computer stuff, I really don’t have the ability to do much at all, and am pretty limited. So, I’m housebound and often bedbound, and I talk about this a lot and how it shapes my relationship with the world, internet, technology, and fandom.

+Anyway, that's me. It's nice to meet you. +

+
diff --git a/content/blog.njk b/content/blog.njk new file mode 100644 index 0000000..7b0f4f0 --- /dev/null +++ b/content/blog.njk @@ -0,0 +1,12 @@ +---js +const eleventyNavigation = { + key: "Archive", + order: 2 +}; +--- +
+

Blog

+ +{% set postslist = collections.posts %} +{% include "postslist.njk" %} +
diff --git a/content/blog/blog.11tydata.js b/content/blog/blog.11tydata.js new file mode 100644 index 0000000..614f505 --- /dev/null +++ b/content/blog/blog.11tydata.js @@ -0,0 +1,6 @@ +export default { + tags: [ + "posts" + ], + "layout": "layouts/post.njk", +}; diff --git a/content/blog/fandomsux.md b/content/blog/fandomsux.md new file mode 100644 index 0000000..55d431d --- /dev/null +++ b/content/blog/fandomsux.md @@ -0,0 +1,66 @@ +--- +layout: agneslove-blog +title: Fandom Sucks Now, and Other Laments +description: You know, these days, I am getting sort of tired. I don’t really know how else to describe it, so we’ll just go with the simplicity of I’m really just kind of tired. And the worst, most unsightly aspect of it all is this - I don’t really know what I’m tired of. I can give you a list of reasons without hesitation - 1) I spend my entire time in fandom.... +date: 2026-03-14 +tags: personal, fandom, post +--- +

{{title}}

+

+

tagged with.. {%- for tag in tags | filterTagList %} + + {%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %} + {%- if not loop.last %}, {% endif %} + {%- endfor %} +by Agnes the Alien +
+Content warnings: child sex trafficking/PTSD. + + +You know, these days, I am getting sort of tired. + +I don’t really know how else to describe it, so we’ll just go with the simplicity of *I’m really just kind of tired.* And the worst, most unsightly aspect of it all is this: I don’t really know what I’m tired _of._ + +I can give you a list of reasons without hesitation: + +1) I spend my entire time in fandom, because fandom is my passion. I run a fanfiction archive with ~360 users and around 500 different fandoms. Fandom is, quite literally, what I have dedicated my life to for the past fifteen years. And fandom, apparently, fucking hates me. Yeah, so it turns out that if you’re different from what is considered Normal and Acceptable in any way, you deserve to die and are subhuman, according to others. This widespread harassment is reminiscent of my days being beaten up and nearly murdered as a child at my Waldorf elementary school—unfathomable, needless cruelty fueled by a hatred of anything they don’t want to understand. So what if I like to cope by writing dark fanfiction? So what if I just fucking like dark fanfiction? What are you going to do about it? Stop me?  + +But unfortunately, there are actual repercussions for openly liking dark content. People can and will try to ruin your life, your source of income, your relationships, your safety. And I’m a sensitive alien, okay! I’m a goddamn child trafficking survivor and to be called a pedophile over fictional aliens shatters my soul in ways no one can even begin to comprehend unless they’re in the same situation. + +I shouldn’t say that, probably. I shouldn’t let people know about that weakness. It’s like a KICK ME sign taped to my back, a big red arrow pointing right to my Achilles heel. Come and cut me. But I am in a human body in this life, and so I am human. And as a human thing, the comparison still will never leave me. It haunts, vivisects. I know who I am, and I cannot control how others perceive me, and I cannot handle being seen as a being of the same depravity of the people who hurt me. I just can’t. + +I think this is a valid reason to be tired. It is still only one facet of the crystal. + +I do so much for fandom. What does fandom do for me? It brought me my beloved. My amazing friends. But what else? What lately?  + +2) I just do nothing. I have nothing to do all day. Oh, sure, I have tons to do, actually. I have ideas and I have projects and I have embroidery supplies and music software and cute little $5 kits from the store where you knit an ugly ass ladybug. I simply never have the wherewithal to actually do any of them. Is it the fatigue and pain I am constantly in? Am I just depressed and unmotivated because everything seems worthless? Is my psychosis acting up again? Do I need to have my meds adjusted, is what my family will say, if I tell them I’m struggling with motivation, so of course I don’t tell them.  + +I can’t ever get the spark going. Like a wind-up toy that just gets tighter and tigher until it snaps, never moving forward. And I have no goddamn idea why. + +I’m tired of being so tired.  + +3) My family is aging and ill and my mother will not go to the doctor because she is scared. She’s sixty one, her thyroid is dead, she needs to be on medication for it (hypocritical of me perhaps, since my thyroid is also dead and I don’t take _my_ synthroid, but I’m going to start!!!), but she refuses to get a perscription. I’m terrified about what will happen when her body can’t take it anymore. + +My nana has anxiety worse than mine. It’s so bad she stays up multiple nights having intrusive thoughts. She refuses to take any sort of medication for this or bring it up to her doctor. I’m terrified about what will happen when she gets too terrified. + +I’m tired of being so scared. + +4) Oh, yeah, and there’s that whole I-have-dissociative-identity-disorder-and-CPTSD thing. I’ve been having flashbacks almost every day lately. I’m tired of feeling broken. I’m tired of letting it break me, but I just don’t know how to stop thinking about it, writing about it, recreating it in fiction, thinking about it, throwing up about it, obsessing over it, thinking about it. I’m obsessed with it all, the pain that I went through and the siphoning of my innocence and the portioning of my body and so on. It’s all I ever think about. When will it stop? When will I stop feeling it?  + +Torturing fictional characters in the same way makes it feel better for a little while. Like a band-aid over an autopsy incison. + +I guess maybe I’m just tired of all of it. Of this frozen life I’m living. I keep thinking something needs to change, and I keep trying to make small changes to my daily routine, you know, build new habits, start a schedule, but it’s all futile, I fall out of everything eventually. I really need to start preparing for my future, because I guess I’m going to have one? And preparing for my future is not sitting here writing toxic yuri fanfiction all day, as fun as it is. I don’t know. I keep clawing at the walls of my brain, trying to find a solution. + +I see a lot of my friends taking steps back from fandom these days. A lot of them are also creatives, and they’re choosing to focus more on original works instead. I find that option more and more appealing with each cruel post I see pass my Tumblr dashboard. I can’t decide if I really want to step back from fandom, or if I only feel a need to do so because still being so deeply entrenched in fandom when everyone else I know has moved on makes me feel a little self-conscious, and I feel like I have to follow suit or I will be left behind. But I suspect that while my insecurities are probably a factor, it has more to do with the harassment I’ve been facing over being a Nahla/Caleb(/Anisha) shipper, and the terrible things people have said about me because of it. + +I don’t want to enjoy things in fear. I have my own personal archive using the AO3 software now; I rarely post to AO3 outside of exchanges. I keep my fics locked down to my friends and people I trust not to judge me. And… I’m someone who loves attention! I kind of need it to survive, clinically. But I just struggle to stay sane when horrible accusation after horrible accusation is thrown at me, and all I’m trying to do is enjoy myself in peace. I don’t want to have to hide or water myself down to be accepted, but unfortunately that is the reality of the world. We’re all paranoid, we’re all pointing fingers and pointing fingers and gnawing off fingers, we’re all cruel. I just can’t take it anymore. + +The issue is that I run that aforementioned somewhat-popular fanfiction archive. And I enjoy running this archive! I want to do so much more with it! And the people I have met through it are absolutely wonderful. I don’t want to step back from Sunset and I don’t see myself doing so in the future. At the same time, though, I think Sunset and Dreamwidth and my tiny little Discord server will be the extent of my fandom participation for a while. + +I want to focus on my original works and build a real career in writing. I want to make video games and finish my novella I’ve been working on for a year now that is still only at 4,400 words and I want to make music and I want to learn how to hand quilt and I want to have more things in my life than just television and fictional characters, but it’s kind of hard for me to focus on anything besides them. Or – it has been in the past. Maybe I’m finally so disillusioned with fandom that I’ll be able to focus on something else for a change. I don’t know. + +I don’t really know how to talk to people outside of fandom, and in all honesty, I don’t know a lot about myself outside of it just in general. I don’t have much of an identity beyond that, at least in my own perception of myself, and that’s… well, obviously unhealthy. I want to go back to school and go to writer’s groups in the city and I want a life worth living. I want to make websites that aren’t AO3-based or shoddy things I threw together based on outdated Rails guides; I want to actually _know_ what I’m doing with web development, because it’s something I find very fun and rewarding. + +I just so desperately want things to change, but I don’t know how to change them. The only thing I can think of for now is that I must focus on building a life for myself that isn’t attached to a fictional character. It’s long overdue.  + + diff --git a/content/blog/graphic.md b/content/blog/graphic.md new file mode 100644 index 0000000..f539539 --- /dev/null +++ b/content/blog/graphic.md @@ -0,0 +1,50 @@ +--- +layout: agneslove-blog +title: Graphic Rape Scenes In Literature Comfort Me, Actually +description: I'm just going to say it with my entire self, point blank and up front. Graphic rape scenes in literature are necessary. I'd go so far as to say they comfort me. +date: 2026-06-14 +tags: media, essay, post +--- + +

{{title}}

+

+

tagged with.. {%- for tag in tags | filterTagList %} + + {%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %} + {%- if not loop.last %}, {% endif %} + {%- endfor %} +by Agnes the Alien +
+ + + + +Okay, let's get this out of the way first: yes, I am a rape survivor, because I know, based on the title, that that question was likely your first thought. + +I am a rape survivor, but my story is a bit more complex; I'm also a survivor of child sex trafficking as well as a survivor of emotional abuse and physical abuse from peers. It feels so odd, by the way, listing these things about myself so casually. I've grown accustomed to it because what happened to me shaped my life so significantly it impacts every second of it, but in this context it feels almost like a job interview. Here you go, dear reader, here are my Rape Qualifications. You know, the trauma you're supposed to list when you write an article like this one. Here are all the reasons why I'm allowed to have this opinion, because surely this opinion in an Unraped individual would be Suspicious. But I'm just going to say it with my entire self, point blank and up front: Graphic rape scenes in literature are _necessary_. I'd go so far as to say they _comfort_ me. + +Literature is... it's a building block of a comfortable and holistic existence, in the sense that it is inescapable unless you're actively trying to life a miserable life; the television shows you watch are often based on books or have themes/concepts that originated in literature (see: "The Vampire Lestat", which I haven't watched but which discourse around inspired this article), the education you undertake requires engagement with literature even in its rudimentary forms, many common English idioms are said to originate in literatue (Shakespeare has a Wikipedia article dedicated to idioms attributed to his work that has so many entries they had to sort it with individual dropdowns for each starting letter). You Quite Simply Cannot Exist In Modern Society Without Interacting With Literature In Some Form, even if that form is abstracted or distant from literature in its purest form (i.e. reading a book). It's just not possible. + +Literature and language are not just building blocks, either; they're also lush and visceral, with, when wielded appropriately, the ability to move, impact, and change. The right kind of story can reach into your essence and plant itself down, or soothe the ache that infects it, or lick its wounds clean, or deepen the wounds life caused. Literature is a neutral weapon, a vicious tool, a Mickey Mouse-style surprise tool that will help us later. It is a power, and it is powerful. + +We see this all the time in people who will say things like, "This story saved my life!" or, "I relate to this character so much they helped me realize hidden aspects of myself!" or even "I love this character so much I want to protect them/fuck them/see them hurt!" And the same people who will write endless posts on how a story has impacted them for the better are often the ones claiming that rape doesn't need to be shown in media ever because it might make people uncomfortable. The same people who claim to appreciate art will demonize art that depicts rape in its most realistic sense, without ever considering why a book would choose to include such a scene. They understand that art can impact, and that art is moving, but it does not occur to them that, for example, a graphic rape scene could be included to elicit empathy for the victim, or to inform people about the realities of rape that are not often acknowledged (that it can come from family members, that a rapist doesn't have to be a specific gender, that rape isn't just penetration, etc)---or simply it could just be that the author feels it is important/necessary to include for the kind of story they're writing. There is also no consideration of the idea that the author may themselves be a victim who is recounting their own experiences in an attempt to cope with their pain, tell their story, reach others.. a myriad of reasons. + +The lack of consideration of these aspects in discussion of media involving graphic rape is reflective of society's overall, inherent disregard of rape victims. The victim and the victim's feelings at large don't matter. The disgust does not come from sympathy for the victim character, just as disgust about rape in real life often doesn't come from sympathy for the victim; it comes from a focus on the rapist. It's either _how could someone be so awful_ or _who made them this way_ or _this makes me personally uncomfortable to imagine happening to me-_\- or it's denial of the act and praising of the rapist. Similarly, with literature, the focus is almost _always_ on demonizing the perpetrator, who, in these scenarios, is for some reason often interpreted to be the author. + +The author must be secretly getting off on it, which is, of course, an inherent evil, even though a paper published in 2008 states 31-57% of women had erotic rape fantasies (W Critelli et al) and a paper from 2009 that studied female undergraduates stated that 67% of them had erotic rape fantasies (Bivona et al). The idea - at least from what I can tell - is that writing a rape scene where the rape is shown on "screen" as opposed to simply handwaved away just like we do to real rape = author must be a rape fetishist = author must be an actual rapist in real life (or support them). But these fantasies are common - how many of those women interviewed, do you think, are or support real life rape? How many do you think are horrified by the concept of real life rape? + +Do you think that those female undergraduates are monsters? That they're going to go out and rape people on the streets at night for fun, or abuse people they know, or that they secretly want to rape someone but are just holding themselves back? Or are they a group of individuals who are particularly vulnerable to rape taking back the concept for themselves, fantasizing about situations in which they have power over the act and can fully control it, either as perpetrator or victim? + +I am not an individual who fantasizes about rape; I find that graphic rape scenes in books bring me comfort. In a society where people are constantly trying to pretend rape away, seeing people confront the topic directly, brutally, and realistically is a breath of fresh air. And you know what? I find comfort in the fact that this makes people uncomfortable. + +Rape is uncomfortable. It should make you feel that way. It should horrify and disgust and mangle, and the spark of that mangling should be at its core compassion, not simply hatred or fear. If a rape scene makes you uncomfortable because it's triggering, I understand. If it makes you uncomfortable because you just don't think it should be portrayed as the horrific act it is - that is where I invoke the Hold On A Sec. + +Be uncomfortable. Look at what I had to go through. Look at how it mangled _me_ into an amalgam of suffering! LOOK. DO NOT TURN AWAY. LOOK SO YOU UNDERSTAND. + +Do you think you're capable of that? + +People often say there's no real reason to have a rape scene, but was I raped for a reason, or did it just happen? + +People dislike these scenes ultimately because it paints a picture that they don't want to look at, and I'm sorry, but it's time to grow up and open your eyes. You don't want to be faced with the fact that by saying graphic rape scenes have no place in literature _anywhere_, you are in essence pretending rape away, and therefore silencing and isolating victims from their own experiences. I get it. No one wants to be told that. + +But you have to look. diff --git a/content/blog/traumaloop.md b/content/blog/traumaloop.md new file mode 100644 index 0000000..9edcf35 --- /dev/null +++ b/content/blog/traumaloop.md @@ -0,0 +1,50 @@ +--- +layout: agneslove-blog +title: (Nus Braka Voice) How's that for a trauma loop? +description: I’ve been thinking a lot lately about my creativity. I don’t do a lot of original work – Ice Dancer was my first poem in… way too long, maybe a YEAR? – I’ve only been focusing on fanworks. I do have ideas for original works! Many, in fact! But every time I sit down to write, there’s a block. I don’t really know why. +date: 2026-03-01 +tags: personal, post +--- + +

{{title}}

+

+

tagged with.. {%- for tag in tags | filterTagList %} + + {%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %} + {%- if not loop.last %}, {% endif %} + {%- endfor %} +by Agnes the Alien +
+ +Content warning: childhood sexual abuse & trafficking. + +I’ve been thinking a lot lately about my creativity. I don’t do a lot of original work – [Ice Dancer](https://kissing.computer/2026/02/27/poem-ice-dancer/) was my first poem in… way too long, maybe a YEAR? – I’ve only been focusing on fanworks. I do have ideas for original works! Many, in fact! But every time I sit down to write, there’s a block. I don’t really know why. + +Maybe it’s that I feel like my original writing is futile. + +I’ve been published before. But because I was suicidal for so long and genuinely didn’t plan on being alive for it to matter, I never really learned how to separate my fandom persona from my professional writing self. And that was a bad idea. When I started to finally heal – around the time I started using dark fiction to cope with past trauma – I realized that the people I surrounded myself with would try to ruin my career and life if they could tie me to that pen name. So I had to rebuild, and none of my previously published works could be tied to my current pen name. I had to remake everything – my author site, my itch.io, etc. Some of my favorite creations can no longer be tied to me because of this, including a piece of interactive art that means… well… just about everything to me. I had about 2k followers on those accounts; now I barely have 200. It all just feels utterly useless. + +I also feel like a lot of my original work is just horribly repetitive these days. I use the same metaphors and the same pains and the same words and the same events, over and over and over again. + +I’m stuck. And not just creatively. + +I’m chained to these things. I’m living a time loop where I’m forced to re-experience them over and over again every day of my pitiful damn existence. I’m being buried alive and when I suffocate I’ll wake up in a television show but for me I really have run out of time!!! Or at least it feels that way. I try not to let fiction write my story for me but it is a little bit easier that way. + +Even my fanworks, honestly, to a lesser extent. I find myself hyperfixated on portrayals of childhood sexual abuse in fiction, and finding ways to project my experiences with it onto characters who haven’t explicitly been through it but also have backstories that would realistically involve it. Take Caleb Mir from Star Trek: SFA for example; he’s been on his own, on the run, and in and out of prison since age six. You don’t escape that unmolested. + +I find myself projecting onto him deeply. I find myself getting unhealthily attached to him. I think about this stuff way way too much. I see myself in him, even if I shouldn’t, even if my life has been paradise compared to his. Thinking about characters having the same pain I have, and overcoming it, gives me some illusion of hope’s tangibility. Illusion, delusion? I don’t know. It just makes me feel like healing can be in reach for me if I try really hard enough – like maybe if I squint really hard and believe and click my heels together I can imagine up a portal into a world where I’m not in this much agony. + +I love SFA because it’s the first time I’ve seen a show with a cast of characters that I feel like would genuinely accept me as a person if they knew me. I relate to SAM so deeply; to see her accepted by everyone – loved by everyone – makes me soar. Caleb comforts fat anxious cadets (even if I have beef with Pickford now.) People are given space to deal with their traumas, given empathy. I’ve never wanted to live in a show more than this (except maybe Doom Patrol, for ficto reasons.) + +But as I go deeper and deeper into escapism here, I find myself just ouroborosing my trauma. Like I just keep throwing it up and then eating the vomit and then throwing it back up and eating it again and so on and so forth, like my dog did when my dad died. The projection helps me cope, but it also keeps me trapped there, in a way. + +And then I wonder if there is a key to release the trap anywhere when you’re a trafficking survivor, or if it’s sort of like how sometimes when people get shot they have to leave bullet fragments in the body because it’s too dangerous to try and remove them. You know? Like, maybe it’s just something you have to carry inside of you as you try to move forward, because going back through it would just make things worse. Maybe coping with fiction is as far as I’m going to get. + +I am in therapy. I see two therapists! I do ketamine therapy twice a week. I literally have appointments 4/5 days a week. Yet here I remain, just barely hanging on, handcuffed to the pole. + +Sometimes I find myself getting confused. I forget that Star Trek technology – and Star Trek peace – isn’t real. I forget that it isn’t that easy. I forget that the peace in Star Trek is just as precarious and blood-soaked as it would be in real life. But it’s easier to live somewhere I feel accepted than live in this universe where the only hobby I’m truly capable of having is retraumatizing myself. + +I want to write about something else now. + + + diff --git a/content/buttonwall.njk b/content/buttonwall.njk new file mode 100644 index 0000000..6aabc0e --- /dev/null +++ b/content/buttonwall.njk @@ -0,0 +1,12 @@ +--- +layout: agneslove.njk +title: Button Wall +eleventyNavigation: + key: slash + title: Button Wall +--- +
+ +friends, mutuals, cool internet people i like:

button for serpentinemalignbutton for euonoiabutton for linkybutton for hellomeibutton for maevedarcybutton for overmorebutton for herewithin + +
diff --git a/content/content.11tydata.js b/content/content.11tydata.js new file mode 100644 index 0000000..8b0bb8e --- /dev/null +++ b/content/content.11tydata.js @@ -0,0 +1,3 @@ +export default { + layout: "layouts/home.njk", +}; diff --git a/content/fandom-badges.njk b/content/fandom-badges.njk new file mode 100644 index 0000000..636410e --- /dev/null +++ b/content/fandom-badges.njk @@ -0,0 +1,37 @@ +--- +layout: agneslove.njk +title: Fandom Badges +description: fandom badges +eleventyNavigation: + key: fandom + title: Fandom Badges +--- +
Badges I've earned in various fandom events.

+From femslashfete on Dreamwidth:
+badge celebrating 10 fills +badge celebrating 5 fills featuring 1 character each with a different ship +badge celebrating 25 fillsfemslashfete badge: medium munch: 5 fills in 5 different mediums +
+ From elasticella's Fresh Femslash Salad Bar on dreamwidth:
+2026: starter salad, 1 hard filla flight of salads, 4 hard fills +
2025: tiny salad, 1 hard fill 2024: lunch salad, four hard fills

+ From July Break Bingo on Tumblr/discord: (please do NOT steal or alter these, at the request of the creators)
+Two discord emojis. One is a UNO reverse card that says NO YOU. The other is a casette with a heart. They are both blue. +
+ From elasticella's Hotties Haunting the Narrative event on dreamwidth: +
3 story haunted house; 3 fills
+ From MY Rarest of Rarepairs event 2025 (this is the first year we have graphic awards and I think they're fun):
+creative canoe; one fill

+
From beagoldfish microbang:
+beagoldfish 2026-a, toothpaste pancake, 2 playlists made, 1 recipe written, 1 gifset made,
+1 icon set shared, 3 fics written

From robinboob:
+joke certificiate indicating ownership of the fictional relationship between keeg bovo 
+and larry trainor
+joke certificiate indicating ownership of the fictional relationship between claire finn and isaac
+joke certificiate indicating ownership of the fictional relationship between alara and solana kitan
+joke certificiate indicating ownership of the fictional relationship between mr morden and anna sheridan
+joke certificiate indicating ownership of the fictional relationship between 
+lyta alexander and kosh naranek +
diff --git a/content/feed/.virtual b/content/feed/.virtual new file mode 100644 index 0000000..0ee5e54 --- /dev/null +++ b/content/feed/.virtual @@ -0,0 +1 @@ +For RSS feed, Atom Feed, and JSON feed templates, see the plugin in eleventy.config.js diff --git a/content/feed/pretty-atom-feed.xsl b/content/feed/pretty-atom-feed.xsl new file mode 100644 index 0000000..6a1c4de --- /dev/null +++ b/content/feed/pretty-atom-feed.xsl @@ -0,0 +1,89 @@ + + + + + + + + <xsl:value-of select="atom:feed/atom:title"/> + + + + + + +
+
+

+ + + + + + + + + + + + + + + + + + + Web Feed Preview +

+

+

+

This preview only shows titles, but the actual feed contains the full content.

+ + + + + Visit Website → + +
+

Recent Items

+ +
+ + +
+ +
+

+ + + + + + +

+ + Published: + +
+
+
diff --git a/content/for-you.njk b/content/for-you.njk new file mode 100644 index 0000000..1f457be --- /dev/null +++ b/content/for-you.njk @@ -0,0 +1,44 @@ +--- +layout: agneslove.njk +title: For You +description: Stuff i made for you page +eleventyNavigation: + key: slash + title: For You +--- +

stuff for YOU!

+

Things I Made

+AO3 Clone in HTML

+ + +A while ago I made a semi-functional AO3 clone in HTML/css. You use this by copying and pasting your works into the work template, then updating the profile and tag pages to link to each work. +

+It's insane, but if you're curious or up for a tedious project, or are dreaming of hosting OTW-Archive one day and want to spin up a prototype, you can download it here.

+ +
+ + Babylon 5 favorite character sorter

+ I didn't code this, biasorter on Tumblr did, I just made it B5. Do you want to know your ultimate favs in B5? Check it out here! +
+ Neocities Edit Current Page Link

+ My first Javascript thingy. I got tired of having to navigate to the Neocities dashboard in the browser whenever I wanted to edit a page; this creates a link on the page that takes you directly to the Neocities file edit page for the url path it is placed on. If someone besides you clicks it, it just takes them to their own Neocities dashboard or the corresponding file on their own site, if they have one. Think the "edit theme" button on Tumblr. + Check it out here!
+ Dreamwidth Comment Fest Scraper
+
This scrapes Dreamwidth comments on a specific posts and sends them to a Discord webhook, generating the comment text and a link to the comment in HTML format text wrapped in backticks. When put on systemd it runs every five hours (don't change that, to be respectful to DW) and if no new comments have been posted since the last one then it returns no comments.

+ My first Python project ever!
+ +
Graphics
+tv verse jane doom patrol deviantart style stamp +tv verse flex mentallo deviantart style stamp +tv verse cliff steele deviantart style stamp +tv verse larry trainor deviantart style stamp +rita farr deviantart style stamp +tv verse maura lee karupt deviantart style stamp +tv verse laura de mille deviantart style stamp +doom patrol tv show vic stone deviantart style stamp +babylon5 deviantart style stamp
doom patrol badge +ALIEN GENDER badge +yay lesbians badge +BUTCH LESBIAN badge +femme lesbian badge
+
diff --git a/content/hosted.njk b/content/hosted.njk new file mode 100644 index 0000000..0209aee --- /dev/null +++ b/content/hosted.njk @@ -0,0 +1,87 @@ +--- +layout: agneslove.njk +title: Services +description: services i host +eleventyNavigation: + key: slash + title: Hosted +--- +
+ +

All of my self-hosted services

+ + + +

+ + + +

I outlined this on my about page before, then realized I wanted to be able to link to it other places. So here we are :)

+ + + +

COMMUNITY
If you'd like an account on any that don't have open signups or invite queues, email me :))

+ + + +
    +
  • SUNSET ARCHIVE; An archive for F/F, NB/F and NB/NB fanworks running on the AO3 code;
    FANDOM.COOKING; a multifandom cookbook using recipes from various public sources;
    CHEESY; a food miniblogging site;
    SILLYWORDZ; a fork of status.cafe that lets you embed your updated word count into your site;
    MINTY; status.cafe instance/embeddable status updates for your site;
  • + + + +
  • MOURNING DOVE; dreamwidth clone/journalling site
    FEMSLASH FORUMS; not ready yet;
  • +
+ + + +

PERSONAL

+ + + + + + + +

Shrines & Fan Sites

+ + + + + + + +

+ + + +

+ +
diff --git a/content/index.njk b/content/index.njk new file mode 100644 index 0000000..e969cfe --- /dev/null +++ b/content/index.njk @@ -0,0 +1,65 @@ +--- +layout: agneslove.njk +title: Agnes the Alien +#description: "Welcome to petrapixel! Here you can find many resources for Neocities, coding help, media recommendations and more in a cute Old Web aesthetic!" +#freezeframe: true +#numberofLatestPostsToShow: 3 +#postsCount: +#latestPostsCOunt: +#morePosts: +--- + +
+
Pixel render of a computer screen that says WELCOME TO MY WEBSITE. Kittens are climbing all over it.
+ + Hello, and welcome to my site! I'm Agnes the Alien, and this is my personal site and weblog. Feel free to poke around and see what I've got.
+
I mostly write about creativity, technology, alterhumanity, fictosexuality, disability, and mental health.
+
Current status: +
+
+ +

+ currently reading... +

+
+
Serious Weakness
+
The Orange Eats Creeps
+

Aggie's favorite books » + +
+ +
+ +
+
+{{ collections.all | eleventyNavigation | eleventyNavigationToHtml | safe }} +
+
+{% set numberOfLatestPostsToShow = 10 %} +{% set postsCount = collections.posts | length %} +{% set latestPostsCount = postsCount | min(numberOfLatestPostsToShow) %} +

Latest {{ latestPostsCount }} Post{% if latestPostsCount != 1 %}s{% endif %}

+ +{% set postslist = collections.posts | head(-1 * numberOfLatestPostsToShow) %} +{% set postslistCounter = postsCount %} +{% include "postslist.njk" %} + +{% set morePosts = postsCount - numberOfLatestPostsToShow %} +{% if morePosts > 0 %} +

{{ morePosts }} more post{% if morePosts != 1 %}s{% endif %} can be found in the archive.

+{% endif %} +
+
{% postGraph collections.posts %}
diff --git a/content/index.njk.example b/content/index.njk.example new file mode 100644 index 0000000..f7d17e1 --- /dev/null +++ b/content/index.njk.example @@ -0,0 +1,29 @@ +---js +const eleventyNavigation = { + key: "Home", + order: 1 +}; + +const numberOfLatestPostsToShow = 3; +--- +{% set postsCount = collections.posts | length %} +{% set latestPostsCount = postsCount | min(numberOfLatestPostsToShow) %} +

Latest {{ latestPostsCount }} Post{% if latestPostsCount != 1 %}s{% endif %}

+ +{% set postslist = collections.posts | head(-1 * numberOfLatestPostsToShow) %} +{% set postslistCounter = postsCount %} +{% include "postslist.njk" %} + +{% set morePosts = postsCount - numberOfLatestPostsToShow %} +{% if morePosts > 0 %} +

{{ morePosts }} more post{% if morePosts != 1 %}s{% endif %} can be found in the archive.

+{% endif %} + +{# List every content page in the project #} +{# + +#} diff --git a/content/info_pages/now.njk b/content/info_pages/now.njk new file mode 100644 index 0000000..4d12947 --- /dev/null +++ b/content/info_pages/now.njk @@ -0,0 +1,9 @@ +--- +layout: agneslove.njk +nesting: "../" +title: NOW +description: now page +tags: main +--- + +skjenrkl diff --git a/content/now.njk b/content/now.njk new file mode 100755 index 0000000..85bb98d --- /dev/null +++ b/content/now.njk @@ -0,0 +1,71 @@ +--- +layout: agneslove.njk +title: Now +description: now page +eleventyNavigation: + key: slash + title: Now +--- + +
+
+Currently... +
+watching: paradise (tv), star trek voyager
+playing: tomodachi life, palia, 1000xresist
+
+

What am I doing now!?!?

+inspired by nownownow.com +
+ +Life...

+Currently finally moving on from 20 years of treatment resistant depression, which is nice, and finally getting treatment for my lifelong PMDD, which will hopefully take care of the rest of my suffering. I'm writing this on June 20, 2026, which means I'm turning 25 in exactly a week. That's pretty wild, considering I never planned to make it past the age of eighteen.

+I'm at peace with my life currently. I'm frightened by the current state of the world, but I have hope. I love my friends and family and partner and pets. I finally feel like I have some sort of tangible, beautiful future? AGAIN: crazy, because I've never known this kind of contentment and hope. I'm squeezing all the juice I can out of every second of my life; I'm not going to let it go to waste. +

+ +Something a lot of people don't talk about is the post-suicidal phase of life. You know, what happens when you've been suicidal since the single digits and it's all you know how to be, and now you have to learn what it's like to want to be around. It might not sound like it, but it's a real adjustment! For so long I have felt like my life is ephemeral, but it isn't. I can make something of it. I just need to figure out how. +

+My life is relatively limited by my health issues, but I want to do as much as I possibly can, both inside and outside of the home. I'm about to start college this August, where I'll be a religious studies major with the goal of volunteering in medical chaplaincy. The one field I can do that I do not think will be replaced by AI any time soon...

+I'm excited for what comes next. + +
+ +Projects...

+ +In October 2025, I launched Sunset Archive, a fanfiction archive using AO3's code dedicated to F/F, F/NB and NB/NB sapphic fanworks. It was rocky at the start, but it has ended up being incredibly rewarding. Now, as I move forward with my mental health and continue to improve, I'm thinking of launching an entire "femslash web"; a cluster of social services and tools made by and for femslash fans, where we come first, and where femslash is freely accessible to those who are looking as opposed to being a needle in a haystack. +I'm very passionate about fandom and sapphic works. I don't know if this will come to fruition, but it is my dream... +

+I'm currently working on a cluster of short stories and am brainstorming a novel, and I recently got a v-gen artist account and plan to open writing commissions soon. +As I write this, it is late June, so ArtFight will be starting soon! This year I'm getting into making jewelry so I can do craft attacks, and just because I want to make jewelry in general, since so many people in my family work with it. +

In fact, here's a practice necklace I made:
+A necklace composed of red heart shaped gems. It has a blue UFO pendant. +

I'm pretty proud of it :-) +
+Goals... +

+
  • To successfully use my DBT skills when necessary to avoid having a breakdown
  • +
  • To finish a novel by June 2027
  • +
  • To write at least 150k by the end of the year
  • +
  • To get a short story professionally published
  • +
  • To continue to improve with my digital art and my crafts
  • +
  • To learn music theory
  • +
  • To finish my freshman year of college with at least a 3.8 GPA.
  • +
    +
    + + + + + + + + + + + + diff --git a/content/sitemap.njk b/content/sitemap.njk new file mode 100644 index 0000000..a97b2b5 --- /dev/null +++ b/content/sitemap.njk @@ -0,0 +1,5 @@ +
    +

    Sitemap


    +{{ collections.all | eleventyNavigation | eleventyNavigationToHtml | safe }} + +
    diff --git a/content/sitemap.xml.njk b/content/sitemap.xml.njk new file mode 100644 index 0000000..a322a52 --- /dev/null +++ b/content/sitemap.xml.njk @@ -0,0 +1,16 @@ +--- +permalink: /sitemap.xml +layout: false +eleventyExcludeFromCollections: true +--- + + + {%- for page in collections.all %} + {%- if page.data.permalink != false %} + + {{ metadata.url }}{{ page.url | url }} + {{ page.date.toISOString() }} + + {%- endif %} + {%- endfor %} + diff --git a/content/tag-list.njk b/content/tag-list.njk new file mode 100644 index 0000000..5346f27 --- /dev/null +++ b/content/tag-list.njk @@ -0,0 +1,8 @@ +

    Tags

    + +
      +{% for tag in collections | getKeys | filterTagList | sortAlphabetically %} + {% set tagUrl %}/tags/{{ tag | slugify }}/{% endset %} +
    • +{% endfor %} +
    diff --git a/content/tag-pages.njk b/content/tag-pages.njk new file mode 100644 index 0000000..ea9a294 --- /dev/null +++ b/content/tag-pages.njk @@ -0,0 +1,29 @@ +---js +// diff --git a/public/theme.js b/public/theme.js new file mode 100644 index 0000000..509c925 --- /dev/null +++ b/public/theme.js @@ -0,0 +1,4 @@ +function myFunction() { + let element = document.body; + element.classList.toggle("theme"); + } diff --git a/public/themeswitcher.js b/public/themeswitcher.js new file mode 100644 index 0000000..f5a8392 --- /dev/null +++ b/public/themeswitcher.js @@ -0,0 +1,15 @@ + +const defaultTheme = "/bigger.css"; + +// Set default if nothing is sto +// Load the selected theme +document.write( + `` +); + +// Make function globally available to onclick +window.setTheme = function(themeFile) { + localStorage.setItem("theme", themeFile); + location.reload(); +}; + diff --git a/public/themeswitcherblog.js b/public/themeswitcherblog.js new file mode 100644 index 0000000..6c59725 --- /dev/null +++ b/public/themeswitcherblog.js @@ -0,0 +1,11 @@ + +const defaultTheme = "/bigger.css" + +document.write( + `` +); + +function setTheme(themeFile) { + localStorage.setItem("theme", themeFile); + location.reload(); +} diff --git a/public/themeswitchersave.js b/public/themeswitchersave.js new file mode 100644 index 0000000..f98dff6 --- /dev/null +++ b/public/themeswitchersave.js @@ -0,0 +1,17 @@ + +const defaultTheme = "/bigger.css"; + +if (!localStorage.getItem("theme")) { + localStorage.setItem("theme", defaultTheme); +} + +document.write( + `` +); + +function setTheme(themeFile) { + localStorage.setItem("theme", themeFile); + location.reload(); + +} + diff --git a/theme-switcher.js b/theme-switcher.js new file mode 100644 index 0000000..085991e --- /dev/null +++ b/theme-switcher.js @@ -0,0 +1,23 @@ + diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..a9d5b12 --- /dev/null +++ b/vercel.json @@ -0,0 +1 @@ +{ "trailingSlash": true }