<commit_before># ✨ [unicodex](https://unicodex.gl.asnt.app/) ✨

Unicodex is a demo database-backed serverless Django application, that uses: 

 * [Django 3.1](https://docs.djangoproject.com/en/3.1/) as the web framework,
 * [Google Cloud Run](https://cloud.google.com/run/) as the hosting platform,
 * [Google Cloud SQL](https://cloud.google.com/sql/) as the managed database (via [django-environ](https://django-environ.readthedocs.io/en/latest/)), 
 * [Google Cloud Storage](https://cloud.google.com/storage/) as the media storage platform (via [django-storages](https://django-storages.readthedocs.io/en/latest/)),
 * [Google Cloud Build](https://cloud.google.com/cloud-build/) for build and deployment automation, and
 * [Google Secret Manager](https://cloud.google.com/secret-manager/) for managing encrypted values.

## Deployment

This demo can be deployed by multiple different methods: via the Cloud Run button, through Terraform, or manually via a guided tutorial.  

### Automated

[![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run)

See `app.json` and the `.gcloud/` folder for implementation details.

### Terraform 

* Install [Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) and setup [authentication](docs/80-automation.md#install-terraform-and-setup-authentication)
* Use Terraform to [provision infrastructure](docs/80-automation.md#provision-infrastructure)
* Use Cloud Build to perform the initial [database migration](docs/80-automation.md#migrate-database)

See `terraform/` for configuration details.

### Manual

* [Try the application locally](docs/00-test-local.md) (*optional*)
* Setup your [Google Cloud environment](docs/10-setup-gcp.md), then provision backing services: 
  * a [Cloud SQL Instance](docs/20-setup-sql.md),
  * a [Cloud Storage Bucket](docs/30-setup-bucket.md), and
  * some [Secrets](docs/40-setup-secrets.md), then<commit_msg>update abovethefold landing<commit_after># ✨ [unicodex](https://unicodex.gl.asnt.app/) ✨

Unicodex is a demo database-backed serverless Django application, that uses: 

 * [Django](https://djangoproject.com/) as the web framework,
 * [Google Cloud Run](https://cloud.google.com/run/) as the hosting platform,
 * [Google Cloud SQL](https://cloud.google.com/sql/) as the managed database (via [django-environ](https://django-environ.readthedocs.io/en/latest/)), 
 * [Google Cloud Storage](https://cloud.google.com/storage/) as the media storage platform (via [django-storages](https://django-storages.readthedocs.io/en/latest/)),
 * [Google Cloud Build](https://cloud.google.com/cloud-build/) for build and deployment automation, and
 * [Google Secret Manager](https://cloud.google.com/secret-manager/) for managing encrypted values.

## Deployment

This demo can be deployed by multiple different methods: via the Cloud Run button, through Terraform, or manually via a guided tutorial.  

### Automated

[![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run)

See `app.json` and the `.gcloud/` folder for implementation details.

### Terraform 

* Install [Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) and setup [authentication](docs/80-automation.md#install-terraform-and-setup-authentication)
* Use Terraform to [provision infrastructure](docs/80-automation.md#provision-infrastructure)
* Use Cloud Build to perform the initial [database migration](docs/80-automation.md#migrate-database)

See `terraform/` for configuration details.

### Manual

* [Try the application locally](docs/00-test-local.md) (*optional*)
* Setup your [Google Cloud environment](docs/10-setup-gcp.md), then provision backing services: 
  * a [Cloud SQL Instance](docs/20-setup-sql.md),
  * a [Cloud Storage Bucket](docs/30-setup-bucket.md), and
  * some [Secrets](docs/40-setup-secrets.md), then
{'fraction_non_alphanumeric': 0.14510309278350517, 'fraction_numerical': 0.009278350515463918, 'mean_word_length': 4.979969183359014, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 24, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1284493', 'n_tokens_mistral': 1212, 'n_tokens_neox': 1170, 'n_words': 302}