diff --git a/src/README.md b/src/README.md
new file mode 100644
index 0000000..8d2a25c
--- /dev/null
+++ b/src/README.md
@@ -0,0 +1,149 @@
+---
+tags:
+ - component/account-quotas
+ - layer/foundation
+ - provider/aws
+---
+
+# Component: `account`
+
+This component is responsible for requesting service quota increases. We recommend making requests here rather than in
+`account-settings` because `account-settings` is a restricted component that can only be applied by SuperAdmin.
+
+## Usage
+
+**Stack Level**: Global and Regional (depending on quota)
+
+Global resources must be provisioned in `us-east-1`. Put them in the `gbl` stack, but set `region: us-east-1` in the
+`vars` section.
+
+You can refer to services either by their exact full name (e.g.
+`service_name: "Amazon Elastic Compute Cloud (Amazon EC2)"`) or by the service code (e.g. `service_code: "ec2"`).
+Similarly, you can refer to quota names either by their exact full name (e.g. `quota_name: "EC2-VPC Elastic IPs"`) or by
+the quota code (e.g. `quota_code: "L-0263D0A3"`).
+
+You can find service codes and full names via the AWS CLI (be sure to use the correct region):
+
+```bash
+aws --region us-east-1 service-quotas list-services
+```
+
+You can find quota codes and full names, and also whether the quotas are adjustable or global, via the AWS CLI, but you
+will need the service code from the previous step:
+
+```bash
+aws --region us-east-1 service-quotas list-service-quotas --service-code ec2
+```
+
+If you make a request to raise a quota, the output will show the requested value as `value` while the request is
+pending.
+
+### Special usage Notes
+
+Even though the Terraform will submit the support request, you may need to follow up with AWS support to get the request
+approved, via the AWS console or email.
+
+#### Resources are destroyed on change
+
+Because the AWS API often returns default values rather than configured or applicable values for a given quota, we have
+to ignore the value returned by the API or else face perpetual drift. To allow us to change the value in the future,
+even though we are ignoring it, we encode the value in the resource key, so that a change of value will result in a new
+resource being created and the old one being destroyed. Destroying the old resource has no actual effect (it does not
+even close an open request), so it is safe to do.
+
+### Example
+
+Here's an example snippet for how to use this component.
+
+```yaml
+components:
+ terraform:
+ account-quotas:
+ vars:
+ quotas:
+ vpcs-per-region:
+ service_code: vpc
+ quota_name: "VPCs per Region"
+ value: 10
+ vpc-elastic-ips:
+ service_code: ec2
+ quota_name: "EC2-VPC Elastic IPs"
+ value: 10
+```
+
+
+
+## Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 1.0.0 |
+| [aws](#requirement\_aws) | >= 4.9.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [aws](#provider\_aws) | >= 4.9.0 |
+
+## Modules
+
+| Name | Source | Version |
+|------|--------|---------|
+| [iam\_roles](#module\_iam\_roles) | ../account-map/modules/iam-roles | n/a |
+| [this](#module\_this) | cloudposse/label/null | 0.25.0 |
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_servicequotas_service_quota.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/servicequotas_service_quota) | resource |
+| [aws_servicequotas_service.by_name](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/servicequotas_service) | data source |
+| [aws_servicequotas_service_quota.by_name](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/servicequotas_service_quota) | data source |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [additional\_tag\_map](#input\_additional\_tag\_map) | Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.
This is for some rare cases where resources want additional configuration of tags
and therefore take a list of maps with tag key, value, and additional configuration. | `map(string)` | `{}` | no |
+| [attributes](#input\_attributes) | ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,
in the order they appear in the list. New attributes are appended to the
end of the list. The elements of the list are joined by the `delimiter`
and treated as a single ID element. | `list(string)` | `[]` | no |
+| [context](#input\_context) | Single object for setting entire context at once.
See description of individual variables for details.
Leave string and numeric variables as `null` to use default value.
Individual variable settings (non-null) override settings in context object,
except for attributes, tags, and additional\_tag\_map, which are merged. | `any` |
{| no | +| [delimiter](#input\_delimiter) | Delimiter to be used between ID elements.
"additional_tag_map": {},
"attributes": [],
"delimiter": null,
"descriptor_formats": {},
"enabled": true,
"environment": null,
"id_length_limit": null,
"label_key_case": null,
"label_order": [],
"label_value_case": null,
"labels_as_tags": [
"unset"
],
"name": null,
"namespace": null,
"regex_replace_chars": null,
"stage": null,
"tags": {},
"tenant": null
}
[| no | +| [name](#input\_name) | ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.
"default"
]
map(object({| `{}` | no | +| [regex\_replace\_chars](#input\_regex\_replace\_chars) | Terraform regular expression (regex) string.
service_name = optional(string)
service_code = optional(string)
quota_name = optional(string)
quota_code = optional(string)
value = number
}))