Try out MeetLink here: https://ibxibx.github.io/meetlink/
MeetLink is a serverless, progressive web application (PWA) built with React using a test-driven development (TDD) approach. The app uses the Google Calendar API to fetch upcoming events for a specific city, allowing users to view and interact with event details.
- 🏙️ 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
- 📊 Display charts visualizing event details
- ⚛️ React
- 📅 Google Calendar API
- ☁️ AWS Lambda (for serverless functions)
- 📃 GitHub Pages (for hosting)
- 🧪 Jest (for testing)
- 📈 Recharts (for data visualization)
This diagram illustrates the serverless architecture of the MeetLink app:
- 💻 User's Device: Where users interact with the MeetLink React App (PWA).
- ⚛️ MeetLink React App: The frontend of our application, including:
- 🔄 Service Worker: Enables offline functionality and faster loading.
- 💾 Local Storage: For caching data and enabling offline use.
- 🌐 Amazon API Gateway: Acts as the entry point for API calls from the app to Lambda functions.
- ⚡ AWS Lambda Functions: Serverless functions handling various operations:
- 🔐 Authentication Function: Manages user authentication.
- 📥 Event Retrieval Function: Fetches events from Google Calendar API.
- ⚙️ Data Processing Function: Processes and filters event data.
- 📅 Google Calendar API: The external service our app interacts with to get event data.
User Story: As a user, I should be able to filter events by city so that I can see the list of events that take place in that city.
Scenarios:
- When user hasn't searched for a city, show upcoming events from all cities
- User should see a list of suggestions when they search for a city
- User can select a city from the suggested list
User Story: As a user, I should be able to expand and collapse event details so that I can see more or less information as needed.
Scenarios:
- An event element is collapsed by default
- User can expand an event to see its details
- User can collapse an event to hide its details
User Story: As a user, I should be able to change the number of events displayed so that I can see more or fewer events at once.
Scenarios:
- When user hasn't specified a number, 30 is the default number
- User can change the number of events they want to see
User Story: As a user, I should be able to access the app's content offline so that I can view event information without an internet connection.
Scenarios:
- Show cached data when there's no internet connection
- Show error when user changes the settings (city, time range)
User Story: As a user, I should be able to add a shortcut to the app on my device's home screen so that I can access it more quickly and easily.
Scenarios:
- User can install the meet app as a shortcut on their device home screen
User Story: As a user, I should be able to view charts with event details so that I can get a visual representation of the event data.
Scenarios:
- Show a chart with the number of upcoming events in each city
- ⚛️ React application
- 🧪 Built using the TDD technique
- 🔑 Use of Google Calendar API and OAuth2 authentication flow
- ☁️ Use of serverless functions (AWS lambda) for the authorization server
- 📃 Hosted on GitHub Pages
- 📱 Responsive design (works on mobile and desktop devices)
- ✅ Passes Lighthouse's PWA checklist
- 🔌 Works offline or with slow network connections using a service worker
- 🎯 Implements an alert system using an OOP approach
- 📊 Makes use of data visualization (recharts library)
- 🧪 Covered by tests with a coverage rate >= 90%
- 📈 Monitored using an online performance monitoring tool
- Node.js (v14 or higher)
- npm or yarn
- Google Calendar API credentials
- Clone the repository:
git clone https://github.com/ibxibx/meetlink.git
cd meetlink
- Install dependencies:
npm install
- Create a
.env
file in the root directory and add your Google Calendar API credentials:
REACT_APP_GOOGLE_API_KEY=your_api_key
REACT_APP_GOOGLE_CLIENT_ID=your_client_id
- Start the development server:
npm start
To create a production build:
npm run build
npm test
To view test coverage:
npm test -- --coverage
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.