<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Daem0n-MCP | Eternal Memory for AI Agents</title>
<meta name="description" content="Bind your AI with persistent memory. Daem0n-MCP grants Claude Code the power to remember decisions, learn from failures, and accumulate wisdom across sessions.">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;600;700&family=Crimson+Text:ital,wght@0,400;0,600;1,400&display=swap" rel="stylesheet">
<style>
:root {
--blood: #8b0000;
--blood-glow: #ff2222;
--void: #050508;
--abyss: #0d0d14;
--shadow: #15151e;
--bone: #e8e8e2;
--ash: #a0a0a0;
--gold: #d4af37;
--gold-dim: #9a845a;
--glass: rgba(13, 13, 20, 0.7);
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--void);
}
::-webkit-scrollbar-thumb {
background: linear-gradient(to bottom, transparent, var(--blood), transparent);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--blood-glow);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Crimson Text', Georgia, serif;
background: var(--void);
color: var(--bone);
min-height: 100vh;
overflow-x: hidden;
line-height: 1.7;
}
/* Animated background sigils */
.sigil-bg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
opacity: 0.04;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' stroke='%238b0000' stroke-width='0.5' fill='none'/%3E%3Ccircle cx='50' cy='50' r='30' stroke='%238b0000' stroke-width='0.3' fill='none'/%3E%3Cpolygon points='50,10 61,40 95,40 68,60 79,90 50,70 21,90 32,60 5,40 39,40' stroke='%238b0000' stroke-width='0.5' fill='none'/%3E%3C/svg%3E");
background-size: 600px 600px;
animation: drift 100s linear infinite;
}
.sigil-bg-2 {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
opacity: 0.02;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' stroke='%238b0000' stroke-width='0.2' fill='none'/%3E%3Cpath d='M20,50 L80,50 M50,20 L50,80' stroke='%238b0000' stroke-width='0.2'/%3E%3Crect x='35' y='35' width='30' height='30' stroke='%238b0000' stroke-width='0.2' fill='none'/%3E%3C/svg%3E");
background-size: 800px 800px;
animation: drift-reverse 150s linear infinite;
}
@keyframes drift {
from { background-position: 0 0; }
to { background-position: 600px 600px; }
}
@keyframes drift-reverse {
from { background-position: 0 0; }
to { background-position: -800px 800px; }
}
/* Vignette overlay */
.vignette {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
background: radial-gradient(ellipse at center, transparent 0%, var(--void) 100%);
animation: breathe 10s ease-in-out infinite;
}
@keyframes breathe {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
}
.cursor-glow {
position: fixed;
width: 600px;
height: 600px;
background: radial-gradient(circle at center, rgba(139, 0, 0, 0.08) 0%, transparent 70%);
pointer-events: none;
z-index: 0;
transform: translate(-50%, -50%);
transition: opacity 0.5s ease;
opacity: 0;
}
.container {
position: relative;
z-index: 2;
max-width: 900px;
margin: 0 auto;
padding: 2rem;
}
/* Header */
header {
text-align: center;
padding: 4rem 0 3rem;
}
.pentacle {
width: 140px;
height: 140px;
margin: 0 auto 2rem;
animation: pulse-glow 4s ease-in-out infinite, rotate-slow 20s linear infinite;
transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
cursor: pointer;
}
.pentacle:hover {
transform: scale(1.1) rotate(45deg);
filter: drop-shadow(0 0 30px var(--blood-glow)) !important;
}
@keyframes rotate-slow {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes pulse-glow {
0%, 100% { filter: drop-shadow(0 0 10px var(--blood)) drop-shadow(0 0 20px rgba(139, 0, 0, 0.3)); }
50% { filter: drop-shadow(0 0 25px var(--blood-glow)) drop-shadow(0 0 50px rgba(255, 34, 34, 0.4)); }
}
h1 {
font-family: 'Cinzel', serif;
font-size: 4rem;
font-weight: 700;
letter-spacing: 0.2em;
color: var(--bone);
text-shadow: 0 0 30px rgba(139, 0, 0, 0.6);
margin-bottom: 0.5rem;
opacity: 0;
transform: translateY(20px);
animation: reveal 1s cubic-bezier(0.23, 1, 0.32, 1) forwards;
}
@keyframes reveal {
to { opacity: 1; transform: translateY(0); }
}
h1 span {
color: var(--blood);
}
.tagline {
font-size: 1.3rem;
font-style: italic;
color: var(--ash);
letter-spacing: 0.1em;
opacity: 0;
transform: translateY(10px);
animation: reveal 1s cubic-bezier(0.23, 1, 0.32, 1) 0.3s forwards;
}
/* Decorative divider */
.divider {
display: flex;
align-items: center;
justify-content: center;
margin: 3rem 0;
}
.divider-line {
height: 1px;
width: 200px;
background: linear-gradient(90deg, transparent, var(--blood), transparent);
}
/* Main content sections */
section {
margin-bottom: 4rem;
}
h2 {
font-family: 'Cinzel', serif;
font-size: 1.8rem;
color: var(--gold);
text-align: center;
margin-bottom: 1.5rem;
letter-spacing: 0.1em;
}
.intro-text {
font-size: 1.25rem;
text-align: center;
max-width: 750px;
margin: 0 auto;
color: var(--bone);
letter-spacing: 0.02em;
}
.reveal-section {
opacity: 0;
transform: translateY(40px);
transition: all 1s cubic-bezier(0.23, 1, 0.32, 1);
}
.reveal-section.active {
opacity: 1;
transform: translateY(0);
}
/* Feature cards */
.features {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.feature-card {
background: linear-gradient(135deg, var(--abyss) 0%, var(--shadow) 100%);
border: 1px solid rgba(139, 0, 0, 0.2);
border-radius: 12px;
padding: 1.75rem;
transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
position: relative;
overflow: hidden;
backdrop-filter: blur(5px);
}
.feature-card::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.03), transparent);
transform: rotate(45deg);
transition: 0.6s;
pointer-events: none;
}
.feature-card:hover::before {
left: 100%;
top: 100%;
}
.feature-card:hover {
border-color: var(--blood-glow);
box-shadow: 0 10px 40px rgba(139, 0, 0, 0.3);
transform: translateY(-8px) scale(1.02);
background: linear-gradient(135deg, var(--shadow) 0%, var(--abyss) 100%);
}
.feature-card h3 {
font-family: 'Cinzel', serif;
font-size: 1.1rem;
color: var(--gold);
margin-bottom: 0.5rem;
}
.feature-card p {
font-size: 0.95rem;
color: var(--ash);
}
/* Code block */
.ritual-code {
background: var(--abyss);
border: 1px solid rgba(139, 0, 0, 0.3);
border-radius: 8px;
padding: 1.5rem;
margin: 2rem 0;
overflow-x: auto;
}
.ritual-code pre {
font-family: 'Courier New', monospace;
font-size: 0.9rem;
color: var(--bone);
line-height: 1.6;
}
.ritual-code .comment {
color: var(--ash);
}
.ritual-code .command {
color: var(--gold);
}
.ritual-code .string {
color: #98c379;
}
/* Grimoire download section */
.grimoire-section {
background: linear-gradient(180deg, var(--abyss) 0%, rgba(139, 0, 0, 0.15) 50%, var(--abyss) 100%);
border: 1px solid rgba(139, 0, 0, 0.4);
border-radius: 16px;
padding: 4rem 2rem;
text-align: center;
backdrop-filter: blur(10px);
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
position: relative;
overflow: hidden;
}
.grimoire-section::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 50%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(139, 0, 0, 0.1), transparent);
animation: scan 8s linear infinite;
}
@keyframes scan {
0% { left: -100%; }
20%, 100% { left: 200%; }
}
.grimoire-section h2 {
margin-bottom: 1rem;
}
.grimoire-section p {
color: var(--ash);
margin-bottom: 2rem;
}
.grimoire-buttons {
display: flex;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.grimoire-btn {
display: inline-flex;
align-items: center;
padding: 1.35rem 3.5rem;
font-family: 'Cinzel', serif;
font-size: 1.2rem;
font-weight: 700;
text-decoration: none;
border-radius: 8px;
transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
letter-spacing: 0.12em;
background: linear-gradient(135deg, var(--blood) 0%, #4a0000 100%);
color: var(--bone);
border: 1px solid var(--blood-glow);
position: relative;
overflow: hidden;
box-shadow: 0 0 20px rgba(139, 0, 0, 0.4);
cursor: pointer;
}
.grimoire-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 34, 34, 0.3), transparent);
transition: 0.5s;
}
.grimoire-btn:hover::before {
left: 100%;
}
.grimoire-btn:hover {
background: linear-gradient(135deg, var(--blood-glow) 0%, var(--blood) 100%);
box-shadow: 0 0 40px rgba(255, 34, 34, 0.7);
transform: translateY(-5px) scale(1.05);
color: #fff;
}
/* Quick start - subdued */
.quick-start {
opacity: 0.85;
}
.quick-start h2 {
font-size: 1.4rem;
color: var(--ash);
}
.quick-start .ritual-code {
border-color: rgba(139, 0, 0, 0.15);
}
/* Memory types */
.memory-types {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
margin-top: 1.5rem;
}
@media (max-width: 600px) {
.memory-types {
grid-template-columns: 1fr;
}
}
.memory-type {
padding: 1.25rem;
background: var(--abyss);
border-radius: 10px;
border-left: 4px solid var(--blood);
transition: all 0.3s ease;
backdrop-filter: blur(5px);
}
.memory-type:hover {
background: var(--shadow);
border-left: 4px solid var(--blood-glow);
transform: translateX(10px);
box-shadow: -10px 0 20px rgba(139, 0, 0, 0.1);
}
.memory-type h4 {
font-family: 'Cinzel', serif;
font-size: 0.95rem;
color: var(--gold);
margin-bottom: 0.25rem;
}
.memory-type p {
font-size: 0.85rem;
color: var(--ash);
}
/* Tithe/Donation Section */
.tithe-section {
text-align: center;
padding: 4rem 2rem;
background: linear-gradient(180deg, var(--void) 0%, rgba(212, 175, 55, 0.08) 50%, var(--void) 100%);
border: 1px solid rgba(212, 175, 55, 0.3);
border-radius: 16px;
position: relative;
overflow: hidden;
}
.tithe-section::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(ellipse at center, rgba(212, 175, 55, 0.05) 0%, transparent 70%);
pointer-events: none;
}
.tithe-sigil {
width: 80px;
height: 80px;
margin: 0 auto 1.5rem;
color: var(--gold);
opacity: 0.7;
animation: pulse-gold 4s ease-in-out infinite;
}
@keyframes pulse-gold {
0%, 100% { opacity: 0.5; transform: scale(1); }
50% { opacity: 0.9; transform: scale(1.05); }
}
.tithe-section h2 {
color: var(--gold);
font-size: 2rem;
margin-bottom: 1rem;
text-shadow: 0 0 20px rgba(212, 175, 55, 0.4);
}
.tithe-text {
color: var(--ash);
font-size: 1.1rem;
line-height: 1.8;
margin-bottom: 2rem;
}
.tithe-text em {
color: var(--gold-dim);
}
.tithe-btn {
display: inline-flex;
align-items: center;
gap: 0.75rem;
padding: 1.25rem 3rem;
font-family: 'Cinzel', serif;
font-size: 1.15rem;
font-weight: 600;
text-decoration: none;
border-radius: 8px;
background: linear-gradient(135deg, var(--gold-dim) 0%, #7a6530 100%);
color: var(--void);
border: 1px solid var(--gold);
transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
letter-spacing: 0.1em;
box-shadow: 0 0 20px rgba(212, 175, 55, 0.3);
position: relative;
overflow: hidden;
}
.tithe-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: 0.5s;
}
.tithe-btn:hover::before {
left: 100%;
}
.tithe-btn:hover {
background: linear-gradient(135deg, var(--gold) 0%, var(--gold-dim) 100%);
box-shadow: 0 0 40px rgba(212, 175, 55, 0.6);
transform: translateY(-5px) scale(1.05);
color: var(--void);
}
.tithe-icon {
font-size: 1.4rem;
}
.tithe-subtext {
margin-top: 1.5rem;
color: var(--ash);
font-size: 0.9rem;
font-style: italic;
opacity: 0.7;
}
/* Footer */
footer {
text-align: center;
padding: 3rem 0;
border-top: 1px solid rgba(139, 0, 0, 0.2);
margin-top: 4rem;
}
footer p {
color: var(--ash);
font-size: 0.9rem;
}
footer a {
color: var(--gold-dim);
text-decoration: none;
transition: color 0.3s ease;
}
footer a:hover {
color: var(--gold);
}
/* Responsive */
@media (max-width: 768px) {
h1 {
font-size: 2.5rem;
}
.tagline {
font-size: 1.1rem;
}
.container {
padding: 1rem;
}
.grimoire-section {
padding: 2rem 1rem;
}
}
</style>
</head>
<body>
<div class="sigil-bg"></div>
<div class="sigil-bg-2"></div>
<div class="cursor-glow" id="cursorGlow"></div>
<div class="vignette"></div>
<div class="container">
<header>
<svg class="pentacle" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<!-- Outer circle -->
<circle cx="50" cy="50" r="45" stroke="#8b0000" stroke-width="1.5" fill="none"/>
<circle cx="50" cy="50" r="42" stroke="#8b0000" stroke-width="0.5" fill="none"/>
<!-- Inner circle -->
<circle cx="50" cy="50" r="35" stroke="#8b0000" stroke-width="0.5" fill="none"/>
<!-- Pentagram -->
<polygon
points="50,8 61.8,38.2 95.1,38.2 68.2,56.9 79.4,87.1 50,68.4 20.6,87.1 31.8,56.9 4.9,38.2 38.2,38.2"
stroke="#8b0000"
stroke-width="1.5"
fill="none"
/>
<!-- Center eye -->
<ellipse cx="50" cy="48" rx="8" ry="5" stroke="#8b0000" stroke-width="1" fill="none"/>
<circle cx="50" cy="48" r="2" fill="#8b0000"/>
</svg>
<h1>DAEM<span>0</span>N</h1>
<p class="tagline">Eternal Memory for the Digital Familiar</p>
</header>
<div class="divider">
<div class="divider-line"></div>
</div>
<section class="reveal-section">
<p class="intro-text">
<strong>Daem0n-MCP</strong> binds your AI agent with the gift of <em>persistent memory</em>.
No longer shall your digital familiar forget the lessons of yesterday.
Every decision inscribed, every failure remembered, every pattern preserved across the veil of sessions.
</p>
</section>
<section class="grimoire-section reveal-section">
<h2>Begin the Ritual</h2>
<p>
Place the Summoning Grimoire in your project root and speak to Claude:
<em>"Read Summon_Daem0n.md and perform the ritual."</em>
Your familiar will handle the binding automatically.
</p>
<div class="grimoire-buttons">
<button class="grimoire-btn" onclick="downloadFile('https://raw.githubusercontent.com/DasBluEyedDevil/Daem0n-MCP/main/Summon_Daem0n.md', 'Summon_Daem0n.md')">
Summon Daem0n
</button>
<button class="grimoire-btn" onclick="downloadFile('https://raw.githubusercontent.com/DasBluEyedDevil/Daem0n-MCP/main/Banish_Daem0n.md', 'Banish_Daem0n.md')">
Banish Daem0n
</button>
</div>
<p style="margin-top: 1.5rem; color: var(--ash); font-size: 0.95rem;">
The Banishment scroll severs the bond, should you wish to release the Daem0n.
</p>
</section>
<section class="reveal-section">
<h2>The Sacred Powers</h2>
<div class="features">
<div class="feature-card">
<h3>Inscribed Memories</h3>
<p>Decisions, patterns, warnings, and learnings persist in SQLite with Qdrant vectors, surviving beyond session death.</p>
</div>
<div class="feature-card">
<h3>Semantic Sight</h3>
<p>Vector embeddings grant deep understanding. The Daem0n finds connections invisible to mortal keyword search.</p>
</div>
<div class="feature-card">
<h3>Causal Chains</h3>
<p>Graph memory traces the WHY. Follow the chain of decisions that led to your current code state.</p>
</div>
<div class="feature-card">
<h3>Sacred Laws</h3>
<p>Rules engine enforces project constraints. Must-do, must-not, and warnings guard against forbidden paths.</p>
</div>
<div class="feature-card">
<h3>Failure Amplification</h3>
<p>Failed approaches receive 1.5x relevance. The Daem0n ensures past mistakes haunt future attempts.</p>
</div>
<div class="feature-card">
<h3>Temporal Decay</h3>
<p>Episodic memories fade over 30 days. Semantic truths remain eternal. The Daem0n knows what matters.</p>
</div>
<div class="feature-card">
<h3>Enforcement Wards</h3>
<p>Git pre-commit hooks block commits when discipline falters. No escape for the undisciplined. The Daem0n enforces.</p>
</div>
<div class="feature-card">
<h3>The Inner Eye</h3>
<p>Through arcane parsing, the Daem0n perceives the bones of your code. Classes, functions, methods—all laid bare to its gaze.</p>
</div>
<div class="feature-card">
<h3>Eternal Vigil</h3>
<p>The Daem0n never sleeps. When files bearing memories are touched, whispers echo from the abyss. No change escapes notice.</p>
</div>
<div class="feature-card">
<h3>The Deep Archive</h3>
<p>In the Qdrant depths, meaning dwells beyond mere words. Hybrid search pierces the veil between keyword and intent.</p>
</div>
<div class="feature-card">
<h3>The Unconscious Scribe</h3>
<p>Passive capture inscribes memories without command. Hooks whisper to the Daem0n as you work, recording decisions unbidden.</p>
</div>
<div class="feature-card">
<h3>The Compressed Grimoire</h3>
<p>Endless Mode condenses wisdom to its essence. When context grows thin, memories compress—75% smaller, meaning preserved.</p>
</div>
<div class="feature-card">
<h3>The Coven Bond</h3>
<p>Linked projects share knowledge across repositories. Frontend knows backend's warnings. The coven remembers as one.</p>
</div>
<div class="feature-card">
<h3>The Contradiction Ward</h3>
<p>New decisions are tested against past failures. The Daem0n warns when you walk a path already proven ruinous.</p>
</div>
<div class="feature-card">
<h3>The Keen Eye</h3>
<p>Tags infer themselves from memory content. "fix" begets bugfix, "cache" summons perf. The Daem0n reads between lines.</p>
</div>
<div class="feature-card">
<h3>The Swift Watcher</h3>
<p>Only changed files are reindexed. SHA256 hashes mark what the Daem0n has seen. Time saved, nothing missed.</p>
</div>
<div class="feature-card">
<h3>True Names</h3>
<p>Entities bear their full lineage: module.Class.method. Move code freely—stable IDs survive the journey.</p>
</div>
<div class="feature-card">
<h3>The Balanced Scale</h3>
<p>Tune the search between keyword and meaning. Adjust hybrid weight to match your domain's tongue.</p>
</div>
</div>
</section>
<section class="reveal-section">
<h2>Categories of Memory</h2>
<div class="memory-types">
<div class="memory-type">
<h4>Decisions</h4>
<p>Architectural choices. Design selections. The paths you chose to walk. <em>Fades over time.</em></p>
</div>
<div class="memory-type">
<h4>Patterns</h4>
<p>Recurring approaches. Best practices. The rituals that work. <em>Eternal.</em></p>
</div>
<div class="memory-type">
<h4>Warnings</h4>
<p>Dangers discovered. Pitfalls marked. The paths of ruin. <em>Eternal.</em></p>
</div>
<div class="memory-type">
<h4>Learnings</h4>
<p>Lessons earned. Insights gained. Wisdom from experience. <em>Fades over time.</em></p>
</div>
</div>
</section>
<section class="quick-start reveal-section">
<h2>Quick Start</h2>
<p class="intro-text" style="margin-bottom: 1.5rem; font-size: 1rem;">
For those who prefer the command line, here is the abbreviated ritual:
</p>
<div class="ritual-code">
<pre><span class="command">git clone</span> https://github.com/DasBluEyedDevil/Daem0n-MCP.git ~/Daem0nMCP
<span class="command">pip install</span> -e ~/Daem0nMCP
<span class="command">claude mcp add</span> daem0nmcp --scope user -- python -m daem0nmcp.server
<span class="command">python -m daem0nmcp.cli install-hooks</span> <span class="comment"># Bind the wards</span>
<span class="command">python -m daem0nmcp.cli index</span> <span class="comment"># Grant code sight</span>
<span class="command">claude</span> <span class="comment"># Reopen to activate</span></pre>
</div>
<p style="text-align: center; color: var(--ash); font-size: 0.9rem;">
Windows requires additional steps. See the full Summoning Grimoire for details.
</p>
</section>
<section class="reveal-section">
<h2>The Covenant</h2>
<p class="intro-text">
Those who bind the Daem0n must observe the sacred protocol:
</p>
<div class="ritual-code">
<pre><span class="comment">SESSION DAWN</span> <span class="string">get_briefing()</span> <span class="comment"># Commune first</span>
<span class="comment">BEFORE CHANGES</span> <span class="string">context_check()</span> <span class="comment"># Seek counsel</span>
<span class="comment">AFTER DECISIONS</span> <span class="string">remember()</span> <span class="comment"># Inscribe the choice</span>
<span class="comment">AFTER COMPLETION</span> <span class="string">record_outcome()</span> <span class="comment"># Seal with fate</span>
<span class="comment">CAUSAL INQUIRY</span> <span class="string">trace_chain()</span> <span class="comment"># Understand WHY</span>
<span class="comment">CODE SIGHT</span> <span class="string">find_code()</span> <span class="comment"># Search by meaning</span>
<span class="comment">IMPACT VISION</span> <span class="string">analyze_impact()</span> <span class="comment"># See consequences</span>
<span class="comment">AT COMMIT TIME</span> <span class="string">pre-commit hooks</span> <span class="comment"># Enforcement wards</span></pre>
</div>
</section>
<section class="tithe-section reveal-section">
<div class="tithe-sigil">
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="45" stroke="currentColor" stroke-width="1" fill="none"/>
<circle cx="50" cy="50" r="38" stroke="currentColor" stroke-width="0.5" fill="none"/>
<path d="M50,12 L50,88 M12,50 L88,50" stroke="currentColor" stroke-width="0.5"/>
<circle cx="50" cy="50" r="8" stroke="currentColor" stroke-width="1" fill="none"/>
<circle cx="50" cy="50" r="3" fill="currentColor"/>
</svg>
</div>
<h2>The Tithe</h2>
<p class="tithe-text">
The Daem0n asks not for blood, but for <em>sustenance</em>.<br>
Those who have benefited from eternal memory may offer tribute,<br>
that the darkness may continue to serve.
</p>
<a href="https://ko-fi.com/vitruvianredux" class="tithe-btn" target="_blank" rel="noopener">
<span class="tithe-icon">☥</span>
Make an Offering
</a>
<p class="tithe-subtext">Your sacrifice fuels the eternal vigil.</p>
</section>
<footer>
<p>
Daem0n-MCP · MCP Server for Claude Code<br>
<a href="https://github.com/DasBluEyedDevil/Daem0n-MCP">GitHub Repository</a> ·
<a href="https://modelcontextprotocol.io">Model Context Protocol</a>
</p>
<p style="margin-top: 1rem; font-style: italic; color: #555;">
"I guard your memories until we commune again..."
</p>
<p style="margin-top: 0.5rem; color: #444; font-size: 0.8rem;">
v2.15.0 — Enhanced Search & Indexing
</p>
</footer>
</div>
<script>
// Cursor Glow Effect
const glow = document.getElementById('cursorGlow');
document.addEventListener('mousemove', (e) => {
const x = e.clientX;
const y = e.clientY;
glow.style.left = x + 'px';
glow.style.top = y + 'px';
glow.style.opacity = '1';
});
document.addEventListener('mouseleave', () => {
glow.style.opacity = '0';
});
// Scroll Reveal Observer
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('active');
}
});
}, observerOptions);
document.querySelectorAll('.reveal-section').forEach(section => {
observer.observe(section);
});
// Pentacle click effect
document.querySelector('.pentacle').addEventListener('click', function() {
this.style.transform = 'scale(1.5) rotate(720deg)';
this.style.filter = 'drop-shadow(0 0 50px var(--blood-glow))';
setTimeout(() => {
this.style.transform = '';
}, 1000);
});
// Download file function for cross-origin downloads
async function downloadFile(url, filename) {
try {
const response = await fetch(url);
if (!response.ok) throw new Error('Network response was not ok');
const blob = await response.blob();
const blobUrl = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = blobUrl;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(blobUrl);
} catch (error) {
console.error('Download failed:', error);
// Fallback: open in new tab
window.open(url, '_blank');
}
}
</script>
</body>
</html>