v5: Network footer linking all 8 sibling sites, author personas for every vertical

This commit is contained in:
drjones
2026-08-03 22:22:13 -07:00
parent 93232debe0
commit 1b1b1e7805

View File

@@ -134,6 +134,17 @@ IDENTITIES = {
},
}
NETWORK_SITES = [
{"name": "AI Insights", "domain": "ai.thetempleofdoom.com", "desc": "Machine learning & AI"},
{"name": "Tech Frontier", "domain": "tech.thetempleofdoom.com", "desc": "Software & infrastructure"},
{"name": "Science Decoded", "domain": "science.thetempleofdoom.com", "desc": "Physics, biology, space"},
{"name": "Crypto Compass", "domain": "crypto.thetempleofdoom.com", "desc": "Blockchain & DeFi"},
{"name": "Linux Lab", "domain": "linux.thetempleofdoom.com", "desc": "Open source & systems"},
{"name": "Game Layer", "domain": "gaming.thetempleofdoom.com", "desc": "Games & culture"},
{"name": "Maker Forge", "domain": "diy.thetempleofdoom.com", "desc": "3D printing & making"},
{"name": "Practical Guides", "domain": "guides.thetempleofdoom.com", "desc": "Tutorials & how-tos"},
]
IDENTITY = IDENTITIES.get(VERTICAL, IDENTITIES["guides"])
app = Flask(__name__)
@@ -392,7 +403,8 @@ def home():
record_view("/")
return render_template_string(HOME_TEMPLATE, **IDENTITY,
articles=articles, popular=popular, total=total, total_views=total_views,
domain=DOMAIN, vertical=VERTICAL, json_ld=json.dumps(build_json_ld()))
domain=DOMAIN, vertical=VERTICAL, json_ld=json.dumps(build_json_ld()),
network_sites=[s for s in NETWORK_SITES if s["domain"] != DOMAIN])
@app.route("/articles/<slug>")
@@ -408,7 +420,8 @@ def article(slug):
return render_template_string(ARTICLE_TEMPLATE, **IDENTITY,
article=article, related=related, domain=DOMAIN, vertical=VERTICAL,
json_ld=json.dumps(build_json_ld(article)))
json_ld=json.dumps(build_json_ld(article)),
network_sites=[s for s in NETWORK_SITES if s["domain"] != DOMAIN])
@app.route("/search")
@@ -835,12 +848,22 @@ HOME_TEMPLATE = """<!DOCTYPE html>
</div>
<footer>
<div class="footer-network">
<h4>Around the Network</h4>
<div class="network-grid">
{% for s in network_sites %}
<a href="https://{{ s.domain }}" class="network-link">{{ s.name }}<span>{{ s.desc }}</span></a>
{% endfor %}
</div>
</div>
<div class="footer-bottom">
<span>© {{ domain }}</span>
<nav>
<a href="/rss.xml">RSS</a>
<a href="/sitemap.xml">Sitemap</a>
<a href="/search">Search</a>
</nav>
</div>
</footer>
<img src="/a/ping?p=/" alt="" width="1" height="1" style="display:none">
</body>
@@ -991,6 +1014,16 @@ ARTICLE_TEMPLATE = """<!DOCTYPE html>
.site-footer{border-top:1px solid var(--border);padding:2.5rem 1.5rem;max-width:1000px;margin:0 auto}
.footer-main{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;color:var(--text-muted);font-size:0.8rem}
.footer-main a{color:var(--text-muted);text-decoration:none}
/* Network Footer */
.footer-network{border-bottom:1px solid var(--border);padding-bottom:1.5rem;margin-bottom:1.5rem}
.footer-network h4{font-family:var(--font-heading);font-size:0.85rem;color:var(--text-muted);margin-bottom:0.75rem;text-transform:uppercase;letter-spacing:0.05em}
.network-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:0.5rem}
.network-link{display:block;background:var(--card-bg);border:1px solid var(--border);border-radius:6px;padding:0.5rem 0.75rem;text-decoration:none;color:var(--text);font-size:0.8rem;font-weight:500;transition:border-color 0.2s}
.network-link:hover{border-color:var(--primary)}
.network-link span{display:block;color:var(--text-muted);font-size:0.7rem;font-weight:400;margin-top:0.1rem}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;color:var(--text-muted);font-size:0.8rem}
.footer-bottom a{color:var(--text-muted);text-decoration:none}
</style>
</head>
<body>
@@ -1060,7 +1093,15 @@ ARTICLE_TEMPLATE = """<!DOCTYPE html>
</main>
<footer class="site-footer">
<div class="footer-main">
<div class="footer-network">
<h4>Around the Network</h4>
<div class="network-grid">
{% for s in network_sites %}
<a href="https://{{ s.domain }}" class="network-link">{{ s.name }}<span>{{ s.desc }}</span></a>
{% endfor %}
</div>
</div>
<div class="footer-bottom">
<span>© {{ domain }}</span>
<nav>
<a href="/rss.xml">RSS</a>