This is a simplified version of Doodle, which is a web application for scheduling meetings.  There is no login or authentication, and there is no way to edit the poll.  There is no smartphone app, and the only notifications are through email.

User Interface

 

 

Architecture Diagram

 

Component 1: Frontend/UI

Clients interact with the service through a web browser.  They might start by visiting "doodle.com" and downloading a React single-page application.  The React app makes api calls to "doodle.com".  Users may also be directed to the website after a friend shares a poll url, (like doodle.com/poll/a7k31m).

Component 2: Monolithic backend

Language: Java.

Framework: Tomcat web server.

Deployment environment: AWS Elastic Beanstalk, with a load balancer and auto-scaling of the Tomcat instances.

The backend is a single stateless Java application.  It response to several kinds of requests.  Requests for static HTML, CSS, JS, and image files are handled by bundling those files directly in the war file.

API:

Component 3: SMTP service

SMTP is the standard protocol defining how email is delivered on the Internet.  Our service delivers email notifications when polls are answered.  We can deliver those emails by just connecting to a third-party SMTP service.  For example AWS provides an SMTP service through its "Simple Notification Service" (SNS) product.  In the Java code of the monolithic backend, we will use the Java Mail library to construct mail messages and deliver them to the SNS SMTP server .

Component 4: MongoDB

The documents stored in our MongoDB describe all the information for a given poll.  Thus, the document key is the poll id.

POLL_ID -> {
"poll_id": STRING,
"subscriber_emails": [STRING, STRING, ...],
"choices": [STRING, STRING, ...],
"participant_names": [STRING, STRING, ...],
"answers": {
"Bob" : {"Sunday 4pm": "No", "Monday 7pm": "Maybe"},
"Janice": {"Sunday 4pm": "Yes", "Monday 7pm": "No"}
}
}