README.md in sewing_kit-0.7.1 vs README.md in sewing_kit-0.8.0
- old
+ new
@@ -1,9 +1,89 @@
# sewing_kit
-A solid foundation for modern FED stacks in Shopify apps.
+Zero configuration, high performance front end development at organization scale.
-## Other repos
+This document focuses on Rails integration. For details of `sewing-kit`'s configuration and usage, see the [sewing-kit documentation](https://github.com/Shopify/sewing-kit#sewing-kit).
-https://github.com/rails/webpacker
-https://github.com/shakacode/react_on_rails
-https://github.com/mipearson/webpack-rails
+## Quick Start
+Create a Rails project using `dev init` then:
+
+### Install Sewing Kits
+```sh
+# Add Ruby/Node dependencies
+bundle add sewing_kit
+yarn add --dev @shopify/sewing-kit
+yarn add --dev react-hot-loader@3.0.0-beta.7
+
+# Optional - add Polaris
+yarn add @shopify/polaris react react-dom
+
+yarn
+dev up
+```
+
+### Add JavaScript
+sewing_kit looks for JavaScript in `app/ui/index.js`. The code in `index.js` (and any imported JS/CSS) will be built into a `main` bundle.
+
+### Link to JS/CSS with `erb` Helpers
+The `main` bundle is imported into `erb` files using Rails helpers:
+
+```erb
+<%= sewing_kit_link_tag *sewing_kit_asset_paths('main') %>
+<%= sewing_kit_script_tag *sewing_kit_asset_paths('main') %>
+```
+
+**Note:** CSS `<link>` tags appear only in production; in development, CSS is embedded within the `main.js` bundle.
+
+## Minimal Project Layout
+```
+├── Gemfile (must contain "gem 'sewing_kit")
+├── package.json (must specify '@shopify/sewing-kit' as a 'devDependency')
+│
+└── app
+ └── ui
+ │ └─- index.js
+ └── views
+ └─- layouts
+ └─- application.html.erb (must link to JS / CSS using sewing_kit_script_tag / sewing_kit_link_tag
+```
+
+## Rails, Polaris, and React Layout
+A typical Polaris app will use React to render views and components. The following layout shows best practice locations for:
+- Global SCSS settings
+- App sections (roughly analogous to Rails routes)
+- Components
+- Co-located CSS modules
+- Co-located unit tests
+
+```
+└── app
+ └── ui
+ ├─- index.js (renders React into the DOM)
+ ├── styles (optional)
+ │ └── settings.scss (global vars and @polaris overrides)
+ │
+ └── components (optional)
+ ├── App
+ │ ├── index.js
+ │ ├── App.js
+ │ └── tests
+ │ └── App.test.js
+ │
+ ├-─ MyComponent
+ │ ├-─ index.js
+ │ ├-─ MyComponent.js
+ │ ├── MyComponent.scss (optional; component-scoped CSS styles, mixins, etc)
+ │ └── tests
+ │ └── MyComponent.test.js
+ │
+ └── sections (optional; container views that compose presentation components into UI blocks)
+ └── Home
+ ├-─ index.js
+ └── Home.js
+```
+
+## React Boilerplate
+* Create a React app in `app/ui/App.js` ([example](https://github.com/Shopify/rails_sewing_kit_example/blob/master/app/ui/App.js#L11))
+* In an `erb` view, add a placeholder for React content ([example](https://github.com/Shopify/rails_sewing_kit_example/blob/master/app/views/home/index.html.erb#L4))
+* In `index.js`, render a React component into the placeholder element ([example](https://github.com/Shopify/rails_sewing_kit_example/blob/master/app/ui/index.js))
+* Use `sewing_kit_script_tag`/`sewing_kit_link_tag` helpers to link erb/js ([example](https://github.com/Shopify/rails_sewing_kit_example/blob/master/app/views/layouts/application.html.erb#L8))