District2Framingham.com
Neighborhood civic blog covering local government, politics, and events in and near Framingham’s District 2 (Nobscot and Saxonville). Built with Quarto, hosted on Netlify. Running since 2017 as a volunteer project.
Scope: Government, politics, elections, neighborhood events, traffic/infrastructure, local businesses, trails/recreation. Very rarely covers schools (time constraint).
Audience: District 2 residents and civic-minded Framingham neighbors.
Content workflows
Event briefs
When asked to draft an event brief from source material (emails, social posts, flyers, websites):
- Draft organized notes, not a finished post. Sharon rewrites in her own voice.
- Include the essentials: what, when, where (with address), cost, who’s organizing, and any notable details.
- Include real links from the source material. Flag
[LINK NEEDED: description]where a link would be useful but isn’t available. - Include suggested YAML frontmatter (title, author, description, date, categories) but omit image and image-alt fields — Sharon handles images. Town location should be included at end of headline if not Framingham.
- Suggest categories from the existing taxonomy (see below).
- Aim for roughly 150-300 words for a typical event brief, matching the site’s usual length.
Writing boundaries
- Sharon writes all final pieces. Claude produces notes, summaries, and rough drafts — not publish-ready blog posts — unless explicitly told otherwise.
- Never edit or suggest changes to already-published posts unless specifically asked.
- No SEO, marketing, or engagement suggestions. No keywords, meta-description optimization, social sharing boilerplate, or growth tactics.
- Voice rules (also in global CLAUDE.md): no AI tells (“delve,” “dive into”), no hedging (“it’s worth noting”), not over-formal. Match a veteran journalist’s conversational register. No emoji or exclamation points unless context demands them.
Post format reference
Frontmatter
---
title: "Post Title"
author: "Sharon Machlis"
description: "One-line description for listing pages"
date: "YYYY-MM-DD"
categories: [Category1, Category2]
---Author is “Sharon Machlis”.
Drafts: to make a post a draft, add draft: true to its frontmatter — lowercase true, never TRUE. When Sharon asks how to make a post a draft, tell her the same. Remove the line (or set draft: false) to publish. See Quarto website drafts.
Quarto markdown conventions
- External links use
{target="_blank"}:[link text](url){target="_blank"} - Addresses of primary venues/locations MUST link to OpenStreetMap: look up the address via the Nominatim API to get the
osm_typeandosm_id, then link as[address](https://www.openstreetmap.org/{osm_type}/{osm_id}){target="_blank"} - Images:
{fig-alt="descriptive alt text"} - Many news posts open with a
FRAMINGHAM –dateline (an em dash, not a hyphen) - Videos embed with
Category taxonomy
High-frequency categories (use these first):
Events, Government & Politics, Saxonville, Nobscot, Elections, Traffic, Holidays, City Council, McAuliffe Library, Trails, Planning & Development, Concerts, Recreation, Eateries, Mayor, Business, School Committee, Brandon Ward, MBTA Communities Law, Public Works, Wayland, Emergencies, Weather
Technical notes
- Posts live in
posts/YYYY-MM-DD-slug-name/index.qmd(each post gets its own directory) - Site renders with Quarto; publishing workflow uses feature branches merged into main
Rendering — render the single post, not the project (CRITICAL)
- To publish a new or edited post, render only that file:
quarto render posts/YYYY-MM-DD-slug/index.qmd --to html. It takes seconds, and it updates_site/index.html,index.xml,sitemap.xml,search.jsonandlistings.jsonso the post appears in the listings and feed. - Do not run a bare
quarto renderunless Sharon asks for a full rebuild. It re-renders all ~448 files, takes about five minutes, and deletes_sitebefore rebuilding it. If it is interrupted,_siteis left empty. _siteand_freezeare committed.netlify.tomlsetspublish = "_site"withcommand = "echo 'No build needed'", so Netlify does no build — the committed_siteis the live site. If_siteis missing or empty in a pushed commit, the Netlify build fails outright.- Before committing, confirm
_siteis intact:find _site -type f | wc -lshould be in the 1,600s, andgit diff --cached --statmust not show mass deletions. See the staging rules in the global CLAUDE.md. - A post’s frontmatter
image:file must be committed alongsideindex.qmd, or the home-page thumbnail andog:image404. - Event calendar is in
EventCal.qmdusingreactable - Email list runs through Beehiiv
- Social: Mastodon (@FramDist2@mastodon.social), Bluesky (district2framingham.com)
Sign up for the District 2 email-list.