A self-contained community website template for any Homeowners Association. Runs on flat files (no database required), works on any standard PHP/Apache host, and gives your board complete control over content without calling a developer.
This template gives your HOA a modern community website with all the core tools a neighborhood needs:
| Page | File | What It Does |
|---|---|---|
| Home | index.php |
Welcome message, board-editable content blocks |
| HOA Events | calendar.php |
Board events (featured with images) + committee events (compact list), merged chronologically |
| HOA News | hoa-posts.php |
Board announcements and news items |
| Garage Sale | garage-sale.php |
Self-serve resident postings with photos, dates, knock-time, PIN protection |
| Our Grounds → Ponds | ponds.php |
Common grounds information with sections and images |
| Our Grounds → Lawn Care | lawn-care.php |
Lawn care tips with content blocks and embedded videos |
| Local Events | local.php |
Things happening nearby the neighborhood |
| Community → Poll | poll.php |
Quick community pulse polls |
| Community → Committees | committees.php |
Browse all committees with cards showing chair, member count, next event |
| Individual Committee | committee.php?id=xxx |
Events, members, announcements, chair-editable |
| Committee Calendar | committee-calendar.php |
All committee events merged, color-coded, grouped by month |
| Vote | vote.php |
Enter unique code from email, cast secure vote |
| FYI → FAQ | faq.php |
Frequently asked questions organized by section |
| FYI → CCRs, Bylaws, etc. | ccrs.php |
Governing documents and downloadable HOA forms |
| FYI → Mail List | mail-list.php |
Subscribe/unsubscribe with owner/renter + voting opt-in |
| FYI → BOD Meeting | live.php |
Public listen-only meeting viewer (shows "no meeting" when inactive) |
| FYI → Contact | contact.php |
Contact info for the board and management |
| Page | File | Who Uses It |
|---|---|---|
| Board Meeting Room | board-meeting.php |
Self-hosted Jitsi video meeting — password-protected, with public viewing toggle |
| Public Meeting Viewer | live.php |
Listen-only embed for community members during public board meetings |
| Virtual Board Room | bod-only/index.php |
Private discussion forum for board members — topics, replies, file uploads |
| BOD Admin Panel | bod-only/admin.php |
Admin-only: manage all posts, passwords with assignments, activity log |
| Treasurer | treasurer.php |
Stripe Dashboard access, invoice CSV export, dues and assessment instructions |
| Form Submission | form-submit.php |
Homeowners upload completed architectural/permit forms for board or committee review |
| Form Review | FORM-REVIEW.php |
Board or assigned committee reviews submissions — approve, deny, email response |
| Violation Notice Generator | bod-only/violation-notices.php |
Generate, print, and track violation notices with auto-tier escalation |
| Violation Letter Templates | bod-only/files/polite-violation-letters.html |
Printable 3-tier letter templates by violation type, with old templates for reference |
These are how the board edits the site. Each one is accessed directly by URL and requires the board password.
| Config Page | What It Manages |
|---|---|
MENU-CONFIG.php |
Nav menu labels, site logo, header banner image |
HOME-CONFIG.php |
Home page content blocks |
CONTACT-CONFIG.php |
Contact page information |
FOOTER-CONFIG.php |
Site footer content |
PONDS-CONFIG.php |
Ponds page sections + page title |
LAWN-CONFIG.php |
Lawn care page sections + page title |
QUOTE-CONFIG.php |
Random quotes shown in corner widget |
Board passwords (.passtxtfile1) |
|
EMAIL-CONFIG.php |
View/manage the HOA mail list |
COMMITTEE-CONFIG.php |
Create committees, manage club/group/club/group/committee passwords |
VOTE-CONFIG.php |
Create votes, send codes, view results |
STREETS-CONFIG.php |
Edit the list of valid neighborhood streets |
The board creates a committee and assigns a unique password to its chair. The chair uses that password on their committee's public page to add events, manage members, and post announcements. Each club/group/committee password only works on its own page — the knitting group can't edit the card players' events.
- Add one-time or recurring events (weekly / every 2 weeks / monthly)
- Delete past events
- Add/remove members
- Update the pinned announcement
- Upload an image per event (500KB max)
- Chair name and email
- Member count + event count
- Last updated date (flags dormant committees)
- Club/group/club/group/committee password (visible, editable)
Real examples: Knitting Circle, Card Players Club, Pond Cleanup Crew, Book Club, Walking Group, Garden Club, Architectural Review (ARC), Social Events Committee, Landscaping Committee, Welcome Committee, Newsletter Committee, Neighborhood Watch, Holiday Decorations, Trash Pickup Volunteers.
The ARC is a special committee that reviews homeowner form submissions (painting, sheds, fencing, concrete, flagpoles, solar panels, etc.). Unlike social committees, the ARC has form submissions routed to it automatically:
form-submit.php (e.g. painting request)FORM-REVIEW.php with their club/group/committee passwordThe ARC can also hold meetings (like any committee), post announcements, and manage members on their committee page. The form type → committee mapping is configured by the admin at bod-only/admin.php → Form Assignments tab.
The "HOA Events" page shows everything in one chronological list:
This hierarchy keeps important HOA events visually dominant while still showing residents everything happening in the community.
Board members edit from the bottom of calendar.php (edit toggle, password protected). Committee events are read-only here — chairs edit from their own committee page.
HOAs often need to vote on things: approve a budget, elect board members, decide on community projects, change bylaws. Paper ballots are slow; online voting is fast but fraud is a risk. This system solves both.
VOTE-CONFIG.php — question, 2-6 options, deadline (all dropdowns, easy for seniors)- Groups the mail list by household street address
- Generates one unique code (V-XXXXXXXX) per household
- Emails the code to every voting-eligible email at that address
vote.php, enter the code, pick an option, submitVOTE-CONFIG.phpvote.php after voting OR after deadline passes OR when board closes the voteResidents self-post — no board involvement needed. Safety is enforced by street address validation.
The page heading has a green "⬇ Post a Garage Sale" button right next to the title. One click jumps to the posting form at the bottom — no scrolling through existing listings.
Three layers:
Example: If the config has N Baxter Way, these all pass:
1234 N Baxter Way1234 N Baxter Wy (typo)1234 North Baxter Wya (also typo)1234 n baxter W (lowercase, any W-starting suffix)These all fail:
1234 N Baxter (no suffix)1234 N Baxter St (wrong suffix — street config says Way not Str)1234 W Baxter Way (wrong direction)1234 Baxter Way (missing direction)The board manages the valid street list through this admin page. Add a street with:
If a street has multiple suffix versions (e.g. Stockhelm Way AND Stockhelm Ave), add it twice.
More than just an email list — it's the foundation of the voting system.
Signup requires:
The signup form automatically hides the voting checkbox if "Renter" is selected — keeps it obvious that only homeowners vote.
Self-serve — enter email + street address to remove. No password needed since only the person who owns that email gets the confirmation.
The HOA runs its own private video conferencing server at meet.hoa-site.com using self-hosted Jitsi Meet. No Google, GitHub, or Apple sign-in required — ever. Anyone with the link just types their name and joins.
board-meeting.php and enters the board passwordFor quarterly or annual meetings where the community can listen in:
live.php — a public page that embeds the meeting so community members can listen and viewlive.php (linked from the FYI → BOD Meeting nav item)| Can Do | Cannot Do |
|---|---|
| Hear all audio from board members | Speak or unmute microphone |
| See video if board members enable cameras | Turn on their own camera |
| Send chat messages (Q&A) | Share screen, start recording, or kick anyone |
| Page auto-detects when meeting starts/ends | Access any meeting controls or toolbar |
Preserve-BOD-7x9k2m)meet.hoa-site.com (dedicated droplet)A private discussion forum exclusively for board members at bod-only/index.php. Not linked from the public site — URL must be known.
board-meeting.php in the workspace headerMembers enter their name and board password. The name is attached to all their posts — no anonymous content. Each member's unique password from .passtxtfile1 links their actions to their identity.
Accessible at bod-only/admin.php with a separate admin password (.adminofBOD). Three tabs:
Homeowners download forms (painting checklists, shed requests, flagpole guidelines, etc.) from the CCRs page, fill them out, then upload them via form-submit.php for board or committee review.
ccrs.phpform-submit.php (linked prominently on the CCRs page)FORM-REVIEW.php with their club/group/committee passwordThe board admin configures which committee handles which form types via the bod-only/admin.php → Form Assignments tab (requires the admin password). This maps form types to committees (e.g. all architectural form types → ARC). Unassigned types are only visible to board members. This is a one-time setup. The mapping is stored in .form-type-committees.
Submissions older than 24 months are flagged for archiving. The board can archive submissions at any time. Archived submissions are hidden from the active view but remain in the data file.
A three-tier escalating notice system that replaces the old one-size-fits-all violation letters. Accessible at bod-only/violation-notices.php.
| Tier | Name | Tone | Deadline | Fine Mentioned? |
|---|---|---|---|---|
| 1 | Friendly Reminder | Neighborly, offers help | 30 days | No |
| 2 | Follow-Up Notice | Firm but fair, quotes CCR briefly | 14 days | Warning only |
| 3 | Final Notice | Formal/legal, full CCR quote | 10 days | Yes — specific consequences |
Each violation type has all three tiers pre-written with the correct CCR text already included. The only fields to fill in are name, address, and dates.
When generating a notice, the system checks the history: "Has this address received a notice for this violation type before?" If yes, it automatically selects the next tier. The operator can override if needed.
Every notice sent is logged with: date, homeowner name, address, violation type, and tier. The History tab organizes notices by street address with a search bar, so the management company can instantly see a property's full violation history and know which tier to send next.
The management company's name, address, email, and signature line are stored in .mgmt-config. Every generated letter pulls from this config. When the HOA switches management companies, update one form at bod-only/violation-notices.php → Management Co. tab — all letters update automatically.
Static printable versions of all letters are also available at bod-only/files/polite-violation-letters.html with the old "horrible" templates linked for reference. These are useful as a reference but the generator system is the recommended workflow.
treasurer.php — a password-protected page for board members that provides access to the HOA's Stripe account for managing dues collection and special assessments.
After the initial CSV import, Stripe runs on autopilot. The treasurer only logs in when a home sells, dues change (usually annually), or someone's email changes.
One-time charges (gate repair, signage, legal fees, etc.) are handled as separate invoices — same CSV export process, but sent as a one-time invoice without a recurring schedule. Regular dues continue unaffected.
Stripe sends up to 3 automatic reminder emails to homeowners who haven't paid (e.g. 3 days before due, 7 days after, 30 days after). The dashboard shows all unpaid invoices at a glance so the treasurer can see who is delinquent without chasing anyone manually.
Every password-authenticated action on the site is logged to .audit-log. The log records:
This covers all 22+ pages that require a password: calendar events, HOA news, garage sales, FAQ entries, config changes, password management, Virtual Board Room activity, board meeting access, public viewing toggles, file uploads, and more.
Each board member has a unique password. If someone deletes another member's post, the log shows exactly who did it and when. This prevents "I never saw that" disputes and provides accountability without requiring user accounts.
The activity log is viewable in the BOD Admin Panel (bod-only/admin.php) under the "Activity Log" tab. Newest entries first, paginated 50 per page.
These are board-editable content pages for common grounds information.
Use for things like:
Use for things like:
Each section on these pages supports:
Both config pages (PONDS-CONFIG, LAWN-CONFIG) have a "Page Title & Menu Label" section at the top — change the title there and it updates both the nav menu and the page heading in one step.
Residents submit questions → board reviews and approves → approved answers appear publicly. Organized by section. Bad-words filter applies. Good for questions like:
Document library page. Board uploads PDFs and links. Good for:
Quick single-question pulse checks. Different from the full voting system — this is for informal questions like "What time should we host the summer BBQ?" The real voting system is for legally binding decisions.
Welcome area for the community. Board adds content blocks via HOME-CONFIG.php. Good for:
The nav menu uses dropdowns to keep the header clean:
Hover to open on desktop, tap to toggle on mobile. Active pages automatically highlight their dropdown parent.
.passtxtfile1 (text file, one password per line, board controls).passassignments, enabling full audit trails.committeepasswords, board controls via COMMITTEE-CONFIG.phpThe site uses four levels of passwords, each granting different access. No user accounts exist — passwords are the sole access control.
| Password Type | Stored In | Managed At | What It Accesses |
|---|---|---|---|
| Admin Password | .adminofBOD |
Server only (one password) | BOD Admin Panel — board password management, helper password management, form type assignments, activity log, post/file deletion |
| Board Member Passwords | .passtxtfile1 |
bod-only/admin.php → Passwords tab |
Everything: Virtual Board Room, discussions, board meeting, treasurer, violation notices, calendar, HOA news, FAQ, all CONFIG pages, committees, form review — plus all committee pages (override) |
| Web Helper Passwords | .helperpasswords |
bod-only/admin.php → Helper Passwords tab |
Club/group/committee management (create, edit, delete committees and their passwords) and form submission review only. No access to Virtual Board Room, treasurer, violation notices, board meeting, or any board-only features. No VBR header visible. |
| Club/Group/Committee Passwords | .committeepasswords |
COMMITTEE-CONFIG.php |
Their own committee page only (events, members, announcements) and form submissions assigned to their committee. Cannot see other committees or any board features. |
Key rules:
committees.php page via a "Committee Management" button at the bottom.adminofBOD) is held by one person and should rarely changeWeb helpers are trusted people (not board members) who assist with day-to-day site management. They are given a helper password and can:
COMMITTEE-CONFIG.phpFORM-REVIEW.phpThey cannot access the Virtual Board Room, board discussions, treasurer tools, violation notices, board meeting controls, or any board-only CONFIG pages. They never see the Virtual Board Room navigation header.
Helper passwords are managed by the admin at bod-only/admin.php → Helper Passwords tab, with name assignments for accountability.
| File | What's In It | ||
|---|---|---|---|
.passtxtfile1 |
Board passwords, one per line | ||
.committeepasswords |
`pw_key | password` per committee | |
menu-config.txt |
Nav labels, logo, header image | ||
events.txt |
HOA Board calendar events | ||
committees.txt |
Master committee list | ||
committee-events-{id}.txt |
Events per committee | ||
committee-members-{id}.txt |
Members per committee | ||
committee-announce-{id}.txt |
Pinned announcement per committee | ||
vote-items.txt |
Vote definitions | ||
vote-codes.txt |
Issued codes and results | ||
HOA-emails.txt |
Mail list (name, email, address, owner/renter, voting opt-in) | ||
images/preserve-streets.txt |
Valid streets (`direction | name | suffix`) |
ponds-posts.txt |
Pond page sections | ||
lawn-posts.txt |
Lawn care page sections | ||
garage-sale-posts.txt |
Active garage sale listings | ||
quotes.txt |
Random quotes for corner widget | ||
home-config.txt |
Home page content blocks | ||
footer-config.txt |
Footer content | ||
contact-config.txt |
Contact page content | ||
badwords.txt |
Profanity filter word list | ||
.passassignments |
Password-to-name mapping for audit trail | ||
.audit-log |
Chronological log of all authenticated actions site-wide | ||
.public-meeting-live |
Flag file — exists when public meeting viewing is enabled | ||
.adminofBOD |
Admin password for BOD admin panel | ||
.helperpasswords |
Web helper passwords, one per line | ||
.helperassignments |
Helper password-to-name mapping for accountability | ||
bod-only/topics.txt |
BOD discussion topics (JSON lines) | ||
bod-only/threads/{id}.txt |
Replies per BOD topic (JSON lines) | ||
bod-only/files/{id}/ |
Uploaded files per BOD topic | ||
.form-submissions |
Form submissions from homeowners (JSON lines) | ||
.form-type-committees |
Mapping of form types to reviewing committees | ||
form-uploads/ |
Uploaded form files from homeowners | ||
.violation-tracker |
Log of all violation notices sent, by address and type | ||
.mgmt-config |
Management company name, address, email (JSON) | ||
faq-items.txt, faq-sections.txt |
FAQ content |
STREETS-CONFIG.phpMENU-CONFIG.phpimages/ folderHOME-CONFIG.phpCOMMITTEE-CONFIG.phpPONDS-CONFIG.php — add your community's common grounds infoLAWN-CONFIG.php — add lawn care tips relevant to your regionThis template was built with three principles in mind:
| - No database — all data in flat text files (` | ` pipe-separated format) |
|---|
mail() for voting codes and committee emailsimages/ and committee-uploads/ foldersnav.php include, driven by menu-config.txtfooter.php includestyles.css with CSS custom properties for easy color themingstyles.css: - --forest-green — primary accent color
- --earth-brown — secondary accent color
- Both are used throughout; change them once to retheme the entire site
Since everything is flat files, backing up is easy: just tar the entire site directory nightly. One command restores everything — content, configuration, members, events, passwords, votes.
tar -czf hoa-backup-$(date +%Y%m%d).tar.gz /path/to/hoa-site/
No database dump needed. No export process. Just files.
Most HOA website templates are WordPress — which means plugins, updates, security patches, hackers, constant maintenance, and forgotten passwords. This template is the opposite:
Built for HOAs that want to stop paying $50-200/month to a website company, stop worrying about hacked WordPress sites, and just have a site that works.