diff --git a/README.md b/README.md index 367bd378..a771984d 100644 --- a/README.md +++ b/README.md @@ -9,18 +9,89 @@ ![android-targetsdk](https://img.shields.io/badge/targetsdk-34-2bab6b.svg?style=flat-square&logo=android&logoColor=white) ![ios-target](https://img.shields.io/badge/target-16.0-%23000000.svg?style=flat-square&logo=apple&logoColor=white) -Project description. +~~Short project description.~~ ## Project info -- ApplicationId: `app.futured.kmptemplate` -- Design: Figma (add link) -- Backend: (REST / GraphQL) (add specification) +- Deadline: ~~**--. --. ----**~~ +- Design: ~~Figma (add link)~~ +- ~~Backend: GrahlQL / Apiary / OpenAPI (add link)~~ + - ~~Prod: https://live.app.com~~ + - ~~Dev: https://staging.app.com~~ +- ~~Localizations: Czech, English – POEditor / Google Sheets (add link)~~ +- [Architecture decision records](doc/adr/README.md) + +### KMP +- Product Flavors: dev, prod - Use-Cases: Kotlin Coroutines [cr-usecases](https://github.com/futuredapp/arkitekt) -### Team: +### Android +- ApplicationId: ~~`app.futured.project`~~ +- minSdk: ~~`28`~~ +- targetSdk: ~~`34`~~ +- Supports: ~~**Dark mode, landscape orientation**~~ +- Build Variants: debug, enterprise, release + +### iOS +- Deployment target: ~~**16.0**~~ +- Bundle identifier: ~~`app.futured.project`~~ +- Supports: ~~**Dark mode, landscape orientation, iPadOS, watchOS**~~ +- Language: ~~**Swift 5.0**~~ +- IDE: ~~**Xcode 11.0**~~ +- Dependency management: ~~**[Swift package manager](https://swift.org/package-manager/)**~~ +- Command line tools: **[Fastlane](https://docs.fastlane.tools)** +- Code style: + - **[SwiftLint](https://swift.org/package-manager/)** + - **[Danger](https://github.com/futuredapp/danger)** + +## Team: + +- ~~Jana Nováková, PM, ~~ +- ~~Jan Novák, iOS developer, ~~ +- ~~John Newman, tester, ~~ + +## Used Tools + +- Code style - **[ktlint](https://ktlint.github.io/)**, **[detekt](https://arturbosch.github.io/detekt/)**, **[Android lint](http://tools.android.com/tips/lint)**, **[Danger](https://github.com/futuredapp/danger)** +- Kotlin -> Swift interop - **[skie](https://skie.touchlab.co/)** + +### ~~Test accounts~~ + +- ~~dev - login: `a@a.com`, password: `hesloheslo`~~ -- TODO +### Security standard + +This project complies with ~~Standard (F0), High (F1), Highest (F2)~~ security standard. + +~~[Project specific standard](www.notion.so)~~ + +## Gradle tasks + +1. `clean` - Remove all `build` folders +2. `lintCheck` - Run `ktlint`, `detekt` checks. Same runs on CI. +3. `ktlintFormat` - Reformat source code according to ktlint rules +4. `:shared:network:graphql:downloadApolloSchemaFromIntrospection` - Download latest Apollo schema +5. `:shared:network:graphql:generateApolloSources` - Generate Apollo sources (rebuilds models after adding modifying queries, mutations, etc.) + +## Navigation Structure + +The app utilizes [Decompose](https://arkivanov.github.io/Decompose/) to share presentation logic and navigation state in KMP. +The following meta-description provides an overview of Decompose navigation tree: + +```kotlin +Navigation("RootNavigation") { + Slot { + Screen("LoginScreen") + Navigation("HomeNavigation") { + Stack { + Screen("FirstScreen") + Screen("SecondScreen") + Screen("ThirdScreen") + } + } + } +} +``` ## Project Setup @@ -86,20 +157,3 @@ ${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/uplo # Upload ${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols -gsp ${GSPFILE} -p ios ${DSYMFILE} ``` - -## Used Tools - -- Code style - **[ktlint](https://ktlint.github.io/)**, **[detekt](https://arturbosch.github.io/detekt/)**, **[Android lint](http://tools.android.com/tips/lint)**, **[Danger](https://github.com/futuredapp/danger)** -- Kotlin -> Swift interop - **[SKIE]**(https://skie.touchlab.co/) - -## Test accounts - -- TODO - -## Kotlin Gradle tasks - -1. `clean` - Remove all `build` folders -2. `lintCheck` - Run `ktlint`, `detekt` checks. Same runs on CI. -3. `ktlintFormat` - Reformat source code according to ktlint rules -5. `:shared:network:graphql:downloadApolloSchemaFromIntrospection` - Download latest Apollo schema -6. `:shared:network:graphql:generateApolloSources` - Generate Apollo sources (rebuilds models after adding modifying queries, mutations, etc.) diff --git a/doc/adr/0001-record-architecture-decisions.md b/doc/adr/0001-record-architecture-decisions.md new file mode 100644 index 00000000..154623ac --- /dev/null +++ b/doc/adr/0001-record-architecture-decisions.md @@ -0,0 +1,32 @@ +# Record architecture decisions + +- Number: 1 +- Date: 2023-11-07 +- Authors: [Futured Team](https://github.com/futured-bot) +- Status: Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +We will use our [own template](templates/template.md) inspired by +[Swift Evolution](https://github.com/apple/swift-evolution/blob/main/proposal-templates/0000-swift-template.md). + +We will manage ADRs with [adr-tools](https://github.com/npryce/adr-tools). + +With every new ADR, we will generate new table of contents in [README.md](README.md) file using `adr generate toc` command. + +## Alternatives considered + +Make no effort to write better documentation. + +## Consequences + +- Documentation of the project will be improved. +- There will be more time spent on documentation. +- We need to have on mind that we need to write ADR + when making decisions. diff --git a/doc/adr/README.md b/doc/adr/README.md new file mode 100644 index 00000000..bc04a34e --- /dev/null +++ b/doc/adr/README.md @@ -0,0 +1,3 @@ +# Architecture Decision Records + +* [Record architecture decisions](0001-record-architecture-decisions.md) diff --git a/doc/adr/templates/template.md b/doc/adr/templates/template.md new file mode 100644 index 00000000..159531f8 --- /dev/null +++ b/doc/adr/templates/template.md @@ -0,0 +1,22 @@ +# NUMBER. TITLE + +- Number: NUMBER +- Date: DATE +- Authors: +- Status: STATUS + +## Context + +Why? + +## Decision + +What? + +## Alternatives considered + +Which? + +## Consequences + +What's next?