Meeting lifecycle
Separate draft, open, voting-open, and closed states organize the progression of a meeting.
01GOVERNANCE & DATA INTEGRITY
A shareholder governance platform connecting attendance, representation, and share-weighted voting.

01 / OVERVIEW
A web application for managing shareholder meetings and the information behind a weighted vote. The system connects shareholders, representatives, attendance records, nominees, and voting results in a relational model.
Full-stack development, bringing the interface, business workflow, and data layer together.
02 / THE BUSINESS REQUIREMENT
A shareholder vote is more than a simple tally. Attendance, representation, and share ownership all affect the result. These relationships need to remain consistent throughout a meeting and traceable after it closes.
03 / THE APPLICATION
Separate draft, open, voting-open, and closed states organize the progression of a meeting.
Track a shareholder’s attendance and connect representatives to the shareholders they represent.
Associate each vote with a meeting, nominee, voter, and voting weight.
Preserve shareholder details and share values in attendance and vote records.
04 / TECHNICAL ARCHITECTURE
Meeting management, attendance, nominees, and voting interfaces.
Meeting operations and relational access through a typed data layer.
Shareholders, representatives, meetings, attendance, nominees, and votes.
05 / ENGINEERING DECISIONS
Representatives and representation records are distinct entities. This separates a person from the specific shareholders they represent at a meeting.
Attendance and votes store snapshot fields instead of relying entirely on a shareholder’s current profile. Changes to the source profile can be separated from the meeting record.
Compound constraints prevent duplicate attendance per shareholder and meeting, and duplicate votes for the same meeting, nominee, and voter.
06 / THE TECHNICAL CHALLENGE
Shareholder information can change over time, while a meeting needs to preserve the context in which attendance and votes were recorded.
The Prisma schema stores names and share values as snapshots on attendance and vote records, with decimal fields for share values. Meeting-level snapshots retain total shares and holder counts.
07 / THE RESULT
The implementation brings the core meeting entities into one application, with an explicit lifecycle and database constraints for duplicate attendance and voting records. Historical snapshots retain the context behind a meeting’s records.
Architecture and implementation details checked against the public voting-app package manifest and Prisma schema. The image is the original screenshot from Aaron’s published portfolio.