Skip to content

Commit 42f64f6

Browse files
committed
Merge wip/site-design-rollout-v2-parallel into master
Ship v2 parallel deployment for A/B feedback. Old site routes unchanged; new design accessible at /v2home/, /v2writings/, /v2theforge/, /v2/<slug>/, /v2/pages/<slug>/. To remove after feedback decision: revert this merge commit.
2 parents 9519235 + 7aeabef commit 42f64f6

13 files changed

Lines changed: 2824 additions & 1 deletion

history/2026-05-19-site-design-rollout-plan.md

Lines changed: 1393 additions & 0 deletions
Large diffs are not rendered by default.

history/mockups/2026-05-19-home-editorial.html

Lines changed: 458 additions & 0 deletions
Large diffs are not rendered by default.

pelicanconf.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,22 @@
4545
PAGE_SAVE_AS = "pages/{slug}/index.html"
4646
ARTICLE_URL = "{slug}/"
4747
ARTICLE_SAVE_AS = "{slug}/index.html"
48-
DIRECT_TEMPLATES = ("index", "archives")
48+
DIRECT_TEMPLATES = ("index", "archives", "v2_index", "v2_archives", "v2_theforge")
4949
ARCHIVES_SAVE_AS = "writings/index.html"
50+
51+
# v2 parallel deployment — same article/page data, rendered through v2_*.html templates
52+
# at /v2home/, /v2writings/, /v2theforge/, plus per-article /v2/<slug>/ via the
53+
# v2_router plugin. Old site remains unchanged.
54+
V2_INDEX_SAVE_AS = "v2home/index.html"
55+
V2_INDEX_URL = "v2home/"
56+
V2_ARCHIVES_SAVE_AS = "v2writings/index.html"
57+
V2_ARCHIVES_URL = "v2writings/"
58+
V2_THEFORGE_SAVE_AS = "v2theforge/index.html"
59+
V2_THEFORGE_URL = "v2theforge/"
60+
61+
PLUGIN_PATHS = ["plugins"]
62+
PLUGINS = ["v2_router"]
63+
5064
TAG_SAVE_AS = ""
5165
CATEGORY_SAVE_AS = ""
5266
AUTHOR_SAVE_AS = ""

plugins/v2_router.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# ABOUTME: Pelican plugin — for each article and page, also render a v2 copy
2+
# ABOUTME: at /v2/<slug>/ or /v2/pages/<slug>/ using v2_*.html templates.
3+
4+
from pelican import signals
5+
6+
7+
def _v2_article_template(article):
8+
"""Return the v2 template name for a given article based on its Template metadata."""
9+
meta_template = article.metadata.get("template", "article")
10+
if meta_template == "longform_article":
11+
return "v2_longform_article"
12+
return "v2_article"
13+
14+
15+
def _v2_page_template(page):
16+
"""Return the v2 template name for a given page based on its Template metadata."""
17+
meta_template = page.metadata.get("template", "page")
18+
if meta_template == "inference-economics":
19+
return "v2_inference_economics"
20+
return "v2_page"
21+
22+
23+
def write_v2_articles(article_generator, writer):
24+
env = article_generator.env
25+
for article in article_generator.articles:
26+
template_name = _v2_article_template(article)
27+
try:
28+
template = env.get_template(template_name + ".html")
29+
except Exception:
30+
continue
31+
save_as = "v2/{slug}/index.html".format(slug=article.slug)
32+
url = "v2/{slug}/".format(slug=article.slug)
33+
writer.write_file(
34+
name=save_as,
35+
template=template,
36+
context=article_generator.context,
37+
relative_urls=article_generator.settings.get("RELATIVE_URLS", False),
38+
article=article,
39+
category=article.category,
40+
override_output=True,
41+
url=url,
42+
)
43+
44+
45+
def write_v2_pages(page_generator, writer):
46+
env = page_generator.env
47+
for page in page_generator.pages:
48+
template_name = _v2_page_template(page)
49+
try:
50+
template = env.get_template(template_name + ".html")
51+
except Exception:
52+
continue
53+
save_as = "v2/pages/{slug}/index.html".format(slug=page.slug)
54+
url = "v2/pages/{slug}/".format(slug=page.slug)
55+
writer.write_file(
56+
name=save_as,
57+
template=template,
58+
context=page_generator.context,
59+
relative_urls=page_generator.settings.get("RELATIVE_URLS", False),
60+
page=page,
61+
override_output=True,
62+
url=url,
63+
)
64+
65+
66+
def register():
67+
signals.article_writer_finalized.connect(write_v2_articles)
68+
signals.page_writer_finalized.connect(write_v2_pages)

0 commit comments

Comments
 (0)