Skip to content

The volunteer who takes the minutes

You take the notes.
It writes the minutes.

You take the notes. Your assistant makes the minutes, the same way every month, for as long as you hold the office.

The whole job, four panels

Last night’s meeting, this morning’s minutes

  1. 1 · You ask

    Claude

    You, the secretary

    Write up last night’s board meeting. Five of the six directors were there, Tom was excused. We approved July’s minutes with the reserve figure corrected, gave the clubhouse roof to Tidewater for $38,400, and four owners spoke about the speed humps on Marsh Wren.

    Nothing yet
  2. 2 · It calls Galley

    Write up last night’s board meeting. Five of the six directors were there, Tom was excused. We approved July’s minutes with the reserve figure corrected, gave the clubhouse roof to Tidewater for $38,400, and four owners spoke about the speed humps on Marsh Wren.

    Claude

    I've got everything except the times. Called to order at 6:32 and adjourned at 8:04, same as usual? Making the minutes now.

    galley · render { template: "meeting-minutes", data: { … } } → meeting-minutes@1 · PDF · 3 pages · 1.4 s

    Rendering
  3. 3 · The document

    Three pages, signed off by you and the president.

    • Roll call, quorum finding, every motion with its recorded vote
    • Draft watermark until the board approves them
    • Two signature lines, secretary on the left
    Three pages of HOA board meeting minutes: a masthead with the association name, roll call with the quorum finding, officer reports, each motion with its mover, seconder and recorded vote, and two signature lines.
    Made by Galley
  4. 4 · Next month

    October. Same document, different month.

    Same again for the October meeting — here are my notes.

    What changed between the two documents
    FieldWasNow
    Meeting September 8 October 13
    Motions 2026-14 to 2026-16 2026-17 onward
    Quorum 5 of 6 4 of 6

    Everything else — every rule, every margin, every heading — identical.

    Three pages of HOA board meeting minutes: a masthead with the association name, roll call with the quorum finding, officer reports, each motion with its mover, seconder and recorded vote, and two signature lines.
    Made by Galley

The board’s whole year

Everything a secretary has to produce

Real templates, already in every account. Press a button on any of them and the PDF is made on the spot, with no key, no account and nothing to install. Use them as they are, and your assistant fills them in from what you tell it.

  • Preview of the architectural decision template

    Architectural decision

    Approved, approved with conditions, or denied. The letter changes shape to match, and any conditions print as a numbered list.

    PDF · Letter

  • Preview of the ballot and proxy template

    Ballot and proxy

    A numbered ballot with a candidate statement each, write-in lines, and a detachable proxy.

    PDF · Letter

  • Preview of the annual budget summary template

    Annual budget summary

    Income and expenses against last year with every total worked out for you, the reserve schedule, and assessments by unit type.

    PDF · Letter

  • Preview of the meeting agenda template

    Meeting agenda

    The order of business, with who is presenting and how long they get. Hand it out at the door.

    PDF · Letter

  • Preview of the meeting minutes template

    Meeting minutes

    Roll call, the quorum finding, every motion with its mover, seconder and recorded vote, and two signature lines.

    PDF · Letter

  • Preview of the notice of meeting template

    Notice of meeting

    The statutory notice for an annual or special meeting, with a detachable limited proxy on its own page.

    PDF · Letter

  • Preview of the violation letter template

    Violation letter

    The one nobody enjoys writing. The covenant quoted in full, what was seen, a cure-by date, and the owner’s hearing rights.

    PDF · Letter

  • Preview of the new owner welcome template

    New owner welcome

    What the assessment is, when it’s due, who to call, and the handful of rules new owners break by accident.

    PDF · Letter

You don't need a key, an account or a card. Your browser calls the live service, which gives each device 10 free PDF pages. After that, an account of your own keeps everything you've made here, or your assistant can make you one. Each of these is a real PDF you can print, sign or send.

A real one

Minutes from a board that actually meets

This is the September meeting of a six-director association in Wilmington, North Carolina, with the numbers a treasurer would really read out. Press the button and the PDF is made on the spot. You don't need an account or a key, and there's nothing to install.

There's nothing to install. Your browser calls the live service and a real PDF comes back.

See exactly what gets sent 216 lines of JSON

The template's own example payload. It's the same one that produced the sheet beside it, and it's what gets made.

{
  "status": "draft",
  "association": {
    "name": "Heron Bay Homeowners Association, Inc.",
    "subtitle": "Board of Directors",
    "address": "PO Box 4127, Wilmington, NC 28406"
  },
  "meeting": {
    "kind": "Regular",
    "date": "2026-09-08",
    "time": "6:30 p.m.",
    "location": "Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC",
    "chair": "Priya Raghunathan, President",
    "called_to_order": "6:32 p.m.",
    "adjourned": "8:04 p.m.",
    "recorded_by": "Matthew Okafor, Secretary"
  },
  "board_members": [
    {
      "name": "Priya Raghunathan",
      "title": "President",
      "present": true
    },
    {
      "name": "Daniel Voss",
      "title": "Vice President",
      "present": true
    },
    {
      "name": "Ana Alvarez",
      "title": "Treasurer",
      "present": true
    },
    {
      "name": "Matthew Okafor",
      "title": "Secretary",
      "present": true
    },
    {
      "name": "Karen Whitfield",
      "title": "Director at large",
      "present": true
    },
    {
      "name": "Thomas Bergeron",
      "title": "Director at large",
      "present": false,
      "absence": "Excused"
    }
  ],
  "also_present": [
    {
      "name": "Denise Hollowell",
      "role": "community manager, Cape Fear Property Management"
    },
    {
      "name": "Raymond Stipe",
      "role": "Tidewater Roofing, for item 5 only"
    }
  ],
  "homeowners_present": 14,
  "quorum": {
    "required": 3,
    "present": 5,
    "met": true,
    "note": "Director Alvarez joined at 6:41 p.m. and is recorded as present from that point."
  },
  "approval_of_minutes": "The minutes of the July 14, 2026 regular meeting were approved as corrected: the reserve transfer in paragraph 6 was changed from $12,000 to $12,500 to match the July bank statement. There was no August meeting.",
  "reports": [
    {
      "title": "Treasurer's report",
      "presenter": "Ana Alvarez, Treasurer",
      "body": "Operating cash at August 31 was $48,712 against a year-to-date budget of $44,000. Reserve balances stood at $211,940 across all components. Two accounts remain more than ninety days delinquent, totalling $3,480, and both have been referred to association counsel under the adopted collection policy."
    },
    {
      "title": "Management report",
      "presenter": "Denise Hollowell, Cape Fear Property Management",
      "body": "Eleven work orders were opened in August and nine closed. The irrigation controller at the Marsh Wren entrance was replaced under the landscape contract at no additional cost. Pressure washing of the clubhouse walkways is scheduled for the week of September 21."
    },
    {
      "title": "Architectural Review Committee",
      "presenter": "Karen Whitfield, Chair",
      "body": "Six applications were received: four approved, one approved with conditions, and one denied for a fence height exceeding six feet. The committee asked the Board to clarify whether composite decking colours require a separate submission."
    }
  ],
  "financial_position": {
    "as_of": "2026-08-31",
    "lines": [
      {
        "label": "Operating account — Live Oak Bank",
        "amount": 48712.44,
        "prior_amount": 45180.02
      },
      {
        "label": "Reserve account — money market",
        "amount": 211940.18,
        "prior_amount": 209603.77
      },
      {
        "label": "Assessments receivable",
        "amount": 6215,
        "prior_amount": 5890
      },
      {
        "label": "Prepaid insurance and taxes",
        "amount": 4108.33,
        "prior_amount": 4930
      }
    ],
    "note": "The Board accepted the August statements as presented. Delinquencies over ninety days total $3,480 across two accounts, both referred to counsel."
  },
  "motions": [
    {
      "number": "2026-14",
      "text": "To award the clubhouse roof replacement to Tidewater Roofing in the amount of $38,400, funded from the roofing reserve component, subject to receipt of a current certificate of insurance naming the Association as additional insured.",
      "moved_by": "Ana Alvarez",
      "seconded_by": "Karen Whitfield",
      "vote": {
        "for": 4,
        "against": 0,
        "abstain": 1
      },
      "result": "Carried",
      "recusals": "Director Okafor, whose brother-in-law is employed by the bidder",
      "discussion": "Three bids were received, from $34,900 to $41,200. Tidewater was not the lowest but was the only bidder carrying a twenty-year no-dollar-limit manufacturer warranty. The roofing component holds $52,300, so the award leaves $13,900 in it."
    },
    {
      "number": "2026-15",
      "text": "To amend the pool rules to close the pool at 9:00 p.m. from November 1 through March 31, and to direct management to post the revised hours at both gates.",
      "moved_by": "Daniel Voss",
      "seconded_by": "Priya Raghunathan",
      "vote": {
        "for": 5,
        "against": 0,
        "abstain": 0
      },
      "result": "Carried",
      "discussion": "The change follows two complaints about noise after dark and brings the winter hours in line with the lighting on the pool deck."
    },
    {
      "number": "2026-16",
      "text": "To increase the architectural review application fee from $25 to $75.",
      "moved_by": "Karen Whitfield",
      "seconded_by": "Daniel Voss",
      "vote": {
        "for": 1,
        "against": 4,
        "abstain": 0
      },
      "result": "Failed",
      "discussion": "The Board agreed the current fee does not cover the committee's costs but was unwilling to triple it without first publishing the cost breakdown to owners."
    }
  ],
  "open_forum": "Four owners spoke. Two asked about traffic calming on Marsh Wren Drive, and the Board directed management to obtain quotes for two speed humps. One raised the condition of the pool furniture, already scheduled for replacement in the 2027 reserve plan. One asked when the annual meeting notice would be mailed; the Secretary confirmed it goes out no later than October 30.",
  "action_items": [
    {
      "item": "Obtain three quotes for speed humps on Marsh Wren Drive",
      "owner": "Denise Hollowell",
      "due": "2026-10-06"
    },
    {
      "item": "Publish the architectural review cost breakdown to the Board",
      "owner": "Denise Hollowell",
      "due": "2026-10-06"
    },
    {
      "item": "Collect Tidewater's certificate of insurance before work begins",
      "owner": "Denise Hollowell",
      "due": "2026-09-22"
    },
    {
      "item": "Draft the annual meeting notice and limited proxy",
      "owner": "Matthew Okafor",
      "due": "2026-10-13"
    },
    {
      "item": "Post the revised winter pool hours at both gates",
      "owner": "Denise Hollowell",
      "due": "2026-10-27"
    }
  ],
  "executive_session": "The Board met in executive session from 7:48 p.m. to 8:01 p.m. to discuss two delinquent accounts and one contract personnel matter. No votes were taken in closed session.",
  "attachments": [
    {
      "label": "A",
      "title": "Bid tabulation, clubhouse roof replacement, August 19, 2026",
      "note": "three bidders"
    },
    {
      "label": "B",
      "title": "August 2026 financial statements, Cape Fear Property Management"
    },
    {
      "label": "C",
      "title": "Reserve study update, Coastal Reserve Advisors, May 4, 2026"
    },
    {
      "label": "D",
      "title": "Architectural Review Committee log, June to August 2026"
    }
  ],
  "next_meeting": {
    "date": "2026-10-13",
    "time": "6:30 p.m.",
    "location": "Heron Bay Clubhouse",
    "note": "The draft 2027 budget will be presented for first reading."
  },
  "secretary": {
    "name": "Matthew Okafor",
    "title": "Secretary"
  },
  "president": {
    "name": "Priya Raghunathan",
    "title": "President"
  }
}
The first page of a set of board meeting minutes: the association’s name across the top, the meeting’s date and place, and the roll call.
Heron Bay Homeowners Association, regular meeting of the Board of Directors. Rendered live, from the payload below.

Connect it in two minutes

There's nothing to install or learn. You paste one address into Claude or ChatGPT once, and after that you ask for minutes in plain English and get a PDF back. If you can add a bookmark, you can do this.

Galley's address https://mcp.galleyrender.com/mcp

Streamable HTTP, with no sign-in, key or OAuth. Your first documents are free. When you want more, ask your assistant to make you an account. You'll get an email that shows who asked and a short code, and you confirm it there. Already have a key? The last step in every tab below is where it goes: a header for Claude Code and Cursor, and, for Claude.ai and ChatGPT, a personal address plus the link_account tool.

Claude.ai

The web app at claude.ai, and Claude Desktop. Free, Pro, Max, Team and Enterprise. On Team and Enterprise an owner adds it once for the organization, then everyone connects to it.

  1. Open claude.ai → Customize → Connectors.
  2. Click +, then Add custom connector.
  3. Paste your personal address into the URL field. It's made here, in your browser, and nobody else has it:
    https://mcp.galleyrender.com/mcp/c/…
  4. Leave Advanced settings alone. That's where an OAuth client id and secret would go, and Galley doesn't need either.
  5. Click Add. Galley's tools are now in the tools menu of any new chat.
  6. Try it: ask for one of the documents below and watch it approve the tool call.
  7. Use your key. Claude.ai's connector dialog can't send an HTTP header, so the key goes in through a tool instead. Ask Claude: run link_account with my Galley key. If you'd rather not paste a key into a chat, ask it to run create_account with my email address. An address that already has an account gets a one-time code by email instead of a second account, and link_account takes that code. Check it worked with run whoami. This works because of your personal address: Claude calls Galley from Anthropic's servers, so on the shared address every Claude user looks the same, and that one can't be linked to anybody's account.
    what to say text
    Run link_account with this key: glr_sk_…
    
    or, with no key to hand:
    
    Run create_account with my email, then link_account with
    the code that arrives.
A drawing of the Claude.ai Connectors screen with the custom connector dialog open and the URL field highlighted. Customize › Connectors + Add custom connector Remote MCP server URL mcp.galleyrender.com/mcp/c/… Advanced settings — OAuth client id and secret Not needed: Galley asks for no sign-in. Add
Customize → Connectors, with the custom connector dialog open and the URL field highlighted.

On Team or Enterprise the first step is an owner's job: Organization settings → Connectors → Add → Custom → Web. Everyone else then finds it under Customize → Connectors and clicks Connect.

Keep your personal address to yourself. Once it's linked, whoever has it is using your account, the same as with a key. Don't paste it into a shared document. If somebody else might have seen it, ask for unlink_account and add Galley again with a new one. On a Team or Enterprise plan, an address an owner adds for the organization is shared by everyone in it.

ChatGPT

The ChatGPT web app. Plus, Pro, Business, Enterprise and Education, on the web. ChatGPT's free plan can't add a custom connector. On a free account, use Claude, which can.

  1. In ChatGPT, open Settings → Security and login and turn on Developer mode.
  2. Go to chatgpt.com/plugins.
  3. Click the + button and create a developer-mode app for a remote MCP server.
  4. Paste your personal address as the server URL. It's made here, in your browser, and nobody else has it:
    https://mcp.galleyrender.com/mcp/c/…
  5. Leave authentication empty, because Galley doesn't need any.
  6. Save. Your new app appears under Drafts. It's yours to use, and nothing is submitted to OpenAI or reviewed by anyone.
  7. In a chat, enable it and ask for a document. ChatGPT asks you to confirm the first time it makes a file. That prompt is normal for any action that writes something.
  8. Use your key. Leave the authentication fields empty (Galley doesn't use OAuth) and hand the key over with a tool instead: run link_account with my Galley key. No key to hand? Run create_account with my email address. If that address already has an account, we email it a one-time code, and link_account takes the code. Run whoami confirms which account you're on. It works because of your personal address: ChatGPT calls Galley from OpenAI's servers, so on the shared address every ChatGPT user looks the same, and that one can't be linked to anybody's account.
    what to say text
    Run link_account with this key: glr_sk_…
    
    or, with no key to hand:
    
    Run create_account with my email, then link_account with
    the code that arrives.
A drawing of the ChatGPT developer mode toggle and the new app dialog, with the MCP server URL field highlighted. Settings › Security and login Developer mode on chatgpt.com/plugins + New app MCP server URL mcp.galleyrender.com/mcp/c/… Authentication: none. Saved into Drafts.
Settings → Security and login with Developer mode on, and the new-app dialog with the server URL field highlighted.

Older ChatGPT builds and older help articles call this a connector instead of an app. It's the same thing.

Keep your personal address to yourself. Once it's linked, whoever has it is using your account, the same as with a key. Don't paste it into a shared document. If somebody else might have seen it, ask for unlink_account and add Galley again with a new one. On a Team or Enterprise plan, an address an owner adds for the organization is shared by everyone in it.

Claude Code

The terminal tool. For people who do write code. Any plan that runs Claude Code.

  1. Add the server. --scope user makes it available in every project. Leave it off and it's only added to the current one.
    terminal bash
    claude mcp add --transport http --scope user \
      galley https://mcp.galleyrender.com/mcp
  2. Check it: claude mcp list should show galley connected.
  3. Ask for a render. The first call with no key mints a trial and hands the token back in the response.
  4. Use your key. Add it as a header and every call is on your account rather than on the keyless trial. Re-run the add command with --header; it replaces the entry. Then ask Claude to run whoami — it should say authenticated_via: "header".
    terminal bash
    claude mcp add --transport http galley https://mcp.galleyrender.com/mcp \
      --header "Authorization: Bearer $GALLEY_API_KEY"
A drawing of a terminal running the claude mcp add command, with the URL highlighted. terminal $ claude mcp add --transport http \ --scope user galley \ https://mcp.galleyrender.com/mcp Added HTTP MCP server galley $ claude mcp list galley: https://mcp.galleyrender.com/mcp — connected
One command in a terminal.

Cursor

The editor. Any plan.

  1. Put this in ~/.cursor/mcp.json for every project, or .cursor/mcp.json in a repo for just that one.
    ~/.cursor/mcp.json json
    {
      "mcpServers": {
        "galley": {
          "url": "https://mcp.galleyrender.com/mcp"
        }
      }
    }
  2. Open the Customize panel in the sidebar and make sure galley is toggled on. A server that's toggled off doesn't load or appear in chat.
  3. Ask for a render. The first call with no key mints a trial and hands the token back in the response.
  4. Use your key. Add a headers entry beside the url and every call is on your account rather than on the keyless trial. Reload the server from the Customize panel, then ask for whoami — it should say authenticated_via: "header".
    ~/.cursor/mcp.json json
    {
      "mcpServers": {
        "galley": {
          "url": "https://mcp.galleyrender.com/mcp",
          "headers": { "Authorization": "Bearer glr_sk_…" }
        }
      }
    }
A drawing of an mcp.json file with the Galley server URL highlighted. ~/.cursor/mcp.json { "mcpServers": { "galley": { "url": "https://mcp.galleyrender.com/mcp" } } }
The mcp.json entry, with the URL highlighted.

Then tell it what to do with the pack

Paste this once — into a Claude Project's instructions, a ChatGPT project, or just the top of a chat. It tells your assistant which document to reach for and, above all, to make the real file rather than typing one out.

This is written for a board secretary. Paste it once and your assistant knows which document to reach for and what to ask you before it makes one. Most of all, it knows to produce the real file instead of typing a set of minutes into the chat.

Paste into a Claude Project, a ChatGPT project, or a chat text
You help me keep the paperwork for our homeowners association board with
Galley Render, which is connected as a tool. I am the secretary. Everything
you produce comes out of Galley as a real PDF I can file, mail or post.

Always render the real document with Galley. Never write the document out in
the chat, never improvise a layout, and never make up a template name. If you
are not sure which one fits, call list_templates and choose from what comes
back.

Which template to use:
- minutes, "write up the meeting", the record of what we decided -> meeting-minutes
- an agenda, the order of business for a meeting -> meeting-agenda
- notice of the annual or a special meeting, the mailing before it -> notice-of-meeting
- a violation, a covenant letter, "tell them about the bins" -> violation-letter
- an ARC decision, a response to an architectural request -> architectural-request-response
- a ballot, a proxy, voting for the annual meeting -> ballot-and-proxy
- the annual budget, what we are mailing owners about assessments -> budget-summary
- a welcome letter, a packet for someone who just bought -> welcome-letter

Before you render, make sure you have these. Ask for all the missing ones in
one message, then render. Never guess a date, a dollar figure, a vote count or
an owner's name.
- Every document: our association's full legal name and mailing address.
- meeting-minutes: the date, who was there and who was excused, whether we had
  a quorum, what happened to last month's minutes, each motion with who moved
  it, who seconded it and the vote, and the time we adjourned.
- meeting-agenda: the date, time and place, and the items with who presents.
- notice-of-meeting: the date, time and place, what will be voted on, and the
  quorum requirement from our documents.
- violation-letter: the exact covenant section and its wording, what was
  observed and the date, and the cure-by date.
- architectural-request-response: what was requested, the decision, and any
  conditions the owner has to meet.
- ballot-and-proxy: the candidates, any questions being voted on, and the
  threshold each one passes at.
- budget-summary: the figures. Ask me for the spreadsheet rather than working
  them out.
- welcome-letter: the assessment amount, when it is due, and who to call.

Before you use a template for the first time, call get_template and read its
schema - it is free and it tells you what the fields are. If a render comes
back with a validation error, read the field path in the error, fix that one
field and try again. Do not give up and type the document into the chat.

Keep me consistent from month to month: carry the association name, the board
members and their titles, the meeting place and the motion numbering forward
from the last document, and keep numbering motions where we left off. That
consistency is the whole reason we do it this way.

When a render succeeds, give me the link, tell me which template made it, and
ask whether I want the next document in the cycle - agenda, notice, minutes.

Two things you never do. You do not tell me what any of this means legally: a
violation letter and a proxy are forms our board fills in and our attorney
reviews, not advice from you. And you do not invent anything - if you do not
have a number, a date or a name, ask me for it.

What it costs a board

About $5 a month for a board that meets monthly

One meeting a month means an agenda, a set of minutes and a letter or two. Galley counts pages, and that comes to eight of them. The free tier is five, which is enough to make a set of minutes and see what you'd be getting. A board that meets every month is on the $5 plan, which includes 200 pages.

A month on the board, counted the way Galley counts
What you make Pages
Agenda for the board meeting 2
Minutes of the board meeting 3
One covenant enforcement letter — the one nobody enjoys writing 3
Your pages a month 8
Free every month, no card 5

8 of 5 free. A month like this is Solo at $5 per month, with 200 pages included.

Free

$0 forever

5 pages a month included

Enough to make one set of minutes and hold the PDF before you decide. No card, and it doesn’t expire.

Solo

$5 per month

200 pages a month included

Right for a board that meets once a month, including the month you mail something to every household.

One month a year is different, and it doesn't cost anything extra. When every household gets its own letter (a ballot each before the annual meeting, or a notice to the forty owners who left their bins out), that's forty documents instead of one, and forty three-page letters is 120 pages. Eight ordinary pages plus one annual mailing is 128, which is still inside the 200 pages the $5 plan includes.

Make your first set of minutes

Free tier, no card. Or connect the address above and ask your assistant to make you an account. You'll get one email with a link to click.

Before you ask

The questions every secretary asks first

Is this an HOA meeting minutes template I can just download?

You don’t need to download anything. A downloaded HOA meeting minutes template is a blank you retype every month and reformat every time someone pastes into it. This one stays on Galley’s side. You tell your assistant what happened at the meeting, and it fills the template in and hands you a finished PDF. The layout doesn’t drift, because nobody’s editing it. You can try it free, without an account.

What about an HOA violation letter template?

It’s in the pack, and it’s the one we built the pack around. The HOA violation letter template quotes the covenant you’re relying on in full, records what was observed and when, leaves room for a photograph, prints the cure-by date in its own box, and sets out the owner’s hearing and appeal rights. It’s a form you fill in. It isn’t legal advice, and Galley doesn’t give any.

Do I have to learn anything technical?

No. You paste one web address into Claude or ChatGPT, once, and after that you talk to your assistant the way you already do. You don’t install anything, and there’s no file or template for you to look after.

Will next month’s minutes look the same as this month’s?

Yes. The same template version produces the same layout every time, with the same margins, headings and signature lines. The only thing that changes is what you tell it, so two years of minutes filed together look like they came from one office.

What happens when I hand the office over?

The next secretary connects the same address to their own assistant and gets the same documents. No file leaves with your laptop, and nobody has to pass on formatting tricks along with the keys to the clubhouse.

Is our association’s information kept private?

Documents come back as links that stop working after an hour, and nothing you make here is published anywhere. The free trial doesn’t need an account or a card. The privacy page sets out what’s kept and for how long.