This commit is contained in:
2025-12-31 18:03:56 +00:00
parent 06baa33395
commit 51db744cc1
4 changed files with 5933 additions and 392 deletions
+5506
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -1,4 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<rect width="100" height="100" fill="#1a1410"/> <rect width="100" height="100" fill="#1a1410"/>
<text x="50" y="70" font-size="60" text-anchor="middle" fill="#d4a574"></text> <circle cx="50" cy="50" r="35" fill="#d4a574"/>
<circle cx="50" cy="50" r="25" fill="#2a1f18"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 220 B

+125 -121
View File
@@ -1,150 +1,154 @@
--- ---
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from "../layouts/BaseLayout.astro";
--- ---
<BaseLayout <BaseLayout
title="404 - Page Not Found | Hidden Den Cafe" title="404 - Page Not Found | Hidden Den Cafe"
description="This page doesn't exist in the Hidden Den. Let's get you back to somewhere cozy." description="This page doesn't exist in the Hidden Den. Let's get you back to somewhere cozy."
> >
<main class="not-found-page"> <main class="not-found-page">
<div class="container"> <div class="container">
<div class="card fade-in"> <div class="card fade-in">
<div class="not-found-content"> <div class="not-found-content">
<h1 class="error-code">404</h1> <h1 class="error-code">404</h1>
<h2 class="error-title">Lost in the Den?</h2> <h2 class="error-title">Lost in the Den?</h2>
<p class="error-message"> <p class="error-message">
Oops! This cozy corner doesn't seem to exist. Maybe it's still being built, Oops! This cozy corner doesn't seem to exist. Maybe it's
or perhaps you've wandered into a part of the den that hasn't been opened yet. still being built, or perhaps you've wandered into a
</p> part of the den that hasn't been opened yet.
<div class="actions"> </p>
<a href="/" class="btn-primary"> <div class="actions">
<span aria-hidden="true">🏡</span> Back to Home <a href="/" class="btn-primary"> Back to Home </a>
</a> <a
<a href="https://git.hiddenden.cafe" class="btn-secondary" target="_blank" rel="noopener noreferrer"> href="https://git.hiddenden.cafe"
<span aria-hidden="true">📦</span> Visit Gitea class="btn-secondary"
</a> target="_blank"
</div> rel="noopener noreferrer"
>
Visit Gitea
</a>
</div>
</div>
</div>
</div> </div>
</div> </main>
</div>
</main>
</BaseLayout> </BaseLayout>
<style> <style>
.not-found-page { .not-found-page {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-height: 100vh; min-height: 100vh;
padding: var(--space-md); padding: var(--space-md);
} }
.container { .container {
max-width: 600px; max-width: 600px;
width: 100%; width: 100%;
} }
.card { .card {
background: var(--color-bg-light); background: var(--color-bg-light);
border-radius: 12px; border-radius: 12px;
padding: var(--space-xl); padding: var(--space-xl);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(212, 165, 116, 0.1); border: 1px solid rgba(212, 165, 116, 0.1);
text-align: center; text-align: center;
} }
.not-found-content { .not-found-content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: var(--space-md); gap: var(--space-md);
} }
.error-code {
font-size: 6rem;
font-weight: bold;
color: var(--color-accent);
line-height: 1;
margin: 0;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.error-title {
font-size: 2rem;
margin: 0;
color: var(--color-accent-bright);
}
.error-message {
font-size: 1.1rem;
color: var(--color-text-dim);
line-height: 1.6;
margin: 0;
}
.actions {
display: flex;
gap: var(--space-md);
justify-content: center;
flex-wrap: wrap;
margin-top: var(--space-md);
}
.btn-primary,
.btn-secondary {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
padding: var(--space-sm) var(--space-lg);
border-radius: 8px;
font-weight: 500;
transition: all 0.2s ease;
text-decoration: none;
}
.btn-primary {
background: var(--color-accent);
color: var(--color-bg);
}
.btn-primary:hover {
background: var(--color-accent-bright);
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(212, 165, 116, 0.3);
}
.btn-secondary {
background: transparent;
color: var(--color-accent-bright);
border: 2px solid var(--color-accent);
}
.btn-secondary:hover {
background: rgba(212, 165, 116, 0.1);
border-color: var(--color-accent-bright);
transform: translateY(-2px);
}
@media (max-width: 768px) {
.error-code { .error-code {
font-size: 4rem; font-size: 6rem;
font-weight: bold;
color: var(--color-accent);
line-height: 1;
margin: 0;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
} }
.error-title { .error-title {
font-size: 1.5rem; font-size: 2rem;
margin: 0;
color: var(--color-accent-bright);
} }
.error-message { .error-message {
font-size: 1rem; font-size: 1.1rem;
color: var(--color-text-dim);
line-height: 1.6;
margin: 0;
} }
.actions { .actions {
flex-direction: column; display: flex;
gap: var(--space-md);
justify-content: center;
flex-wrap: wrap;
margin-top: var(--space-md);
} }
.btn-primary, .btn-primary,
.btn-secondary { .btn-secondary {
width: 100%; display: inline-flex;
justify-content: center; align-items: center;
gap: var(--space-xs);
padding: var(--space-sm) var(--space-lg);
border-radius: 8px;
font-weight: 500;
transition: all 0.2s ease;
text-decoration: none;
}
.btn-primary {
background: var(--color-accent);
color: var(--color-bg);
}
.btn-primary:hover {
background: var(--color-accent-bright);
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(212, 165, 116, 0.3);
}
.btn-secondary {
background: transparent;
color: var(--color-accent-bright);
border: 2px solid var(--color-accent);
}
.btn-secondary:hover {
background: rgba(212, 165, 116, 0.1);
border-color: var(--color-accent-bright);
transform: translateY(-2px);
}
@media (max-width: 768px) {
.error-code {
font-size: 4rem;
}
.error-title {
font-size: 1.5rem;
}
.error-message {
font-size: 1rem;
}
.actions {
flex-direction: column;
}
.btn-primary,
.btn-secondary {
width: 100%;
justify-content: center;
}
} }
}
</style> </style>
+300 -270
View File
@@ -1,301 +1,331 @@
--- ---
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from "../layouts/BaseLayout.astro";
--- ---
<BaseLayout <BaseLayout
title="Hidden Den Cafe - Cozy Self-Hosted Services" title="Hidden Den Cafe - Cozy Self-Hosted Services"
description="Welcome to Hidden Den Cafe - a warm, self-hosted space where technology meets comfort. Privacy-focused, furry-friendly, and built with love by Latte." description="Welcome to Hidden Den Cafe - a warm, self-hosted space where technology meets comfort. Privacy-focused, furry-friendly, and built with love by Latte."
> >
<main id="main-content"> <main id="main-content">
<!-- Hero Section --> <!-- Hero Section -->
<section class="hero" aria-labelledby="hero-title"> <section class="hero" aria-labelledby="hero-title">
<div class="container"> <div class="container">
<div class="hero-content fade-in"> <div class="hero-content fade-in">
<h1 id="hero-title" class="hero-title"> <h1 id="hero-title" class="hero-title">Hidden Den Cafe</h1>
<span aria-hidden="true">🏡</span> Hidden Den Cafe <p class="hero-subtitle">A cozy corner of the internet</p>
</h1> </div>
<p class="hero-subtitle">A cozy corner of the internet</p>
</div>
</div>
</section>
<!-- About Hidden Den Section -->
<section class="section about-den" aria-labelledby="about-den-heading">
<div class="container">
<div class="card fade-in">
<h2 id="about-den-heading"><span aria-hidden="true">☕</span> About Hidden Den</h2>
<p>
Welcome to Hidden Den Cafe - a warm, self-hosted space where technology
meets comfort. This is a personal corner of the internet built with love,
care, and a strong belief in privacy and open-source values.
</p>
<p>
Everything here runs on self-hosted infrastructure, giving complete control
over data and services. No cloud dependencies, no tracking, just a cozy
digital home.
</p>
</div>
</div>
</section>
<!-- About Latte Section -->
<section class="section about-me" aria-labelledby="about-me-heading">
<div class="container">
<div class="card fade-in">
<h2 id="about-me-heading"><span aria-hidden="true">🦊</span> About Me</h2>
<p>
Hey there! I'm Latte, a gay furry developer who loves building things
and being part of the warm, welcoming furry community. I'm passionate
about self-hosting, open-source software, and creating cozy spaces
both online and off.
</p>
<p>
I work primarily with Python and Flask, though I'm always learning new
things (currently exploring JavaScript and the C stack). When I get those
surges of creative energy, I love diving into new projects - from Reddit
downloaders to Telegram sticker tools, and everything in between.
</p>
<p>
Coffee enthusiast ☕ • Linux lover 🐧 • Self-hosting advocate 🏠
</p>
</div>
</div>
</section>
<!-- Services Section -->
<section class="section services" aria-labelledby="services-heading">
<div class="container">
<div class="card fade-in">
<h2 id="services-heading"><span aria-hidden="true">🛠️</span> Services</h2>
<p>Here are the services currently running in the den:</p>
<div class="service-list" role="list">
<div class="service-item" role="listitem">
<h3>
<a href="https://git.hiddenden.cafe" target="_blank" rel="noopener noreferrer" aria-label="Visit Gitea - Self-hosted Git service">
<span aria-hidden="true">📦</span> Gitea
</a>
</h3>
<p>Self-hosted Git service for all my projects and code repositories.</p>
</div> </div>
</section>
<div class="service-item coming-soon" role="listitem"> <!-- About Hidden Den Section -->
<h3><span aria-hidden="true">🔜</span> More Coming Soon</h3> <section class="section about-den" aria-labelledby="about-den-heading">
<p>The den is always growing! More services will be added as they're developed and deployed.</p> <div class="container">
<div class="card fade-in">
<h2 id="about-den-heading">About Hidden Den</h2>
<p>
Welcome to Hidden Den Cafe - a warm, self-hosted space
where technology meets comfort. This is a personal
corner of the internet built with love, care, and a
strong belief in privacy and open-source values.
</p>
<p>
Everything here runs on self-hosted infrastructure,
giving complete control over data and services. No cloud
dependencies, no tracking, just a cozy digital home.
</p>
</div>
</div> </div>
</div> </section>
</div>
</div>
</section>
<!-- Support Section --> <!-- About Latte Section -->
<section class="section support" aria-labelledby="support-heading"> <section class="section about-me" aria-labelledby="about-me-heading">
<div class="container"> <div class="container">
<div class="card fade-in"> <div class="card fade-in">
<h2 id="support-heading"><span aria-hidden="true">💝</span> How to Help Out</h2> <h2 id="about-me-heading">About Me</h2>
<p> <p>
If you'd like to support the Hidden Den and help keep the lights on, Hey there! I'm Latte, a gay furry developer who loves
here are some ways you can contribute: building things and being part of the warm, welcoming
</p> furry community. I'm passionate about self-hosting,
open-source software, and creating cozy spaces both
<div class="support-list" role="list"> online and off.
<div class="support-item" role="listitem"> </p>
<h3><span aria-hidden="true">🌟</span> Share & Spread the Word</h3> <p>
<p>Tell others about the projects and services hosted here!</p> I work primarily with Python and Flask, though I'm
always learning new things (currently exploring
JavaScript and the C stack). When I get those surges of
creative energy, I love diving into new projects - from
Reddit downloaders to Telegram sticker tools, and
everything in between.
</p>
<p>
Coffee enthusiast • Linux lover • Self-hosting advocate
</p>
</div>
</div> </div>
</section>
<div class="support-item" role="listitem"> <!-- Services Section -->
<h3><span aria-hidden="true">🐛</span> Report Issues</h3> <section class="section services" aria-labelledby="services-heading">
<p>Found a bug or have a suggestion? Let me know!</p> <div class="container">
<div class="card fade-in">
<h2 id="services-heading">Services</h2>
<p>Here are the services currently running in the den:</p>
<div class="service-list" role="list">
<div class="service-item" role="listitem">
<h3>
<a
href="https://git.hiddenden.cafe"
target="_blank"
rel="noopener noreferrer"
aria-label="Visit Gitea - Self-hosted Git service"
>
Gitea
</a>
</h3>
<p>
Self-hosted Git service for all my projects and
code repositories.
</p>
</div>
<div class="service-item coming-soon" role="listitem">
<h3>More Coming Soon</h3>
<p>
The den is always growing! More services will be
added as they're developed and deployed.
</p>
</div>
</div>
</div>
</div> </div>
</section>
<div class="support-item" role="listitem"> <!-- Support Section -->
<h3><span aria-hidden="true">☕</span> Buy Me a Coffee</h3> <section class="section support" aria-labelledby="support-heading">
<p> <div class="container">
Donations help cover server costs and keep the den cozy. <div class="card fade-in">
<span class="coming-soon-text">(Payment links coming soon!)</span> <h2 id="support-heading">How to Help Out</h2>
</p> <p>
If you'd like to support the Hidden Den and help keep
the lights on, here are some ways you can contribute:
</p>
<div class="support-list" role="list">
<div class="support-item" role="listitem">
<h3>Share & Spread the Word</h3>
<p>
Tell others about the projects and services
hosted here!
</p>
</div>
<div class="support-item" role="listitem">
<h3>Report Issues</h3>
<p>
Found a bug or have a suggestion? Let me know!
</p>
</div>
<div class="support-item" role="listitem">
<h3>Buy Me a Coffee</h3>
<p>
Donations help cover server costs and keep the
den cozy.
<span class="coming-soon-text"
>(Payment links coming soon!)</span
>
</p>
</div>
<div class="support-item" role="listitem">
<h3>Contribute</h3>
<p>
Check out the projects on Gitea - contributions
are always welcome!
</p>
</div>
</div>
</div>
</div> </div>
</section>
<div class="support-item" role="listitem"> <!-- Footer -->
<h3><span aria-hidden="true">🤝</span> Contribute</h3> <footer class="footer" role="contentinfo">
<p>Check out the projects on Gitea - contributions are always welcome!</p> <div class="container">
<p>Made with love by Latte</p>
<nav aria-label="Footer navigation">
<p class="footer-links">
<a
href="https://git.hiddenden.cafe"
target="_blank"
rel="noopener noreferrer">Gitea</a
>
</p>
</nav>
</div> </div>
</div> </footer>
</div> </main>
</div>
</section>
<!-- Footer -->
<footer class="footer" role="contentinfo">
<div class="container">
<p>Made with <span aria-hidden="true">💖</span><span class="sr-only">love</span> by Latte</p>
<nav aria-label="Footer navigation">
<p class="footer-links">
<a href="https://git.hiddenden.cafe" target="_blank" rel="noopener noreferrer">Gitea</a>
<span class="separator" aria-hidden="true">•</span>
<a href="https://dmush.cloud" target="_blank" rel="noopener noreferrer">dmush.cloud</a>
</p>
</nav>
</div>
</footer>
</main>
</BaseLayout> </BaseLayout>
<style> <style>
main { main {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 100vh; min-height: 100vh;
} }
.container { .container {
max-width: 800px; max-width: 800px;
margin: 0 auto; margin: 0 auto;
padding: 0 var(--space-md); padding: 0 var(--space-md);
width: 100%; width: 100%;
} }
/* Hero Section */ /* Hero Section */
.hero { .hero {
padding: var(--space-xl) 0; padding: var(--space-xl) 0;
text-align: center; text-align: center;
background: linear-gradient(135deg, var(--color-bg) 0%, var(--color-bg-light) 100%); background: linear-gradient(
} 135deg,
var(--color-bg) 0%,
var(--color-bg-light) 100%
);
}
.hero-title {
font-size: 3rem;
margin-bottom: var(--space-sm);
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.hero-subtitle {
font-size: 1.25rem;
color: var(--color-text-dim);
}
/* Sections */
.section {
padding: var(--space-lg) 0;
}
.card {
background: var(--color-bg-light);
border-radius: 12px;
padding: var(--space-lg);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(212, 165, 116, 0.1);
}
.card h2 {
font-size: 2rem;
margin-bottom: var(--space-md);
}
.card p {
margin-bottom: var(--space-md);
color: var(--color-text);
}
.card p:last-child {
margin-bottom: 0;
}
/* Services Section */
.service-list {
margin-top: var(--space-md);
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.service-item {
background: var(--color-bg);
padding: var(--space-md);
border-radius: 8px;
border-left: 4px solid var(--color-accent);
}
.service-item h3 {
margin-bottom: var(--space-xs);
font-size: 1.25rem;
}
.service-item p {
color: var(--color-text-dim);
margin: 0;
}
.service-item.coming-soon {
border-left-color: var(--color-warm);
opacity: 0.8;
}
/* Support Section */
.support-list {
margin-top: var(--space-md);
display: grid;
gap: var(--space-md);
}
.support-item {
background: var(--color-bg);
padding: var(--space-md);
border-radius: 8px;
}
.support-item h3 {
margin-bottom: var(--space-xs);
font-size: 1.25rem;
}
.support-item p {
color: var(--color-text-dim);
margin: 0;
}
.coming-soon-text {
font-style: italic;
color: var(--color-warm);
}
/* Footer */
.footer {
margin-top: auto;
padding: var(--space-lg) 0;
text-align: center;
border-top: 1px solid rgba(212, 165, 116, 0.2);
background: var(--color-bg-light);
}
.footer p {
color: var(--color-text-dim);
margin-bottom: var(--space-xs);
}
.footer-links {
display: flex;
justify-content: center;
align-items: center;
gap: var(--space-sm);
}
.separator {
color: var(--color-warm);
}
/* Responsive */
@media (max-width: 768px) {
.hero-title { .hero-title {
font-size: 2rem; font-size: 3rem;
margin-bottom: var(--space-sm);
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
} }
.hero-subtitle { .hero-subtitle {
font-size: 1rem; font-size: 1.25rem;
color: var(--color-text-dim);
}
/* Sections */
.section {
padding: var(--space-lg) 0;
}
.card {
background: var(--color-bg-light);
border-radius: 12px;
padding: var(--space-lg);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(212, 165, 116, 0.1);
} }
.card h2 { .card h2 {
font-size: 1.5rem; font-size: 2rem;
margin-bottom: var(--space-md);
}
.card p {
margin-bottom: var(--space-md);
color: var(--color-text);
}
.card p:last-child {
margin-bottom: 0;
}
/* Services Section */
.service-list {
margin-top: var(--space-md);
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.service-item {
background: var(--color-bg);
padding: var(--space-md);
border-radius: 8px;
border-left: 4px solid var(--color-accent);
}
.service-item h3 {
margin-bottom: var(--space-xs);
font-size: 1.25rem;
}
.service-item p {
color: var(--color-text-dim);
margin: 0;
}
.service-item.coming-soon {
border-left-color: var(--color-warm);
opacity: 0.8;
}
/* Support Section */
.support-list {
margin-top: var(--space-md);
display: grid;
gap: var(--space-md);
}
.support-item {
background: var(--color-bg);
padding: var(--space-md);
border-radius: 8px;
}
.support-item h3 {
margin-bottom: var(--space-xs);
font-size: 1.25rem;
}
.support-item p {
color: var(--color-text-dim);
margin: 0;
}
.coming-soon-text {
font-style: italic;
color: var(--color-warm);
}
/* Footer */
.footer {
margin-top: auto;
padding: var(--space-lg) 0;
text-align: center;
border-top: 1px solid rgba(212, 165, 116, 0.2);
background: var(--color-bg-light);
}
.footer p {
color: var(--color-text-dim);
margin-bottom: var(--space-xs);
}
.footer-links {
display: flex;
justify-content: center;
align-items: center;
gap: var(--space-sm);
}
.separator {
color: var(--color-warm);
}
/* Responsive */
@media (max-width: 768px) {
.hero-title {
font-size: 2rem;
}
.hero-subtitle {
font-size: 1rem;
}
.card h2 {
font-size: 1.5rem;
}
} }
}
</style> </style>