Requirements
Early in the course, you are expected to identify a hypothetical user and a problem that you wish to help them address with your project. Your early focus in the course should be on understanding the problem, what those users need, and coming up with interesting features that would address the problem for them.
Requirements are the features and qualities that you must implement for your application to be considered useful and successful.
We have some requirements that we will force on you e.g., “Your application must have a graphical user interface” but those are mostly common features that you will find in most non-trivial applications. The “secret sauce” for your project are the requirements and features that you will define that make your application unique. Your application will be a combination of the requirements that we provide, plus those specific requirements and features that you feel are necessary to solve the problem.
Example: “What’s for dinner?"
You might want to make cooking together with your roomates more interesting, so you propose a recipe application that helps you decide what to make for dinner. Your custom features could include:
- Scanning the list of ingredients in the fridge – using computer vision, ai?
- Recommending a list of recipes that you could make from those ingredients – matching against an online database of recipes
- Letting everyone vote from their phones on which one to cook – through some online web service that you built
- Walking you through the recipe as you prepare it – with a fancy user interface.
The section below describes the requirements that you will need to address:
- A. Common Requirements: things that every team needs to implement e.g., database support, a graphical user interface.
- B. Advanced Requirements: one or more advanced features that suit your specific application e.g., moving our recipe application to a shared database to support data sharing between users.
- C. Custom Requirements: features that are specific to your application e.g., scanning a list of ingredients and recommending a recipe (for a recipe app); showing user profile information (for an application that supports a remote database with user login).
Building a great application means addressing all of these by the end of the term!
A. Common 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 the following minimum requirements.
1. Target a supported platform
You must design and build your application for one of the following platforms.
- Windows, macOS, or Linux desktop
- Android mobile phone
- iOS mobile phone 1
This requirement can be replaced by the multiplatform support advanced requirement below.
2. 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 navigating between them.
For a desktop application:
- Your screens should be windowed.
- Users should be able to minimize, maximize and resize windows as you would expect for a desktop application, and windows should have titles.
- 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. You must support back-stack navigation.
- When rotated, your screens should rotate to match the orientation, and layouts should modify themselves to fit the screen dimensions in either orientation.
Your user interface should also have a custom theme that you have produced i.e., custom colors, fonts and so on. Marks will be deducted if you simply use the default Material theme included in Compose.
3. Consume a public web API
You must use a public API that offers value to your application, and consume 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.
You are only expected to read data from this API.
This requirement can be replaced by the hosted service advanced requirement below.
4. Use a SQL database
Your application uses and stores 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.
We will demonstrate and use SQLite with the Exposed
framework.
This requirement can be replaced by the online database advanced requirement below.
B. Advanced Features
You are expected to choose one of these advanced features which suits your particular application. e.g., adding multiplatform support to target both Android and iOS for a workout app (since you wil use it in a gym), or a shared database for a recipe application that lets people share recipes (since you need a shared database to share between users data).
This will need to be discussed in your project proposal and should be justified by custom features that require this functionality.
Option 1: Multiplatform
Your application builds and runs on at least two different platforms from this list: Desktop/JVM, Android, iOS. You have built your app using Kotlin Multiplatform and Compose Multiplatform, and reused most of your application code. All functionality is available on both platforms.
Option 2: Hosted Service
Instead of just consuming data from someone else’s API, you have written your own web service using Ktor and have it hosted online. This service must provide essential functionality required by some of your other features.
Option 3: Online Database
Instead of running your application against a local SQL database, you choose to host your data in Supabase - an online instance of PostgreSQL - usiong the Supabase SDK. Of course, since it’s now online, you need to make your application secure by using the Supabase support for username/password authentication: your application needs to handle login, logout, password reset and other functionality. You also support multiple users i.e. more than one user, each with their own username/password.
C. Custom Features
As part of your project proposal, you must define a user, their problem, and user-stories i.e., problems and expected solutions. You must also list a number of custom features that you will implement to solve that problem for them.
These are features that you will propose 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. Your grade will depend on how well you address the user’s problem, and how well the features are designed.
-
At this time, iOS can only be built as a multi-platform application (e.g., Android + iOs, or desktop + iOS). Speak with the instructor about this before targeting iOS. ↩︎