PDF templates / Civic / Government
Council Meeting Agenda
Municipal council meeting agenda derived from published US city agendas: masthead with meeting meta box, public-comment notice, numbered items grouped under Consent and Regular headings with sponsor/action lines, and clerk certification. Renders as a tagged PDF/A-2A + PDF/UA-1 document.

DSL source
The whole template. Learn the language in the template DSL guide.
const template = doc(
{ size: "Letter", title: "{{jurisdiction}} {{councilBody}} {{meetingKind}} Agenda — {{date}}", padding: [36, 40, 36, 40],
styles: {
".masthead": { "font-family": "Inter", "font-size": 20, "font-weight": "bold", color: "#0b3d91", "margin": [0, 0, 2, 0] },
".meeting-kind": { "font-family": "Inter", "font-size": 13, "font-weight": "bold", color: "#1a1a1a", "margin": [0, 0, 2, 0] },
".meeting-line": { "font-family": "Inter", "font-size": 10, color: "#333", "line-height": 1.4 },
".meta-label": { "font-family": "Inter", "font-size": 8, "font-weight": "bold", color: "#555" },
".meta-value": { "font-family": "Inter", "font-size": 9.5, color: "#1a1a1a" },
".notice-box": { "background-color": "#f0f4fa", "border": [1, 1, 1, 1], "border-color": "#0b3d91", padding: [8, 10, 8, 10] },
".notice-text": { "font-family": "Inter", "font-size": 9, color: "#1a1a1a", "line-height": 1.45 },
".section-title":{ "font-family": "Inter", "font-size": 12, "font-weight": "bold", color: "#0b3d91", "border": [0, 0, 1, 0], "border-color": "#0b3d91", "padding": [0, 0, 3, 0], "margin": [0, 0, 6, 0] },
".item-number": { "font-family": "Inter", "font-size": 10, "font-weight": "bold", color: "#0b3d91" },
".item-title": { "font-family": "Inter", "font-size": 10, "font-weight": "bold", color: "#1a1a1a", "line-height": 1.35 },
".item-meta": { "font-family": "Inter", "font-size": 9, color: "#444", "line-height": 1.4, "margin": [1, 0, 0, 0] },
".cert": { "font-family": "Inter", "font-size": 9, color: "#333", "line-height": 1.5 },
},
},
// Masthead
s(".masthead", "{{jurisdiction}}"),
s(".meeting-kind", "{{councilBody}} — {{meetingKind}} Agenda"),
s(".meeting-line", "{{date}} at {{time}} — {{location}}"),
gap(8),
// Meeting meta box
r({ "border": [1, 1, 1, 1], "border-color": "#0b3d91", padding: [8, 10, 8, 10] },
col("50%",
s(".meta-label", "MEETING DATE / TIME"),
s(".meta-value", "{{date}} at {{time}}"),
gap(4),
s(".meta-label", "LOCATION"),
s(".meta-value", "{{location}}"),
),
col("50%",
s(".meta-label", "POSTED"),
s(".meta-value", "{{postedAt}}"),
gap(4),
s(".meta-label", "CLERK CONTACT"),
s(".meta-value", "{{clerkContact}}"),
),
),
gap(8),
// Public-comment notice
r({ class: "notice-box" },
col("100%", s(".notice-text", "{{notice}}")),
),
gap(10),
// Agenda sections with numbered items
each("section in sections",
s(".section-title", "{{section.heading}}"),
each("item in section.items",
r({ grid: ["34pt", "1fr"], "margin": [0, 0, 6, 0] },
col(s(".item-number", "{{item.number}}")),
col(
s(".item-title", "{{item.title}}"),
s(".item-meta", "Sponsor: {{item.sponsor}} • Action: {{item.action}}"),
when("item.detail",
s(".item-meta", "{{item.detail}}"),
),
),
),
),
gap(4),
),
gap(4),
s(".cert", "{{certification}}"),
ftrPages("{{jurisdiction}} {{councilBody}} — {{date}}"),
);
const sampleData = {
jurisdiction: "City of Riverton",
councilBody: "City Council",
meetingKind: "Regular Meeting",
date: "12 November 2025",
time: "6:30 PM",
location: "Riverton City Hall, Council Chambers, 450 Civic Center Drive",
postedAt: "7 November 2025 at 4:00 PM",
clerkContact: "City Clerk — (555) 014-2800 · clerk@riverton.example.gov",
notice: "Members of the public may address the Council on any agenda item when it is called, or on matters not on the agenda during the Public Comment period. Speakers are limited to three minutes each. To request disability-related accommodation, contact the City Clerk at least 48 hours before the meeting.",
sections: [
{
heading: "Call to Order and Procedural Items",
items: [
{ number: "1", title: "Call to Order, Pledge of Allegiance and Invocation", sponsor: "Mayor A. Okafor", action: "Procedural", detail: "" },
{ number: "2", title: "Roll Call and Determination of Quorum", sponsor: "City Clerk", action: "Procedural", detail: "" },
{ number: "3", title: "Approval of Minutes — Regular Meeting of 28 October 2025", sponsor: "City Clerk", action: "Approve", detail: "Draft minutes were circulated 30 October 2025." },
],
},
{
heading: "Consent Agenda",
items: [
{ number: "4", title: "Claims Register for the Period Ending 7 November 2025", sponsor: "Finance Department", action: "Approve", detail: "Total disbursements $1,284,309.55." },
{ number: "5", title: "Resolution 2025-118 — Accepting the October 2025 Treasurer's Report", sponsor: "Finance Department", action: "Adopt", detail: "" },
{ number: "6", title: "Reappointment of L. Marsh to the Planning Commission (Term to 2029)", sponsor: "Mayor A. Okafor", action: "Confirm", detail: "" },
],
},
{
heading: "Regular Agenda",
items: [
{ number: "7", title: "Public Hearing — Rezoning of 1200 Mill Road from R-2 to MU-N (Case Z-25-09)", sponsor: "Planning Department", action: "Hold hearing; possible first reading", detail: "Planning Commission recommended approval 6–1 on 21 October 2025." },
{ number: "8", title: "Ordinance 2025-44 — FY 2025-26 Mid-Year Budget Amendment (First Reading)", sponsor: "Finance Department", action: "First reading", detail: "Net appropriation increase of $412,000, funded from General Fund balance." },
{ number: "9", title: "Change Order No. 3 — Elm Street Resurfacing (CIP Project ST-24-04)", sponsor: "Public Works", action: "Approve", detail: "Adds $86,400 for storm-drain repairs discovered during milling." },
{ number: "10", title: "City Manager's Report — Winter Shelter Operations and Grant Update", sponsor: "City Manager", action: "Receive and file", detail: "" },
],
},
{
heading: "Public Comment and Adjournment",
items: [
{ number: "11", title: "Public Comment on Non-Agenda Items", sponsor: "Mayor A. Okafor", action: "Hear comments", detail: "Three minutes per speaker; thirty minutes total." },
{ number: "12", title: "Adjournment", sponsor: "Mayor A. Okafor", action: "Adjourn", detail: "Next regular meeting: 9 December 2025." },
],
},
],
certification: "I certify that this agenda was posted at Riverton City Hall and on the City website on 7 November 2025 at 4:00 PM. — D. Reyes, City Clerk",
};Sample data
{
"jurisdiction": "City of Riverton",
"councilBody": "City Council",
"meetingKind": "Regular Meeting",
"date": "12 November 2025",
"time": "6:30 PM",
"location": "Riverton City Hall, Council Chambers, 450 Civic Center Drive",
"postedAt": "7 November 2025 at 4:00 PM",
"clerkContact": "City Clerk — (555) 014-2800 · clerk@riverton.example.gov",
"notice": "Members of the public may address the Council on any agenda item when it is called, or on matters not on the agenda during the Public Comment period. Speakers are limited to three minutes each. To request disability-related accommodation, contact the City Clerk at least 48 hours before the meeting.",
"sections": [
{
"heading": "Call to Order and Procedural Items",
"items": [
{
"number": "1",
"title": "Call to Order, Pledge of Allegiance and Invocation",
"sponsor": "Mayor A. Okafor",
"action": "Procedural",
"detail": ""
},
{
"number": "2",
"title": "Roll Call and Determination of Quorum",
"sponsor": "City Clerk",
"action": "Procedural",
"detail": ""
},
{
"number": "3",
"title": "Approval of Minutes — Regular Meeting of 28 October 2025",
"sponsor": "City Clerk",
"action": "Approve",
"detail": "Draft minutes were circulated 30 October 2025."
}
]
},
{
"heading": "Consent Agenda",
"items": [
{
"number": "4",
"title": "Claims Register for the Period Ending 7 November 2025",
"sponsor": "Finance Department",
"action": "Approve",
"detail": "Total disbursements $1,284,309.55."
},
{
"number": "5",
"title": "Resolution 2025-118 — Accepting the October 2025 Treasurer's Report",
"sponsor": "Finance Department",
"action": "Adopt",
"detail": ""
},
{
"number": "6",
"title": "Reappointment of L. Marsh to the Planning Commission (Term to 2029)",
"sponsor": "Mayor A. Okafor",
"action": "Confirm",
"detail": ""
}
]
},
{
"heading": "Regular Agenda",
"items": [
{
"number": "7",
"title": "Public Hearing — Rezoning of 1200 Mill Road from R-2 to MU-N (Case Z-25-09)",
"sponsor": "Planning Department",
"action": "Hold hearing; possible first reading",
"detail": "Planning Commission recommended approval 6–1 on 21 October 2025."
},
{
"number": "8",
"title": "Ordinance 2025-44 — FY 2025-26 Mid-Year Budget Amendment (First Reading)",
"sponsor": "Finance Department",
"action": "First reading",
"detail": "Net appropriation increase of $412,000, funded from General Fund balance."
},
{
"number": "9",
"title": "Change Order No. 3 — Elm Street Resurfacing (CIP Project ST-24-04)",
"sponsor": "Public Works",
"action": "Approve",
"detail": "Adds $86,400 for storm-drain repairs discovered during milling."
},
{
"number": "10",
"title": "City Manager's Report — Winter Shelter Operations and Grant Update",
"sponsor": "City Manager",
"action": "Receive and file",
"detail": ""
}
]
},
{
"heading": "Public Comment and Adjournment",
"items": [
{
"number": "11",
"title": "Public Comment on Non-Agenda Items",
"sponsor": "Mayor A. Okafor",
"action": "Hear comments",
"detail": "Three minutes per speaker; thirty minutes total."
},
{
"number": "12",
"title": "Adjournment",
"sponsor": "Mayor A. Okafor",
"action": "Adjourn",
"detail": "Next regular meeting: 9 December 2025."
}
]
}
],
"certification": "I certify that this agenda was posted at Riverton City Hall and on the City website on 7 November 2025 at 4:00 PM. — D. Reyes, City Clerk"
}Render it with your data
Any API key can render this template by its ID. This call uses the sample data; add a data object to use your own. See the API reference.
curl -X POST https://makespdf.com/api/v1/render \
-H "Authorization: Bearer $MAKESPDF_API_KEY" \
-H "Content-Type: application/json" \
-d '{"templateId": "council-agenda"}' \
-o output.pdf