ViewPort Calendar (Privacy-aware calendar sharing)
Abstract
Have you ever wanted to share the events in your personal calendar with others? How do you go about sharing your calendar with friends or family? How do you choose which events are shared and in what detail? ViewPort calendar is a software project aimed at helping answer these questions.
ViewPort Calendar is a software project which aims at assisting users with creating and selectively sharing calendar events without hassle. It will allow users to create events on personal calendars and selectively share them with chosen groups, defining granular visibility levels—from full event details to simple availability markers or complete invisibility. The quality attributes crucial to the project’s success are Modularity
, Extensibility
, and Reliability
.
Author
Name: Hunter Whitlock
Student number: 46987154
Functionality
The system will provide a simple web application that will allow users to manage both individual and shared calendars while maintaining fine-grained control over how events are shared with others. The system will support event creation, management, and selective visibility, while offering a way to view individual and shared calendars seperately.
Features
- Account Management:
- Users can register an account and securely log in.
- Personal details, such as display name, username, and email are stored.
- Friend Management:
- Users can view a list of their current friends.
- Users can receive and manage friend requests, with options to accept or reject.
- Users can add new friends using a unique friend code.
- Calendar Creation and Management:
- Users can create and manage personal calendars.
- Users can also create shared calendars, becoming the calendar’s owner.
- Shared calendar owners can manage shared calendars, allowing them to invite (from their friend list) and remove members.
- Users can view a list of all calendars they are part of.
- Event Creation and Sharing:
- Users can create events on their personal calendar. Each event must be assigned a ‘Sharing Preset’ on creation, used to define the visibility settings for each shared calendar the user is a part of.
- A user can select from 4 default sharing presets, each corresponding to one of the supported visibility levels:
- Full Details
- Title + Time only
- Time only (Busy)
- Hidden
- Users can create and manage custom Sharing Presets, specifying unique visibility settings per calendar (default presets apply to all shared calendars).
- Calendar Viewing:
- Users can view the events from one calendar at a time (Either personal or a shared calendar).
- REST API:
- A documented RESTful API that will expose key functionality, allowing for a simple web-based interface to be created and eventual extensions or integrations.
Scope
- Secure user account creation and login.
- Friend management (sending, accepting, rejecting friend requests through unique codes).
- Creation and management of personal and shared calendars.
- Shared calendar owners can manage shared calendar members.
- Creation of events on personal calendars.
- Selection of a Sharing Preset when creating an event to define shared calendar visability.
- Creation and management of Sharing Presets.
- 4 pre-defined presets (un-editable)
- User defined presets for ‘per-calendar’ granularity.
- A RESTful API that exposes needed functionality.
- A basic web interface, providing access to MVP functionality.
Quality Attributes
The key quality attributes for this proposal are listed below. Although security is not mentioned, it is still important to consider in the architectural design and implementation.
Modularity
Modularity is a significant quality attribute for this project since it has multiple componets which need to work seperately and in sync to ensure a successful user experience. Utilising a Service-Based Architecture
, key features such as authentication, calendar management, event management, visibility rules and calendar viewing, and sharing presets can be implemented independently.
Extensibility
Extensibility is another important quality attribute for this project. As a Calendar application, it is missing many quality of life and useful features found in other applications such as recurring events and mass event editing tools, in addition to missing an import/sync feature from external calendar services such as Google and Apple calendars. It is important that the solutions architecture and REST API is sufficient in allowing for additional features and integrations without needing significant refactoring.
Reliability
Reliability is the final quality attribute deemed critical for this project. However, it is critical that data consistency is maintained between the users and the database where it is stored. Since this is a privacy-aware calendar application, it needs to ensure:
- Event visibility is applied consistently across all users and calendars.
- Sharing Presets function correctly, and permissions are never bypassed.
- All operations involving data creation, editing, and deletion are atomic and prevent partial or inconsistent data states, reporting errors to the user.
Evaluation
Modularity
Modularity will be evaluated by how independent each service is.
- Each core feature must be implemented in its own service with a clearly defined and documented API facade.
- Unit tests should be able to be written to verify service logic independently without reliance on other services.
- Each service should be able to be scaled up and down horizontally to increase/decrease load capacity.
Extensibility
Extensibility will be evaluated by measuring how easily additional features can be added after the MVP is completed.
- Review the systems REST API to check for coverage and flexability to confirm that new clients (mobile apps etc.), services (import/sync etc.), or functionality (recurring events etc.) can be added without major refactoring.
- New services or updated services should not impact unrelated existing services.
Reliability
Reliability will be evaluated based on data correctness, visibility enforcement, and error handling.
- Automated tests will verify secure account creation and login.
- Automated tests will verify that visibility rules are enforced correctly across all shared calendars members, testing different Sharing Preset configurations.
- Automated tests will verify concurrent event creation, editing, and deletion to ensure that atomicity is maintained, data remains consistent, and errors are propogated and handled.