diff --git a/src/pages/ai.astro b/src/pages/ai.astro deleted file mode 100644 index 936a105..0000000 --- a/src/pages/ai.astro +++ /dev/null @@ -1,388 +0,0 @@ ---- -import BaseLayout from "../layouts/BaseLayout.astro"; ---- - - - - -
-
-
-

How this place is built

-

AI

-
==============================
-

- This page exists as a simple note about how I use AI around - Hidden Den. Not as a grand policy statement, just as a clear - explanation of where it helps and where the site is still - very obviously built by a person. -

-
- -
-

AI As A Tool

-

- I use AI in the same spirit that I use a terminal, an - editor, or a good piece of reference documentation: as a - tool that can help me think faster, test ideas, or get - through implementation work with less friction. -

-

- In practice that can mean refining copy, brainstorming page - structure, shaping prompts for coding agents, working - through technical edge cases, or getting help with a first - draft of a solution before I reshape it into something that - actually fits this site. -

-

- I still write and shape the code myself. AI sometimes helps - explain things, suggest an approach, or help me get unstuck, - but the actual building still happens in my editor and - terminal. -

-
-

- The useful part is assistance, not delegation. AI helps - with scaffolding, iteration, and technical momentum. -

-
-
- -
-

What Stays Human

-

- The final direction still comes from me. I decide what gets - published, what tone feels right, what belongs here, and - what does not. The site is meant to reflect a real person, - not an auto-generated personality layer pretending to be - one. -

-

- That applies to writing, structure, visual choices, and the - general shape of the project. AI can help me move, but it - does not get to replace judgment, taste, or authorship. -

-
-
-

Assistance

-

- Drafts, implementation help, idea pressure-testing, - and faster iteration. -

-
-
-

Not Replacement

-

- Final voice, publishing choices, priorities, and the - actual perspective behind the site stay mine. -

-
-
-
- -
-

Privacy And Boundaries

-

- Privacy matters here, so AI use is deliberate rather than - casual. I do not think every problem should be handed to an - external system by default, and I do not want tooling habits - that quietly erode ownership just because convenience is - available. -

-

- That means using AI where it is practically helpful, keeping - boundaries in mind, and staying aware that these systems are - tools with tradeoffs. They should serve the builder, not - become the environment the builder disappears into. -

-
    -
  • - intentional use: I use it where - it helps, not everywhere by reflex. -
  • -
  • - privacy matters: Not everything - belongs in a prompt window. -
  • -
  • - bounded scope: AI supports - the workflow instead of becoming the workflow. -
  • -
-
- -
-

Why This Fits Hidden Den

-

- Hidden Den is built around understandable systems, practical - ownership, and tools that earn their place. AI fits that - philosophy when it is used calmly and with limits. It can be - useful without becoming an identity, and productive without - being treated like magic. -

-

- That balance matters to me. I like tools that help me build - better and think more clearly, but I still want the site to - feel inhabited, specific, and human-scaled. AI can help with - the scaffolding, but the den is still built by a person. -

-
- - -
-
-
- - diff --git a/src/pages/changelog.astro b/src/pages/changelog.astro deleted file mode 100644 index 8a1ba0c..0000000 --- a/src/pages/changelog.astro +++ /dev/null @@ -1,313 +0,0 @@ ---- -import BaseLayout from "../layouts/BaseLayout.astro"; - -const changelogEntries = [ - { - date: "2026-03-07", - changes: [ - "Added this changelog page as a quiet logbook for how the den grows.", - "Published Coffee & Code #1 and added series support to the blog.", - "Published Things I Learned From Loving Deeply.", - "Added a Q&A page for the site's philosophy and tone.", - "Expanded the About page and added a gentler Start page for new visitors.", - ], - }, - { - date: "2026-03-06", - changes: [ - "Added the Now page as a living snapshot of current focus.", - "Added a Uses page for the tools, systems, and infrastructure behind the site.", - "Refined navigation and layout behavior to support a growing set of pages.", - ], - }, - { - date: "2026-03-04", - changes: [ - "Published After the Silence.", - "Polished the homepage avatar and project card interactions.", - "Added dedicated About and Projects pages, along with some nginx hardening.", - ], - }, - { - date: "2026-03-01", - changes: [ - "Published Welcome to the Den and Love Without Access.", - "Expanded the homepage with socials, age, and cryptographic keys.", - "Added repository workflows and supporting site infrastructure.", - ], - }, - { - date: "2026-01-03", - changes: [ - "Reshaped the site into a more personal page with a warmer identity.", - "Moved the project further away from a placeholder site and closer to Hidden Den as an actual home.", - ], - }, - { - date: "2025-12-23", - changes: [ - "Started the Astro-based site with Docker deployment in mind.", - "Set up the first pieces of the den: project structure, documentation, and hosting groundwork.", - ], - }, -]; ---- - - - - -
-
-
-

Changelog

-
==============================
-

- This page keeps a quiet record of changes to the site. New - pages, new writing, design shifts, structural cleanup, and - the slow work of making the den feel more lived in all land - here. -

-
- -
-

Changelog entries

-
    - { - changelogEntries.map((entry) => ( -
  1. - -
    -
      - {entry.changes.map((change) => ( -
    • {change}
    • - ))} -
    -
    -
  2. - )) - } -
-
- -
-

- The goal is not to announce polished releases. It is simply - to leave a trail showing how this place changes over time. -

-
- - -
-
-
- - diff --git a/src/pages/faq.astro b/src/pages/faq.astro deleted file mode 100644 index b7c2683..0000000 --- a/src/pages/faq.astro +++ /dev/null @@ -1,289 +0,0 @@ ---- -import BaseLayout from "../layouts/BaseLayout.astro"; ---- - - - - -
-
-
-

Quiet answers

-

Q&A

-
==============================
-

- A few short answers for anyone wondering what Cozy Den is, - why it exists, and what kind of space it is trying to be. -

-
- -
-

Questions and answers

- -
-
-

What is Cozy Den?

-

- Cozy Den is a personal website and quiet corner of - the web. It is part writing space, part workshop, - and part home for ideas about self-hosting, - privacy, infrastructure, and building things with - care. -

-
- -
-

- Why build a personal website instead of using social - media? -

-

- Social platforms are useful for discovery, but they - are not good homes. A personal site is calmer, more - durable, and shaped by the person making it instead - of by feeds, algorithms, or platform incentives. -

-
- -
-

What does privacy-first mean for this site?

-

- It means the site tries to ask for as little as - possible. No trackers, no ads, no unnecessary - external scripts, and no design choices built around - surveillance. Visitors are guests here, not data to - be collected. -

-
- -
-

Who is behind Hidden Den?

-

- Hidden Den is built by Latte: a gay furry developer, - homelab enthusiast, and privacy-minded internet - dweller who still believes personal websites should - feel warm, human, and fully their own. -

-
-
-
- -
-
-

- If the short version helps: Cozy Den exists to be a - small, thoughtful place on the internet that belongs to - the person building it. -

-
-
- - -
-
-
- - diff --git a/src/pages/library.astro b/src/pages/library.astro deleted file mode 100644 index 24c5c13..0000000 --- a/src/pages/library.astro +++ /dev/null @@ -1,610 +0,0 @@ ---- -import BaseLayout from "../layouts/BaseLayout.astro"; -import { getCollection } from "astro:content"; -import { formatBlogDate } from "../lib/blog"; -import { getReadingTime } from "../lib/readingTime"; - -const featuredEssays = ( - await getCollection("blog", ({ data }) => !data.draft && data.featuredEssay) -).sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); - -const curatedEssays = featuredEssays.map((post) => ({ - ...post, - readingTime: getReadingTime(post.body), -})); - -const recommendedPath = curatedEssays - .filter((post) => typeof post.data.readingOrder === "number") - .sort( - (a, b) => - (a.data.readingOrder ?? Number.MAX_SAFE_INTEGER) - - (b.data.readingOrder ?? Number.MAX_SAFE_INTEGER), - ); - -const categoryMap = new Map(); - -for (const post of curatedEssays) { - if (!post.data.category) continue; - - const current = categoryMap.get(post.data.category) ?? []; - current.push(post); - categoryMap.set(post.data.category, current); -} - -const categoryGroups = [...categoryMap.entries()].sort(([a], [b]) => - a.localeCompare(b), -); - -function formatCategory(category: string) { - return category.replace(/\b\w/g, (char) => char.toUpperCase()); -} ---- - - - - -
-
-
-

Deeper writing

-

Library

-
==============================
-

- This is the quieter shelf of the den: a place for longer - posts, reflective essays, and writing worth revisiting. The - blog keeps the full archive. The library is a smaller, - curated reading room. -

-
- - { - curatedEssays.length === 0 ? ( -
-
-

- The shelf is still being arranged. For now, the - deeper writing still lives in the blog until - more posts are marked for the library. -

-
-
- ) : ( - <> -
-
-

- Highlighted Essays -

- - Browse all posts - -
-

- A small curated shelf of the more substantial - writing on the site. -

-
    - {curatedEssays.map((post) => ( -
  • -
    -
    -
    - - - - {post.readingTime.text} - -
    - {post.data.category && ( - - {formatCategory( - post.data.category, - )} - - )} -
    -

    - - {post.data.title} - -

    -

    {post.data.description}

    - - Read essay - -
    -
  • - ))} -
-
- - {recommendedPath.length >= 2 && ( -
-

- Recommended Reading Path -

-

- If you want a gentle path through the longer - writing, start here. -

-
    - {recommendedPath.map((post) => ( -
  1. - - {post.data.readingOrder} - -
    -

    - - {post.data.title} - -

    -

    {post.data.description}

    -
    - - {formatBlogDate( - post.data.pubDate, - )} - - - - {post.readingTime.text} - -
    -
    -
  2. - ))} -
-
- )} - - {categoryGroups.length > 0 && ( -
-

Browse By Theme

-

- The same shelf, grouped more loosely by what - each piece leans toward. -

-
- {categoryGroups.map(([category, posts]) => ( -
-

- {formatCategory(category)} -

-
    - {posts.map((post) => ( -
  • - - {post.data.title} - - - {formatBlogDate( - post.data - .pubDate, - )}{" "} - ·{" "} - { - post.readingTime - .text - } - -
  • - ))} -
-
- ))} -
-
- )} - - ) - } - -
-

Made with love by Latte

-
-
-
-
- - diff --git a/src/pages/start.astro b/src/pages/start.astro deleted file mode 100644 index b9d3ca3..0000000 --- a/src/pages/start.astro +++ /dev/null @@ -1,670 +0,0 @@ ---- -import BaseLayout from "../layouts/BaseLayout.astro"; -import projects from "../data/projects.json"; -import { getCollection, type CollectionEntry } from "astro:content"; - -type Project = { - name: string; - description: string; - tags: string[]; - status: "stable" | "wip" | "concept"; - links: { - site?: string; - gitea?: string; - github?: string; - }; -}; - -const posts = (await getCollection("blog", ({ data }) => !data.draft)).sort( - (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(), -); - -const recommendedPosts = posts.slice(0, 3); - -const typedProjects = projects as Project[]; -const highlightedProjectNames = ["GuardDen", "openrabbit", "DevDen"]; - -const highlightedProjects = highlightedProjectNames - .map((name) => typedProjects.find((project) => project.name === name)) - .filter((project): project is Project => Boolean(project)); - -function formatDate(date: CollectionEntry<"blog">["data"]["pubDate"]) { - return date.toISOString().split("T")[0]; -} - -function getProjectLink(project: Project) { - return ( - project.links.site || - project.links.gitea || - project.links.github || - "/projects" - ); -} - -function getProjectLinkLabel(project: Project) { - if (project.links.site) return "visit"; - if (project.links.gitea) return "gitea"; - if (project.links.github) return "github"; - return "projects"; -} ---- - - - - -
-
-
-

New here?

-

Start Here

-
==============================
-

- This page is a small orientation point for first-time - visitors. If you have just found Hidden Den, this is the - quickest way to get a feel for what kind of place it is and - where you might want to wander next. -

-
- -
-

What Hidden Den Is

-

- Hidden Den is Latte's personal corner of the internet: - part writing space, part workshop, part quiet place to think - out loud. It holds projects, experiments, - infrastructure-minded notes, and the kind of personal web - presence that does not need to behave like a brand. -

-

- The site leans toward privacy, ownership, and human-scale - spaces online. It is built to feel warm and readable rather - than optimized, noisy, or extractive. More cozy tech wizard - than cyberpunk hacker. -

-
-

- If you want the short version: this is a personal site - for writing, building, self-hosting, and keeping a small - piece of the web genuinely personal. -

-
-
- -
-
- - See all posts -
-

- A few good starting points from the blog. These give a feel - for the den so far without asking you to dig through - everything first. -

- - { - recommendedPosts.length === 0 ? ( -

- The den is still quiet on the writing front. -

- ) : ( -
    - {recommendedPosts.map((post) => ( -
  • - -
  • - ))} -
- ) - } -
- -
-

Explore The Site

-

- If you would rather browse by section, these are the best - places to continue. -

- - -
- -
-
-

Projects Worth Seeing

- Browse all projects -
-

- A small curated subset, just enough to sketch the shape of - the work without turning this page into a full catalog. -

- -
    - { - highlightedProjects.map((project) => ( -
  • - -
  • - )) - } -
-
- -
-

Made with love by Latte

-
-
-
-
- -