Requirements
This document details the minimum product requirements that you must address in your project. These are not complete, since part of the design process includes identifying specific features that you will implement.
Mandatory Requirements
You will design and build a desktop or mobile application that solves a problem for a particular user. Regardless of the problem that you set out to solve, your application must meet all of these requirements.
1. Technical Stack
You must use the technical stack described here. This includes:
- Kotlin as your programming language (both front-end and back-end).
- Compose Multiplatform for the user interface.
- Supabase for an online SQL database.
- Ktor if working with web services.
- Other Kotlin Multiplatform libraries as required.
2. Target Platform
You must design and implement either a mobile or desktop application, using conventions for the platforms that you support. You should choose one of the following as your primary platform:
- Desktop: one of Windows, macOS, or Linux.
- Mobile phone: Android or iOS.
3. Graphical User Interface
Your application should have a user interface built using Compose Multiplatform (desktop/iOS) or Jetpack Compose (Android). Your application should include at least three different screens, and you must support navigation between them. i.e., navigation to a screen, return to previous screen.
Your graphical user interface should follow platform standards:
For a desktop application:
- Your screens should be windowed by default, and be resizable. Content should reflow when a window is resized.
- Users should be able to minimize, maximize and resize windows.
- Windows should have a title, and your application should have a custom icon both when running (in the Dock or Taskbar), and when installed (in the Applications folder or Start Menu).
For a mobile application:
- Users should be able to use normal gestures to navigate between screens i.e.., swipe to go back. You must support back-stack navigation.
- If your application supports rotation, then your screens should rotate to match the orientation, and layouts should modify themselves to fit the screen dimensions in either orientation.
- Alternatively, you can disable rotation if it’s more suitable for your application.
Your user interface should also have a custom theme that you have produced i.e., custom colors, fonts and so on. Marks will be awarded for aesthetics.
4. Online SQL database
Your application must store some portion of its data in a SQL database e.g., recipe for a recipe tracking application; user profile information needed to login; the choice of theme to use in the UI. Since the database is online, you are expected to implement a suitable level of authentication and access control to this database.
Optional Requirements
You can earn a higher grade by implementing one or more of these features.
1. Multi-Platform Support
Your application builds and runs on at least two different platforms from this list: Desktop/JVM, Android, iOS. This requires your application to be build as a Kotlin Multiplatform project, where most of the code is shared across platforms. Using a Shared User Interface with Compose is also recommended.
2. Web Services
Your product leverages a public API and consumes data that it provides. e.g., your calendaring application could use a public API to determine holidays, or your journal could look up the current weather for a new journal entry, or your recipe application could look up a recipe from a service online.
See the public APIs for some suggestions.
Alternatively, you have written your own web service using Ktor. This service must provide essential functionality required by some of your other features. You can host your service online, or serve it through a Docker image.
Additional Requirements
As part of your project proposal, you will define a user, their problem, and user-stories i.e., problems and expected solutions. This will require you to identify the features that are specific to your application e.g., sorting recipes in a cooking application, display a social feed for other users in a multiuser application.
This list of features will be different for each project but should be sufficient to address all of the functionality that the user might expect.
See the project proposal for details.
Exceptions
You are not allowed to deviate from the Mandatory Requirements without explicit, written permission from the instructor.
Requesting an exception
If you wish to deviate fromt his list, for any reason, (a) discuss with the instructor first, and (b) if informally approved, email them for a written confirmation of the deviation, and finally (c) include that confirmation email in your project documentation.
Deviating without written permission will result in a significant penalty to your grade.