diff --git a/sites/_engine/app.py b/sites/_engine/app.py index a11883d..da9de2b 100644 --- a/sites/_engine/app.py +++ b/sites/_engine/app.py @@ -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/") @@ -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 = """ @@ -991,6 +1014,16 @@ ARTICLE_TEMPLATE = """ .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} @@ -1060,7 +1093,15 @@ ARTICLE_TEMPLATE = """