Meet is a serverless, progressive web application (PWA) that displays events filtered by city and by number of events. It is developed using React, test driven development (TDD) and behavior driven development (BDD) techniques. The application uses the Google Calendar API to fetch events from a sample calendar account. The authorization process is handled by AWS Lambda functions. The app is capable to work offline with cached data.
Here are the app key features:
- Filter events by city.
- Show/hide event details.
- Specify number of events.
- Use the app when offline.
- Add an app shortcut to the home screen.
- View a chart showing the number of upcoming events by city.
Key features correspond to the following user stories:
- As a user, I would like to be able to filter events by city, so I can view the list of events that take place in a city.
- As a user, I would like to be able to show/hide the event details, so I can see more/less details abount an event.
- As a user, I would like to specify the number of events I can view in the app, so I can see more/less events in the event list at once.
- As a user, I would like to be able to use the app when offline, so I see view the events I viewed the last time I was online
- As a user, I would like to be able to add the app shortcut to the home screen, so I can open the app faster.
- As a user, I would like to be able to see a chart showing the upcoming events in each city, so I know which events are organised in each city
- Given: the user hasn't searched for any city
- When: the user opens the app
- Then: the user should see a list of all upcoming events
- Given: the main page is open
- When: the user start typing in the city textbox
- Then: the user should see a list of city suggestions that matches what they've typed
- Given: the user was typing "Be" in the city textbox and a list of city suggestions is showing
- When: the user selects a city from the list (eg. Berlin)
- Then: the user input should change into Berlin, the suggestions list should disappear, and the user should receive a list of upcoming events happening in Berlin
- Given: the app displayed a list of events
- When: the user does not interact with any event element
- Then: the event element should be collapsed
- Given: the app displayed a list of events
- When: the user interacts with an event element (click/tap/select)
- Then: the event element should expand to show the event details
- Given: an event element is expanded
- When: the user interacts with an event element (click/tap/select)
- Then: the event element should collapse and hide its details
- Given: the user hasn't specified the number of events to display
- When: the app displays a list of events
- Then: the max number of events displayed at once by the app will be 32
- Given: the max number of events displayed at once in a list was 32
- When: the user change the number of the events to display to 20
- Then: the max number of events displayed at once in a list will be 20
- Given: the app has cashed a list of events for the city of Rome for the next week
- When: the connection is offline and the user wants the app to display the list of events in Rome for the next week
- Then: the app displays a list of the events in Rome using its cached data
- Given: the app has cashed a list of events for the city of Rome for the next week
- When: the connection is offline and the user wants the app to display the list of events in Paris for the next month
- Then: the app will display an error message, stating that the request can't be satisfied without an internet connection
No testable scenarios.
- Given: the app is closed
- When: the user opens the app
- Then: the app displays a chart that shows the number of upcoming events for each city reflecting data fetched by the API
The Meet App frontend will make use of data stored in a Google Calendar account via the Google Calendar API. Since the Google Calendar API is protected and requires an authorization token, the app will also make use of an authorization service deployed in a serverless AWS Lambda function. The app will submit its credentials to the Lambda function. If the credentials are valid, the app will receive a JWT token that will be used to submit any request to the Google Calendar API. Here is a diagram of the authorization flow.
Meet App is fully compliant with the PWA specifications. The app can be installed on desktops and mobile devices and is capable to work offline with cached data.
The app is undergoing the verification process with Google for allowing unrestricted public access.