=== HOAdesk ===
Contributors: hexcorp
Tags: hoa, condo, homeowners association, resident portal, community
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Resident portal for HOAs and condo associations: units, owners, documents, announcements, calendar, maintenance and ARC requests.

== Description ==

HOAdesk turns the WordPress site your association already has into its resident portal. No per-unit fees, no separate login, no data held hostage.

= Units and people =

* Every lot or unit with its address, building, type, assessment share and votes.
* Owners (with ownership history) and residents (tenants, family, caretakers) with vehicles, pets and emergency contacts.
* Invite anyone with one click: an account is created with the right role (Resident, Owner, Board Member, Manager) and they set their own password.
* Import units and owners from a CSV.
* A member directory that is strictly opt-in: each person chooses whether to be listed and what to show.

= Resident portal =

One block (or shortcode) gives members a portal with announcements, the documents library, the community calendar, meeting notices and minutes, maintenance and architectural requests, the directory, the board roster and their own profile. Visitors who are not signed in see only what you mark public.

= Documents =

Bylaws, CC&Rs, rules, minutes, budgets, financial statements, insurance, forms and newsletters, each with an audience: everyone, residents and owners, owners only, or board only. Files are stored outside the public uploads folder and streamed only to people allowed to open them. Replacing a file keeps the previous versions.

= Maintenance requests =

Members report common-area problems with photos from their phone. The board acknowledges, assigns, adds private notes or replies the submitter sees, puts on hold, resolves and closes. Everyone is emailed at each step.

= Architectural (ARC) requests =

Owners submit plans, drawings and photos. The board reviews within a deadline you set, asks for more information, then approves, approves with conditions or denies. A decision letter is generated as a PDF, stored with the request and emailed to the owner.

= Meetings =

Schedule board, annual, special and committee meetings with an agenda. The notice is emailed automatically the set number of days before. Upload the minutes as a document linked to the meeting and members are told.

= Announcements and email =

Publish announcements to the portal and email them to all owners, all residents, the board, or just one building. Large sends go out through a queue so shared hosting never times out. Every email template can be edited.

= Also =

* Calendar block with an iCalendar feed members can subscribe to.
* Roles: Resident, Owner, Board Member, Manager. Board members work the day to day; managers change settings.
* WordPress privacy export and erase support.
* WP-CLI: `wp hoadesk seed` creates a demo community.
* Everything in the free plugin is fully functional. No locked features, no nags.

== Installation ==

1. Install and activate HOAdesk. A "Resident Portal" page is created with the portal block; add it to your menu.
2. Go to HOAdesk → Settings and enter the association's name and email address.
3. Add your units under HOAdesk → Units (or import a CSV), then add owners and residents and invite them.
4. Upload your governing documents under HOAdesk → Documents.

== Frequently Asked Questions ==

= Who can see what? =

Each document, announcement, event and meeting has an audience: everyone, residents and owners, owners only, or board only. People get what their role allows.

= Do residents need WordPress accounts? =

Yes, so the portal knows who they are. HOAdesk creates the accounts when you invite people; they only set a password.

= Does it send email? =

Through WordPress. For reliable delivery use an SMTP plugin. There is a test button under Settings → Emails.

= Where are the uploaded files? =

In `wp-content/uploads/hoadesk-private/`, blocked from direct web access and served only through the plugin after checking who is asking.

== Changelog ==

= 1.0.0 =
* First release.
