AI prompts
base on The ION Framework, built using Flutter, which allows anyone to create and deploy cross-platform DApps easily. # ION Framework
The ION Framework, built using Flutter, which allows anyone to create and deploy cross-platform DApps easily.
# Getting started
## Set up environment
All environment-related files and keys are stored separately in the [secrets repository](https://github.com/ice-blockchain/flutter-app-secrets).
Clone the [secrets repository](https://github.com/ice-blockchain/flutter-app-secrets) and place it at the same directory level as the main project repository.
Example directory structure:
```
~/projects/flutter-app
~/projects/flutter-app-secrets
```
To switch or set up an environment, run the `./scripts/configure_env.sh` script from the root of the main app project passing it a desired environment (`staging` / `production` / `testnet`).
Example:
```
./scripts/configure_env.sh staging
```
## Install asdf
To ensure that everyone uses the exact same Flutter version we use asdf. To install it there is a script. It will also create a VSCode settings file with the Flutter SDK path
```
./scripts/asdf.sh
```
## Set up git hooks
```
./scripts/install_hooks.sh
```
We use Git hooks to ensure that commits adhere to the rules set by our code analyzer.
To set up the hooks, run the script once from the root of the main project. All the precommit hooks are defined in `pre_commit.sh` script, if the content of this files changes, the hooks should be updated using the same `install_hooks.sh` script.
## Set up Melos
```
./scripts/bootstrap.sh
```
We maintain additional packages alongside the main app package (currently, only `packages/ion_identity_client` at the time of writing the README). To simplify the organization of this process, we use Melos. To set it up, simply run the script once.
## Generate code / locales
```
./scripts/generate_code.sh && ./scripts/generate_locales.sh
```
We use dart code generation in conjunction with libraries like `freezed`, `widgetbook`, `riverpod` and many other third-party libs. The code generation for locales is handled by a separate script, allowing you to trigger this process when, for instance, an `*.arb` file is saved.
## Get dependencies
```
melos run pub_get
```
Since we use monorepo with several packages, we need to download dependencies for each package. To simplify this process, we use Melos, which allows us to define commands that run across all packages. For a list of available commands, check `melos.yaml`.
## Install Rust
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Some dependencies require Rust to be installed
# Run the project
You should pass environment variables to Flutter compiler:
```
asdf exec flutter run --dart-define-from-file=.merged.app.env
```
> [!IMPORTANT]
> To run the project on Android with staging environment, we need to specify the `flavor`:
> ```flutter run --flavor=staging```
", Assign "at most 3 tags" to the expected json: {"id":"14891","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"