This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
soft-arch/src/sa/model/decisions/0001-ui-is-web-app.madr

72 lines
3.1 KiB
Plaintext

## ADR #0001: The UI is a web app
1. **What did you decide?**
The user interface of Smarthut is a single-page web application implemented
using modern frontend web frameworks.
2. **What was the context for your decision?**
<!-- What is the goal you are trying to achieve? -->
The user application of Smarhut should be easily accessible by users and be
compatible with as many devices and platforms as possible. Therefore, the UI
should work on desktop and mobile devices alike.
<!-- What are the constraints? -->
Targeting several platforms poses the challenge of dealing with different
programming language and UI framework constraints. Few paradigms are
universally supported and thus there is a risk of additional complexity and
cost per each custom logic or code a platform may require.
<!-- What is the scope of your decision? Does it affect the entire architecture? -->
This decision affects mainly the frontend side of Smarthut, possibly
constraining UI/UX design freedom. Additionally, due to the way data may be
shown data flow between UI and components evaluating business logic
(e.g. user-defined triggers) and storing state (e.g. user-defined room
configuration) may be affected, thus the connectors between these components
may optimized to fit the chosen way to show the data in the UI.
3. **What is the problem you are trying to solve?**
<!-- You may want to articulate the problem in form of a question. -->
_Which technology, framework or paradigm should be used to implement the
user interface of Smarthut?_
4. **Which alternative options did you consider?**
- Producing custom-built apps per each major platform, namely *Android*, *iOS*,
*Desktop* - possibly Windows-MacOS multiplatform, and *Web*)
- Using a market-ready multiplatform technology like Xamarin or
Ionic+Electron, and target the *Web* platform separately
- Focus on the *Web* platform for the first MVP and later target
other platform repackaging the web application (e.g. using PWAs or
Webviews)
5. **Which one did you choose?**
- Focus on the *Web* platform for the first MVP and later target
other platform repackaging the web application (e.g. using PWAs or
Webviews)
6. **What is the main reason for that?**
Building a web application is cheaper and easier than building for any
other platform due to the ubiquitousness of web products and solutions
nowadays. This is the most suitable choice to have a cheap yet satisfactory
MVP of Smarthut.
Pros:
- Cheap development;
- Lots of compatibility with different devices and platforms;
- Ease of repackaging in native applications (through PWAs or Webviews).
Cons:
- UX may degradate due to use of non-native components for each platform;
- Performance is inferior than native components;
- The *Web* platform is more limited than other platforms (e.g. for
storage), thus targeting it as a common denominator may impact the ease
of development of features that may be trivial to implement on other
platforms natively.