VLCT.org rebuild · Progress report

Topics on the new VLCT.org

Where the topic system stands today: what readers can already use on the draft site, what is built but not yet connected, and the decisions we need from VLCT to finish it.

Prepared 17 September 2026 by Viv Web Solutions · Draft site: p1vlct.wpenginepowered.com · Design prototype: vlct-prototype.pages.dev · Current site: vlct.org

At a glance

The migration carried over every topic tag from Drupal. On top of those tags we have built a subject tree that groups them into twelve areas, and that tree already powers the topic filter in the draft Resource Library. The remaining work is to connect the tree to the topic overview pages and give every topic a proper landing spot with a sidebar.

89
topic tags carried over
Every one Drupal had. Flat list, no hierarchy on the old site either.
12
subject areas
70 nodes, three levels deep, editable in WordPress admin. Approved 31 Aug.
86 / 89
tags placed in the tree
The prototype's earlier tree left 33 tags out. The live tree fixes that.
94%
of resources carry a topic
4,702 of 5,021 published resources.
Working today

Topic filter in the Resource Library · topic overview pages with their resource lists · nine hub pages with section sidebars.

Built, not connected

The tree does not yet know which overview page belongs to which subject, so most topic pages have no sidebar and the 89 plain topic archives are orphans.

Needs VLCT

Seven decisions in the Decisions section, each with its own handover page, plus a handful of naming questions (what does VOSHA stand for; how to label Acrisure).

"Topics" means three different things

Most of the confusion on this subject comes from three separate things sharing one name. They are all real, they all exist on the draft site today, and the job is to connect them.

Layer 1 · Tags
89 topic tags

The labels attached to each resource, news item, FAQ and page. Migrated as-is from Drupal. Each has an automatic listing at /topic/<name>/.

Migrated 52 names need tidying
Layer 2 · Tree
12 subject areas

A hierarchy that groups the tags: Finance & Taxes › Property Taxes › Tax appeals. One tag can sit in two branches (Social Media is under both Governance and Technology). Drives the library's topic filter.

Live on draft site Approved 31 Aug
Layer 3 · Pages
~30 overview pages

The hand-written pages VLCT staff maintain, such as Town Meeting or Property Taxes. Migrated with their content and their resource lists.

Migrated 9 of ~30 are hubs
The prototype has no topic overview page In the design prototype a topic address such as /topic/town-meeting is the Resource Library with one filter already on. It never designed the editorial overview page, which is where VLCT's own writing lives. So for topic pages the WordPress hub page is the design, not a port of one. That needs a look from the design side: keep the hub page as it is, or give it the prototype's visual treatment on top. Filed as decision 8 below.
The gap in one sentence None of the three layers points at the others. A page is not linked to its tag, a tag is not linked to its place in the tree, and the tree does not know which page explains each subject. The relationship exists only in people's heads, and that is exactly what the plan below fixes.

What is done

What is not done, honestly

Pages and tree are not linked

Of 70 tree nodes, about 34 have an obvious overview page, about 10 have two candidates, and 26 have none. Five of those 26 are large subjects with no page at all:

SubjectTagged itemsPage today
Housing314none
Energy & Environment244none
Economic & Community Development160none
Disability Access (ADA)109none
Transportation107none

Until a page exists, the plan gives these subjects a sidebar on their automatic tag listing, so every subject has a landing spot.

Most topic pages have no sidebar

Nine hubs have one. The other ~21 overview pages get a department sidebar (Legal Support or Insurance) or nothing. The 89 automatic tag listings at /topic/… render the library shell with no sidebar and are linked from nowhere. (The prototype, by contrast, makes /topic/… the main topic page for every node, so the two sites currently disagree about what that address is for.)

9 of ~30 overview pages have a topic sidebar

Tag names are not ready to be headings

The new resource page footer prints the topic name as a heading on roughly 4,700 resource pages. 17 tags start with an in-house acronym (PACIF, VERB), three start with "ADVOCACY:", eight carry a "- Legal" or "- Operational" suffix. Readers who are not the person who buys the insurance will not decode "PACIF VOSHA OSHA".

37 of 89 names read correctly as a heading today

The "All topics" index is hand-maintained

/all-topics/ is a 29-link icon grid copied from Drupal. Two links are dead on the draft site (Grants & Funding moved; Public Works Safety Briefs is a draft). The plan regenerates it from the tree so it cannot drift again.

Two empty branches and one duplicate

"Executive session" and "Elections & Voting" exist in the tree but roll up no tags. "Infrastructure" appears twice (under Public Works, and as the Housing & Infrastructure area). Federal Funding has two competing landing pages. All are small data edits once VLCT confirms the direction.

Side by side

The same subject on the current site, the WordPress draft and the design prototype. The draft is where the real content lives; the prototype shows the intended look and navigation.

SubjectCurrent site (Drupal)WordPress draftDesign prototypeStatus
Town Meeting overviewthe page that started this work (#65)/topics-all/town-meeting200/topics-all/town-meeting/200/topic/town-meeting (library filter)SPAhub lists rebuilt, sidebar live
Property Taxes overviewhub with four child subjects in the tree/topics-all/property-taxes200/topics-all/property-taxes/200/topic/property-taxes (library filter)SPAhub
Grants &amp; Funding overviewmoved under Municipal Operations Support; old link on All topics is dead/grants-and-funding200/municipal-operations-support/grants-and-funding/200/topic/grants-funding (library filter)SPAhub old path needs redirect
Resource Library, filtered by topicwhere the 12-area tree is already in use/resource-library200/resource-library/200/resource-librarySPAlive 12 areas instead of 87 checkboxes
All topics index29-link icon grid; two dead links on the draft/all-topics200/all-topics/200hand-maintained regenerate from tree (decision 6)
Housing, a large subject with no page314 tagged items; only the automatic tag listing exists/topic/housing/200/topic/housing (library filter)SPAorphan listing gets a sidebar in phase 3
A resource page footerwhere a topic name becomes a heading ("More about …")/resource/24-v-s-a-section-4302/200names not ready decision 5
Prototype with the full 70-node treebranch preview built today; production prototype still has the 61-node treepreview: /topic/housing (library filter)SPApreview Housing now has a topic page in the prototype

Link checks run 17 September 2026. The prototype is a single-page app, so every address answers; its topic pages use sample data, not VLCT's full content. "SPA" marks those links.

Topic tree explorer

The live tree as it exists on the draft site today, with the tags each node gathers and the overview page we would attach to it. Counts are published resources / all published items. Click a node to open it; tag chips open that tag's listing on the draft site.

hub has a sidebar today · page page exists, not linked · choose two candidates · none no page · stub migration placeholder · area top-level grouping, page optional

Decisions we need from VLCT

Each of these is a genuine editorial call, not a technical one. We have a recommendation for every one so the meeting can be a yes/no rather than a discussion from scratch.

Handover pack Every open decision also exists as its own page with full documentation, written to be forwarded to the person at VLCT who owns the answer: background, options, our recommendation, what happens next, and how to reverse it.

Confirm the twelve-area tree on the draft site is the structure going forward, and retire the prototype's earlier, incomplete version.

Yes. The live tree already covers 86 of 89 tags and is reversible node by node.
2. Where does an overview page live? settled 11 Sep

Stay as a page (URLs unchanged, survives a re-migration) and be admitted to the Resource Library as a "Topic overview" card pinned first for its topic. Converting to a resource stays open as a later one-script step.

On the tree node (one screen shows the whole map) or on the page (editors find it where they edit content).

On the node. The Topic Tree admin screen becomes the single map of subject → page.

Keep every legacy path as it is (/topics-all/town-meeting), or move to a tidy /topics/finance-taxes/property-taxes/ scheme with redirects.

Keep them for launch. Normalise later if at all; redirects can be generated from the tree.

Six pure renames need no re-tagging (for example "ADVOCACY: VLCT's Municipal Policy" → "Municipal Policy", "Economic & Community Development" → "Economic and Community Development"). Merging the eight "- Legal / - Operational" suffix tags into their parents does re-tag content. Is the Legal/Operational split something staff use?

Approve the six renames now; expand acronyms via the glossary rather than renaming; decide the Legal/Operational question before any merge. Two facts we need: what VOSHA expands to, and how Acrisure should read on a public heading.

Regenerate it from the tree (12 areas with their children and icons), or keep the hand-picked 29-link grid and fix its two dead links.

Regenerate from the tree, keep the editorial intro. It stops the page from drifting out of date.

Hub sidebars list hand-picked resources (7 of 133 for Town Meeting). Keep curation, and add an automatic "All 133 resources tagged Town Meeting" link at the bottom of each group?

Yes. That link is the missing bridge to the automatic tag listings.

The prototype only shows a topic as a filtered library. The draft site's hub pages (overview text, curated sidebar, resource list) have no prototype counterpart. Approve the hub page as the design, or ask for a prototype treatment of one topic page first.

Approve the hub page as the design and restyle it with the prototype's tokens; a prototype mock of one topic page is a day of work if VLCT wants to see it first.

Smaller placement questions

Carried over from the rollup review (#32), none block anything (handover page): Social Media filed under both Governance and Technology (confirm); retire the "Municipal Assistance Center" tag since the Department filter covers it; Case Law and VLCT RFP (dormant: retire or leave); four low-confidence placements (First Amendment, Surveys and Research, Municipal Operations and Services, Solid Waste).

The plan, phase by phase

0

Inventory and sign-off

Full inventory of tags, tree, pages and sidebars; seven questions above. Written 11 Sep. One question settled, six for this meeting.

done, awaiting answers
1

Finish the tree (data only, no code)

Resolve the two empty nodes, the double Infrastructure, the root that carries a tag directly, the placement questions and the six renames. Every edit is one node in wp-admin and reversible.

tickets filed; awaiting VLCT
2

Link nodes to pages

Add a "landing page" field to each tree node, fill it from the draft mapping in the explorer above, retire the stub pages with redirects, mark every linked page as a hub automatically.

built today, on a branch
3

One sidebar for every topic surface

Overview pages, their curated children and the automatic tag listings all get the same branch sidebar from the tree. Overview pages appear in the Resource Library as "Topic overview" cards, pinned first for their topic.

sidebar built; library part next
4

Hub content for the ~21 remaining pages

Smaller than it looks: 26 of 28 pages already carry VLCT's own resource picks. A script turns those into curated sidebar lists; staff prune rather than compose.

after 3
5

Indexes and navigation

"All topics" regenerated from the tree; the mega menu's "Browse by topic" links go live to the 12 areas; breadcrumbs follow the tree.

6

Tag hygiene (the only re-tagging step, last)

Merge suffix tags and the three overlapping groups only if VLCT says the Legal/Operational split is not needed. Done last so the filter does not shift twice.

needs decision 5
7

Redirects, QA, deploy

Redirect map for retired stubs; one page per area × landing, child, listing = 36 checks plus the index and menu; client walk-through by area.

Work log and how to undo it Viv internal reference

Every change made while preparing this report is tracked in a GitHub issue that records what was done and the exact step to reverse it. Nothing here touches vlct.org, and nothing was deployed to the draft site today; code changes stay on review branches until Viv promotes them.

Related tickets

IssueWhat it coversPhaseStatus
#81Umbrella: this report, the decisions, and every sub-issuetracking
#82Tree tidy-up: empty nodes, root carrying a tag, Infrastructure twice, Technology one level too deep1needs VLCT
#83Link each tree node to its overview page; seed from the draft mapping2built, 31 linked locally
#84One branch sidebar for landing pages, curated children and tag listings3built, needs visual QA
#85Overview pages in the Resource Library as "Topic overview" cards, pinned first3after #83
#86Glossary expansions for PACIF, VERB, CHIP, ARPA and friends6 (early)built, on a branch
#87All-topics: two dead links now; regenerate from the tree after decision 65part A built part B needs VLCT
#88Mega menu "Browse by topic" becomes real links5built, on a branch
#89Federal Funding has three landing pages; pick one2needs VLCT
#90Curated sidebars for the ~21 non-hub pages, seeded from their own resource lists4after #83
prototype #102Bring the prototype's topic tree up to the 70-node WordPress treeagent working

Change log

WhenWhatWhereUndoIssue
17 Sep 09:35Created the report hosting: private repo vivwebsolutions/vlct-reports with GitHub Pages, and Cloudflare Pages project vlct-reports. Both carry noindex.GitHub · Cloudflaregh repo delete vivwebsolutions/vlct-reports · wrangler pages project delete vlct-reports#81
17 Sep 09:38Removed a stray Cloudflare Worker that the wrangler CLI created as a side effect while making the Pages project.CloudflareNothing to undo; it was never referenced.#81
17 Sep 09:52Filed the umbrella issue and nine sub-issues covering phases 1–5 of the plan, each with its own undo step. Filed one issue on the prototype repo.GitHub issuesClose the issues.#81, #82#90, prototype #102
17 Sep 09:55Started five implementation agents on the agent-ready tickets: node → page link (#83), branch sidebar (#84), glossary expansions (#86), All-topics dead links + mega-menu links (#87, #88), prototype tree sync (#102). They work on separate git branches and do not deploy to the draft site.Local worktreesDelete the branch. Any data written to the local database is by a script with a --revert switch.#83, #84, #86, #87, #88, #102
17 Sep 10:12Prototype topic tree brought up to the WordPress tree: 61 → 70 nodes, 56 → 86 of 89 tags. Deployed as a branch preview; the production prototype is unchanged. Also added an export script in the migration repo so the two cannot drift again.Prototype branch <code>chore/topics-tree-sync</code> · migration branch <code>topics-export</code>Delete the two branches; the preview deployment can be deleted or ignored.prototype #102
17 Sep 10:20Glossary expansions for topic acronyms: 11 entries seeded on the local draft (PACIF, VERB, CHIP, ARPA, VEM, OSHA, DPW, RFP, MAC and two composites) plus a display-name rule the theme uses for headings, chips and filter labels. Result: 39 tags show their tree label, 10 their glossary name, 40 stay as-is; only Acrisure, CHIP and VOSHA remain flagged for VLCT.Branches <code>topic-glossary</code> and <code>topic-glossary-resource-single</code> · local database onlyRun the seed script with revert (deletes exactly those 11 entries); do not merge the branches.#86
17 Sep 10:22All-topics page: the two dead tiles fixed on the local draft (Grants & Funding now points at the moved page and has a pinned redirect; Safety Briefs points at the workplace-safety listing until VLCT decides whether to publish the draft resource). Previous page content is kept in a hidden field.Branch <code>topic-nav-links</code> · local database onlyRun the fix script with revert; it restores the stored content.#87
17 Sep 10:22Mega menu "Browse by topic" now renders the 12 areas from the tree as real links with live counts that match the Resource Library filter.Branch <code>topic-nav-links</code> · theme code onlyDo not merge the branch.#88
17 Sep 10:25Each tree node can now point at its overview page. A new "Landing page" field on tree nodes, helper functions for the theme, and a seed script that linked the 31 unambiguous nodes on the local draft (9 existing hubs + 22 single-candidate pages). 16 nodes are left for a human because they have two candidates or only a placeholder page; 23 nodes have no page and fall back to their tag listing.Branch <code>topic-landing-link</code> · local database onlyRun the seed script with revert; it clears exactly the links it wrote (logged by node).#83
17 Sep 10:35One branch sidebar for every topic surface: overview pages, their curated children and the automatic tag listings now get the same sidebar built from the tree, titled with the subject area, with an "All N resources tagged …" link per group and breadcrumbs that follow the tree. Verified against the local data in ten scenarios; needs a visual pass on the draft site before it ships.Branch <code>topic-branch-sidebar</code> · theme code onlyA one-line switch turns it off without a deploy; or do not merge the branch.#84

Related issues