Files
labyricorn-site/templates/home.html
T
Labyricorn a88092631a
Deploy production / deploy (push) Successful in 21s
Add Atom and RSS feeds
2026-08-23 17:37:05 -07:00

222 lines
13 KiB
HTML

{% from "macros/feed-links.html" import visible_feed_links with context %}
<section class="circuit-hero" aria-label="Labyricorn navigation hero" data-circuit-hero>
<div class="circuit-hero-topline">
<span><strong>LABYRICORN</strong> // SIGNAL ROUTER</span>
<span>REG. NO. 004 — EST. LOCAL</span>
</div>
<div class="circuit-brand-block">
<p class="circuit-brand-kicker">{{ this.eyebrow }}</p>
<h1>{{ this.summary|replace(' Signals', '<br>Signals')|safe }}</h1>
<div class="circuit-dek">{{ this.body }}</div>
<p class="circuit-status"><span aria-hidden="true"></span> network active / routes resolving</p>
</div>
<div class="circuit-stage" aria-hidden="true">
<svg viewBox="0 0 1200 720" preserveAspectRatio="none">
<g class="circuit-ambient">
<path d="M35 95 H185 V125 H410"/><path d="M55 150 H155 V185 H300"/>
<path d="M300 45 V115 H455"/><path d="M465 65 H610 V100 H690"/>
<path d="M705 55 H835 V90 H930"/><path d="M900 115 H1050 V80 H1160"/>
<path d="M1010 230 H1140 V335 H1085"/><path d="M940 430 H1095 V465 H1165"/>
<path d="M45 455 H170 V475 H250"/><path d="M40 585 H130 V555 H205"/>
<path d="M250 670 H390 V690 H520"/><path d="M535 680 H770 V700"/>
<path d="M805 685 H930 V665 H1035"/><path d="M1035 690 H1165"/>
</g>
<g class="circuit-ambient-packets">
<path d="M35 95 H185 V125 H410"/><path class="circuit-live-alt" d="M55 150 H155 V185 H300"/>
<path class="circuit-live-gold" d="M300 45 V115 H455"/><path class="circuit-live-alt" d="M465 65 H610 V100 H690"/>
<path d="M705 55 H835 V90 H930"/><path class="circuit-live-gold" d="M900 115 H1050 V80 H1160"/>
<path d="M1010 230 H1140 V335 H1085"/><path class="circuit-live-alt" d="M940 430 H1095 V465 H1165"/>
<path d="M45 455 H170 V475 H250"/><path class="circuit-live-gold" d="M40 585 H130 V555 H205"/>
<path class="circuit-live-alt" d="M250 670 H390 V690 H520"/><path d="M535 680 H770 V700"/>
<path class="circuit-live-gold" d="M805 685 H930 V665 H1035"/><path d="M1035 690 H1165"/>
</g>
<g class="circuit-ghost">
<path d="M70 350 H510 V180 H720 V140 H805"/>
<path d="M180 390 H565 V320 H865"/>
<path d="M95 425 H470 V470 H720"/>
<path d="M90 505 H260 V530 H345"/>
<path d="M190 560 H350 V585 H430"/>
<path d="M430 610 H515 V630 H585"/>
<path d="M610 650 H700 V655 H755"/>
<path d="M790 605 H885 V590 H930"/>
<path d="M970 540 H1030 V515 H1060"/>
</g>
<g class="circuit-base">
<path d="M70 350 H510 V180 H720 V140 H805"/>
<path d="M180 390 H565 V320 H865"/>
<path d="M95 425 H470 V470 H720"/>
<path d="M90 505 H260 V530 H345"/>
<path d="M190 560 H350 V585 H430"/>
<path d="M430 610 H515 V630 H585"/>
<path d="M610 650 H700 V655 H755"/>
<path d="M790 605 H885 V590 H930"/>
<path d="M970 540 H1030 V515 H1060"/>
</g>
<g class="circuit-traces">
<path d="M45 200 H260 V255 H390"/><path d="M110 240 H185 V300 H410"/>
<path d="M975 180 H1125 V285 H1080"/><path d="M955 375 H1110 V410 H1160"/>
<path d="M36 650 H120 V610 H220"/><path d="M1080 645 H1145 V580"/>
</g>
<g class="circuit-live">
<path id="route-projects" d="M70 350 H510 V180 H720 V140 H805"/>
<path id="route-articles" class="circuit-live-alt" d="M180 390 H565 V320 H865"/>
<path id="route-blog" d="M95 425 H470 V470 H720"/>
<path id="route-github" class="circuit-live-alt" d="M90 505 H260 V530 H345"/>
<path id="route-gitea" d="M190 560 H350 V585 H430"/>
<path id="route-linkedin" class="circuit-live-alt" d="M430 610 H515 V630 H585"/>
<path id="route-twitch" d="M610 650 H700 V655 H755"/>
<path id="route-youtube" class="circuit-live-alt" d="M790 605 H885 V590 H930"/>
<path id="route-kofi" d="M970 540 H1030 V515 H1060"/>
</g>
<g class="circuit-vias">
<circle cx="70" cy="350" r="4"/><circle cx="805" cy="140" r="4"/>
<circle cx="180" cy="390" r="4"/><circle cx="865" cy="320" r="4"/>
<circle cx="95" cy="425" r="4"/><circle cx="720" cy="470" r="4"/>
<circle cx="90" cy="505" r="3"/><circle cx="345" cy="530" r="3"/>
<circle cx="190" cy="560" r="3"/><circle cx="430" cy="585" r="3"/>
<circle cx="585" cy="630" r="3"/><circle cx="755" cy="655" r="3"/>
<circle cx="930" cy="590" r="3"/><circle cx="1060" cy="515" r="3"/>
</g>
</svg>
</div>
<nav class="circuit-routes" aria-label="Signal routes">
<a class="circuit-node circuit-node-main" data-route-node="projects" data-route-text="PROJECTS" href="{{ '/projects'|url }}" aria-label="Projects"><span data-route-output>Projects</span><i aria-hidden="true">_</i></a>
<a class="circuit-node circuit-node-main" data-route-node="articles" data-route-text="ARTICLES" href="{{ '/articles'|url }}" aria-label="Articles"><span data-route-output>Articles</span><i aria-hidden="true">_</i></a>
<a class="circuit-node circuit-node-main" data-route-node="blog" data-route-text="BLOG" href="{{ '/blog'|url }}" aria-label="Blog"><span data-route-output>Blog</span><i aria-hidden="true">_</i></a>
<a class="circuit-node circuit-node-sub" data-route-node="github" data-route-text="GITHUB" href="https://github.com/Labyricorn" aria-label="GitHub" rel="me"><span data-route-output>GitHub</span></a>
<a class="circuit-node circuit-node-sub" data-route-node="gitea" data-route-text="GITEA" href="https://git.labyricorn.com/" aria-label="Gitea"><span data-route-output>Gitea</span></a>
<a class="circuit-node circuit-node-sub" data-route-node="linkedin" data-route-text="LINKEDIN" href="https://www.linkedin.com/in/christopher-chambers-694b7a86/" aria-label="LinkedIn"><span data-route-output>LinkedIn</span></a>
<a class="circuit-node circuit-node-sub" data-route-node="twitch" data-route-text="TWITCH" href="https://www.twitch.tv/labyricorn" aria-label="Twitch"><span data-route-output>Twitch</span></a>
<a class="circuit-node circuit-node-sub" data-route-node="youtube" data-route-text="YOUTUBE" href="https://www.youtube.com/@labyricorn" aria-label="YouTube"><span data-route-output>YouTube</span></a>
<a class="circuit-node circuit-node-sub" data-route-node="kofi" data-route-text="KO-FI" href="https://ko-fi.com/labyricorn" aria-label="Ko-fi"><span data-route-output>Ko-fi</span></a>
</nav>
<div class="circuit-legend" aria-hidden="true"><span>◆ live packet</span><span>— Labyricorn bus</span></div>
<button class="circuit-replay" type="button" data-circuit-replay>Replay signal sequence</button>
</section>
<section class="activity-section">
<div class="shell">
<div class="homepage-discovery-grid">
<section class="homepage-panel" aria-labelledby="recent-activity-heading">
<div class="section-heading">
<span id="recent-activity-heading">Recent Activity</span>
<span>Sorted by date · {{ visible_feed_links('https://www.labyricorn.com/feed.xml', 'https://www.labyricorn.com/rss.xml') }}</span>
</div>
<div class="timeline" id="recent-activity-list" data-activity-feed data-batch-size="6">
{% for item_path in this.recent_activity_paths %}
{% set item = site.get(item_path) %}
{% if item %}
<article class="timeline-entry accent-{{ item.kicker|lower }}" data-activity-item>
<div class="entry-meta">
<span class="label">{{ item.kicker }}</span>
<time datetime="{{ item.date }}">{{ item.date|dateformat('YYYY.MM.dd') }}</time>
</div>
<h2><a href="{{ item|url }}">{{ item.title }}</a></h2>
<p>{{ item.summary }}</p>
<a class="read-more" href="{{ item|url }}">Read entry →</a>
</article>
{% endif %}
{% endfor %}
</div>
<div class="activity-controls" data-activity-controls hidden>
<p class="activity-status" data-activity-status aria-live="polite"></p>
<button class="activity-more-button" type="button" data-activity-more aria-controls="recent-activity-list">Show 6 more</button>
</div>
</section>
<section class="homepage-panel featured-projects-panel" aria-labelledby="featured-projects-heading">
<div class="section-heading">
<span id="featured-projects-heading">Featured Projects</span>
<span>Curated work</span>
</div>
<div class="featured-project-list">
{% for project in site.query('/projects').filter(F._model == 'project').filter(F.featured == true).order_by('featured_order', '-date').limit(3) %}
{% set devlog = site.get(project.path ~ '/devlog') %}
{% set latest_activity = devlog.children.order_by('-date', '-source_commit_time').first() if devlog else none %}
<article class="featured-project-card">
<div class="featured-project-meta">
<span class="label">{{ project.status }}</span>
<time datetime="{{ project.date }}">{{ project.date|dateformat('YYYY.MM.dd') }}</time>
</div>
<h2><a href="{{ project|url }}">{{ project.title }}</a></h2>
<p>{{ project.summary }}</p>
{% if project.technology_labels %}
<div class="featured-project-technologies" aria-label="Technologies">
{% for technology in project.technology_labels[:4] %}
{% set parts = technology.split('\t', 1) %}
<span>{{ parts[1] if parts|length > 1 else parts[0] }}</span>
{% endfor %}
</div>
{% endif %}
{% if latest_activity %}
<div class="featured-project-latest">
<span>Latest activity</span>
<a href="{{ latest_activity|url }}"><time datetime="{{ latest_activity.date }}">{{ latest_activity.date|dateformat('YYYY.MM.dd') }}</time> {{ latest_activity.title }} →</a>
</div>
{% endif %}
<div class="featured-project-actions">
<a href="{{ project|url }}">View project →</a>
{% if devlog %}<a href="{{ devlog|url }}">Devlog →</a>{% endif %}
</div>
</article>
{% else %}
<p class="featured-projects-empty">Selected projects will appear here.</p>
{% endfor %}
</div>
<a class="featured-projects-link" href="{{ '/projects'|url }}">View all projects →</a>
</section>
</div>
</div>
</section>
{% set tracked_tags = site.get('/tags').children %}
<section class="homepage-tag-section" aria-labelledby="homepage-tag-heading" data-tag-matrix>
<div class="shell">
<div class="homepage-tag-header">
<div>
<p class="eyebrow">Topic map</p>
<h2 id="homepage-tag-heading">Explore the Signal</h2>
<p>A map of the topics that keep surfacing across Labyricorn. Pick a signal and follow it deeper into the site.</p>
</div>
<p class="homepage-tag-readout"><span aria-hidden="true"></span>{{ tracked_tags.count() }} tracked topics across Labyricorn</p>
</div>
<nav class="tag-matrix" aria-label="Explore content by topic">
{% for tag in tracked_tags %}
{% set usage = namespace(count=0) %}
{% for section_id in ['projects', 'blog', 'articles'] %}
{% for item in site.query('/' ~ section_id) %}
{% set item_tags = item.taxonomy_tags if item._model == 'project' else item.tags %}
{% if tag._id in item_tags %}{% set usage.count = usage.count + 1 %}{% endif %}
{% endfor %}
{% endfor %}
{% for project in site.query('/projects') %}
{% if project._model == 'project' %}
{% set devlog = site.get(project.path ~ '/devlog') %}
{% if devlog %}
{% for entry in devlog.children %}
{% if tag._id in entry.topic_tag_slugs %}{% set usage.count = usage.count + 1 %}{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
{% set weight = 4 if usage.count >= 8 else (3 if usage.count >= 4 else (2 if usage.count >= 2 else 1)) %}
<a class="tag-matrix-link tag-matrix-level-{{ weight }}" href="{{ tag|url }}" rel="tag" data-tag-title="{{ tag.title }}" data-tag-summary="{{ tag.summary|striptags|trim }}">
<span class="tag-matrix-name">{{ tag.title }}</span>
<span class="tag-matrix-count" aria-hidden="true">{{ usage.count }}</span>
<span class="visually-hidden"> — {{ usage.count }} published {% if usage.count == 1 %}entry{% else %}entries{% endif %}</span>
</a>
{% endfor %}
</nav>
<div class="tag-matrix-summary" aria-live="polite" aria-atomic="true">
<span class="tag-matrix-summary-label">Tag Summary</span>
<p><strong data-tag-summary-title>Preview a topic</strong><span data-tag-summary-text>Hover or focus a topic to preview it. Select a topic to open its archive.</span></p>
</div>
</div>
</section>