event-management-frontend/README.md

187 lines
7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Event Management Frontend
The Event Management Frontend is a native Android application developed in
Kotlin. This app provides a comprehensive calendar-based event management
system designed for seamless user interaction.
This project was created as the final assignment for **AP7PD** and **AP7MP** subjects.
It integrates with a custom backend REST API to manage users, events,
attendees, and categories effectively.
## Overview / Key Features
- **Monthly Calendar View**: View events in a grid layout by weeks and days.
- **Daily View**: Easily browse and manage daily events.
- **Event Management**: Create, edit, and delete events with support for categories and attendees.
- **User Authentication**: Register and log in with robust access and refresh
token support, ensuring secure and seamless user sessions.
- **Error Handling**: Gracefully handles API errors, including scenarios where
the backend is unreachable.
## Backend requirements
The application requires a running backend API for full functionality. The
backend is implemented using FastAPI in Python.
You can find the source code and detailed deployment instructions for the
backend API at: [Event Management Backend
Repository](https://git.itsdrike.com/ap7pd/event-management-backend).
> [!TIP]
> The app supports dynamic configuration of the API base URL, allowing you to
> deploy the backend on any server or cloud provider of your choice. If you
> wish to test the app from android studio, you can deploy the backend locally
> (<http://localhost:8000>) and set the base URL to `http://10.0.2.2:8000`.
> This will allow the Android emulator to access the local backend server. Note
> that this is also the default value.
## Showcase
Below is a showcase of key features and screens in the application:
<table style="width: 100%; border-collapse: collapse; text-align: center; margin: auto;">
<tr>
<th>📶 API Unreachable</th>
<th>🔒 Login Screen</th>
<th>🔧 Base URL Change</th>
</tr>
<tr>
<td>
<img src="showcase/01_api_unreachable.png" alt="API Unreachable" style="width: 200px; height: 450px;" />
<p>Error screen, shown whenever the API becomes unreachable.</p>
</td>
<td>
<img src="showcase/02_login.png" alt="Login Screen" style="width: 200px; height: 450px;" />
<p>Login screen for user authentication.</p>
</td>
<td>
<img src="showcase/02_login_base_url_change.png" alt="Base URL Change" style="width: 200px; height: 450px;" />
<p>Screen to update the API base URL, available from various pages.</p>
</td>
</tr>
<tr>
<th>📝 Register Screen</th>
<th>📆 Month View</th>
<th>📅 Day View</th>
</tr>
<tr>
<td>
<img src="showcase/03_register.png" alt="Register Screen" style="width: 200px; height: 450px;" />
<p>User registration screen.</p>
</td>
<td>
<img src="showcase/04_month_view.png" alt="Month View" style="width: 200px; height: 450px;" />
<p>Monthly calendar view to browse events.</p>
</td>
<td>
<img src="showcase/05_day_view.png" alt="Day View" style="width: 200px; height: 450px;" />
<p>Daily event view with event details for that day.</p>
</td>
</tr>
<tr>
<th>⏳ Edit Duration Event</th>
<th>⚡ Edit Instant Event</th>
<th>📨 Invite User to Event</th>
</tr>
<tr>
<td>
<img src="showcase/06_duration_event_edit.png" alt="Edit Duration Event" style="width: 200px; height: 450px;" />
<p>Edit screen for duration-based events.</p>
</td>
<td>
<img src="showcase/07_instant_event_edit.png" alt="Edit Instant Event" style="width: 200px; height: 450px;" />
<p>Edit screen for instant events.</p>
</td>
<td>
<img src="showcase/08_invite_user_to_event.png" alt="Invite User to Event" style="width: 200px; height: 450px;" />
<p>Interface for inviting users to an event.</p>
</td>
</tr>
<tr>
<th>⏱️ Duration Event Details</th>
<th>🔍 Instant Event Details</th>
<th>📂 Categories Overview</th>
</tr>
<tr>
<td>
<img src="showcase/09_duration_event_details.png" alt="Duration Event Details" style="width: 200px; height: 450px;" />
<p>Detailed view of a duration-based event.</p>
</td>
<td>
<img src="showcase/10_instant_event_details.png" alt="Instant Event Details" style="width: 200px; height: 450px;" />
<p>Detailed view of an instant event.</p>
</td>
<td>
<img src="showcase/11_categories.png" alt="Categories Overview" style="width: 200px; height: 450px;" />
<p>List of event categories of the user.</p>
</td>
</tr>
<tr>
<th> Create New Category</th>
<th>🆕 Updated Categories</th>
<th>⚙️ Settings Screen</th>
</tr>
<tr>
<td>
<img src="showcase/12_new_category.png" alt="Create New Category" style="width: 200px; height: 450px;" />
<p>Form to create a new category.</p>
</td>
<td>
<img src="showcase/13_categories_with_new.png" alt="Updated Categories" style="width: 200px; height: 450px;" />
<p>Updated list with a newly added category.</p>
</td>
<td>
<img src="showcase/14_settings.png" alt="Settings Screen" style="width: 200px; height: 450px;" />
<p>Settings menu for app configuration.</p>
</td>
</tr>
<tr>
<th>🔔 Notification: Invite</th>
<th>👀 Invite Preview</th>
<th>✅ Notification: Accepted</th>
</tr>
<tr>
<td>
<img src="showcase/15_notification_invite_bob.png" alt="Notification: Invite" style="width: 200px; height: 450px;" />
<p>Notification about an incoming event invite.</p>
</td>
<td>
<img src="showcase/16_invite_event_details_preview.png" alt="Invite Preview" style="width: 200px; height: 450px;" />
<p>Preview of the event from the invite.</p>
</td>
<td>
<img src="showcase/17_notification_invite_accepted_bob.png" alt="Notification: Accepted" style="width: 200px; height: 450px;" />
<p>Notification for an invite after acceptance.</p>
</td>
</tr>
<tr>
<th>📅 Day View with Invite</th>
<th>📖 Invited Event Details</th>
<th>👍 Notification: Accepted</th>
</tr>
<tr>
<td>
<img src="showcase/18_day_view_invited_event_bob.png" alt="Day View with Invite" style="width: 200px; height: 450px;" />
<p>Day view showing an invited event.</p>
</td>
<td>
<img src="showcase/19_invited_event_details_bob.png" alt="Invited Event Details" style="width: 200px; height: 450px;" />
<p>Details of an event the user was invited to.</p>
</td>
<td>
<img src="showcase/20_notification_invite_accepted_john.png" alt="Notification: Accepted" style="width: 200px; height: 450px;" />
<p>Notification about a user having accepted an outgoing invite.</p>
</td>
</tr>
<tr>
<th colspan="3">🗑️ Notifications Cleared</th>
</tr>
<tr>
<td colspan="3">
<img src="showcase/21_notifications_cleared.png" alt="Notifications Cleared" style="width: 200px; height: 450px;" />
<p>Screen showing cleared notifications.</p>
</td>
</tr>
</table>