Virtual Board Room
Board Meeting Treasurer Violation Notices Form Submissions Committees Admin Site Guide Letter Templates

HOA Community Website — Complete Guide

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.


What This Site Does

This template gives your HOA a modern community website with all the core tools a neighborhood needs:


How The Site Is Organized

Public Pages (everyone can view)

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

Board-Only Pages

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

Admin Config Pages (CONFIG pages — board password required)

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

Committees System

How It Works

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.

What Each Committee Page Has

- 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)

What The Board Admin Sees (COMMITTEE-CONFIG.php)

- Chair name and email

- Member count + event count

- Last updated date (flags dormant committees)

- Club/group/club/group/committee password (visible, editable)

Use Cases For Committees

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.

Architectural Review Committee (ARC)

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:

  1. Homeowner submits a form at form-submit.php (e.g. painting request)
  2. The ARC chair receives an email notification
  3. Chair logs into FORM-REVIEW.php with their club/group/committee password
  4. Reviews the submission, approves or denies, emails the homeowner the decision

The 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.


Events Calendar (Merged View)

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.


Secure Voting System

Why It's Needed

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.

How It Works

  1. Board creates a vote via VOTE-CONFIG.php — question, 2-6 options, deadline (all dropdowns, easy for seniors)
  2. Board clicks "Send Codes" — the system:

- 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

  1. Residents receive email, go to vote.php, enter the code, pick an option, submit
  2. Code burns on use — any second attempt from that household fails
  3. First person at the address to vote wins — other people in the house can't change it

Who Can Vote

Results


Garage Sale Page

Residents self-post — no board involvement needed. Safety is enforced by street address validation.

How It Works

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.

Address Validation (Important!)

Three layers:

  1. House number — must be 1-5 digits at the start
  2. Direction — N, S, E, or W (North/South/East/West also accepted)
  3. Street name + suffix first letter — the street must be in the streets config with matching suffix first letter

Example: If the config has N Baxter Way, these all pass:

These all fail:

STREETS-CONFIG.php

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.


Mail List

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.

What The Mail List Powers

Removal

Self-serve — enter email + street address to remove. No password needed since only the person who owns that email gets the confirmation.


Board Video Meetings

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.

Why Self-Hosted Jitsi

How Board Meetings Work

  1. Board member goes to board-meeting.php and enters the board password
  2. Clicks the big green "Join Meeting Now" button — opens the Jitsi room in a new tab
  3. Browser asks to allow microphone — click Allow
  4. Type your name and click "Join meeting" — you're in
  5. The room uses an obscure URL that only appears behind the password gate — nobody can guess it

Public Meeting Broadcast (2-4x per year)

For quarterly or annual meetings where the community can listen in:

  1. Board member clicks "Turn ON Public Viewing" on the board-meeting.php page
  2. This enables live.php — a public page that embeds the meeting so community members can listen and view
  3. Community members go to live.php (linked from the FYI → BOD Meeting nav item)
  4. Listeners can hear everything but cannot speak, turn on camera, or control the meeting
  5. Listeners get a chat button — they can type questions for Q&A at the end of the meeting
  6. Board sees chat messages in their Jitsi window and answers verbally
  7. When the public portion ends, board member clicks "Turn OFF Public Viewing"
  8. The live.php page automatically reverts to "No public meeting in progress"

What Public Viewers Can and Cannot Do

Can DoCannot Do
Hear all audio from board membersSpeak or unmute microphone
See video if board members enable camerasTurn on their own camera
Send chat messages (Q&A)Share screen, start recording, or kick anyone
Page auto-detects when meeting starts/endsAccess any meeting controls or toolbar

Security Layers

  1. Password-protected page — only board members see the meeting link
  2. Obscure room name — not guessable (e.g. Preserve-BOD-7x9k2m)
  3. Public toggle — community can only listen when a board member explicitly enables it
  4. Listen-only embed — public viewers join via the Jitsi IFrame API with all controls disabled

Server Details


Virtual Board Room

A private discussion forum exclusively for board members at bod-only/index.php. Not linked from the public site — URL must be known.

Features

Login

Members 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.

BOD Admin Panel

Accessible at bod-only/admin.php with a separate admin password (.adminofBOD). Three tabs:


Form Submission & Review System

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.

Homeowner Submission Flow

  1. Homeowner downloads the appropriate form from ccrs.php
  2. Fills it out and goes to form-submit.php (linked prominently on the CCRs page)
  3. Enters their name, email, address, selects the form type (Painting, Flagpole, Shed, Concrete, Fencing, Solar, Landscaping, Architectural, Other)
  4. Uploads up to 4 files (PDF, JPG, PNG — 10MB max each)
  5. Receives a reference number (e.g. FR-A3B2C1D4) immediately
  6. The assigned committee chair receives an email notification with the submission details

Committee Review Flow

  1. Committee chair receives email notification of new submission
  2. Logs into FORM-REVIEW.php with their club/group/committee password
  3. Only sees submissions assigned to their committee (e.g. ARC sees painting, sheds, fencing — not other types)
  4. Reviews the attached files, sets status (New → Under Review → Approved → Denied)
  5. Types comments and clicks "Email Response" — homeowner receives the decision by email
  6. When done, clicks "Archive" to move it out of the active view

Form Type → Committee Mapping

The board admin configures which committee handles which form types via the bod-only/admin.phpForm 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.

Access Levels

Data Retention

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.


Violation Notice System

A three-tier escalating notice system that replaces the old one-size-fits-all violation letters. Accessible at bod-only/violation-notices.php.

Three-Tier Approach

TierNameToneDeadlineFine Mentioned?
1Friendly ReminderNeighborly, offers help30 daysNo
2Follow-Up NoticeFirm but fair, quotes CCR briefly14 daysWarning only
3Final NoticeFormal/legal, full CCR quote10 daysYes — specific consequences

Violation Types (Pre-Written)

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.

Automatic Tier Detection

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.

History & Tracking

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.

Management Company Config

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.phpManagement Co. tab — all letters update automatically.

Printable Letter Templates

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 — Dues & Invoicing

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.

How Recurring Dues Work

  1. Treasurer exports the mail list as a Stripe-ready CSV from the treasurer page (owners only, renters excluded)
  2. Uploads the CSV to Stripe Dashboard → Invoicing → Import
  3. Sets a recurring schedule (monthly, quarterly, or annual)
  4. Stripe automatically emails each homeowner an invoice with a secure payment link each cycle
  5. Homeowners pay via ACH bank transfer (0.8%, capped at $5) or credit card (2.9% + 30¢)
  6. Money deposits directly to the HOA bank account

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.

Special Assessments

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.

Automatic Payment Reminders

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.

Security


Audit / Activity Log

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.

Why This Matters

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.

Viewing the Log

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.


Ponds & Landscape + Lawn Care Pages

These are board-editable content pages for common grounds information.

Ponds Page

Use for things like:

Lawn Care Page

Use for things like:

Each section on these pages supports:

Page Title Editing

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.


FAQ Page

Residents submit questions → board reviews and approves → approved answers appear publicly. Organized by section. Bad-words filter applies. Good for questions like:


CCRs, Bylaws & HOA Forms

Document library page. Board uploads PDFs and links. Good for:


Community Poll

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.


Home Page

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.


Security & Privacy

Password Hierarchy

The site uses four levels of passwords, each granting different access. No user accounts exist — passwords are the sole access control.

Password TypeStored InManaged AtWhat 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:

Web Helpers

Web helpers are trusted people (not board members) who assist with day-to-day site management. They are given a helper password and can:

They 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.phpHelper Passwords tab, with name assignments for accountability.


Data Files (All Flat Files — No Database)

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

Customizing For Your HOA

Step 1: Update Passwords

  1. Remove the example passwords
  2. Add your own board passwords (one per line)
  3. Share with board members only

Step 2: Update The Streets List

  1. Go to STREETS-CONFIG.php
  2. Remove the sample streets
  3. Add your neighborhood's actual streets with correct suffixes
  4. For streets with multiple suffix versions, add each separately
  1. Go to MENU-CONFIG.php
  2. Change site title (appears next to logo)
  3. Select your logo and header banner images from the images/ folder
  4. Rename menu items as needed

Step 4: Configure Home Page

  1. Go to HOME-CONFIG.php
  2. Add welcome blocks, announcements, community photos

Step 5: Create Committees

  1. Go to COMMITTEE-CONFIG.php
  2. Add each committee with a chair and password
  3. Give the chair their password to manage their page

Step 6: Populate Grounds Info

  1. Go to PONDS-CONFIG.php — add your community's common grounds info
  2. Go to LAWN-CONFIG.php — add lawn care tips relevant to your region

Step 7: Upload CCRs and Forms

  1. Upload PDFs to the appropriate folder
  2. Use the CCR config to link them on the page

Design Philosophy

This template was built with three principles in mind:

  1. Senior-friendly — every date and time is a dropdown. No typing dates. Clear large buttons. Simple language. Step-by-step instructions everywhere.
  1. Board-friendly — no developer needed for regular updates. Every page has an admin config that lets the board edit content with just a password. File-based storage means no database to maintain.
  1. Flexible — works for any HOA. Street names, passwords, committees, events, documents — all configurable. No hardcoded community-specific content.

Technical Notes (For Your IT Person)

- No database — all data in flat text files (` ` pipe-separated format)

- --forest-green — primary accent color

- --earth-brown — secondary accent color

- Both are used throughout; change them once to retheme the entire site


Backup Recommendation

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.


What Makes This Different

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.