Repository: seqeralabs/seqera-kit (language: python)

Issue:
refactor: rename twkit to seqerakit, tower to seqeraplatform
Rename all occurrences of `twkit` to `seqerakit` and `tower` or `Tower` to `seqeraplatform` and `SeqeraPlatform` or `Seqera Platform, respectively.

The `SeqeraPlatform` class will need to be updated when the `tw` cli has migrated over.


Discussion / hints:

Fix patch:
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index bee758b..9996130 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -22,11 +22,11 @@ Follow the [Github flow](https://docs.github.com/en/get-started/quickstart/githu
 
 ### Developing Locally
 
-Install the dependencies locally before prior to development. You can use a virtual environment but we recommend using a conda environment as this can come with an appropriate version of the Tower CLI. To install, you can create and activate a conda environment using:
+Install the dependencies locally before prior to development. You can use a virtual environment but we recommend using a conda environment as this can come with an appropriate version of the Seqera Platform CLI. To install, you can create and activate a conda environment using:
 
 ```console
 conda env create -f environment.yml
-conda activate twkit
+conda activate seqerakit
 ```
 
 You can then install the local repository for development using the `pip -e` command which will install it in place without copying it to your `PYTHONPATH`. Using `--no-deps` will ignore dependencies which have already been installed via Conda. This assumes the current working directory is a clone of this repository.
@@ -55,7 +55,7 @@ You can debug in VSCode for stepping through code and monitoring errors. To do s
       "name": "Python: Current File",
       "type": "python",
       "request": "launch",
-      "program": "${workspaceFolder}/twkit/cli.py",
+      "program": "${workspaceFolder}/seqerakit/cli.py",
       "args": ["-l", "debug", "example.yml"], // Change to your specific commands you wish to run
       "cwd": "${workspaceFolder}"
     }
@@ -73,7 +73,7 @@ You may need additional settings based on your set-up. A more complete example m
       "name": "Python: Current File",
       "type": "python",
       "request": "launch",
-      "program": "${workspaceFolder}/twkit/cli.py",
+      "program": "${workspaceFolder}/seqerakit/cli.py",
       "console": "integratedTerminal",
       "purpose": ["debugging"],
       "justMyCode": true,
diff --git a/.gitignore b/.gitignore
index cdb65b1..e2f8092 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ build/lib/*
 node_modules/
 package-lock.json
 package.json
-twkit.egg-info/*
+seqerakit.egg-info/*
 build/*
 
 .DS_Store
diff --git a/README.md b/README.md
index b8375ba..92fbd0b 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,195 @@
-# twkit is now seqerakit
+# <img src="https://raw.githubusercontent.com/seqeralabs/seqera-kit/main/assets/seqerakit.svg" width=50 alt="seqerakit logo"> seqerakit
 
-This package has been renamed. Use `pip install seqerakit` instead.
+`seqerakit` is a Python wrapper for the [Seqera Platform CLI](https://github.com/seqeralabs/tower-cli). It can be leveraged to automate the creation of all of the entities in Seqera Platform via a simple configuration file in YAML format.
 
-New package: https://pypi.org/project/seqerakit/
+The key features are:
+
+- **Simple configuration**: All of the command-line options available when using the Seqera Platform CLI can be defined in simple YAML format.
+- **Infrastructure as Code**: Enable users to manage and provision their infrastructure specifications.
+- **Automation**: End-to-end creation of entities within Seqera Platform, all the way from adding an Organization to launching pipeline(s) within that Organization.
+
+## Prerequisites
+
+You will need to have an account on Seqera Platform (see [Plans and pricing](https://cloud.tower.nf/pricing/)).
+
+### 1. Dependencies
+
+`seqerakit` requires the following dependencies:
+
+1. [Seqera Platform CLI](https://github.com/seqeralabs/tower-cli#1-installation)
+
+2. [Python (`>=3.8`)](https://www.python.org/downloads/)
+
+3. [PyYAML](https://pypi.org/project/PyYAML/)
+
+Alternatively, you can install the dependencies via Conda by downloading and using the [Conda environment file](https://github.com/seqeralabs/seqera-kit/blob/main/environment.yml) that has been supplied in this repository:
+
+```console
+conda env create -f environment.yml
+conda activate seqerakit
+```
+
+### 2. Installation
+
+The scripts in this repository are packaged and available on [PyPI](https://pypi.org/project/seqerakit/). They can be installed via `pip`:
+
+```
+pip install seqerakit
+```
+
+You can force overwrite the installation to use the latest changes with the command below:
+
+```
+pip install --upgrade --force-reinstall seqerakit
+```
+
+### 3. Configuration
+
+Create a Seqera Platform access token using the [Seqera Platform](https://tower.nf/) web interface via the **Your Tokens** page in your profile.
+
+`seqerakit` reads this token from the environment variable `TOWER_ACCESS_TOKEN`. Please export it into your terminal as shown below:
+
+```bash
+export TOWER_ACCESS_TOKEN=<your access token>
+```
+
+## Usage
+
+Use the -h or --help parameter to list the available commands and their associated options:
+
+```
+seqerakit -h
+```
+
+### Dryrun
+
+To print the commands that would executed with `tw` when using a YAML file, you can run `seqerakit` with the `--dryrun` flag:
+
+```
+seqerakit file.yaml --dryrun
+```
+
+### Recursively delete
+
+Instead of adding or creating resources, you can recursively delete resources in your YAML file by specifying the `--delete` flag:
+
+```
+seqerakit file.yaml --delete
+```
+
+For example, if you have a YAML file that defines an Organization -> Workspace -> Team -> Credentials -> Compute Environment that have already been created, with the `--delete` flag, `seqerakit` will recursively delete the Compute Environment -> Credentials -> Team -> Workspace -> Organization.
+
+### Using `tw` specific CLI options
+
+`tw` specific CLI options can be specified with the `--cli=` flag:
+
+```
+seqerakit file.yaml --cli="--arg1 --arg2"
+```
+
+You can find the full list of options by running `tw -h`.
+
+The Seqera Platform CLI expects to connect to a Seqera Platform instance that is secured by a TLS certificate. If your Seqera Platform instance does not present a certificate, you will need to qualify and run your `tw` commands with the `--insecure` flag.
+
+To use `tw` specific CLI options such as `--insecure`, use the `--cli=` flag, followed by the options you would like to use enclosed in double quotes.
+
+For example:
+
+```
+seqerakit file.yaml --cli="--insecure"
+```
+
+To use an SSL certificate that is not accepted by the default Java certificate authorities and specify a custom `cacerts` store as accepted by the `tw` CLI, you can specify the `-Djavax.net.ssl.trustStore=/absolute/path/to/cacerts` option enclosed in double quotes to `seqerakit` as you would to `tw`, preceded by `--cli=`.
+
+For example:
+
+```
+seqerakit hello-world-config.yml --cli="-Djavax.net.ssl.trustStore=/absolute/path/to/cacerts"
+```
+
+<b>Note</b>: Use of `--verbose` option for the `tw` CLI is currently not supported by `seqerakit`. Supplying `--cli="--verbose"` will raise an error.
+
+## Quick start
+
+You must provide a YAML file that defines the options for each of the entities you would like to create in Seqera Platform.
+
+You will need to have an account on Seqera Platform (see [Plans and pricing](https://cloud.tower.nf/pricing/)). You will also need access to a Workspace and a pre-defined Compute Environment where you can launch a pipeline.
+
+### Launch via YAML
+
+1. Create a YAML file called `hello-world-config.yml` with the contents below, and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>` entries as required:
+
+   ```
+   launch:
+     - name: 'hello-world'                               # Workflow name
+       workspace: '<YOUR_WORKSPACE>'                     # Workspace name
+       compute-env: '<YOUR_COMPUTE_ENVIRONMENT>'         # Compute environment
+       revision: 'master'                                # Pipeline revision
+       pipeline: 'https://github.com/nextflow-io/hello'  # Pipeline URL
+   ```
+
+2. Launch the pipeline with `seqerakit`:
+
+   ```
+   seqerakit hello-world-config.yml
+   ```
+
+3. Login to your Seqera Platform instance and check the Runs page in the appropriate Workspace for the pipeline you just launched!
+
+### Launch via a Python script
+
+You can also launch the same pipeline via a Python script. This will essentially allow you to extend the functionality on offer within the Seqera Platform CLI by leveraging the flexibility and customisation options available in Python.
+
+1. Download the [`launch_hello_world.py`](https://github.com/seqeralabs/seqera-kit/blob/main/examples/python/launch_hello_world.py) Python script and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>` entries as required.
+
+2. Launch the pipeline with `seqerakit`:
+
+   ```
+   python launch_hello_world.py
+   ```
+
+3. Login to your Seqera Platform instance and check the Runs page in the appropriate Workspace for the pipeline you just launched!
+
+## Real world example
+
+Please see [`seqerakit-e2e.yml`](https://github.com/seqeralabs/seqera-kit/blob/main/examples/yaml/seqerakit-e2e.yml) for an end-to-end example that highlights how you can use `seqerakit` to create everything sequentially in Seqera Platform all the way from creating a new Organization to launching a pipeline.
+
+You can modify this YAML to similarly create Seqera Platform resources end-to-end for your setup. This YAML encodes environment variables to protect sensitive keys, usernames, and passwords that are required to create or add certain resources (i.e. credentials, compute environments). Prior to running it with `seqerakit examples/yaml/seqerakit-e2e.yml`, you will have to set the following environment variables:
+
+```
+$TOWER_GITHUB_PASSWORD
+$DOCKERHUB_PASSWORD
+$AWS_ACCESS_KEY_ID
+$AWS_SECRET_ACCESS_KEY
+$AWS_ASSUME_ROLE_ARN
+$AZURE_BATCH_KEY
+$AZURE_STORAGE_KEY
+$GOOGLE_KEY
+$SENTIEON_LICENSE_BASE64
+```
+
+## Templates
+
+We have provided template YAML files for each of the entities that can be created on Seqera Platform. These can be found in the [`templates/`](https://github.com/seqeralabs/blob/main/seqera-kit/templates) directory and should form a good starting point for you to add your own customization:
+
+- [organizations.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/organizations.yml)
+- [teams.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/teams.yml)
+- [workspaces.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/workspaces.yml)
+- [participants.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/participants.yml)
+- [credentials.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/credentials.yml)
+- [secrets.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/secrets.yml)
+- [compute-envs.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/compute-envs.yml)
+- [actions.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/actions.yml)
+- [datasets.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/datasets.yml)
+- [pipelines.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/pipelines.yml)
+- [launch.yml](https://github.com/seqeralabs/seqera-kit/blob/main/templates/launch.yml)
+
+## Contributions and Support
+
+If you would like to contribute to `seqerakit`, please see the [contributing guidelines](https://github.com/seqeralabs/seqera-kit/blob/main/.github/CONTRIBUTING.md).
+
+For further information or help, please don't hesitate to create an [issue](https://github.com/seqeralabs/seqera-kit/issues) in this repository.
+
+## Credits
+
+`seqerakit` was written by [Esha Joshi](https://github.com/ejseqera), [Adam Talbot](https://github.com/adamrtalbot) and [Harshil Patel](https://github.com/drpatelh) from the Scientific Development Team at [Seqera Labs](https://seqera.io/).
diff --git a/assets/seqerakit.svg b/assets/seqerakit.svg
new file mode 100644
index 0000000..2f7cd26
--- /dev/null
+++ b/assets/seqerakit.svg
@@ -0,0 +1,10 @@
+<svg width="250" height="250" viewBox="0 0 250 250" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M212.237 129.43L212.587 129.57L212.937 129.71L213.267 129.87L213.597 130.05L213.917 130.23L214.238 130.43L214.538 130.66L214.828 130.88L215.098 131.13L215.378 131.38L215.638 131.66L215.878 131.93L216.118 132.23L216.328 132.53L216.538 132.85L216.719 133.159L216.889 133.499L217.049 133.829L217.189 134.169L217.329 134.519L217.429 134.879L217.529 135.229L217.599 135.609L217.669 135.969L217.709 136.349L217.729 136.709L217.739 137.079L217.729 137.459L217.709 137.829L217.669 138.199L217.599 138.569L217.529 138.929L217.429 139.299L217.329 139.649L217.189 140.009L217.049 140.349L216.889 140.679L216.719 141.009L216.538 141.329L216.328 141.649L216.118 141.949L215.878 142.229L215.638 142.519L215.378 142.779L215.098 143.049L214.828 143.299L214.538 143.519L214.238 143.729L213.917 143.949L213.597 144.129L213.267 144.309L212.937 144.459L212.587 144.609L212.237 144.729L211.887 144.849L211.527 144.929L211.167 145.019L210.786 145.069L210.426 145.109L210.046 145.149H209.986L210.366 145.139L211.046 145.109L211.727 145.069L212.407 145.009L213.077 144.919L213.757 144.819L214.428 144.709L215.098 144.569L215.758 144.419L216.428 144.249L217.089 144.059L217.739 143.849L218.379 143.629L219.019 143.389L219.65 143.129L220.28 142.859L220.9 142.569L221.51 142.259L222.11 141.939L222.701 141.599L223.281 141.239L223.861 140.879L224.421 140.499L224.981 140.089L225.522 139.669L226.052 139.249L226.572 138.799L227.082 138.339L227.572 137.879L228.063 137.389L228.533 136.899L228.983 136.389L229.423 135.869L229.853 135.339L230.273 134.789L230.674 134.239L231.054 133.679L231.434 133.099L231.784 132.52L232.124 131.92L232.454 131.32L232.754 130.72L233.044 130.1L233.314 129.47L233.575 128.84L233.815 128.2L234.045 127.55L234.245 126.9L234.435 126.24L234.605 125.58L234.755 124.92L234.895 124.24L235.015 123.57L235.115 122.9L235.185 122.22L235.255 121.54L235.305 120.85L235.325 120.171L235.335 119.491L235.325 118.811L235.305 118.121L235.255 117.441L235.185 116.761L235.115 116.091L235.015 115.411L234.895 114.731L234.755 114.071L234.605 113.401L234.475 112.891H210.156L209.676 112.901H152.155L211.817 129.31L212.237 129.43Z" fill="white"/>
+<path d="M249.96 135.379L249.91 134.519L249.85 133.669L249.77 132.81L249.67 131.96L249.56 131.12L249.42 130.27L249.26 129.43L249.1 128.59L248.91 127.76L248.7 126.93L248.479 126.1L248.229 125.28L247.969 124.47L247.699 123.65L247.399 122.85L247.089 122.06L246.759 121.26L246.419 120.481L246.059 119.701L245.688 118.931L245.288 118.181L244.878 117.421L244.448 116.681L244.008 115.941L243.558 115.221L243.078 114.501L242.597 113.801L242.097 113.111L241.927 112.891H234.474L234.604 113.401L234.755 114.071L234.895 114.731L235.015 115.411L235.115 116.091L235.185 116.761L235.255 117.441L235.305 118.121L235.325 118.811L235.335 119.491L235.325 120.171L235.305 120.85L235.255 121.54L235.185 122.22L235.115 122.9L235.015 123.57L234.895 124.24L234.755 124.92L234.604 125.58L234.434 126.24L234.244 126.9L234.044 127.55L233.814 128.2L233.574 128.84L233.314 129.47L233.044 130.1L232.754 130.72L232.454 131.32L232.124 131.92L231.783 132.52L231.433 133.099L231.053 133.679L230.673 134.239L230.273 134.789L229.853 135.339L229.423 135.869L228.982 136.389L228.532 136.899L228.062 137.389L227.572 137.879L227.082 138.339L226.572 138.799L226.051 139.249L225.521 139.669L224.981 140.089L224.421 140.499L223.861 140.879L223.28 141.239L222.7 141.599L222.11 141.939L221.51 142.259L220.9 142.569L220.279 142.859L219.649 143.129L219.019 143.389L218.379 143.629L217.738 143.849L217.088 144.059L216.428 144.249L215.758 144.419L215.097 144.569L214.427 144.709L213.757 144.819L213.077 144.919L212.406 145.009L211.726 145.069L211.046 145.109L210.366 145.139L209.675 145.149H0V177.406H209.675L210.536 177.396L211.386 177.376L212.246 177.326L213.097 177.256L213.947 177.176L214.797 177.086L215.648 176.956L216.488 176.826L217.328 176.676L218.169 176.496L219.009 176.306L219.829 176.106L220.659 175.876L221.49 175.636L222.3 175.386L223.11 175.096L223.911 174.806L224.711 174.496L225.501 174.176L226.281 173.836L227.062 173.466L227.832 173.086L228.592 172.696L229.343 172.286L230.083 171.866L230.823 171.416L231.533 170.966L232.254 170.497L232.964 170.007L233.654 169.507L234.334 168.987L235.005 168.457L235.675 167.907L236.325 167.347L236.955 166.787L237.576 166.197L238.186 165.597L238.786 164.987L239.366 164.357L239.946 163.727L240.507 163.077L241.047 162.417L241.577 161.747L242.097 161.057L242.597 160.367L243.078 159.667L243.558 158.947L244.008 158.227L244.448 157.488L244.878 156.748L245.288 155.998L245.688 155.238L246.059 154.468L246.419 153.698L246.759 152.908L247.089 152.118L247.399 151.328L247.699 150.518L247.969 149.708L248.229 148.898L248.479 148.068L248.7 147.248L248.91 146.418L249.1 145.578L249.26 144.749L249.42 143.909L249.56 143.059L249.67 142.209L249.77 141.359L249.85 140.509L249.91 139.649L249.96 138.799L249.99 137.949L250 137.089L249.99 136.229L249.96 135.379Z" fill="#FA6863"/>
+<path d="M37.7624 120.54L37.4123 120.41L37.0621 120.27L36.732 120.11L36.3919 119.93L36.0818 119.74L35.7617 119.54L35.4616 119.32L35.1714 119.09L34.8913 118.84L34.6212 118.59L34.3612 118.32L34.1211 118.04L33.881 117.741L33.6709 117.441L33.4608 117.131L33.2808 116.821L33.1107 116.481L32.9406 116.141L32.8106 115.811L32.6705 115.461L32.5705 115.091L32.4705 114.741L32.3904 114.371L32.3304 114.011L32.2904 113.631L32.2704 113.271L32.2604 112.891L32.2704 112.521L32.2904 112.141L32.3304 111.781L32.3904 111.411L32.4705 111.041L32.5705 110.681L32.6705 110.331L32.8106 109.971L32.9406 109.631L33.1107 109.291L33.2808 108.971L33.4608 108.641L33.6709 108.331L33.881 108.031L34.1211 107.741L34.3612 107.461L34.6212 107.191L34.8913 106.931L35.1714 106.681L35.4616 106.461L35.7617 106.241L36.0818 106.031L36.3919 105.841L36.732 105.671L37.0621 105.521L37.4123 105.372L37.7624 105.242L38.1125 105.132L38.4726 105.042L38.8328 104.962L39.2129 104.912L39.573 104.872L39.9432 104.832H40.0132H39.6331L38.9528 104.862L38.2726 104.912L37.5923 104.972L36.9221 105.052L36.2418 105.152L35.5616 105.272L34.9013 105.402L34.2311 105.561L33.5709 105.731L32.9106 105.921L32.2604 106.131L31.6202 106.351L30.9699 106.581L30.3497 106.841L29.7195 107.121L29.0993 107.411L28.489 107.721L27.8788 108.041L27.2986 108.371L26.7184 108.731L26.1382 109.101L25.568 109.481L25.0178 109.891L24.4676 110.301L23.9474 110.731L23.4272 111.171L22.917 111.631L22.4269 112.101L21.9367 112.581L21.4665 113.081L21.0163 113.581L20.5662 114.101L20.146 114.641L19.7159 115.181L19.3257 115.731L18.9356 116.301L18.5655 116.871L18.2153 117.461L17.8752 118.05L17.5451 118.66L17.245 119.26L16.9549 119.88L16.6848 120.51L16.4247 121.14L16.1846 121.78L15.9545 122.43L15.7545 123.08L15.5644 123.74L15.3943 124.39L15.2443 125.06L15.1042 125.73L14.9842 126.41L14.8841 127.08L14.8141 127.76L14.7441 128.43L14.6941 129.12L14.6741 129.8L14.6641 130.479L14.6741 131.169L14.6941 131.849L14.7441 132.529L14.8141 133.209L14.8841 133.889L14.9842 134.569L15.1042 135.239L15.2443 135.909L15.3943 136.569L15.5244 137.089H39.8431L40.3233 137.079H97.844L38.1825 120.67L37.7624 120.54Z" fill="white"/>
+<path d="M0.0400144 114.601L0.0800288 115.461L0.150054 116.311L0.230083 117.161L0.330119 118.011L0.440158 118.861L0.580209 119.701L0.730263 120.551L0.900324 121.391L1.09039 122.221L1.30047 123.051L1.52055 123.881L1.77064 124.701L2.03073 125.51L2.30083 126.32L2.60094 127.13L2.91105 127.92L3.24117 128.72L3.58129 129.5L3.94142 130.28L4.31155 131.04L4.7117 131.8L5.12184 132.56L5.552 133.3L5.99216 134.03L6.44232 134.75L6.91249 135.47L7.40267 136.18L7.90285 136.87L8.07291 137.09H15.5256L15.3955 136.57L15.2455 135.91L15.1054 135.24L14.9854 134.57L14.8854 133.89L14.8153 133.21L14.7453 132.53L14.6953 131.85L14.6753 131.17L14.6653 130.48L14.6753 129.8L14.6953 129.12L14.7453 128.43L14.8153 127.76L14.8854 127.08L14.9854 126.41L15.1054 125.73L15.2455 125.061L15.3955 124.391L15.5656 123.741L15.7557 123.081L15.9557 122.431L16.1858 121.781L16.4259 121.141L16.686 120.511L16.9561 119.881L17.2462 119.261L17.5463 118.661L17.8764 118.051L18.2166 117.461L18.5667 116.871L18.9368 116.301L19.327 115.731L19.7171 115.181L20.1473 114.641L20.5674 114.101L21.0176 113.581L21.4677 113.081L21.9379 112.581L22.4281 112.102L22.9183 111.632L23.4284 111.172L23.9486 110.732L24.4688 110.302L25.019 109.892L25.5692 109.482L26.1394 109.102L26.7196 108.732L27.2998 108.372L27.88 108.042L28.4903 107.722L29.1005 107.412L29.7207 107.122L30.3509 106.842L30.9711 106.582L31.6214 106.352L32.2616 106.132L32.9118 105.922L33.5721 105.732L34.2323 105.562L34.9026 105.402L35.5628 105.272L36.243 105.152L36.9233 105.052L37.5935 104.972L38.2738 104.912L38.954 104.862L39.6343 104.832L40.3245 104.822H250V72.5747H40.3245L39.4642 72.5847L38.6139 72.6047L37.7536 72.6547L36.9033 72.7147L36.043 72.7947L35.2027 72.8947L34.3524 73.0147L33.5121 73.1447L32.6718 73.3046L31.8215 73.4746L30.9912 73.6646L30.1609 73.8746L29.3406 74.0946L28.5103 74.3446L27.7 74.5945L26.8897 74.8745L26.0894 75.1645L25.2891 75.4845L24.4988 75.8044L23.7185 76.1444L22.9383 76.5144L22.168 76.8944L21.4077 77.2743L20.6574 77.6943L19.9172 78.1143L19.1769 78.5542L18.4566 79.0142L17.7364 79.4841L17.0361 79.9741L16.3459 80.4741L15.6556 80.984L14.9954 81.514L14.3252 82.0639L13.6749 82.6239L13.0447 83.1939L12.4245 83.7838L11.8143 84.3738L11.214 84.9937L10.6238 85.6237L10.0536 86.2536L9.49342 86.9036L8.95322 87.5635L8.42303 88.2334L7.90285 88.9134L7.40267 89.6133L6.91249 90.3133L6.44232 91.0232L5.99216 91.7532L5.552 92.4931L5.12184 93.233L4.7117 93.973L4.31155 94.7329L3.94142 95.5129L3.58129 96.2828L3.24117 97.0727L2.91105 97.8527L2.60094 98.6526L2.30083 99.4526L2.03073 100.262L1.77064 101.082L1.52055 101.902L1.30047 102.732L1.09039 103.562L0.900324 104.402L0.730263 105.232L0.580209 106.072L0.440158 106.922L0.330119 107.772L0.230083 108.622L0.150054 109.472L0.0800288 110.322L0.0400144 111.172L0 112.032V112.891V113.751L0.0400144 114.601Z" fill="#F18046"/>
+<path d="M37.7624 47.9756L37.4123 47.8356L37.0621 47.6856L36.722 47.5356L36.4019 47.3556L36.0718 47.1756L35.7617 46.9757L35.4616 46.7457L35.1614 46.5257L34.8813 46.2757L34.6112 46.0257L34.3612 45.7458L34.1211 45.4758L33.881 45.1758L33.6609 44.8758L33.4608 44.5559L33.2708 44.2359L33.1007 43.9059L32.9306 43.5759L32.8006 43.236L32.6705 42.876L32.5605 42.526L32.4705 42.176L32.3904 41.7961L32.3304 41.4361L32.2804 41.0561L32.2704 40.6862L32.2604 40.3062L32.2704 39.9362L32.2804 39.5763L32.3304 39.2063L32.3904 38.8363L32.4705 38.4763L32.5605 38.1064L32.6705 37.7464L32.8006 37.3964L32.9306 37.0565L33.1007 36.7265L33.2708 36.3865L33.4608 36.0765L33.6609 35.7566L33.881 35.4566L34.1211 35.1766L34.3612 34.8866L34.6112 34.6067L34.8813 34.3567L35.1614 34.1067L35.4616 33.8867L35.7617 33.6767L36.0718 33.4567L36.4019 33.2768L36.722 33.0968L37.0621 32.9368L37.4123 32.7968L37.7624 32.6768L38.1125 32.5568L38.4726 32.4568L38.8428 32.3868L39.2029 32.3268L39.573 32.2868L39.9532 32.2568H40.0732H39.6331L38.9528 32.2868L38.2726 32.3368L37.5923 32.3968L36.9221 32.4868L36.2418 32.5868L35.5616 32.6968L34.9013 32.8368L34.2311 32.9868L33.5709 33.1568L32.9106 33.3467L32.2604 33.5567L31.6202 33.7767L30.9699 34.0167L30.3497 34.2667L29.7195 34.5467L29.0993 34.8366L28.489 35.1466L27.8788 35.4666L27.2986 35.7966L26.7084 36.1565L26.1382 36.5265L25.568 36.9065L25.0178 37.3164L24.4676 37.7264L23.9374 38.1564L23.4272 38.6063L22.917 39.0563L22.4169 39.5263L21.9367 40.0062L21.4665 40.5062L21.0163 41.0161L20.5662 41.5361L20.146 42.0661L19.7159 42.616L19.3257 43.166L18.9356 43.7259L18.5655 44.2959L18.2153 44.8858L17.8752 45.4758L17.5451 46.0857L17.245 46.6857L16.9549 47.3056L16.6848 47.9356L16.4247 48.5655L16.1846 49.2055L15.9545 49.8554L15.7545 50.5054L15.5644 51.1653L15.3943 51.8253L15.2343 52.4852L15.1042 53.1552L14.9842 53.8351L14.8841 54.5051L14.8041 55.185L14.7441 55.8549L14.6941 56.5449L14.6741 57.2348L14.6641 57.9148L14.6741 58.5947L14.6941 59.2847L14.7441 59.9646L14.8041 60.6446L14.8841 61.3145L14.9842 61.9945L15.1042 62.6744L15.2343 63.3343L15.3943 64.0043L15.5644 64.6642L15.7545 65.3142L15.9545 65.9741L16.1846 66.6141L16.4247 67.254L16.6848 67.884L16.9549 68.5139L17.245 69.1339L17.5451 69.7438L17.7452 70.0938L17.7652 70.0838L18.6055 69.6538L19.4458 69.2439L20.2961 68.8439L21.1564 68.4739L22.0167 68.094L22.897 67.754L23.7673 67.434L24.6577 67.104L25.548 66.8241L26.4483 66.5441L27.3486 66.2841L28.249 66.0341L29.1593 65.8041L30.0796 65.6042L30.9999 65.4242L31.9103 65.2442L32.8406 65.0942L33.7709 64.9542L34.7013 64.8342L35.6416 64.7342L36.572 64.6542L37.5123 64.5842L38.4326 64.5443L39.393 64.5243L40.3233 64.5043H97.844L38.1725 48.0956L37.7624 47.9756Z" fill="white"/>
+<path d="M209.676 217.743H210.366L211.046 217.703L211.727 217.663L212.407 217.603L213.087 217.513L213.767 217.413L214.438 217.303L215.108 217.163L215.768 217.013L216.438 216.843L217.089 216.653L217.739 216.443L218.389 216.223L219.029 215.983L219.65 215.723L220.28 215.453L220.9 215.163L221.51 214.853L222.12 214.533L222.711 214.193L223.291 213.833L223.861 213.463L224.431 213.083L224.991 212.683L225.532 212.263L226.062 211.843L226.582 211.393L227.082 210.933L227.582 210.473L228.063 209.983L228.533 209.493L228.993 208.983L229.433 208.463L229.863 207.934L230.283 207.384L230.674 206.834L231.064 206.274L231.434 205.694L231.784 205.114L232.124 204.514L232.454 203.914L232.764 203.304L233.054 202.694L233.314 202.064L233.585 201.424L233.815 200.794L234.045 200.144L234.255 199.494L234.435 198.834L234.615 198.174L234.765 197.514L234.895 196.834L235.015 196.164L235.115 195.494L235.195 194.805L235.265 194.135L235.305 193.445L235.335 192.765V192.085V191.405L235.305 190.715L235.265 190.035L235.195 189.355L235.115 188.685L235.015 188.005L234.895 187.325L234.765 186.665L234.615 185.995L234.435 185.335L234.255 184.685L234.045 184.025L233.815 183.375L233.585 182.746L233.314 182.116L233.054 181.486L232.764 180.866L232.454 180.256L232.254 179.886L232.234 179.896L231.394 180.326L230.553 180.736L229.703 181.136L228.843 181.516L227.973 181.876L227.102 182.226L226.232 182.546L225.342 182.866L224.441 183.165L223.551 183.435L222.661 183.695L221.74 183.945L220.84 184.165L219.92 184.375L218.999 184.565L218.079 184.735L217.159 184.885L216.228 185.025L215.298 185.145L214.368 185.245L213.427 185.325L212.487 185.385L211.547 185.435L210.616 185.465L209.676 185.475H152.155L211.817 201.884L212.237 202.014L212.587 202.144L212.937 202.284L213.267 202.444L213.597 202.624L213.917 202.814L214.238 203.014L214.538 203.234L214.828 203.464L215.098 203.714L215.378 203.964L215.638 204.234L215.878 204.514L216.118 204.814L216.328 205.114L216.538 205.424L216.719 205.734L216.889 206.074L217.049 206.414L217.189 206.744L217.329 207.094L217.429 207.464L217.529 207.814L217.599 208.183L217.669 208.543L217.709 208.923L217.729 209.283L217.739 209.663L217.729 210.033L217.709 210.413L217.669 210.773L217.599 211.143L217.529 211.513L217.429 211.873L217.329 212.223L217.189 212.583L217.049 212.923L216.889 213.263L216.719 213.583L216.538 213.913L216.328 214.223L216.118 214.523L215.878 214.813L215.638 215.093L215.378 215.363L215.098 215.623L214.828 215.873L214.538 216.093L214.238 216.313L213.917 216.523L213.597 216.713L213.267 216.883L212.937 217.033L212.587 217.183L212.237 217.313L211.887 217.423L211.527 217.513L211.167 217.593L210.786 217.643L210.426 217.683L210.046 217.723L209.676 217.733" fill="white"/>
+<path d="M249.96 207.964L249.92 207.114L249.86 206.264L249.77 205.404L249.68 204.554L249.56 203.714L249.42 202.864L249.27 202.024L249.1 201.184L248.91 200.344L248.7 199.524L248.479 198.694L248.239 197.864L247.979 197.064L247.699 196.244L247.399 195.445L247.099 194.655L246.769 193.855L246.419 193.075L246.069 192.295L245.688 191.525L245.288 190.775L244.888 190.015L244.458 189.275L244.008 188.535L243.558 187.815L243.088 187.095L242.597 186.395L242.097 185.705L241.577 185.015L241.057 184.355L240.507 183.685L239.946 183.046L239.376 182.406L238.786 181.786L238.196 181.166L237.576 180.576L236.955 179.986L236.325 179.416L235.675 178.856L235.015 178.306L234.975 178.276L234.034 178.846L233.204 179.316L232.344 179.786L232.234 179.846L232.454 180.256L232.764 180.866L233.054 181.486L233.314 182.116L233.584 182.746L233.814 183.375L234.044 184.025L234.254 184.685L234.434 185.335L234.614 185.995L234.765 186.665L234.895 187.325L235.015 188.005L235.115 188.685L235.195 189.355L235.265 190.035L235.305 190.715L235.335 191.405V192.085V192.765L235.305 193.445L235.265 194.135L235.195 194.805L235.115 195.495L235.015 196.164L234.895 196.834L234.765 197.514L234.614 198.174L234.434 198.834L234.254 199.494L234.044 200.144L233.814 200.794L233.584 201.424L233.314 202.064L233.054 202.694L232.764 203.304L232.454 203.914L232.124 204.514L231.783 205.114L231.433 205.694L231.063 206.274L230.673 206.834L230.283 207.384L229.863 207.934L229.433 208.463L228.992 208.983L228.532 209.493L228.062 209.983L227.582 210.473L227.082 210.933L226.582 211.393L226.061 211.843L225.531 212.263L224.991 212.683L224.431 213.083L223.861 213.463L223.29 213.833L222.71 214.193L222.12 214.533L221.51 214.853L220.9 215.163L220.279 215.453L219.649 215.723L219.029 215.983L218.389 216.223L217.738 216.443L217.088 216.653L216.438 216.843L215.768 217.013L215.107 217.163L214.437 217.303L213.767 217.413L213.087 217.513L212.406 217.603L211.726 217.663L211.046 217.703L210.366 217.743H209.675H0V250H209.675L210.536 249.99L211.386 249.97L212.246 249.92L213.097 249.85L213.957 249.78L214.807 249.68L215.658 249.55L216.498 249.42L217.338 249.27L218.179 249.09L219.009 248.9L219.839 248.7L220.659 248.48L221.49 248.23L222.3 247.98L223.11 247.69L223.921 247.4L224.721 247.09L225.511 246.77L226.291 246.43L227.072 246.06L227.832 245.68L228.602 245.291L229.343 244.881L230.093 244.461L230.823 244.021L231.543 243.551L232.264 243.091L232.964 242.601L233.654 242.091L234.344 241.581L235.015 241.051L235.675 240.501L236.325 239.941L236.955 239.381L237.576 238.791L238.196 238.191L238.786 237.581L239.376 236.951L239.946 236.321L240.507 235.671L241.057 235.011L241.577 234.341L242.097 233.661L242.597 232.962L243.088 232.262L243.558 231.542L244.008 230.822L244.458 230.082L244.888 229.342L245.288 228.592L245.688 227.832L246.069 227.062L246.419 226.292L246.769 225.502L247.099 224.712L247.399 223.922L247.699 223.112L247.979 222.302L248.239 221.482L248.479 220.662L248.7 219.843L248.91 219.003L249.1 218.173L249.27 217.343L249.42 216.493L249.56 215.653L249.68 214.803L249.77 213.953L249.86 213.103L249.92 212.243L249.96 211.393L250 210.543V209.683V208.823L249.96 207.964Z" fill="#3D95FD"/>
+<path d="M0.0400144 42.0266L0.0800288 42.8866L0.14005 43.7365L0.230083 44.5964L0.330119 45.4464L0.440158 46.2863L0.580209 47.1362L0.730263 47.9762L0.900324 48.8161L1.09039 49.646L1.30047 50.476L1.52055 51.2959L1.76063 52.1258L2.03073 52.9358L2.30083 53.7457L2.60094 54.5556L2.90104 55.3456L3.23116 56.1455L3.58129 56.9254L3.94142 57.7054L4.31155 58.4653L4.7117 59.2253L5.12184 59.9852L5.542 60.7251L5.99216 61.4651L6.44232 62.175L6.91249 62.895L7.40267 63.6049L7.90285 64.2949L8.42303 64.9848L8.95322 65.6448L9.49342 66.3147L10.0536 66.9546L10.6238 67.5946L11.214 68.2145L11.8143 68.8245L12.4245 69.4244L13.0447 70.0144L13.6749 70.5843L14.3252 71.1443L14.9954 71.6843L15.0254 71.7143L15.9657 71.1543L16.796 70.6843L17.6564 70.2044L17.7764 70.1544L17.5463 69.7444L17.2462 69.1345L16.9561 68.5145L16.686 67.8846L16.4259 67.2546L16.1858 66.6147L15.9557 65.9747L15.7557 65.3148L15.5656 64.6648L15.3955 64.0049L15.2355 63.3349L15.1054 62.675L14.9854 61.995L14.8854 61.3151L14.8053 60.6452L14.7453 59.9652L14.6953 59.2853L14.6753 58.5953L14.6653 57.9154L14.6753 57.2354L14.6953 56.5455L14.7453 55.8555L14.8053 55.1856L14.8854 54.5056L14.9854 53.8357L15.1054 53.1557L15.2355 52.4858L15.3955 51.8259L15.5656 51.1659L15.7557 50.506L15.9557 49.856L16.1858 49.2061L16.4259 48.5661L16.686 47.9362L16.9561 47.3062L17.2462 46.6863L17.5463 46.0863L17.8764 45.4764L18.2166 44.8864L18.5667 44.2965L18.9368 43.7265L19.327 43.1665L19.7171 42.6166L20.1473 42.0666L20.5674 41.5367L21.0176 41.0167L21.4677 40.5068L21.9379 40.0068L22.4181 39.5268L22.9183 39.0569L23.4284 38.6069L23.9386 38.1569L24.4688 37.727L25.019 37.317L25.5692 36.907L26.1394 36.5271L26.7096 36.1571L27.2998 35.7971L27.88 35.4672L28.4903 35.1472L29.1005 34.8372L29.7207 34.5472L30.3509 34.2673L30.9711 34.0173L31.6214 33.7773L32.2616 33.5573L32.9118 33.3473L33.5721 33.1573L34.2323 32.9874L34.9026 32.8374L35.5628 32.6974L36.243 32.5874L36.9233 32.4874L37.5935 32.3974L38.2738 32.3374L38.954 32.2874L39.6343 32.2574H40.3245H250V0H40.3245H39.4642L38.6139 0.0299976L37.7536 0.0799936L36.9033 0.149988L36.043 0.219982L35.1927 0.319974L34.3524 0.449964L33.5021 0.569954L32.6618 0.729942L31.8215 0.899928L30.9912 1.09991L30.1609 1.2999L29.3406 1.51988L28.5103 1.76986L27.7 2.01984L26.8897 2.29982L26.0894 2.58979L25.2791 2.90977L24.4988 3.22974L23.7185 3.56971L22.9383 3.93968L22.168 4.30966L21.4077 4.70962L20.6574 5.11959L19.9172 5.53956L19.1769 5.97952L18.4566 6.43948L17.7364 6.90945L17.0361 7.39941L16.3459 7.89937L15.6556 8.41933L14.9954 8.94928L14.3252 9.49924L13.6749 10.0492L13.0447 10.6192L12.4245 11.2091L11.8143 11.8091L11.214 12.419L10.6238 13.039L10.0536 13.6789L9.49342 14.3289L8.95322 14.9888L8.42303 15.6587L7.90285 16.3387L7.40267 17.0386L6.91249 17.7386L6.44232 18.4485L5.99216 19.1785L5.542 19.9084L5.12184 20.6583L4.7117 21.4083L4.31155 22.1582L3.94142 22.9382L3.58129 23.7081L3.23116 24.498L2.90104 25.288L2.60094 26.0779L2.30083 26.8778L2.03073 27.6978L1.76063 28.5077L1.52055 29.3277L1.30047 30.1576L1.09039 30.9875L0.900324 31.8275L0.730263 32.6574L0.580209 33.4973L0.440158 34.3473L0.330119 35.1972L0.230083 36.0471L0.14005 36.897L0.0800288 37.757L0.0400144 38.6069L0 39.4568V40.3168V41.1767L0.0400144 42.0266Z" fill="#0DC09D"/>
+</svg>
diff --git a/assets/twkit.svg b/assets/twkit.svg
deleted file mode 100644
index 9e63797..0000000
--- a/assets/twkit.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 39.75 39.75">
-  <defs>
-    <style>
-      .cls-1 {
-        fill: #fff;
-      }
-
-      .cls-2 {
-        fill: #4256e7;
-      }
-    </style>
-  </defs>
-  <circle class="cls-1" cx="19.87" cy="19.87" r="19.87"/>
-  <g id="g3856">
-    <g id="g3854">
-      <path id="path3844" class="cls-2" d="m19.87,2.42C10.23,2.42,2.42,10.23,2.42,19.87s7.82,17.46,17.46,17.46,17.45-7.82,17.45-17.46c0-9.64-7.82-17.45-17.45-17.45Zm.07,33.6c-8.96,0-16.22-7.26-16.22-16.22S10.99,3.58,19.94,3.58s16.22,7.26,16.22,16.22c0,8.96-7.26,16.22-16.22,16.22Z"/>
-      <g id="g3852">
-        <circle id="circle3846" class="cls-2" cx="21.43" cy="17.28" r=".58"/>
-        <circle id="circle3848" class="cls-2" cx="23.3" cy="18.66" r=".58"/>
-        <path id="path3850" class="cls-2" d="m29.53,10.2s-.05,0-.08,0c-.06-.02-.11-.04-.18-.04h-6.42s.01-.08.01-.13v-1.38c0-.15-.04-.29-.11-.4-.06-.27-.37-.48-.74-.48h-3.34c-.4,0-.72.24-.75.54-.07.11-.11.25-.11.4v1.38s0,.05,0,.07h-6.68c-.09,0-.17.03-.25.07-.27.11-.41.43-.33.75l3.42,13.62c.09.35.41.57.72.49.02,0,.04-.01.06-.02.06.01.12.02.19.02h2.46v11.41h1.16v-11.41h3.39v11.46h1.16v-11.46h2.59s.04,0,.06,0c0,0,.01,0,.02,0,.31.08.64-.14.72-.49l3.42-13.62c.09-.35-.09-.7-.4-.78Zm-14.52,13.72l-.7-2.79c.1.02.22.03.33.03h11.53s-.69,2.76-.69,2.76h-10.47Zm-2.36-9.39c.2.06.44.09.69.09h3.28s-.01.06-.01.1v5.28s-1.97,0-1.97,0c-.22,0-.42.04-.59.1l-1.4-5.58Zm13.81,5.48c-.07,0-.15-.01-.22-.01h-4.28s0-.03,0-.05v-.85c0-.38-.26-.69-.58-.69s-.58.31-.58.69v.85s0,.03,0,.05h-3.03s0-5.28,0-5.28c0-.03,0-.07-.01-.1h3.14s0,.81,0,.81c0,.38.26.69.58.69s.58-.31.58-.69v-.82h.85c-.07.13-.11.28-.11.45v1.57c0,.43.26.79.58.79s.58-.35.58-.79v-1.57c0-.17-.04-.32-.11-.45h3.66c.11,0,.21,0,.31-.02l-1.36,5.42Zm1.63-6.49c-.17-.04-.37-.06-.58-.06h-14.17c-.36.01-.69.08-.92.18l-.58-2.33h16.8l-.55,2.2Zm-9.11-3.44v-1.15h2.73v1.09s0,.09.01.13h-2.74s0-.05,0-.07Z"/>
-      </g>
-    </g>
-  </g>
-  <path id="path3850-6" class="cls-2" d="m29.53,10.2s-.05,0-.08,0c-.06-.02-.11-.04-.18-.04h-6.42s.01-.08.01-.13v-1.38c0-.15-.04-.29-.11-.4-.06-.27-.37-.48-.74-.48h-3.34c-.4,0-.72.24-.75.54-.07.11-.11.25-.11.4v1.38s0,.05,0,.07h-6.68c-.09,0-.17.03-.25.07-.27.11-.41.43-.33.75l3.42,13.62c.09.35.41.57.72.49.02,0,.04-.01.06-.02.06.01.12.02.19.02h2.46v11.41h1.16v-11.41h3.39v11.46h1.16v-11.46h2.59s.04,0,.06,0c0,0,.01,0,.02,0,.31.08.64-.14.72-.49l3.42-13.62c.09-.35-.09-.7-.4-.78Zm-14.52,13.72l-.7-2.79c.1.02.22.03.33.03h11.53s-.69,2.76-.69,2.76h-10.47Zm-2.36-9.39c.2.06.44.09.69.09h3.28s-.01.06-.01.1v5.28s-1.97,0-1.97,0c-.22,0-.42.04-.59.1l-1.4-5.58Zm13.81,5.48c-.07,0-.15-.01-.22-.01h-4.28s0-.03,0-.05v-.85c0-.38-.26-.69-.58-.69s-.58.31-.58.69v.85s0,.03,0,.05h-3.03s0-5.28,0-5.28c0-.03,0-.07-.01-.1h3.14s0,.81,0,.81c0,.38.26.69.58.69s.58-.31.58-.69v-.82h.85c-.07.13-.11.28-.11.45v1.57c0,.43.26.79.58.79s.58-.35.58-.79v-1.57c0-.17-.04-.32-.11-.45h3.66c.11,0,.21,0,.31-.02l-1.36,5.42Zm1.63-6.49c-.17-.04-.37-.06-.58-.06h-14.17c-.36.01-.69.08-.92.18l-.58-2.33h16.8l-.55,2.2Zm-9.11-3.44v-1.15h2.73v1.09s0,.09.01.13h-2.74s0-.05,0-.07Z"/>
-  <path id="path634" d="m28.62,6.61c-.75-.01-1.81.38-2.45.93-.32.28-.44.44-.84,1.14-.33.58-.44.79-.66,1.48h4.48c.09-.15.16-.29.21-.44.3-.76.37-1.57.22-2.29-.1-.45-.32-.71-.66-.78-.09-.02-.19-.03-.3-.03Zm.09,9.25l-.89,3.53c.04.3-.02.56-.18.85-.01.03-.03.05-.05.07l-.77,3.06c.22-.03.45-.06.7-.13,1.1-.29,1.75-.79,2.34-1.81.71-1.22.72-2.62.03-3.96-.28-.55-.62-1.03-1.18-1.62Zm-16.78.52c-.17.21-.32.45-.6.93-.63,1.09-.79,1.62-.87,2.8-.09,1.38.24,2.63,1.01,3.77.6.89.98,1.24,1.95,1.79,1.23.7,2.33,1.02,4,1.09v-1.69h-2.46c-.06,0-.12,0-.18-.02-.02,0-.04.02-.06.02-.31.08-.63-.14-.72-.49l-.46-1.82c-.62-.8-.87-1.79-.72-2.88l-.88-3.51Zm13.85,8.7s-.04,0-.06,0h-2.59v1.6c.12.01.23.02.36.04,2.11.32,3.3,1.37,3.2,2.84-.04.53-.5,1.34-.99,1.74-.62.5-1.54.66-2.49.43-.02,0-.04-.01-.06-.02v2.31c.52.09,1.04.13,1.56.09,1.65-.12,3.3-1.38,3.96-3.02.99-2.47-.13-4.85-2.6-6-.08.02-.17.02-.25,0,0,0-.01,0-.02,0Zm-10.55,3.25c-1.72.06-3.4.72-4.86,1.32,4.45-.09,5.59.14,7.06,1.14v-2.15c-.73-.25-1.46-.34-2.19-.32Z"/>
-  <path id="path646" d="m28.64,31.09c1.19-2.98-.68-5.83-4.29-6.55-1.27-.25-1.91-.27-4.39-.12-2.55.16-3.71.04-4.94-.49-.51-.22-.68-.32-1.01-.62-.52-.47-.89-1.03-1.08-1.65l-2.48-1.54c-.09,1.38.24,2.63,1.01,3.77.6.89.98,1.24,1.95,1.79,1.78,1.01,3.24,1.24,6.61,1.05,2.09-.12,2.65-.12,3.47,0,2.11.32,3.3,1.37,3.2,2.84l1.96,1.52Z"/>
-  <path id="path649" d="m29.86,21.44c.71-1.22.72-2.62.03-3.96-.44-.87-1.02-1.54-2.41-2.8-.98-.88-1.09-1.22-.66-1.96.2-.35.38-.55.97-1.06.92-.8,1.34-1.33,1.58-1.95.3-.76.37-1.57.22-2.29-.1-.45-.32-.71-.66-.78-.74-.15-2.02.26-2.75.9-.32.28-.44.44-.84,1.14-.45.79-.49.88-.94,2.44-.55,1.89-.61,2.39-.4,3.18.19.71.62,1.33,1.44,2.07,1.77,1.6,2.06,1.93,2.3,2.66.16.47.13.82-.09,1.22l2.22,1.2Z"/>
-</svg>
\ No newline at end of file
diff --git a/environment.yml b/environment.yml
index 12de273..63c375c 100644
--- a/environment.yml
+++ b/environment.yml
@@ -1,4 +1,4 @@
-name: twkit
+name: seqerakit
 channels:
   - conda-forge
   - bioconda
@@ -6,4 +6,4 @@ channels:
 dependencies:
   - conda-forge::python>=3.8
   - conda-forge::pyyaml=6.0
-  - bioconda::tower-cli=0.8.0
+  - bioconda::tower-cli=0.8.0 # TODO update
diff --git a/examples/python/launch_hello_world.py b/examples/python/launch_hello_world.py
index d508c50..879a703 100755
--- a/examples/python/launch_hello_world.py
+++ b/examples/python/launch_hello_world.py
@@ -1,19 +1,19 @@
 import logging
 
-# Import the twkit package
-from twkit import tower
+# Import the seqerakit package
+from seqerakit import seqeraplatform
 
 logging.basicConfig(level=logging.DEBUG)
 
-# Construct a new twkit Tower instance
-tw = tower.Tower()
+# Construct a new seqerakit SeqeraPlatform instance
+tw = seqeraplatform.SeqeraPlatform()
 
 # Customise the entries below as required
 workspace = "<YOUR_WORKSPACE>"  # Name of your Workspace
 compute_env = "<YOUR_COMPUTE_ENVIRONMENT>"  # Name of your Compute Environment
 
 # Specify a human-readable run name
-run_name = "hello-world-twkit"
+run_name = "hello-world-seqerakit"
 
 # Launch the 'hello-world' pipeline using the 'launch' method
 pipeline_run = tw.launch(
diff --git a/seqerakit/__init__.py b/seqerakit/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/twkit/cli.py b/seqerakit/cli.py
similarity index 78%
rename from twkit/cli.py
rename to seqerakit/cli.py
index 8a1daed..1c84543 100644
--- a/twkit/cli.py
+++ b/seqerakit/cli.py
@@ -1,14 +1,14 @@
 """
-This script is used to build a Tower instance from a YAML configuration file.
-Requires a YAML file that defines the resources to be created in Tower and
-the required options for each resource based on the Tower CLI.
+This script is used to build a Seqera Platform instance from a YAML configuration file.
+Requires a YAML file that defines the resources to be created in Seqera Platform and
+the required options for each resource based on the Seqera Platform CLI.
 """
 import argparse
 import logging
 
 from pathlib import Path
-from twkit import tower, helper, overwrite
-from twkit.tower import ResourceExistsError
+from seqerakit import seqeraplatform, helper, overwrite
+from seqerakit.seqeraplatform import ResourceExistsError
 
 
 logger = logging.getLogger(__name__)
@@ -33,7 +33,7 @@ def parse_args():
         "yaml",
         type=Path,
         nargs="+",  # allow multiple YAML paths
-        help="One or more YAML files with Tower resources to create",
+        help="One or more YAML files with Seqera Platform resources to create",
     )
     parser.add_argument(
         "--delete",
@@ -44,8 +44,8 @@ def parse_args():
         "--cli",
         dest="cli_args",
         type=str,
-        help="Additional arguments to pass to the Tower"
-        "CLI enclosed in double quotes (e.g. '--cli=\"--insecure\"')",
+        help="Additional arguments to pass to Seqera Platform"
+        " CLI enclosed in double quotes (e.g. '--cli=\"--insecure\"')",
     )
     return parser.parse_args()
 
@@ -56,19 +56,19 @@ class BlockParser:
     functions for each block for custom handling of command-line arguments to _tw_run().
     """
 
-    def __init__(self, tw, list_for_add_method):
+    def __init__(self, sp, list_for_add_method):
         """
         Initializes a BlockParser instance.
 
         Args:
-        tw: A Tower class instance.
+        sp: A Seqera Platform class instance.
         list_for_add_method: A list of blocks that need to be
         handled by the 'add' method.
         """
-        self.tw = tw
+        self.sp = sp
         self.list_for_add_method = list_for_add_method
         # Create an instance of Overwrite class
-        self.overwrite_method = overwrite.Overwrite(self.tw)
+        self.overwrite_method = overwrite.Overwrite(self.sp)
 
     def handle_block(self, block, args, destroy=False):
         # Check if delete is set to True, and call delete handler
@@ -85,8 +85,8 @@ def handle_block(self, block, args, destroy=False):
             "participants": (helper.handle_participants),
             "compute-envs": (helper.handle_compute_envs),
             "pipelines": (helper.handle_pipelines),
-            "launch": lambda tw, args: helper.handle_generic_block(
-                tw, "launch", args, method_name=None
+            "launch": lambda sp, args: helper.handle_generic_block(
+                sp, "launch", args, method_name=None
             ),
         }
 
@@ -101,9 +101,9 @@ def handle_block(self, block, args, destroy=False):
             self.overwrite_method.handle_overwrite(block, args["cmd_args"])
 
         if block in self.list_for_add_method:
-            helper.handle_generic_block(self.tw, block, args["cmd_args"])
+            helper.handle_generic_block(self.sp, block, args["cmd_args"])
         elif block in block_handler_map:
-            block_handler_map[block](self.tw, args["cmd_args"])
+            block_handler_map[block](self.sp, args["cmd_args"])
         else:
             logger.error(f"Unrecognized resource block in YAML: {block}")
 
@@ -115,10 +115,10 @@ def main():
     # Parse CLI arguments into a list
     cli_args_list = options.cli_args.split() if options.cli_args else []
 
-    tw = tower.Tower(cli_args=cli_args_list, dryrun=options.dryrun)
+    sp = seqeraplatform.SeqeraPlatform(cli_args=cli_args_list, dryrun=options.dryrun)
 
     block_manager = BlockParser(
-        tw,
+        sp,
         [
             "organizations",  # all use method.add
             "workspaces",
diff --git a/twkit/computeenvs.py b/seqerakit/computeenvs.py
similarity index 76%
rename from twkit/computeenvs.py
rename to seqerakit/computeenvs.py
index af29e59..3877ae6 100644
--- a/twkit/computeenvs.py
+++ b/seqerakit/computeenvs.py
@@ -1,11 +1,11 @@
 """
-Subclass of Tower class for overriding compute environments subcommand methods.
+Subclass of SeqeraPlatform class for overriding compute environments subcommand methods.
 """
 from pathlib import Path
-from twkit.tower import Tower
+from seqerakit.seqeraplatform import SeqeraPlatform
 
 
-class ComputeEnvs(Tower):
+class ComputeEnvs(SeqeraPlatform):
     """
     Python wrapper for tw compute-envs export command.
     """
@@ -34,5 +34,5 @@ def export_ce(self, name, *args, **kwargs):
             str(outfile),
         ]
 
-        # Pass the built command to the base class method in Tower
+        # Pass the built command to the base class method in SeqeraPlatform
         return self._tw_run(command, *args, **kwargs, to_json=True)
diff --git a/twkit/helper.py b/seqerakit/helper.py
similarity index 94%
rename from twkit/helper.py
rename to seqerakit/helper.py
index aaf76c1..249f162 100644
--- a/twkit/helper.py
+++ b/seqerakit/helper.py
@@ -4,7 +4,7 @@
 methods for each block in the YAML file.
 """
 import yaml
-from twkit import utils
+from seqerakit import utils
 
 
 def parse_yaml_block(yaml_data, block_name):
@@ -237,29 +237,29 @@ def parse_launch_block(item):
     return cmd_args
 
 
-# Handlers to call the actual tower method,based on the block name.
+# Handlers to call the actual sp method,based on the block name.
 # Certain blocks required special handling and combination of methods.
 
 
-def handle_generic_block(tw, block, args, method_name="add"):
+def handle_generic_block(sp, block, args, method_name="add"):
     # Generic handler for most blocks, with optional method name
-    method = getattr(tw, block)
+    method = getattr(sp, block)
     if method_name is None:
         method(*args)
     else:
         method(method_name, *args)
 
 
-def handle_teams(tw, args):
+def handle_teams(sp, args):
     cmd_args, members_cmd_args = args
-    tw.teams("add", *cmd_args)
+    sp.teams("add", *cmd_args)
     for sublist in members_cmd_args:
-        tw.teams("members", *sublist)
+        sp.teams("members", *sublist)
 
 
-def handle_participants(tw, args):
+def handle_participants(sp, args):
     # Generic handler for blocks with a key to skip
-    method = getattr(tw, "participants")
+    method = getattr(sp, "participants")
     skip_key = "--role"
     new_args = [
         arg
@@ -270,10 +270,10 @@ def handle_participants(tw, args):
     method("update", *args)
 
 
-def handle_compute_envs(tw, args):
+def handle_compute_envs(sp, args):
     json_file = any(".json" in arg for arg in args)
 
-    method = getattr(tw, "compute_envs")
+    method = getattr(sp, "compute_envs")
 
     if json_file:
         method("import", *args)
@@ -281,8 +281,8 @@ def handle_compute_envs(tw, args):
         method("add", *args)
 
 
-def handle_pipelines(tw, args):
-    method = getattr(tw, "pipelines")
+def handle_pipelines(sp, args):
+    method = getattr(sp, "pipelines")
     for arg in args:
         # Check if arg is a url or a json file.
         # If it is, use the appropriate method and break.
diff --git a/twkit/overwrite.py b/seqerakit/overwrite.py
similarity index 80%
rename from twkit/overwrite.py
rename to seqerakit/overwrite.py
index 34853c6..2562ccb 100644
--- a/twkit/overwrite.py
+++ b/seqerakit/overwrite.py
@@ -1,12 +1,12 @@
 import json
-from twkit import utils
-from twkit.tower import ResourceExistsError
+from seqerakit import utils
+from seqerakit.seqeraplatform import ResourceExistsError
 import logging
 
 
 class Overwrite:
     """
-    Manages overwrite functionality for Tower resources.
+    Manages overwrite functionality for Seqera Platform resources.
 
     # TODO: When overwrite functionality becomes native to CLI,
     we can remove this class.
@@ -22,20 +22,20 @@ class Overwrite:
         "pipelines",
     ]
 
-    def __init__(self, tw):
+    def __init__(self, sp):
         """
         Initializes an Overwrite instance.
 
         Args:
-        tw: A Tower class instance.
+        sp: A SeqeraPlatform class instance.
 
         Attributes:
-        tw: A Tower class instance used to execute Tower CLI commands.
+        sp: A SeqeraPlatform class instance used to execute CLI commands.
         cached_jsondata: A cached placeholder for JSON data. Default value is None.
         block_jsondata: A dictionary to store JSON data for each block.
         Key is the block name, and value is the corresponding JSON data.
         """
-        self.tw = tw
+        self.sp = sp
         self.cached_jsondata = None
         self.block_jsondata = {}  # New dict to hold JSON data per block
 
@@ -65,7 +65,7 @@ def __init__(self, tw):
 
     def handle_overwrite(self, block, args, overwrite=False, destroy=False):
         """
-        Handles overwrite functionality for Tower resources and
+        Handles overwrite functionality for Seqera Platform resources and
         calling the 'tw delete' method with the correct args.
         """
         if block in Overwrite.generic_deletion:
@@ -78,27 +78,27 @@ def handle_overwrite(self, block, args, overwrite=False, destroy=False):
         if block in self.block_operations:
             operation = self.block_operations[block]
             keys_to_get = operation["keys"]
-            self.cached_jsondata, tw_args = self._get_json_data(
+            self.cached_jsondata, sp_args = self._get_json_data(
                 block, args, keys_to_get
             )
 
             if block == "participants":
-                if tw_args.get("type") == "TEAM":
+                if sp_args.get("type") == "TEAM":
                     self.block_operations["participants"]["name_key"] = "teamName"
                 else:
                     self.block_operations["participants"]["name_key"] = "email"
 
-            if self.check_resource_exists(operation["name_key"], tw_args):
+            if self.check_resource_exists(operation["name_key"], sp_args):
                 # if resource exists and overwrite is true, delete
                 if overwrite:
                     logging.debug(
                         f" The attempted {block} resource already exists."
                         " Overwriting.\n"
                     )
-                    self.delete_resource(block, operation, tw_args)
+                    self.delete_resource(block, operation, sp_args)
                 elif destroy:
                     logging.debug(f" Deleting the {block} resource.")
-                    self.delete_resource(block, operation, tw_args)
+                    self.delete_resource(block, operation, sp_args)
                 else:  # return an error if resource exists, overwrite=False
                     raise ResourceExistsError(
                         f" The {block} resource already exists and"
@@ -120,7 +120,7 @@ def _get_team_args(self, args):
         jsondata = self.block_jsondata.get("teams", None)
 
         if not jsondata:
-            json_method = getattr(self.tw, "-o json")
+            json_method = getattr(self.sp, "-o json")
             json_out = json_method("teams", "list", "-o", args["organization"])
             self.block_jsondata["teams"] = json_out
         else:
@@ -156,7 +156,7 @@ def _get_workspace_args(self, args):
         method.
         """
         workspace_id = self._find_workspace_id(
-            json.loads(self.tw.workspaces.list("-o", "json")),
+            json.loads(self.sp.workspaces.list("-o", "json")),
             args["organization"],
             args["name"],
         )
@@ -180,53 +180,54 @@ def _get_json_data(self, block, args, keys_to_get):
         For the specified keys in the operations dictionary, get the values from
         the command line arguments and return a dictionary of values.
 
-        Also, gets json data from Tower by calling the list() method once and caches
-        the json data for that block in self.block_jsondata. If the block data already
-        exists, it will be retrieved from the dictionary instead of calling the list().
+        Also, gets json data from Seqera Platform by calling the list() method
+        once and caches the json data for that block in self.block_jsondata.
+        If the block data already exists, it will be retrieved from the dictionary
+        instead of calling the list().
 
         Returns a tuple of json data and a dictionary of values to run delete() on.
         """
-        json_method = getattr(self.tw, "-o json")
-        tw_args = []  # Default value for tw_args
+        json_method = getattr(self.sp, "-o json")
+        sp_args = []  # Default value for sp_args
 
         # Check if block data already exists
         if block in self.block_jsondata:
             self.cached_jsondata = self.block_jsondata[block]
-            tw_args = self._get_values_from_cmd_args(args, keys_to_get)
+            sp_args = self._get_values_from_cmd_args(args, keys_to_get)
         else:
             # Fetch the data if it does not exist
             if block == "teams":
-                tw_args = self._get_values_from_cmd_args(args[0], keys_to_get)
+                sp_args = self._get_values_from_cmd_args(args[0], keys_to_get)
                 self.cached_jsondata = json_method(
-                    block, "list", "-o", tw_args["organization"]
+                    block, "list", "-o", sp_args["organization"]
                 )
             elif block in Overwrite.generic_deletion or block == "participants":
-                tw_args = self._get_values_from_cmd_args(args, keys_to_get)
+                sp_args = self._get_values_from_cmd_args(args, keys_to_get)
                 self.cached_jsondata = json_method(
-                    block, "list", "-w", tw_args["workspace"]
+                    block, "list", "-w", sp_args["workspace"]
                 )
             else:
-                tw_args = self._get_values_from_cmd_args(args, keys_to_get)
+                sp_args = self._get_values_from_cmd_args(args, keys_to_get)
                 self.cached_jsondata = json_method(block, "list")
 
         # Store this data in the block_jsondata dict for later use
         self.block_jsondata[block] = self.cached_jsondata
-        return self.cached_jsondata, tw_args
+        return self.cached_jsondata, sp_args
 
-    def check_resource_exists(self, name_key, tw_args):
+    def check_resource_exists(self, name_key, sp_args):
         """
-        Check if a resource exists in Tower by looking for the name and value
+        Check if a resource exists in Seqera Platform by looking for the name and value
         in the json data generated from the list() method.
         """
-        return utils.check_if_exists(self.cached_jsondata, name_key, tw_args["name"])
+        return utils.check_if_exists(self.cached_jsondata, name_key, sp_args["name"])
 
-    def delete_resource(self, block, operation, tw_args):
+    def delete_resource(self, block, operation, sp_args):
         """
-        Delete a resource in Tower by calling the delete() method and
+        Delete a resource in Seqera Platform by calling the delete() method and
         arguments defined in the operation dictionary.
         """
-        method_args = operation["method_args"](tw_args)
-        method = getattr(self.tw, block)
+        method_args = operation["method_args"](sp_args)
+        method = getattr(self.sp, block)
         method(*method_args)
 
     def _get_values_from_cmd_args(self, cmd_args, keys):
diff --git a/twkit/pipelines.py b/seqerakit/pipelines.py
similarity index 70%
rename from twkit/pipelines.py
rename to seqerakit/pipelines.py
index 26b8400..64cbbd5 100644
--- a/twkit/pipelines.py
+++ b/seqerakit/pipelines.py
@@ -1,13 +1,13 @@
 """
-Subclass of Tower class for overriding pipelines subcommand methods.
+Subclass of SeqeraPlatform class for overriding pipelines subcommand methods.
 """
 from pathlib import Path
-from twkit.tower import Tower
+from seqerakit.seqeraplatform import SeqeraPlatform
 
 
-class Pipelines(Tower):
+class Pipelines(SeqeraPlatform):
     """
-    Python wrapper for tw pipelines export command.
+    Python wrapper for 'tw pipelines export' command. # TODO update
     """
 
     def export_pipeline(self, name, *args, **kwargs):
@@ -34,5 +34,5 @@ def export_pipeline(self, name, *args, **kwargs):
             outfile,
         ]
 
-        # Pass the built command to the base class method in Tower
+        # Pass the built command to the base class method in SeqeraPlatform
         return self._tw_run(command, *args, **kwargs)
diff --git a/twkit/tower.py b/seqerakit/seqeraplatform.py
similarity index 94%
rename from twkit/tower.py
rename to seqerakit/seqeraplatform.py
index 8768aff..2372fd8 100644
--- a/twkit/tower.py
+++ b/seqerakit/seqeraplatform.py
@@ -7,9 +7,9 @@
 logging.basicConfig(level=logging.DEBUG)
 
 
-class Tower:
+class SeqeraPlatform:
     """
-    A Python class that serves as a wrapper for 'tw' CLI commands.
+    A Python class that serves as a wrapper for 'tw' CLI commands. # TODO update
 
     The class enables the execution of 'tw' commands in an object-oriented manner.
     You can call any subcommand of 'tw' as a method on instances of this class.
@@ -31,10 +31,12 @@ def __call__(self, *args, **kwargs):
             command.extend(args)
             return self.tw_instance._tw_run(command, **kwargs)
 
-    # Constructs a new Tower instance
+    # Constructs a new SeqeraPlatform instance
     def __init__(self, cli_args=None, dryrun=False):
         if cli_args and "--verbose" in cli_args:  # TODO: remove this
-            raise ValueError("--verbose is not supported as a CLI argument to twkit.")
+            raise ValueError(
+                "--verbose is not supported as a CLI argument to seqerakit."
+            )
         self.cli_args = cli_args if cli_args else []
         self.dryrun = dryrun
 
diff --git a/twkit/utils.py b/seqerakit/utils.py
similarity index 97%
rename from twkit/utils.py
rename to seqerakit/utils.py
index 3c7cf97..7fa589a 100644
--- a/twkit/utils.py
+++ b/seqerakit/utils.py
@@ -46,7 +46,7 @@ def find_key_value_in_dict(data, target_key, target_value, return_key):
 def check_if_exists(json_data, namekey, namevalue):
     """
     Wrapper around find_key_value_in_dict() to validate that a resource was
-    created successfully in Tower by looking for the name and value.
+    created successfully in Seqera Platform by looking for the name and value.
     """
     if not json_data:
         return False
diff --git a/setup.py b/setup.py
index 9179232..41ce655 100644
--- a/setup.py
+++ b/setup.py
@@ -2,23 +2,33 @@
 
 from setuptools import find_packages, setup
 
-VERSION = "0.3.1"
+VERSION = "0.4.0"
 
 with open("README.md") as f:
     readme = f.read()
 
 setup(
-    name="twkit",
+    name="seqerakit",
     version=VERSION,
-    description="twkit is now seqerakit",
+    description="Automate creation of Seqera Platform resources",
     long_description=readme,
     long_description_content_type="text/markdown",
-    keywords=["nextflow", "bioinformatics", "workflow", "pipeline", "nextflow-tower"],
+    keywords=[
+        "nextflow",
+        "bioinformatics",
+        "workflow",
+        "pipeline",
+        "seqera-platform",
+        "seqera",
+    ],
     author="Esha Joshi, Adam Talbot, Harshil Patel",
     author_email="esha.joshi@seqera.io, adam.talbot@seqera.io, harshil.patel@seqera.io",
     url="https://github.com/seqeralabs/seqera-kit",
     license="MIT",
-    install_requires=["seqerakit"],
+    entry_points={"console_scripts": ["seqerakit=seqerakit.cli:main"]},
+    python_requires=">=3.8, <4",  # untested
+    install_requires=["pyyaml>=6.0.0"],
     packages=find_packages(exclude=("docs")),
-    classifiers=["Development Status :: 7 - Inactive"],
+    include_package_data=True,
+    zip_safe=False,
 )
diff --git a/templates/actions.yml b/templates/actions.yml
index 87d9d9c..9d0bf16 100644
--- a/templates/actions.yml
+++ b/templates/actions.yml
@@ -1,25 +1,24 @@
 ## To see the full list of options available run: "tw actions add"
 actions:
-  - type: 'github'                                      # required               
-    name: 'my_github_action'                            # required
-    pipeline: 'https://github.com/my_username/my_repo'  # required
-    workspace: 'my_organization/my_workspace'           # required
-    compute-env: 'my_aws_compute_environment'           # required
-    work-dir: 's3://my_bucket'                          # required
-    revision: 'main'                                    # required
-    profile: 'test'                                     # optional
-    params:                                             # optional
+  - type: 'github' # required
+    name: 'my_github_action' # required
+    pipeline: 'https://github.com/my_username/my_repo' # required
+    workspace: 'my_organization/my_workspace' # required
+    compute-env: 'my_aws_compute_environment' # required
+    work-dir: 's3://my_bucket' # required
+    revision: 'main' # required
+    profile: 'test' # optional
+    params: # optional
       outdir: 's3://my_bucket/my_results'
-    overwrite: True                                     # optional
-  - type: 'tower'                                       # required
-    name: 'my_tower_action'                             # required
-    pipeline: 'https://github.com/my_username/my_repo'  # required
-    workspace: 'my_organization/my_workspace'           # required
-    compute-env: 'my_aws_compute_environment'           # required
-    work-dir: 's3://my_bucket'                          # required
-    revision: 'main'                                    # required
-    profile: 'test'                                     # optional
-    params:                                             # optional
+    overwrite: True # optional
+  - type: 'tower' # required # TODO
+    name: 'my_tower_action' # required
+    pipeline: 'https://github.com/my_username/my_repo' # required
+    workspace: 'my_organization/my_workspace' # required
+    compute-env: 'my_aws_compute_environment' # required
+    work-dir: 's3://my_bucket' # required
+    revision: 'main' # required
+    profile: 'test' # optional
+    params: # optional
       outdir: 's3://my_bucket/my_results'
-    overwrite: True                                     # optional
-    
\ No newline at end of file
+    overwrite: True # optional
diff --git a/templates/compute-envs.yml b/templates/compute-envs.yml
index a516f45..e8f3c33 100644
--- a/templates/compute-envs.yml
+++ b/templates/compute-envs.yml
@@ -1,23 +1,23 @@
 ## To see the full list of options available run: "tw compute-envs add"
 ## The options required to create compute environments can be specified:
 ##   1. Explicitly in this file
-##   2. Via a JSON file exported from Tower with the "tw compute-envs export" command
+##   2. Via a JSON file exported from Seqera Platform with the "tw compute-envs export" command
 compute-envs:
-  - name: 'my_aws_compute_environment'                              # required
-    workspace: 'my_organization/my_workspace'                       # required
-    credentials: 'my_aws_credentials'                               # required
-    wait: 'AVAILABLE'                                               # optional
-    file-path: './compute-envs/my_aws_compute_environment.json'     # required
-    overwrite: True                                                 # optional  
-  - name: 'my_azure_compute_environment'                            # required
-    workspace: 'my_organization/my_workspace'                       # required
-    credentials: 'my_azure_credentials'                             # required
-    wait: 'AVAILABLE'                                               # optional
-    file-path: './compute-envs/my_azure_compute_environment.json'   # required
-    overwrite: True                                                 # optional
-  - name: 'my_google_compute_environment'                           # required
-    workspace: 'my_organization/my_workspace'                       # required
-    credentials: 'my_google_credentials'                            # required
-    wait: 'AVAILABLE'                                               # optional
-    file-path: './compute-envs/my_google_compute_environment.json'  # required
-    overwrite: True                                                 # optional
\ No newline at end of file
+  - name: 'my_aws_compute_environment' # required
+    workspace: 'my_organization/my_workspace' # required
+    credentials: 'my_aws_credentials' # required
+    wait: 'AVAILABLE' # optional
+    file-path: './compute-envs/my_aws_compute_environment.json' # required
+    overwrite: True # optional
+  - name: 'my_azure_compute_environment' # required
+    workspace: 'my_organization/my_workspace' # required
+    credentials: 'my_azure_credentials' # required
+    wait: 'AVAILABLE' # optional
+    file-path: './compute-envs/my_azure_compute_environment.json' # required
+    overwrite: True # optional
+  - name: 'my_google_compute_environment' # required
+    workspace: 'my_organization/my_workspace' # required
+    credentials: 'my_google_credentials' # required
+    wait: 'AVAILABLE' # optional
+    file-path: './compute-envs/my_google_compute_environment.json' # required
+    overwrite: True # optional
diff --git a/templates/credentials.yml b/templates/credentials.yml
index 5c7f60f..490d5d5 100644
--- a/templates/credentials.yml
+++ b/templates/credentials.yml
@@ -1,38 +1,37 @@
 ## To see the full list of options available run: "tw credentials add"
-## To avoid exposing sensitive information about your credentials, 
+## To avoid exposing sensitive information about your credentials,
 ## use environment variables to supply passwords and secret keys
 credentials:
-  - type: 'github'                              # required
-    name: 'my_github_credentials'               # required
-    workspace: 'my_organization/my_workspace'   # required
-    username: 'my_username'                     # required
-    password: '$TOWER_GITHUB_PASSWORD'          # required
-    overwrite: True                             # optional
-  - type: 'container-reg'                       # required
-    name: 'my_dockerhub_credentials'            # required
-    workspace: 'my_organization/my_workspace'   # required
-    username: 'my_username'                     # required
-    password: '$DOCKERHUB_PASSWORD'             # required
-    registry: 'docker.io'                       # required
-    overwrite: True                             # optional
-  - type: 'google'                              # required
-    name: 'my_google_credentials'               # required
-    workspace: 'my_organization/my_workspace'   # required
-    key: '$GOOGLE_KEY'                          # required
-    overwrite: True                             # optional
-  - type: 'aws'                                 # required
-    name: 'my_aws_credentials'                  # required
-    workspace: 'my_organization/my_workspace'   # required
-    access-key: '$AWS_ACCESS_KEY_ID'            # required
-    secret-key: '$AWS_SECRET_ACCESS_KEY'        # required
-    assume-role-arn: '$AWS_ASSUME_ROLE_ARN'     # required
-    overwrite: True                             # optional
-  - type: 'azure'                               # required
-    name: 'my_azure_credentials'                # required
-    workspace: 'my_organization/my_workspace'   # required
-    batch-key: '$AZURE_BATCH_KEY'               # required
-    batch-name: 'my_storage_name'               # required
-    storage-key: '$AZURE_STORAGE_KEY'           # required
-    storage-name: 'my_storage_name'             # required
-    overwrite: True                             # optional
-  
+  - type: 'github' # required
+    name: 'my_github_credentials' # required
+    workspace: 'my_organization/my_workspace' # required
+    username: 'my_username' # required
+    password: '$SEQPLATFORM_GITHUB_PASSWORD' # required
+    overwrite: True # optional
+  - type: 'container-reg' # required
+    name: 'my_dockerhub_credentials' # required
+    workspace: 'my_organization/my_workspace' # required
+    username: 'my_username' # required
+    password: '$DOCKERHUB_PASSWORD' # required
+    registry: 'docker.io' # required
+    overwrite: True # optional
+  - type: 'google' # required
+    name: 'my_google_credentials' # required
+    workspace: 'my_organization/my_workspace' # required
+    key: '$GOOGLE_KEY' # required
+    overwrite: True # optional
+  - type: 'aws' # required
+    name: 'my_aws_credentials' # required
+    workspace: 'my_organization/my_workspace' # required
+    access-key: '$AWS_ACCESS_KEY_ID' # required
+    secret-key: '$AWS_SECRET_ACCESS_KEY' # required
+    assume-role-arn: '$AWS_ASSUME_ROLE_ARN' # required
+    overwrite: True # optional
+  - type: 'azure' # required
+    name: 'my_azure_credentials' # required
+    workspace: 'my_organization/my_workspace' # required
+    batch-key: '$AZURE_BATCH_KEY' # required
+    batch-name: 'my_storage_name' # required
+    storage-key: '$AZURE_STORAGE_KEY' # required
+    storage-name: 'my_storage_name' # required
+    overwrite: True # optional
diff --git a/templates/launch.yml b/templates/launch.yml
index 580b9e4..d9d449b 100644
--- a/templates/launch.yml
+++ b/templates/launch.yml
@@ -1,22 +1,22 @@
 ## To see the full list of options available run: "tw launch"
 ## The options will vary if you are launching a pipeline:
-##   1. Pre-configured in the Tower Launchpad where most options have already been specified
+##   1. Pre-configured in the Seqera Platform Launchpad where most options have already been specified
 ##   2. From source via a remote Git URL where you will need to explicitly specify all launch options
 ## Note: overwrite is not supported for "tw launch"
 
 launch:
-  - name: 'my_launchpad_launch'                         # required
-    workspace: 'my_organization/my_workspace'           # required
-    pipeline: 'my_launchpad_pipeline'                   # required
-    params:                                             # optional
+  - name: 'my_launchpad_launch' # required
+    workspace: 'my_organization/my_workspace' # required
+    pipeline: 'my_launchpad_pipeline' # required
+    params: # optional
       outdir: 's3://my_bucket/my_results'
-  - name: 'my_remote_launch'                            # required
-    workspace: 'my_organization/my_workspace'           # required
-    compute-env: 'my_aws_compute_environment'           # required
-    pipeline: 'https://github.com/my_username/my_repo'  # required
-    work-dir: 's3://my_bucket'                          # optional
-    profile: 'test'                                     # optional
-    revision: 'main'                                    # optional
-    params-file: './pipelines/my_params.yml'            # optional
-    config: './pipelines/my_nextflow.config'            # optional
-    pre-run: './pipelines/my_pre_run.txt'               # optional
\ No newline at end of file
+  - name: 'my_remote_launch' # required
+    workspace: 'my_organization/my_workspace' # required
+    compute-env: 'my_aws_compute_environment' # required
+    pipeline: 'https://github.com/my_username/my_repo' # required
+    work-dir: 's3://my_bucket' # optional
+    profile: 'test' # optional
+    revision: 'main' # optional
+    params-file: './pipelines/my_params.yml' # optional
+    config: './pipelines/my_nextflow.config' # optional
+    pre-run: './pipelines/my_pre_run.txt' # optional
diff --git a/templates/pipelines.yml b/templates/pipelines.yml
index 8f251ff..1f08dd9 100644
--- a/templates/pipelines.yml
+++ b/templates/pipelines.yml
@@ -1,24 +1,24 @@
 ## To see the full list of options available run: "tw pipelines add"
 ## The options required to create pipelines can be specified:
 ##   1. Explicitly in this file
-##   2. Via a JSON file exported from Tower with the "tw pipelines export" command
+##   2. Via a JSON file exported from SeqeraPlatform with the "tw pipelines export" command
 pipelines:
-  - name: 'my_first_pipeline'                     # required
-    workspace: 'my_organization/my_workspace'     # required
-    description: 'My test pipeline'               # optional
-    compute-env: 'my_aws_compute_environment'     # required
-    work-dir: 's3://my_bucket'                    # optional
-    profile: 'test'                               # optional
-    revision: 'main'                              # required
-    params:                                       # optional
+  - name: 'my_first_pipeline' # required
+    workspace: 'my_organization/my_workspace' # required
+    description: 'My test pipeline' # optional
+    compute-env: 'my_aws_compute_environment' # required
+    work-dir: 's3://my_bucket' # optional
+    profile: 'test' # optional
+    revision: 'main' # required
+    params: # optional
       outdir: 's3://my-bucket/my_results'
-    config: './pipelines/my_nextflow.config'      # optional
-    pre-run: './pipelines/my_pre_run.txt'         # optional
+    config: './pipelines/my_nextflow.config' # optional
+    pre-run: './pipelines/my_pre_run.txt' # optional
     url: 'https://github.com/my_username/my_repo' # required
-    overwrite: True                               # optional
-  - name: 'my_second_pipeline'                    # required
-    workspace: 'my_organization/my_workspace'     # required
-    description: 'My test pipeline'               # optional
-    compute-env: 'my_aws_compute_environment'     # required
-    file-path: './pipelines/my_pipeline.json'     # required
-    overwrite: True                               # optional
\ No newline at end of file
+    overwrite: True # optional
+  - name: 'my_second_pipeline' # required
+    workspace: 'my_organization/my_workspace' # required
+    description: 'My test pipeline' # optional
+    compute-env: 'my_aws_compute_environment' # required
+    file-path: './pipelines/my_pipeline.json' # required
+    overwrite: True # optional
diff --git a/twkit/__init__.py b/twkit/__init__.py
deleted file mode 100644
index 639c8e8..0000000
--- a/twkit/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from warnings import warn
-
-warn(
-    "This package has been renamed to seqerakit."
-    " Please install seqerakit for future updates.",
-    DeprecationWarning,
-)


Test patch:
diff --git a/.github/workflows/e2e-testing.yml b/.github/workflows/e2e-testing.yml
index 6b9ea33..ef65d62 100644
--- a/.github/workflows/e2e-testing.yml
+++ b/.github/workflows/e2e-testing.yml
@@ -1,7 +1,7 @@
 name: e2e-testing
-run-name: Create all entities in Tower from end-to-end with twkit
+run-name: Create all entities in Seqera Platform from end-to-end with seqerakit
 # This workflow can be triggered manually with GitHub actions workflow dispatch button.
-# It will automate the end-to-end creation all of the following entities in Nextflow Tower.
+# It will automate the end-to-end creation all of the following entities in Seqera Platform.
 
 on:
   workflow_dispatch:
@@ -9,7 +9,7 @@ on:
 jobs:
   e2e-testing:
     name:
-    if: github.repository == 'seqeralabs/twkit'
+    if: github.repository == 'seqeralabs/seqera-kit'
     runs-on: ubuntu-latest
     defaults:
       run:
@@ -37,19 +37,19 @@ jobs:
           miniforge-variant: Mambaforge
           miniforge-version: latest
           python-version: '3.10'
-          activate-environment: twkit
+          activate-environment: seqerakit
           use-mamba: true
 
-      - name: Install pip & twkit
+      - name: Install pip & seqerakit
         run: |
           mamba install -y -c conda-forge pip
           pip install -e .
 
-      - name: Create all entities on Tower from end-to-end
+      - name: Create all entities on Seqera Platform from end-to-end
         run: |
           mamba init
           temp_file=$(mktemp -q)
           echo $GOOGLE_KEY | base64 -d > $temp_file
           export GOOGLE_KEY=$temp_file
 
-          twkit examples/yaml/twkit-e2e.yml
+          seqerakit examples/yaml/seqerakit-e2e.yml
diff --git a/examples/yaml/twkit-e2e.yml b/examples/yaml/seqerakit-e2e.yml
similarity index 81%
rename from examples/yaml/twkit-e2e.yml
rename to examples/yaml/seqerakit-e2e.yml
index d885b8b..ef73b1b 100644
--- a/examples/yaml/twkit-e2e.yml
+++ b/examples/yaml/seqerakit-e2e.yml
@@ -1,13 +1,13 @@
 organizations:
-  - name: 'twkit-e2e'
-    full-name: 'twkit-e2e'
-    description: 'Organization created E2E with tw CLI scripting'
+  - name: 'seqerakit-e2e'
+    full-name: 'seqerakit-e2e'
+    description: 'Organization created E2E with seqerakit CLI scripting'
     location: 'Global'
     website: 'https://seqera.io/'
     overwrite: True
 teams:
   - name: 'scidev_team'
-    organization: 'twkit-e2e'
+    organization: 'seqerakit-e2e'
     description: 'Scientific Development team @ Seqera Labs'
     members:
       - 'esha.joshi@seqera.io'
@@ -17,45 +17,45 @@ teams:
 workspaces:
   - name: 'showcase'
     full-name: 'showcase'
-    organization: 'twkit-e2e'
-    description: 'Workspace created E2E with tw CLI scripting'
+    organization: 'seqerakit-e2e'
+    description: 'Workspace created E2E with seqerakit CLI scripting'
     visibility: 'PRIVATE'
     overwrite: True
 participants:
   - name: 'scidev_team'
     type: 'TEAM'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     role: 'ADMIN'
     overwrite: True
   - name: 'adam.talbot@seqera.io'
     type: 'MEMBER'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     role: 'LAUNCH'
     overwrite: True
 credentials:
   - type: 'github'
     name: 'github_credentials'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     username: 'ejseqera'
     password: '$TOWER_GITHUB_PASSWORD'
     overwrite: True
   - type: 'container-reg'
     name: 'dockerhub_credentials'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     username: 'eshajoshi'
     password: '$DOCKERHUB_PASSWORD'
     registry: 'docker.io'
     overwrite: True
   - type: 'aws'
     name: 'aws_credentials'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     access-key: '$AWS_ACCESS_KEY_ID'
     secret-key: '$AWS_SECRET_ACCESS_KEY'
     assume-role-arn: '$AWS_ASSUME_ROLE_ARN'
     overwrite: True
   - type: 'azure'
     name: 'azure_credentials'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     batch-key: '$AZURE_BATCH_KEY'
     batch-name: 'seqeralabs'
     storage-key: '$AZURE_STORAGE_KEY'
@@ -63,29 +63,29 @@ credentials:
     overwrite: True
   - type: 'google'
     name: 'google_credentials'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     key: '$GOOGLE_KEY'
     overwrite: True
 secrets:
   - name: 'SENTIEON_LICENSE_BASE64'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     value: '$SENTIEON_LICENSE_BASE64'
     overwrite: True
 compute-envs:
   - name: 'seqera_aws_virginia_fusionv2_nvme'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     credentials: 'aws_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_aws_virginia_fusionv2_nvme.json'
     overwrite: True
   - name: 'seqera_azure_virginia'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     credentials: 'azure_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_azure_virginia.json'
     overwrite: True
   - name: 'seqera_gcp_finland'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     credentials: 'google_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_gcp_finland.json'
@@ -94,37 +94,37 @@ datasets:
   - name: 'rnaseq_samples'
     description: 'Samplesheet to run the nf-core/rnaseq pipeline from end-to-end'
     header: true
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     file-path: './examples/yaml/datasets/rnaseq_samples.csv'
     overwrite: True
   - name: 'sarek_samples'
     description: 'Samplesheet to run the nf-core/sarek pipeline from end-to-end'
     header: true
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     file-path: './examples/yaml/datasets/sarek_samples.csv'
     overwrite: True
   - name: 'viralrecon_illumina_samples'
     description: 'Samplesheet to run the nf-core/viralrecon pipeline from end-to-end with Illumina data'
     header: true
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     file-path: './examples/yaml/datasets/viralrecon_illumina_samples.csv'
     overwrite: True
   - name: 'viralrecon_nanopore_samples'
     description: 'Samplesheet to run the nf-core/viralrecon pipeline from end-to-end with Nanopore data'
     header: true
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     file-path: './examples/yaml/datasets/viralrecon_nanopore_samples.csv'
     overwrite: True
   - name: 'sentieon_samples'
     description: 'Samplesheet to run the seqeralabs/nf-sentieon pipeline from end-to-end'
     header: true
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     file-path: './examples/yaml/datasets/sentieon_samples.csv'
     overwrite: True
 pipelines:
   - name: 'nf-core-rnaseq'
     url: 'https://github.com/nf-core/rnaseq'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     description: 'RNA sequencing analysis pipeline using STAR, RSEM, HISAT2 or Salmon with gene/isoform counts and extensive quality control.'
     compute-env: 'seqera_aws_virginia_fusionv2_nvme'
     work-dir: 's3://seqeralabs-showcase'
@@ -136,13 +136,13 @@ pipelines:
     pre-run: './examples/yaml/pipelines/pre_run.txt'
     overwrite: True
   - name: 'nf-core-sarek'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     compute-env: 'seqera_azure_virginia'
     file-path: './examples/yaml/pipelines/nf-core-sarek_pipeline.json'
     overwrite: True
   - name: 'nf-core-viralrecon-illumina'
     url: 'https://github.com/nf-core/viralrecon'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     description: 'Pipeline for assembly and intrahost/low-frequency variant calling for viral samples.'
     compute-env: 'seqera_gcp_finland'
     work-dir: 'gs://seqeralabs-showcase-eu-north-1'
@@ -153,16 +153,16 @@ pipelines:
     pre-run: './examples/yaml/pipelines/pre_run.txt'
     overwrite: True
   - name: 'nf-sentieon'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     compute-env: 'seqera_aws_virginia_fusionv2_nvme'
     file-path: './examples/yaml/pipelines/nf_sentieon_pipeline.json'
     overwrite: True
 launch:
   - name: 'nf-core-rnaseq-launchpad'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     pipeline: 'nf-core-rnaseq'
   - name: 'nf-core-rnaseq-remote'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     pipeline: 'https://github.com/nf-core/rnaseq'
     compute-env: 'seqera_azure_virginia'
     work-dir: 'az://seqeralabs-showcase'
@@ -172,13 +172,13 @@ launch:
     config: './examples/yaml/pipelines/nextflow.config'
     pre-run: './examples/yaml/pipelines/pre_run.txt'
   - name: 'nf-core-sarek'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     pipeline: 'nf-core-sarek'
     config: './examples/yaml/pipelines/nextflow.config'
     pre-run: './examples/yaml/pipelines/pre_run.txt'
   - name: 'nf-core-viralrecon-illumina'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     pipeline: 'nf-core-viralrecon-illumina'
   - name: 'nf-sentieon'
-    workspace: 'twkit-e2e/showcase'
+    workspace: 'seqerakit-e2e/showcase'
     pipeline: 'nf-sentieon'
diff --git a/tests/unit/test_helper.py b/tests/unit/test_helper.py
index fd6bb13..ac9f459 100644
--- a/tests/unit/test_helper.py
+++ b/tests/unit/test_helper.py
@@ -1,6 +1,6 @@
 import unittest
 from unittest.mock import mock_open, patch
-from twkit import helper
+from seqerakit import helper
 
 mocked_yaml = """
 datasets:
diff --git a/tests/unit/test_tower.py b/tests/unit/test_seqeraplatform.py
similarity index 80%
rename from tests/unit/test_tower.py
rename to tests/unit/test_seqeraplatform.py
index 5c7554f..65a95d4 100644
--- a/tests/unit/test_tower.py
+++ b/tests/unit/test_seqeraplatform.py
@@ -1,13 +1,13 @@
 import unittest
 from unittest.mock import patch
-from twkit import tower
+from seqerakit import seqeraplatform
 import json
 import subprocess
 
 
-class TestTower(unittest.TestCase):
+class TestSeqeraPlatform(unittest.TestCase):
     def setUp(self):
-        self.tw = tower.Tower()
+        self.sp = seqeraplatform.SeqeraPlatform()
 
     @patch("subprocess.Popen")
     def test_run_with_jsonout_command(self, mock_subprocess):
@@ -31,7 +31,7 @@ def test_run_with_jsonout_command(self, mock_subprocess):
         )
 
         # Dynamically get the pipelines command
-        command = getattr(self.tw, "pipelines")
+        command = getattr(self.sp, "pipelines")
 
         # Run the command with arguments
         result = command("view", "--name", "pipeline_name", to_json=True)
@@ -55,10 +55,10 @@ def test_resource_exists_error(self):
                 b"",
             )
 
-            command = getattr(self.tw, "pipelines")
+            command = getattr(self.sp, "pipelines")
 
             # Check that the error is raised
-            with self.assertRaises(tower.ResourceExistsError):
+            with self.assertRaises(seqeraplatform.ResourceExistsError):
                 command("arg1", "arg2")
 
     def test_resource_exists_error_alt_error(self):
@@ -69,10 +69,10 @@ def test_resource_exists_error_alt_error(self):
                 b"",
             )
 
-            command = getattr(self.tw, "pipelines")
+            command = getattr(self.sp, "pipelines")
 
             # Check that the error is raised
-            with self.assertRaises(tower.ResourceExistsError):
+            with self.assertRaises(seqeraplatform.ResourceExistsError):
                 command("arg1", "arg2")
 
     def test_resource_creation_error(self):
@@ -83,10 +83,10 @@ def test_resource_creation_error(self):
                 b"",
             )
 
-            command = getattr(self.tw, "pipelines")
+            command = getattr(self.sp, "pipelines")
 
             # Check that the error is raised
-            with self.assertRaises(tower.ResourceCreationError):
+            with self.assertRaises(seqeraplatform.ResourceCreationError):
                 command("import", "my_pipeline.json", "--name", "pipeline_name")
 
     def test_json_parsing(self):
@@ -97,16 +97,16 @@ def test_json_parsing(self):
                 b"",
             )
 
-            command = getattr(self.tw, "pipelines")
+            command = getattr(self.sp, "pipelines")
 
             # Check that the JSON is parsed correctly
             self.assertEqual(command("arg1", "arg2", to_json=True), {"key": "value"})
 
 
-class TestTowerCLIArgs(unittest.TestCase):
+class TestSeqeraPlatformCLIArgs(unittest.TestCase):
     def setUp(self):
         self.cli_args = ["--url", "http://tower-api.com", "--insecure"]
-        self.tw = tower.Tower(cli_args=self.cli_args)
+        self.sp = seqeraplatform.SeqeraPlatform(cli_args=self.cli_args)
 
     @patch("subprocess.Popen")
     def test_cli_args_inclusion(self, mock_subprocess):
@@ -117,7 +117,7 @@ def test_cli_args_inclusion(self, mock_subprocess):
         )
 
         # Call a method
-        self.tw.pipelines("view", "--name", "pipeline_name", to_json=True)
+        self.sp.pipelines("view", "--name", "pipeline_name", to_json=True)
 
         # Extract the command used to call Popen
         called_command = mock_subprocess.call_args[0][0]
@@ -131,8 +131,8 @@ def test_cli_args_inclusion_ssl_certs(self, mock_subprocess):
         # Add path to custom certs store to cli_args
         self.cli_args.append("-Djavax.net.ssl.trustStore=/absolute/path/to/cacerts")
 
-        # Initialize Tower with cli_args
-        tower.Tower(cli_args=self.cli_args)
+        # Initialize SeqeraPlatform with cli_args
+        seqeraplatform.SeqeraPlatform(cli_args=self.cli_args)
 
         # Mock the stdout of the Popen process
         mock_subprocess.return_value.communicate.return_value = (
@@ -141,7 +141,7 @@ def test_cli_args_inclusion_ssl_certs(self, mock_subprocess):
         )
 
         # Call a method
-        self.tw.pipelines("view", "--name", "pipeline_name", to_json=True)
+        self.sp.pipelines("view", "--name", "pipeline_name", to_json=True)
 
         # Extract the command used to call Popen
         called_command = mock_subprocess.call_args[0][0]
@@ -155,20 +155,20 @@ def test_cli_args_exclusion_of_verbose(self):  # TODO: remove this test once fix
         # Add --verbose to cli_args
         verbose_args = ["--verbose"]
 
-        # Check if ValueError is raised when initializing Tower with --verbose
+        # Check if ValueError is raised when initializing SeqeraPlatform with --verbose
         with self.assertRaises(ValueError) as context:
-            tower.Tower(cli_args=verbose_args)
+            seqeraplatform.SeqeraPlatform(cli_args=verbose_args)
 
         # Check the error message
         self.assertEqual(
             str(context.exception),
-            "--verbose is not supported as a CLI argument to twkit.",
+            "--verbose is not supported as a CLI argument to seqerakit.",
         )
 
 
 class TestKitOptions(unittest.TestCase):
     def setUp(self):
-        self.dryrun_tw = tower.Tower(dryrun=True)
+        self.dryrun_tw = seqeraplatform.SeqeraPlatform(dryrun=True)
 
     @patch("subprocess.Popen")
     def test_dryrun_call(self, mock_subprocess):
diff --git a/tests/unit/test_subcommands.py b/tests/unit/test_subcommands.py
index c5c0910..d05b1ab 100644
--- a/tests/unit/test_subcommands.py
+++ b/tests/unit/test_subcommands.py
@@ -1,26 +1,26 @@
 import unittest
 from unittest.mock import patch
-from twkit import tower
+from seqerakit import seqeraplatform
 
 
-class TestTowerSubcommands(unittest.TestCase):
+class TestSeqeraPlatformSubcommands(unittest.TestCase):
     """
-    Unit tests for the subcommands of the Tower base class.
-    These tests check that the subcommands of the Tower base class
+    Unit tests for the subcommands of the SeqeraPlatform base class.
+    These tests check that the subcommands of the SeqeraPlatform base class
     construct the proper commands to be passed to the _tw_run method of the base class
-    when dynamically called as methods of the Tower class.
+    when dynamically called as methods of the SeqeraPlatform class.
     """
 
     def setUp(self):
-        self.tw = tower.Tower()
-        self.patcher = patch.object(self.tw, "_tw_run")
+        self.sp = seqeraplatform.SeqeraPlatform()
+        self.patcher = patch.object(self.sp, "_tw_run")
         self.mock_tw_run = self.patcher.start()
         # Make the mock behave like a function
         self.mock_tw_run.side_effect = lambda *args, **kwargs: "mocked result"
 
     def subcommand_test(self, subcommand, args, expected_command, **kwargs):
         with self.subTest(subcommand=subcommand):
-            command = getattr(self.tw, subcommand)
+            command = getattr(self.sp, subcommand)
             result = command(*args, **kwargs)
             self.mock_tw_run.assert_called_once_with(expected_command, **kwargs)
             self.assertEqual(
@@ -30,7 +30,7 @@ def subcommand_test(self, subcommand, args, expected_command, **kwargs):
 
     def test_list_command(self):
         """
-        Unit test for the list method of Tower base class.
+        Unit test for the list method of SeqeraPlatform base class.
         This test checks that the list method constructs the
         proper commands to be passed to the _tw_run method of the base class.
         """
@@ -98,7 +98,7 @@ def test_add_pipelines_command(self):
 
     def test_add_compute_envs_command(self):
         """
-        Unit test for the add method of Compute Envs class, overriding the base class.
+        Unit test for the add method of ComputeEnvs class, overriding the base class.
         """
         add_command = [
             "compute-envs",
@@ -128,7 +128,7 @@ def test_add_compute_envs_command(self):
 
     def test_delete_command(self):
         """
-        Unit test for the delete method of Tower base class.
+        Unit test for the delete method of SeqeraPlatform base class.
         """
         delete_command = [
             "pipelines",
@@ -145,7 +145,7 @@ def test_delete_command(self):
 
     def test_view_command(self):
         """
-        Unit test for the view method of Tower base class.
+        Unit test for the view method of SeqeraPlatform base class.
         """
         view_command = [
             "pipelines",
@@ -162,7 +162,7 @@ def test_view_command(self):
 
     def test_import_command(self):
         """
-        Unit test for the import method of Tower base class.
+        Unit test for the import method of SeqeraPlatform base class.
         """
         import_command = [
             "pipelines",