diff --git a/.gitignore b/.gitignore
index 1fef4ab9..0bfaeffb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,11 @@
# .tfvars files
*.tfvars
+
+# IDE files
+.idea
+*.iml
+
+# Build harness files
+.build-harness
+build-harness
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..b7cf9010
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,16 @@
+addons:
+ apt:
+ packages:
+ - git
+ - make
+ - curl
+
+install:
+ - make init
+
+script:
+ - make terraform/install
+ - make terraform/get-plugins
+ - make terraform/get-modules
+ - make terraform/lint
+ - make terraform/validate
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 261eeb9e..101fd7cd 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2019 Cloud Posse, LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..655f6303
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+SHELL := /bin/bash
+
+# List of targets the `readme` target should call before generating the readme
+export README_DEPS ?= docs/targets.md docs/terraform.md
+
+-include $(shell curl -sSL -o .build-harness "https://git.io/build-harness"; echo .build-harness)
+
+## Lint terraform code
+lint:
+ $(SELF) terraform/install terraform/get-modules terraform/get-plugins terraform/lint terraform/validate
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..badbcf3d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,301 @@
+
+[![README Header][readme_header_img]][readme_header_link]
+
+[![Cloud Posse][logo]](https://cpco.io/homepage)
+
+# terraform-aws-s3-bucket [![Build Status](https://travis-ci.org/cloudposse/terraform-aws-s3-bucket.svg?branch=master)](https://travis-ci.org/cloudposse/terraform-aws-s3-bucket) [![Latest Release](https://img.shields.io/github/release/cloudposse/terraform-aws-s3-bucket.svg)](https://github.com/cloudposse/terraform-aws-s3-bucket/releases/latest) [![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)
+
+
+This module creates an S3 bucket with support of versioning, encryption, ACL and bucket object policy.
+If `user_enabled` variable is set to `true`, the module will provision a basic IAM user with permissions to access the bucket.
+
+This basic IAM system user is suitable for CI/CD systems (_e.g._ TravisCI, CircleCI) or systems which are *external* to AWS that cannot leverage [AWS IAM Instance Profiles](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html).
+
+We do not recommend creating IAM users this way for any other purpose.
+
+
+---
+
+This project is part of our comprehensive ["SweetOps"](https://cpco.io/sweetops) approach towards DevOps.
+[][share_email]
+[][share_googleplus]
+[][share_facebook]
+[][share_reddit]
+[][share_linkedin]
+[][share_twitter]
+
+
+[![Terraform Open Source Modules](https://docs.cloudposse.com/images/terraform-open-source-modules.svg)][terraform_modules]
+
+
+
+It's 100% Open Source and licensed under the [APACHE2](LICENSE).
+
+
+
+
+
+
+
+We literally have [*hundreds of terraform modules*][terraform_modules] that are Open Source and well-maintained. Check them out!
+
+
+
+
+
+
+
+## Usage
+
+```hcl
+module "s3_bucket" {
+ source = "git::https://github.com/cloudposse/terraform-aws-s3-bucket.git?ref=master"
+ enabled = "${var.enabled}"
+ user_enabled = "${var.user_enabled}"
+ versioning_enabled = "${var.versioning_enabled}"
+ allowed_bucket_actions = "${var.allowed_bucket_actions}"
+ name = "${var.name}"
+ stage = "${var.stage}"
+ namespace = "${var.namespace}"
+}
+```
+
+
+
+
+
+
+## Makefile Targets
+```
+Available targets:
+
+ help Help screen
+ help/all Display help for all targets
+ help/short This help short screen
+ lint Lint terraform code
+
+```
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|:----:|:-----:|:-----:|
+| acl | The canned ACL to apply. We recommend `private` to avoid exposing sensitive information | string | `private` | no |
+| allowed_bucket_actions | List of actions the user is permitted to perform on the S3 bucket | list | `` | no |
+| attributes | Additional attributes (e.g. `1`) | list | `` | no |
+| delimiter | Delimiter to be used between `namespace`, `stage`, `name` and `attributes` | string | `-` | no |
+| enabled | Set to `false` to prevent the module from creating any resources | string | `true` | no |
+| force_destroy | A boolean string that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable. | string | `false` | no |
+| kms_master_key_id | The AWS KMS master key ID used for the `SSE-KMS` encryption. This can only be used when you set the value of `sse_algorithm` as `aws:kms`. The default aws/s3 AWS KMS master key is used if this element is absent while the `sse_algorithm` is `aws:kms` | string | `` | no |
+| name | Name (e.g. `app` or `db`) | string | - | yes |
+| namespace | Namespace (e.g. `eg` or `cp`) | string | - | yes |
+| policy | A valid bucket policy JSON document. Note that if the policy document is not specific enough (but still valid), Terraform may view the policy as constantly changing in a terraform plan. In this case, please make sure you use the verbose/specific version of the policy. | string | `` | no |
+| region | If specified, the AWS region this bucket should reside in. Otherwise, the region used by the callee. | string | `` | no |
+| sse_algorithm | The server-side encryption algorithm to use. Valid values are `AES256` and `aws:kms` | string | `AES256` | no |
+| stage | Stage (e.g. `prod`, `dev`, `staging`) | string | - | yes |
+| tags | Additional tags (e.g. `{ BusinessUnit = "XYZ" }` | map | `