Build Web App MVP: Zoom Webhook Attendance + Virtual Class Interaction Layer
Worldwide
We are building a web-based app for managing virtual class discussion sessions. The app already has its own session workflow, participant roster, class notes, and post-session reporting. We need a developer to build an MVP integration and interaction layer that supports: Zoom webhook-based attendance tracking Participant roster matching App-native hand raise App-native voting App-native public class discussion feed Private technical issue messages Multi-board mode with current-board highlighting CSV/session report exports Important: Please apply only if you have prior experience working with Zoom webhooks, especially meeting participant join/leave events, Zoom endpoint validation, and Zoom webhook signature verification. This is a functional MVP. We care about clean working functionality. This should be a desktop/laptop browser-based web app, not a mobile app and not a native Mac/Windows desktop app. Scope of Work 1. Zoom meeting integration Build support for linking a Zoom meeting to an existing class session. The app should store: Zoom meeting ID Zoom meeting link class session ID scheduled start time meeting/session mapping Creating Zoom meetings programmatically is a plus, but the MVP can start with linking an existing Zoom meeting if that keeps the implementation simpler. 2. Zoom webhook handling Build a Zoom webhook endpoint that can handle: Zoom endpoint URL validation meeting started meeting ended participant joined participant left Webhook handling must include: Zoom webhook signature verification idempotent event processing duplicate event handling safe event logging for debugging no secrets printed in logs 3. Attendance tracking Track participant attendance based on Zoom webhook events. The system should support: participant join time participant leave time total minutes attended reconnects duplicate joins/leaves participants who join but do not properly leave participants who leave but have missing join events 4. Participant roster matching Match Zoom participants to the class roster. Matching should support: exact/fuzzy name match case-insensitive name match normalized whitespace match email match, if available unmatched participant list manual correction / manual matching The app should store the final roster match. 5. App-native hand raise Do not use Zoom-native hand raise. Build hand raise inside our own web app. Participants should be able to: raise hand lower hand see their current hand-raise status Instructor/admin should be able to: see live hand-raise queue see participant name, timestamp, and wait time mark participant as called on lower an individual participant’s hand clear all raised hands view hand-raise history Hand-raise history should be saved to the session record and exportable. 6. App-native voting Do not use Zoom polling. Build voting inside our own web app. Instructor/admin should be able to: create a vote question add answer options open voting close voting show or hide results allow or prevent revoting view counts and percentages display poll results (percentages) to participants Participants should be able to vote from the class web app. Voting should support: forced choice questions multiple choice questions Each vote record should include: session ID vote question ID participant ID selected option timestamp vote round, if applicable Vote results should be saved to the session record and exportable. 7. App-native class discussion feed Do not rely on Zoom chat. Build a simple class discussion feed inside our own web app. Participants should be able to submit: public question public comment private technical issue Public questions and public comments should be visible to all participants in the class session. Private technical issues should be visible only to instructor/admin. Each message should include: session ID participant ID participant display name message type: question, comment, or technical issue message text timestamp visibility: public or private status: new, pinned, answered, hidden, resolved Instructor/admin should be able to: view all public questions and comments view private technical issues pin important questions/comments mark questions as answered mark technical issues as resolved hide or delete inappropriate messages clear resolved technical issues export all messages as CSV Participants should be able to: view public questions and comments post a public question post a public comment submit a private technical issue For MVP, do not build: file attachments emoji reactions threaded replies rich text formatting Zoom-native chat integration 8. Multi-board mode The app should support multiple boards per class session. Do not treat the board as one static notes field. The instructor/session workflow may use several boards during a class, and participants should be able to flip through visible boards. The system should support a board deck model. Each board should include: board ID session ID display number title order visibility locked status archived status content created timestamp updated timestamp Each session should include: current board ID Only one board should be marked as the current board at a time. 9. Programmatic current board The app should not assume a human instructor manually changes boards through the UI. The current board should be controllable both through: admin UI controls backend/session workflow logic The backend should expose functions or API endpoints for: create board update board list boards get current board set current board hide board show board lock board archive board export boards Instructor/admin should be able to manually override the current board if needed. 10. Participant board navigation Participants should see a simple board-number navigator, such as: Boards: [1] [2] [3] [4] [5][6] Each number represents a visible board in the session. Participants should be able to click a board number to switch to that board. The board currently being used by the class-session workflow should be clearly highlighted as the current board. The current board should show: highlighted board number CURRENT badge board title optional live dot or accent indicator Example: Boards: [1] [2] [3 CURRENT] [4] [5][6] If a participant is viewing a non-current board, show a notice: You are viewing Board 1. Current board is Board 3: Moats and Defensibility. [Go to Current Board] Participants should be able to click “Go to Current Board” to return immediately to the current board. For MVP, participants do not need board editing rights. 11. Instructor/admin desktop dashboard Build a simple desktop/laptop browser dashboard for instructor/admin. The dashboard should show: Zoom meeting/session status attendance table unmatched Zoom participants roster matching/manual correction hand-raise queue voting controls and results public questions/comments private technical issues board deck controls export buttons The instructor/admin dashboard should be optimized for desktop/laptop use. Simple functional UI is enough. No polished design required. 12. Participant desktop page Build a simple desktop/laptop browser page for participants. The participant page should show: session title current question or session prompt area raise/lower hand button vote panel public discussion feed private technical issue button board area board-number navigator current-board indicator The participant page should be optimized for desktop/laptop use. Simple functional UI is enough. 13. Desktop-first requirement This MVP should be designed for desktop/laptop browser use only. Expected user environment: laptop or desktop computer modern browser: Chrome, Edge, Safari, or Firefox Zoom running separately for video/audio class web app open in a browser window The UI should be optimized for: 13-inch laptop screens and larger desktop/laptop browser use instructor/admin dashboard on desktop participant page on desktop Mobile support is out of scope. Tablet support is out of scope. Do not spend time building mobile-responsive layouts. If a user opens the app on a small mobile screen, it is acceptable to show a message such as: Please use a laptop or desktop computer for this class session. 14. Export and reporting Add export functionality for: attendance CSV hand-raise history CSV vote results CSV public discussion feed CSV private technical issue CSV board export Add summaries to the session report: total participants matched participants unmatched participants attendance minutes hand-raise activity vote results public questions/comments technical issues boards used during session 15. Documentation and testing Please provide: setup instructions .env.example Zoom app/webhook setup notes mock webhook payloads or test scripts short handoff document explaining how to run and test the integration Important Constraints Please read carefully: This is a desktop/laptop web app. This is not a mobile app. This is not a native Mac or Windows desktop app. This is not a Zoom App side panel. This is not an embedded Zoom video project. Do not build a custom video classroom. Do not use Zoom-native hand raise. Do not use Zoom polling. Do not rely on Zoom chat. Hand raise, voting, discussion feed, technical issues, and boards must work inside our own web app. The app should still work even if Zoom integration is disabled. Keep Zoom integration modular. Keep board functionality modular. Do not commit secrets or private credentials. Simple functional UI is enough. No polished design required. Mobile phone support is out of scope. Tablet support is out of scope. Do not spend time building mobile-responsive layouts. Please apply only if you have experience with: Zoom webhooks Zoom webhook endpoint validation Zoom webhook signature verification Zoom meeting participant joined/left events OAuth or Server-to-Server OAuth Backend development with Python/FastAPI, Node/Express, or similar Basic frontend/dashboard development Basic real-time or near-real-time session UI Desktop web app UI development CSV export Clear setup documentation Deliverables By the end of the project, I expect: Working Zoom webhook endpoint Zoom meeting/session linking Attendance tracking Roster matching Manual roster match correction App-native hand raise Clear all raised hands function App-native voting Public class discussion feed Private technical issue messages Multi-board mode Programmatic current board support Participant board-number navigation Current-board highlighting Basic instructor/admin desktop dashboard Basic participant desktop page CSV exports README/setup guide .env.example Mock webhook tests or test scripts Short walkthrough or handoff notes Ideal timeline: 1–2 weeks. Please Include in Your Proposal: Have you implemented Zoom webhooks before? Please describe the project.
$500.00
Fixed-price- IntermediateExperience Level
- Remote Job
- Ongoing projectProject Type
Skills and Expertise
Activity on this job
- Proposals:20 to 50
- Last viewed by client:2 days ago
- Interviewing:14
- Invites sent:30
- Unanswered invites:1
About the client
- United StatesBoston10:13 PM
- $86K total spent117 hires, 10 active
- 1,719 hours
- EducationLarge company (1,000+ people)
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by