| __tests__ | ||
| database | ||
| repositories | ||
| routes | ||
| CHANGELOG.md | ||
| plugin.json | ||
| README.md | ||
| version.txt | ||
Voting Plugin
Overview
The Voting Plugin provides a comprehensive voting system for HOA board elections, decision-making, and community surveys. It enables HOAs to conduct various types of votes with proper tracking, result sharing, and audit trails.
Features
1. Campaign Types
- Board Elections: Vote for board members (Chairman, Treasurer, Deputy Manager, Members)
- Decisions: Vote on board decisions that require owner input
- Surveys: Collect public opinions on various matters
2. Form Builder (Placeholder)
Currently using a placeholder for form creation. Future versions will include:
- Drag-and-drop form builder
- External form builder integration
- Custom question types and validation
Form structure is stored as JSONB in the database, allowing flexibility for future enhancements.
3. Campaign Management
- Create, edit, and delete voting campaigns
- Set campaign dates (start and end)
- Configure result sharing (detailed, anonymous, none)
- Control public access (restrict/allow)
- Track campaign status (draft, scheduled, active, completed, cancelled)
4. Recipient Management
- Target all owners, board members, or authorized voters
- Create custom groups for targeted campaigns
- Support for multiple delivery methods (email, SMS, owner app)
5. Response Tracking
- Track participation percentage
- Monitor email/text delivery status
- Record answered dates and modifications
- Maintain audit trail with change logs
6. Results & Analytics
- View global and individual responses
- Export results as CSV or PDF
- Display participation statistics
- Generate analytics reports
Database Schema
Core Tables (pg_vt_* naming convention)
- pg_vt_campaigns: Voting campaign definitions
- pg_vt_forms: Form templates and structures
- pg_vt_responses: Individual response tracking
- pg_vt_response_answers: Detailed answer data
- pg_vt_response_change_logs: Audit trail
- pg_vt_groups: Custom recipient groups
- pg_vt_group_members: Group membership
All tables follow the plugin naming convention: pg_vt_* (pg_ = plugin, vt_ = voting plugin).
API Endpoints
Campaigns
GET /api/plugins/voting/campaigns- List all campaignsGET /api/plugins/voting/campaigns/:id- Get campaign detailsPOST /api/plugins/voting/campaigns- Create campaignPUT /api/plugins/voting/campaigns/:id- Update campaignDELETE /api/plugins/voting/campaigns/:id- Delete campaign
Forms
GET /api/plugins/voting/forms- List all formsGET /api/plugins/voting/forms/:id- Get form detailsPOST /api/plugins/voting/forms- Create formPUT /api/plugins/voting/forms/:id- Update formDELETE /api/plugins/voting/forms/:id- Delete form
Responses
GET /api/plugins/voting/responses- List responsesGET /api/plugins/voting/responses/:id- Get response detailsPOST /api/plugins/voting/responses- Submit response
Groups
GET /api/plugins/voting/groups- List all groupsGET /api/plugins/voting/groups/:id- Get group detailsPOST /api/plugins/voting/groups- Create groupPUT /api/plugins/voting/groups/:id- Update groupDELETE /api/plugins/voting/groups/:id- Delete group
Repository Pattern
All database operations use the repository pattern extending the core BaseRepository directly. This ensures:
- Database abstraction (works with all supported databases)
- Multi-tenant support via site_id
- Consistent CRUD operations
- No database-specific code
Repositories:
CampaignRepository- pg_vt_campaignsFormRepository- pg_vt_formsResponseRepository- pg_vt_responsesResponseAnswerRepository- pg_vt_response_answersResponseChangeLogRepository- pg_vt_response_change_logsGroupRepository- pg_vt_groupsGroupMemberRepository- pg_vt_group_members
Permissions
The plugin requires the following permissions:
view_campaignscreate_campaignsedit_campaignsdelete_campaignsview_resultsmanage_formsexport_dataview_analytics
Pricing Plans
Basic
- Board elections, decisions, basic surveys
- Email notifications
- 50 responses/month
- $39/month or $390/year
Professional
- Advanced elections and surveys
- Email & SMS notifications
- Custom forms
- Export results
- Analytics dashboard
- 1000 responses/month
- $79/month or $790/year
Enterprise
- Full voting suite
- Unlimited responses
- Advanced analytics
- API access
- White-label options
- $149/month or $1490/year
Future Enhancements
- Form Builder: Drag-and-drop form creation UI
- External Form Builder: Integration with tools like Typeform, JotForm
- Advanced Analytics: Interactive dashboards and reporting
- Real-time Updates: WebSocket support for live results
- Mobile App: Enhanced voting experience on mobile
- Integration: Connect with communication plugin for notifications
Installation
The plugin is automatically loaded by the PluginLoader on server startup. No additional configuration required.
Testing
All API endpoints should have comprehensive tests following TDD principles. Tests must use real database connections - no mocks allowed per project policy.
Architecture Compliance
This plugin follows all constitutional principles:
- ✅ Plugin-first architecture with prefixed table names (pg_vt_*)
- ✅ Repository pattern for database abstraction
- ✅ No mock data in tests
- ✅ TypeScript-ready structure
- ✅ Multi-tenant support
- ✅ RESTful API design