+
+## Introduction and Contribution Guideline
+Welcome to the [dev.to](/) codebase. We are so excited to have you. Most importantly, all contributors must abide by the [code of conduct](dev.to/code-of-conduct).
+
+With your help, we can build out the DEV Community platform to be more stable and better serve the users. The platform is built on [Ruby on Rails](http://rubyonrails.org/). When in doubt, try to do things "The Rails Way", but it is an evolving codebase and we will learn from all new contributions in order to evolve.
+
+Before we can make the codebase fully open source, we must ensure we discover any possible vulnerabilities that could be exposed by eyes on the code, but in the long run we think that openness can do nothing but help in this way.
+
+### How to contribute
+
+When in doubt, ask! We are doing this for the first time and we may not be clear about everything. Creating an issue to ask about how to do something in the open is a great decision. We will try to create clear issues, but communication is the most important thing and it's hard! You may communicate _through_ a pull request. It's a fine approach, but it could result in going down the wrong path. The earlier we talk about something the better.
+
+**Refactoring** code, e.g. improving the code without modifying the behavior is an area that can probably be done based on intuition and may not require much communication to be merged.
+
+**Fixing bugs** may also not require a lot of communication, but the more the better. Please surround bug fixes with ample tests. Bugs are magnets for other bugs. Write tests near bugs!
+
+**Building features** is the area which will require the most communication and/or negotiation. Every feature is subjective and open for debate. Let's talk about the features!
+
+### Clean code with tests
+
+Even though some of the existing code is poorly written or not tested as well as it could be, we have much more scrutiny for these things going forward, as the transition from team-only development to open development makes clean code more important than ever in order to avoid communication breakdown. Good luck writing the best code of your life!
+
+### Non-code contributions
+
+Improving documentation and wikis is very valuable, as is participating in any discussions about approaches or features.
+
+### The bottom line
+
+If a process could be improved, don't hesitate to bring it up, but there are always tradeoffs and we are humans. Mistakes happen and opinions may not always line up. Shaming anyone trying to contribute is not allowed.
+
+# Getting Started
+#### Prerequisite
+- Ruby: we recommend using [rbenv](https://github.com/rbenv/rbenv) to install the Ruby version listed on the badge.
+- Bundler: `gem install bundler`
+- Foreman: `gem install foreman`
+- Yarn: use `brew install yarn` to install yarn. It will also install node if you don't already have it.
+- PostgresSQL: the easiest way to get started with this is to use [Postgres.app](https://postgresapp.com/).
+
+#### Installation steps
+1. `git clone git@github.com:benhalpern/practicaldeveloper.git`
+2. `bundle install`
+3. `bin/yarn`
+4. `bin/setup`
+6. Set up your environment variables/secrets with the either of the following two methods:
+ - A. create a `config/application.yml` file and paste secret keys in it.
+ - B. Use [Torus](http://torus.sh/) to wrap around the whole app. Refer to the [wiki](https://github.com/thepracticaldev/dev.to_private/wiki/Torus) if you are interested. *Please bear in mind that usage of Torus is experimental*.
+ - If you are missing `ENV` variables on bootup, `_env_checker.rb` will let you know. If you add or remove `ENV` vars to the project, you must also modify this file before they can be merged.
+
+#### Starting the application
+We're mostly a Rails app, with a bit of Webpack sprinkled in. **For most cases, simply running `bin/rails server` will do.** If you're working with Webpack though, you'll need to run the following:
+
+- Run `bin/startup` to start the server, Webpack, and our job runner `delayed_job`. `bin/startup` runs `foreman start -f Procfile.dev` under the hood.
+- `alias start="bin/startup"` makes this even faster. 😊
+- If you're using `pry` for debugging in Rails, note that using `foreman` and `pry` together works, but it's not as clean as `bin/rails server`.
+
+Here are some singleton commands you may need, usually in a separate instance/tab of your Terminal.
+
+- Running the job server -- this is for mostly for notifications and emails: `bin/rails jobs:work`
+- Clearing jobs (in case you don't want to wait for the backlog of jobs): `bin/rails jobs:clear`
+
+Current gotchas: potential environment issues with external services need to be worked out.
+
+## 🔑 Key App tech/services
+
+- We use **Puma** for the server
+- We rely heavily on edge caching with **Fastly**
+- We use **Cloudinary** for image manipulation/serving
+- We use **Keen** for event storage
+- We use **Airbrake** for error monitoring
+- We use **Timber** for logging
+- We use **Delayed Job** for background workers
+- We use **Algolia** for search
+- We use **Redcarpet/Rouge** for Markdown
+- We use **Carrierwave/Fog/AWS S3** for image upload/storage
+- We use a modified version of **InstantClick** instead of **Turbolinks**
+- We are hosted on **Heroku**
+- We use **Heroku scheduler** for scheduled jobs (default)
+- We use **Sendgrid** for API-triggered mailing
+- We use **Mailchimp** for marketing/outreach emails
+- We use **Figaro** for app configuration.
+- We use **CounterCulture** to keep track of association counts (counter caches)
+- We use **Rolify** for role management.
+- We use **Pundit** for authorization.
+
+There's more, but that's a decent overview of the key need-to-knows.
+
+## Workflow Suggestion
+
+We use [Spring](https://github.com/rails/spring) and it is already included in the project.
+1. Use the provided bin stubs to automatically start Spring, i.e. `bin/rails server`, `bin/rspec spec/models/`, `bin/rake db:migrate`.
+2. If Spring isn't picking up on new changes, use `spring stop`. For example, Spring should always be restarted if there's a change in environment key.
+3. Check Spring's status whenever with `spring status`.
+
+Caveat: `bin/rspec` is not equipped with Spring because it affect Simplecov's result. Instead use `bin/spring rspec`.
+
+## Style Guide
+
+This project follows [Bbatsov's Ruby Style Guide](https://github.com/bbatsov/ruby-style-guide), using [Rubocop](https://github.com/bbatsov/rubocop) along with [Rubocop-Rspec](https://github.com/backus/rubocop-rspec) as the code analyzer. If you have Rubocop installed with your text editor of choice, you should be up and running. Settings can be edited in `.rubocop.yml`.
+
+For Javascript, we follow [Airbnb's JS Style Guide](https://github.com/airbnb/javascript), using [ESLint](https://eslint.org/). If you have ESLint installed with your text editor of choice, you should be up and running.
+
+## Testing
+The following technologies are used for testing:
+
+ - **Rspec**
+ - **Capybara** with **selenium-webdriver**
+ - **chromedriver-helper** for standard JS testing.
+ - **Capybara-webkit** for headless JS testing.(not in use)
+ - **`rack_session_access`**
+ - **Warden**
+ - **guard-rspec** for automated testing
+
+#### Installing Capybara-webkit
+**This is currently commented out in the Gemfile, but if you want to experiment with it** Follow the instruction of installing Qt [here](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit) then `bundle install` normally.
+
+#### When should I use `login_via_session_as(:user)` vs `login_as(:user)`?
+- `login_as(:user)` uses Warden's stubbing actions to make the application think that a user is signed in but without all of the overhead of actually signing them in. Recommended for view test.
+- `login_via_session_as(:user)` uses `rack_session_access` to modify application's session. It is integrated with Devise so current_user won't be nil. Recommended for feature test.
+
+## Environment Variables
+You need to keep your personal `config/application.yml` up-to-date in order to properly set up your environment variables. We have some "shared" environment variables, but you may need "personal" environment variables for one reason or another (such as a private Algolia instance, possibly). It is important to keep people up-to-date on changes to this protocol, as it is not checked into git. It is also important to use secure ways of passing these keys around. We currently use LastPass to store this.
+
+## Previewing emails in development
+You can modify the test in `/test/mailers/previews`
+You can view the previews at (for example) `http://localhost:3000/rails/mailers/notify_mailer/new_reply_email`
+
+## How to contribute (Internal)
+1. Clone the project locally.
+2. Create a branch for each separate piece of work.
+3. Do the work and write [good commit messages](https://chris.beams.io/posts/git-commit/).
+ - If your work includes adding a new environment variable, make sure you update `_env_checker.rb`.
+4. Push your branch up to this repository.
+5. Create a new pull-reqest.
+6. After the pull-request is approved and merged, delete your branch on github.
+
+**Avoid pushing spike(test) branches up to the main repository**. If you must, push the spike branches up to a forked repository.
+
+
+### Branch Policies
+
+#### Branch naming convention
+Name the branch in the following manner.
+`//-`
+###### Examples
+```
+ben/feature/renderer-cookies
+niko/hotfix/dockerfile-base-image
+andy-and-niko/issue/#132-broken-link
+```
+#### Workflow
+- [Here's](https://github.com/thepracticaldev/dev.to_private/wiki/Product-Workflow) a guide to our workflow using ZenHub.
+- Note: if you're working on a task with no associated issue, create an issue. We do this so there's transparency and also to prevent anyone from unknowingly doing the same task.
+
+#### Pull request guideline
+- Keep the pull request small; a pull request should try it's very best to address only a single concern.
+- Make sure all the tests pass and add additional tests for the code you submit.
+- Document your reasoning behind the changes. Explain why you wrote the code in the way you did, not what it does.
+- If there's an existing issue related to the pull request, reference to it. [More info here](https://github.com/blog/1506-closing-issues-via-pull-requests)
+
+Please note that we squash all pull request. **After a pull request is approved, we will remove the branch the PR is on unless you state it otherwise**
+
+## Continuous Integration & Continuous Deployment
+We are using Codeship for CI and CD. Codeship will run a build (in isolated environment for testing) for every push to this repository. Keep in mind that a passing-build does not necessarily mean the project won't run into any issues. Strive to write good tests for any chunk of code you wish to contribute. Only pushes to the `deployment` branch will evoke the CD portion of Codeship after CI passes. Our test suite is not perfect and sometimes a re-rerun is needed.
+
+#### Skipping CI build (Not recommended)
+You can skip CI by adding `--skip-ci` to your commit message. More info [here](https://documentation.codeship.com/general/projects/skipping-builds/).
+
+## CodeClimate and Simplecov
+We are using CodeClimate to track code quality and code coverage. Codeclimate will grade the quality of the code of every PR but not the entirety of the project. If you feel that the current linting rule is unreasonable, feel free to submit a _separate_ PR to change it. Fix any errors that Codeclimate provides and strive to leave code better than you found it.
+
+Simplecov is a gem that is tracking the coverage of our test suite. Codeship will upload Simplecov data to CodeClimate. We are still in the early stage of using it so it may not provide an accurate measurement our of codebase.
+
+#### Using simplecov locally
+1. Run `bundle exec rspec spec` or `bin/rspec spec`. You can run rspec on the whole project or a single file.
+2. After rspec is complete, open `index.html` within the coverage folder to view code coverages.
+
+Run `bin/rspecov` to do all of this in one step
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000000000..ba6b733dd2358
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,6 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+Rails.application.load_tasks
diff --git a/app/assets/images/.keep b/app/assets/images/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/app/assets/images/1.png b/app/assets/images/1.png
new file mode 100644
index 0000000000000..904ce57b93a3c
Binary files /dev/null and b/app/assets/images/1.png differ
diff --git a/app/assets/images/10.png b/app/assets/images/10.png
new file mode 100644
index 0000000000000..f7de3faa1566a
Binary files /dev/null and b/app/assets/images/10.png differ
diff --git a/app/assets/images/11.png b/app/assets/images/11.png
new file mode 100644
index 0000000000000..0d37c72e346c3
Binary files /dev/null and b/app/assets/images/11.png differ
diff --git a/app/assets/images/12.png b/app/assets/images/12.png
new file mode 100644
index 0000000000000..7da902cd4a56e
Binary files /dev/null and b/app/assets/images/12.png differ
diff --git a/app/assets/images/13.png b/app/assets/images/13.png
new file mode 100644
index 0000000000000..0fb2c81db58c2
Binary files /dev/null and b/app/assets/images/13.png differ
diff --git a/app/assets/images/14.png b/app/assets/images/14.png
new file mode 100644
index 0000000000000..236918e007dac
Binary files /dev/null and b/app/assets/images/14.png differ
diff --git a/app/assets/images/15.png b/app/assets/images/15.png
new file mode 100644
index 0000000000000..37750703028bf
Binary files /dev/null and b/app/assets/images/15.png differ
diff --git a/app/assets/images/16.png b/app/assets/images/16.png
new file mode 100644
index 0000000000000..6160c7de42eda
Binary files /dev/null and b/app/assets/images/16.png differ
diff --git a/app/assets/images/17.png b/app/assets/images/17.png
new file mode 100644
index 0000000000000..54b06330312b5
Binary files /dev/null and b/app/assets/images/17.png differ
diff --git a/app/assets/images/18.png b/app/assets/images/18.png
new file mode 100644
index 0000000000000..3b76987d9233d
Binary files /dev/null and b/app/assets/images/18.png differ
diff --git a/app/assets/images/19.png b/app/assets/images/19.png
new file mode 100644
index 0000000000000..0722c180d21f0
Binary files /dev/null and b/app/assets/images/19.png differ
diff --git a/app/assets/images/2.png b/app/assets/images/2.png
new file mode 100644
index 0000000000000..60de494eb05b2
Binary files /dev/null and b/app/assets/images/2.png differ
diff --git a/app/assets/images/20.png b/app/assets/images/20.png
new file mode 100644
index 0000000000000..643fb2bb7eeb0
Binary files /dev/null and b/app/assets/images/20.png differ
diff --git a/app/assets/images/21.png b/app/assets/images/21.png
new file mode 100644
index 0000000000000..e1c140ddd3b8c
Binary files /dev/null and b/app/assets/images/21.png differ
diff --git a/app/assets/images/22.png b/app/assets/images/22.png
new file mode 100644
index 0000000000000..621bb56934fcc
Binary files /dev/null and b/app/assets/images/22.png differ
diff --git a/app/assets/images/23.png b/app/assets/images/23.png
new file mode 100644
index 0000000000000..2525ec282f30a
Binary files /dev/null and b/app/assets/images/23.png differ
diff --git a/app/assets/images/24.png b/app/assets/images/24.png
new file mode 100644
index 0000000000000..21897fb00117a
Binary files /dev/null and b/app/assets/images/24.png differ
diff --git a/app/assets/images/25.png b/app/assets/images/25.png
new file mode 100644
index 0000000000000..81474dc5ac150
Binary files /dev/null and b/app/assets/images/25.png differ
diff --git a/app/assets/images/26.png b/app/assets/images/26.png
new file mode 100644
index 0000000000000..c3d0ba8169ceb
Binary files /dev/null and b/app/assets/images/26.png differ
diff --git a/app/assets/images/27.png b/app/assets/images/27.png
new file mode 100644
index 0000000000000..c71963051d4da
Binary files /dev/null and b/app/assets/images/27.png differ
diff --git a/app/assets/images/28.png b/app/assets/images/28.png
new file mode 100644
index 0000000000000..524de7c7fd70a
Binary files /dev/null and b/app/assets/images/28.png differ
diff --git a/app/assets/images/29.png b/app/assets/images/29.png
new file mode 100644
index 0000000000000..2d64e6fb0be4a
Binary files /dev/null and b/app/assets/images/29.png differ
diff --git a/app/assets/images/3.png b/app/assets/images/3.png
new file mode 100644
index 0000000000000..ddfcbd30037e7
Binary files /dev/null and b/app/assets/images/3.png differ
diff --git a/app/assets/images/30.png b/app/assets/images/30.png
new file mode 100644
index 0000000000000..e8d8e2bfbcde6
Binary files /dev/null and b/app/assets/images/30.png differ
diff --git a/app/assets/images/31.png b/app/assets/images/31.png
new file mode 100644
index 0000000000000..3ec1a476033c6
Binary files /dev/null and b/app/assets/images/31.png differ
diff --git a/app/assets/images/32.png b/app/assets/images/32.png
new file mode 100644
index 0000000000000..cd4525df40b6f
Binary files /dev/null and b/app/assets/images/32.png differ
diff --git a/app/assets/images/33.png b/app/assets/images/33.png
new file mode 100644
index 0000000000000..1824fa5a6719d
Binary files /dev/null and b/app/assets/images/33.png differ
diff --git a/app/assets/images/34.png b/app/assets/images/34.png
new file mode 100644
index 0000000000000..9ab26e326f6e2
Binary files /dev/null and b/app/assets/images/34.png differ
diff --git a/app/assets/images/35.png b/app/assets/images/35.png
new file mode 100644
index 0000000000000..819228e931ef7
Binary files /dev/null and b/app/assets/images/35.png differ
diff --git a/app/assets/images/36.png b/app/assets/images/36.png
new file mode 100644
index 0000000000000..e4517cf9b9a95
Binary files /dev/null and b/app/assets/images/36.png differ
diff --git a/app/assets/images/37.png b/app/assets/images/37.png
new file mode 100644
index 0000000000000..a4af89e6fc3eb
Binary files /dev/null and b/app/assets/images/37.png differ
diff --git a/app/assets/images/38.png b/app/assets/images/38.png
new file mode 100644
index 0000000000000..0d5a557fcfede
Binary files /dev/null and b/app/assets/images/38.png differ
diff --git a/app/assets/images/39.png b/app/assets/images/39.png
new file mode 100644
index 0000000000000..3c5b012163471
Binary files /dev/null and b/app/assets/images/39.png differ
diff --git a/app/assets/images/4.png b/app/assets/images/4.png
new file mode 100644
index 0000000000000..6ee89a8963d62
Binary files /dev/null and b/app/assets/images/4.png differ
diff --git a/app/assets/images/40.png b/app/assets/images/40.png
new file mode 100644
index 0000000000000..f6b9a69bb269e
Binary files /dev/null and b/app/assets/images/40.png differ
diff --git a/app/assets/images/5.png b/app/assets/images/5.png
new file mode 100644
index 0000000000000..ab845c16920fc
Binary files /dev/null and b/app/assets/images/5.png differ
diff --git a/app/assets/images/6.png b/app/assets/images/6.png
new file mode 100644
index 0000000000000..c39ad60976a48
Binary files /dev/null and b/app/assets/images/6.png differ
diff --git a/app/assets/images/7.png b/app/assets/images/7.png
new file mode 100644
index 0000000000000..7ca466775c96c
Binary files /dev/null and b/app/assets/images/7.png differ
diff --git a/app/assets/images/8.png b/app/assets/images/8.png
new file mode 100644
index 0000000000000..4707285753a5a
Binary files /dev/null and b/app/assets/images/8.png differ
diff --git a/app/assets/images/9.png b/app/assets/images/9.png
new file mode 100644
index 0000000000000..bc43da08e8d3c
Binary files /dev/null and b/app/assets/images/9.png differ
diff --git a/app/assets/images/android-icon-128x128.png b/app/assets/images/android-icon-128x128.png
new file mode 100644
index 0000000000000..95599530d0c0b
Binary files /dev/null and b/app/assets/images/android-icon-128x128.png differ
diff --git a/app/assets/images/android-icon-144x144.png b/app/assets/images/android-icon-144x144.png
new file mode 100644
index 0000000000000..7d8edfba578c6
Binary files /dev/null and b/app/assets/images/android-icon-144x144.png differ
diff --git a/app/assets/images/android-icon-192x192.png b/app/assets/images/android-icon-192x192.png
new file mode 100644
index 0000000000000..0fbce2711dddd
Binary files /dev/null and b/app/assets/images/android-icon-192x192.png differ
diff --git a/app/assets/images/android-icon-36x36.png b/app/assets/images/android-icon-36x36.png
new file mode 100644
index 0000000000000..404ce3a440d61
Binary files /dev/null and b/app/assets/images/android-icon-36x36.png differ
diff --git a/app/assets/images/android-icon-48x48.png b/app/assets/images/android-icon-48x48.png
new file mode 100644
index 0000000000000..f1709a87b4fd3
Binary files /dev/null and b/app/assets/images/android-icon-48x48.png differ
diff --git a/app/assets/images/android-icon-72x72.png b/app/assets/images/android-icon-72x72.png
new file mode 100644
index 0000000000000..f2070ede68ed5
Binary files /dev/null and b/app/assets/images/android-icon-72x72.png differ
diff --git a/app/assets/images/android-icon-96x96.png b/app/assets/images/android-icon-96x96.png
new file mode 100644
index 0000000000000..43aaf979b86a8
Binary files /dev/null and b/app/assets/images/android-icon-96x96.png differ
diff --git a/app/assets/images/animated-bars.gif b/app/assets/images/animated-bars.gif
new file mode 100644
index 0000000000000..81a717c2c1a53
Binary files /dev/null and b/app/assets/images/animated-bars.gif differ
diff --git a/app/assets/images/apple-icon-114x114.png b/app/assets/images/apple-icon-114x114.png
new file mode 100644
index 0000000000000..eea11e4aeafa2
Binary files /dev/null and b/app/assets/images/apple-icon-114x114.png differ
diff --git a/app/assets/images/apple-icon-120x120.png b/app/assets/images/apple-icon-120x120.png
new file mode 100644
index 0000000000000..776e2e4f551a6
Binary files /dev/null and b/app/assets/images/apple-icon-120x120.png differ
diff --git a/app/assets/images/apple-icon-144x144.png b/app/assets/images/apple-icon-144x144.png
new file mode 100644
index 0000000000000..196edd12f4573
Binary files /dev/null and b/app/assets/images/apple-icon-144x144.png differ
diff --git a/app/assets/images/apple-icon-152x152.png b/app/assets/images/apple-icon-152x152.png
new file mode 100644
index 0000000000000..c308f7eb35595
Binary files /dev/null and b/app/assets/images/apple-icon-152x152.png differ
diff --git a/app/assets/images/apple-icon-167x167.png b/app/assets/images/apple-icon-167x167.png
new file mode 100644
index 0000000000000..5a3722ef8c2b7
Binary files /dev/null and b/app/assets/images/apple-icon-167x167.png differ
diff --git a/app/assets/images/apple-icon-180x180.png b/app/assets/images/apple-icon-180x180.png
new file mode 100644
index 0000000000000..033e89b709434
Binary files /dev/null and b/app/assets/images/apple-icon-180x180.png differ
diff --git a/app/assets/images/apple-icon-57x57.png b/app/assets/images/apple-icon-57x57.png
new file mode 100644
index 0000000000000..58fc902381599
Binary files /dev/null and b/app/assets/images/apple-icon-57x57.png differ
diff --git a/app/assets/images/apple-icon-60x60.png b/app/assets/images/apple-icon-60x60.png
new file mode 100644
index 0000000000000..b7b87adedaec5
Binary files /dev/null and b/app/assets/images/apple-icon-60x60.png differ
diff --git a/app/assets/images/apple-icon-72x72.png b/app/assets/images/apple-icon-72x72.png
new file mode 100644
index 0000000000000..93a5baea6c0f3
Binary files /dev/null and b/app/assets/images/apple-icon-72x72.png differ
diff --git a/app/assets/images/apple-icon-76x76.png b/app/assets/images/apple-icon-76x76.png
new file mode 100644
index 0000000000000..3b0af290893b4
Binary files /dev/null and b/app/assets/images/apple-icon-76x76.png differ
diff --git a/app/assets/images/apple-icon-precomposed.png b/app/assets/images/apple-icon-precomposed.png
new file mode 100644
index 0000000000000..41e46eec1bc5e
Binary files /dev/null and b/app/assets/images/apple-icon-precomposed.png differ
diff --git a/app/assets/images/apple-icon.png b/app/assets/images/apple-icon.png
new file mode 100644
index 0000000000000..17be16eccf8a4
Binary files /dev/null and b/app/assets/images/apple-icon.png differ
diff --git a/app/assets/images/bar-chart-white.svg b/app/assets/images/bar-chart-white.svg
new file mode 100644
index 0000000000000..d680daf6b1099
--- /dev/null
+++ b/app/assets/images/bar-chart-white.svg
@@ -0,0 +1,43 @@
+
+
+
+
diff --git a/app/assets/images/bell.svg b/app/assets/images/bell.svg
new file mode 100644
index 0000000000000..a6a1d2ad74d05
--- /dev/null
+++ b/app/assets/images/bell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/ben.jpg b/app/assets/images/ben.jpg
new file mode 100644
index 0000000000000..a604eec5b0b8a
Binary files /dev/null and b/app/assets/images/ben.jpg differ
diff --git a/app/assets/images/bookmark.svg b/app/assets/images/bookmark.svg
new file mode 100644
index 0000000000000..b165772dab941
--- /dev/null
+++ b/app/assets/images/bookmark.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/app/assets/images/cancel.svg b/app/assets/images/cancel.svg
new file mode 100644
index 0000000000000..12713d5437d4d
--- /dev/null
+++ b/app/assets/images/cancel.svg
@@ -0,0 +1,35 @@
+
+
+
diff --git a/app/assets/images/chat.svg b/app/assets/images/chat.svg
new file mode 100644
index 0000000000000..cd36fff41d3d6
--- /dev/null
+++ b/app/assets/images/chat.svg
@@ -0,0 +1,82 @@
+
+
+
diff --git a/app/assets/images/checkmark-gray.png b/app/assets/images/checkmark-gray.png
new file mode 100644
index 0000000000000..a21051c1b451d
Binary files /dev/null and b/app/assets/images/checkmark-gray.png differ
diff --git a/app/assets/images/checkmark-gray.svg b/app/assets/images/checkmark-gray.svg
new file mode 100644
index 0000000000000..1df550df370d2
--- /dev/null
+++ b/app/assets/images/checkmark-gray.svg
@@ -0,0 +1,51 @@
+
diff --git a/app/assets/images/checkmark-green.png b/app/assets/images/checkmark-green.png
new file mode 100644
index 0000000000000..5d6be0ba4fb69
Binary files /dev/null and b/app/assets/images/checkmark-green.png differ
diff --git a/app/assets/images/checkmark-green.svg b/app/assets/images/checkmark-green.svg
new file mode 100644
index 0000000000000..97606af81cbd4
--- /dev/null
+++ b/app/assets/images/checkmark-green.svg
@@ -0,0 +1,49 @@
+
diff --git a/app/assets/images/checkmark.png b/app/assets/images/checkmark.png
new file mode 100644
index 0000000000000..3bba1f2b183c7
Binary files /dev/null and b/app/assets/images/checkmark.png differ
diff --git a/app/assets/images/chevron-down.svg b/app/assets/images/chevron-down.svg
new file mode 100644
index 0000000000000..cd5bfd9bcabb5
--- /dev/null
+++ b/app/assets/images/chevron-down.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/app/assets/images/clock.png b/app/assets/images/clock.png
new file mode 100644
index 0000000000000..a2c67e6d95681
Binary files /dev/null and b/app/assets/images/clock.png differ
diff --git a/app/assets/images/coding.svg b/app/assets/images/coding.svg
new file mode 100644
index 0000000000000..1d67c836f31e3
--- /dev/null
+++ b/app/assets/images/coding.svg
@@ -0,0 +1,106 @@
+
+
+
diff --git a/app/assets/images/cool.svg b/app/assets/images/cool.svg
new file mode 100644
index 0000000000000..653b5b8a7f84b
--- /dev/null
+++ b/app/assets/images/cool.svg
@@ -0,0 +1,50 @@
+
+
+
diff --git a/app/assets/images/dev-white-letters.svg b/app/assets/images/dev-white-letters.svg
new file mode 100644
index 0000000000000..55580c94379e3
--- /dev/null
+++ b/app/assets/images/dev-white-letters.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/devblacksquarelogo.svg b/app/assets/images/devblacksquarelogo.svg
new file mode 100644
index 0000000000000..57f853e7bf2f9
--- /dev/null
+++ b/app/assets/images/devblacksquarelogo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/devlogo-pwa-128.png b/app/assets/images/devlogo-pwa-128.png
new file mode 100644
index 0000000000000..afd225d3d4d1e
Binary files /dev/null and b/app/assets/images/devlogo-pwa-128.png differ
diff --git a/app/assets/images/devlogo-pwa-192.png b/app/assets/images/devlogo-pwa-192.png
new file mode 100644
index 0000000000000..d4ae09c4064a2
Binary files /dev/null and b/app/assets/images/devlogo-pwa-192.png differ
diff --git a/app/assets/images/devlogo-pwa-512.png b/app/assets/images/devlogo-pwa-512.png
new file mode 100644
index 0000000000000..8cffd9c1fa7c7
Binary files /dev/null and b/app/assets/images/devlogo-pwa-512.png differ
diff --git a/app/assets/images/devplain.svg b/app/assets/images/devplain.svg
new file mode 100644
index 0000000000000..69ed69deb7e53
--- /dev/null
+++ b/app/assets/images/devplain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/devsquarelogo.svg b/app/assets/images/devsquarelogo.svg
new file mode 100644
index 0000000000000..738ce88f84286
--- /dev/null
+++ b/app/assets/images/devsquarelogo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/devword.png b/app/assets/images/devword.png
new file mode 100644
index 0000000000000..01bd67e3d09fa
Binary files /dev/null and b/app/assets/images/devword.png differ
diff --git a/app/assets/images/emoji-apple-backpack.png b/app/assets/images/emoji-apple-backpack.png
new file mode 100644
index 0000000000000..524d419e1677b
Binary files /dev/null and b/app/assets/images/emoji-apple-backpack.png differ
diff --git a/app/assets/images/emoji-apple-hands.png b/app/assets/images/emoji-apple-hands.png
new file mode 100644
index 0000000000000..835e15e6d3d9c
Binary files /dev/null and b/app/assets/images/emoji-apple-hands.png differ
diff --git a/app/assets/images/emoji-apple-revolving-hearts.png b/app/assets/images/emoji-apple-revolving-hearts.png
new file mode 100644
index 0000000000000..db2f640a53944
Binary files /dev/null and b/app/assets/images/emoji-apple-revolving-hearts.png differ
diff --git a/app/assets/images/emoji-apple-shopping-bags.png b/app/assets/images/emoji-apple-shopping-bags.png
new file mode 100644
index 0000000000000..762207bb2f771
Binary files /dev/null and b/app/assets/images/emoji-apple-shopping-bags.png differ
diff --git a/app/assets/images/emoji-apple-unicorn.png b/app/assets/images/emoji-apple-unicorn.png
new file mode 100644
index 0000000000000..49f50bf48991a
Binary files /dev/null and b/app/assets/images/emoji-apple-unicorn.png differ
diff --git a/app/assets/images/emoji/apple-hugging-face.png b/app/assets/images/emoji/apple-hugging-face.png
new file mode 100644
index 0000000000000..3081991a3d642
Binary files /dev/null and b/app/assets/images/emoji/apple-hugging-face.png differ
diff --git a/app/assets/images/emoji/apple-nerd-face.png b/app/assets/images/emoji/apple-nerd-face.png
new file mode 100644
index 0000000000000..0f03e9dcd4c43
Binary files /dev/null and b/app/assets/images/emoji/apple-nerd-face.png differ
diff --git a/app/assets/images/emoji/apple-waving-hand.png b/app/assets/images/emoji/apple-waving-hand.png
new file mode 100644
index 0000000000000..5b221bf82b817
Binary files /dev/null and b/app/assets/images/emoji/apple-waving-hand.png differ
diff --git a/app/assets/images/emoji/emoji-one-bookmark.png b/app/assets/images/emoji/emoji-one-bookmark.png
new file mode 100644
index 0000000000000..6c470b772e25a
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-bookmark.png differ
diff --git a/app/assets/images/emoji/emoji-one-hands-gray.png b/app/assets/images/emoji/emoji-one-hands-gray.png
new file mode 100644
index 0000000000000..5b528a45e0075
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-hands-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-hands.png b/app/assets/images/emoji/emoji-one-hands.png
new file mode 100644
index 0000000000000..ad51bc934318f
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-hands.png differ
diff --git a/app/assets/images/emoji/emoji-one-heart.png b/app/assets/images/emoji/emoji-one-heart.png
new file mode 100644
index 0000000000000..c16b83e73caac
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-heart.png differ
diff --git a/app/assets/images/emoji/emoji-one-nausea-face-gray.png b/app/assets/images/emoji/emoji-one-nausea-face-gray.png
new file mode 100644
index 0000000000000..1baf4e7750b93
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-nausea-face-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-nausea-face.png b/app/assets/images/emoji/emoji-one-nausea-face.png
new file mode 100644
index 0000000000000..b8e8124544c75
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-nausea-face.png differ
diff --git a/app/assets/images/emoji/emoji-one-speech-balloon.png b/app/assets/images/emoji/emoji-one-speech-balloon.png
new file mode 100644
index 0000000000000..a329db584834a
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-speech-balloon.png differ
diff --git a/app/assets/images/emoji/emoji-one-television.png b/app/assets/images/emoji/emoji-one-television.png
new file mode 100644
index 0000000000000..992a3a93300a0
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-television.png differ
diff --git a/app/assets/images/emoji/emoji-one-thinking-gray.png b/app/assets/images/emoji/emoji-one-thinking-gray.png
new file mode 100644
index 0000000000000..6603432b54882
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-thinking-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-thinking.png b/app/assets/images/emoji/emoji-one-thinking.png
new file mode 100644
index 0000000000000..bc28867d20d25
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-thinking.png differ
diff --git a/app/assets/images/emoji/emoji-one-thumbs-down-gray.png b/app/assets/images/emoji/emoji-one-thumbs-down-gray.png
new file mode 100644
index 0000000000000..7f16d03f99ecf
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-thumbs-down-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-thumbs-down.png b/app/assets/images/emoji/emoji-one-thumbs-down.png
new file mode 100644
index 0000000000000..3cb0c58b57f95
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-thumbs-down.png differ
diff --git a/app/assets/images/emoji/emoji-one-unicorn-gray.png b/app/assets/images/emoji/emoji-one-unicorn-gray.png
new file mode 100644
index 0000000000000..3b46a77ae04fe
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-unicorn-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-unicorn.png b/app/assets/images/emoji/emoji-one-unicorn.png
new file mode 100644
index 0000000000000..faed20aeda525
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-unicorn.png differ
diff --git a/app/assets/images/emoji/emoji-one-warning-sign-gray.png b/app/assets/images/emoji/emoji-one-warning-sign-gray.png
new file mode 100644
index 0000000000000..db89c9224253c
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-warning-sign-gray.png differ
diff --git a/app/assets/images/emoji/emoji-one-warning-sign.png b/app/assets/images/emoji/emoji-one-warning-sign.png
new file mode 100644
index 0000000000000..842e45f31c3b6
Binary files /dev/null and b/app/assets/images/emoji/emoji-one-warning-sign.png differ
diff --git a/app/assets/images/emoji/emoji-sparkling-heart.png b/app/assets/images/emoji/emoji-sparkling-heart.png
new file mode 100644
index 0000000000000..cc672715c5b7e
Binary files /dev/null and b/app/assets/images/emoji/emoji-sparkling-heart.png differ
diff --git a/app/assets/images/facebook-logo.svg b/app/assets/images/facebook-logo.svg
new file mode 100644
index 0000000000000..bfa59a74fadd7
--- /dev/null
+++ b/app/assets/images/facebook-logo.svg
@@ -0,0 +1,41 @@
+
+
+
+
diff --git a/app/assets/images/facebook.svg b/app/assets/images/facebook.svg
new file mode 100644
index 0000000000000..6e3f2db814266
--- /dev/null
+++ b/app/assets/images/facebook.svg
@@ -0,0 +1,39 @@
+
+
+
diff --git a/app/assets/images/favicon-16x16.png b/app/assets/images/favicon-16x16.png
new file mode 100644
index 0000000000000..7eef5135c0835
Binary files /dev/null and b/app/assets/images/favicon-16x16.png differ
diff --git a/app/assets/images/favicon-32x32.png b/app/assets/images/favicon-32x32.png
new file mode 100644
index 0000000000000..5fc5631882b26
Binary files /dev/null and b/app/assets/images/favicon-32x32.png differ
diff --git a/app/assets/images/favicon-96x96.png b/app/assets/images/favicon-96x96.png
new file mode 100644
index 0000000000000..43aaf979b86a8
Binary files /dev/null and b/app/assets/images/favicon-96x96.png differ
diff --git a/app/assets/images/favicon.ico b/app/assets/images/favicon.ico
new file mode 100644
index 0000000000000..89059232c7223
Binary files /dev/null and b/app/assets/images/favicon.ico differ
diff --git a/app/assets/images/favorite-heart-outline-button.svg b/app/assets/images/favorite-heart-outline-button.svg
new file mode 100644
index 0000000000000..df5a1dea51204
--- /dev/null
+++ b/app/assets/images/favorite-heart-outline-button.svg
@@ -0,0 +1,45 @@
+
+
+
+
diff --git a/app/assets/images/fire.svg b/app/assets/images/fire.svg
new file mode 100644
index 0000000000000..d655c77c400f9
--- /dev/null
+++ b/app/assets/images/fire.svg
@@ -0,0 +1,44 @@
+
+
+
+
diff --git a/app/assets/images/github-logo.svg b/app/assets/images/github-logo.svg
new file mode 100644
index 0000000000000..d4a23372c1148
--- /dev/null
+++ b/app/assets/images/github-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/image-upload.svg b/app/assets/images/image-upload.svg
new file mode 100644
index 0000000000000..f5a443079c86d
--- /dev/null
+++ b/app/assets/images/image-upload.svg
@@ -0,0 +1,47 @@
+
+
+
diff --git a/app/assets/images/info.svg b/app/assets/images/info.svg
new file mode 100644
index 0000000000000..a981364f8787d
--- /dev/null
+++ b/app/assets/images/info.svg
@@ -0,0 +1,52 @@
+
+
+
diff --git a/app/assets/images/instagram-logo.png b/app/assets/images/instagram-logo.png
new file mode 100755
index 0000000000000..185e14dd19124
Binary files /dev/null and b/app/assets/images/instagram-logo.png differ
diff --git a/app/assets/images/instagram-logo.svg b/app/assets/images/instagram-logo.svg
new file mode 100644
index 0000000000000..8020d20574eec
--- /dev/null
+++ b/app/assets/images/instagram-logo.svg
@@ -0,0 +1,49 @@
+
+
+
+
diff --git a/app/assets/images/jess.jpg b/app/assets/images/jess.jpg
new file mode 100644
index 0000000000000..afbded17d073d
Binary files /dev/null and b/app/assets/images/jess.jpg differ
diff --git a/app/assets/images/key.svg b/app/assets/images/key.svg
new file mode 100644
index 0000000000000..71bf4250b9bf1
--- /dev/null
+++ b/app/assets/images/key.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/app/assets/images/lightning.svg b/app/assets/images/lightning.svg
new file mode 100644
index 0000000000000..988078faa89ff
--- /dev/null
+++ b/app/assets/images/lightning.svg
@@ -0,0 +1,42 @@
+
+
+
+
diff --git a/app/assets/images/link.svg b/app/assets/images/link.svg
new file mode 100644
index 0000000000000..81eca70b3f109
--- /dev/null
+++ b/app/assets/images/link.svg
@@ -0,0 +1,47 @@
+
+
+
+
diff --git a/app/assets/images/loading-ellipsis.svg b/app/assets/images/loading-ellipsis.svg
new file mode 100644
index 0000000000000..f84537f7f1cb0
--- /dev/null
+++ b/app/assets/images/loading-ellipsis.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/app/assets/images/membership-merch.png b/app/assets/images/membership-merch.png
new file mode 100644
index 0000000000000..399d6c8ca45ba
Binary files /dev/null and b/app/assets/images/membership-merch.png differ
diff --git a/app/assets/images/menu.svg b/app/assets/images/menu.svg
new file mode 100644
index 0000000000000..ee4281ec65d79
--- /dev/null
+++ b/app/assets/images/menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/ms-icon-144x144.png b/app/assets/images/ms-icon-144x144.png
new file mode 100644
index 0000000000000..7d8edfba578c6
Binary files /dev/null and b/app/assets/images/ms-icon-144x144.png differ
diff --git a/app/assets/images/ms-icon-150x150.png b/app/assets/images/ms-icon-150x150.png
new file mode 100644
index 0000000000000..673579c175088
Binary files /dev/null and b/app/assets/images/ms-icon-150x150.png differ
diff --git a/app/assets/images/ms-icon-310x310.png b/app/assets/images/ms-icon-310x310.png
new file mode 100644
index 0000000000000..87c76ad3c9123
Binary files /dev/null and b/app/assets/images/ms-icon-310x310.png differ
diff --git a/app/assets/images/ms-icon-70x70.png b/app/assets/images/ms-icon-70x70.png
new file mode 100644
index 0000000000000..1c2dbd15cad5e
Binary files /dev/null and b/app/assets/images/ms-icon-70x70.png differ
diff --git a/app/assets/images/nerd-emoji.png b/app/assets/images/nerd-emoji.png
new file mode 100644
index 0000000000000..a4182485bfe82
Binary files /dev/null and b/app/assets/images/nerd-emoji.png differ
diff --git a/app/assets/images/pausebutt.png b/app/assets/images/pausebutt.png
new file mode 100644
index 0000000000000..2f89c5c14fced
Binary files /dev/null and b/app/assets/images/pausebutt.png differ
diff --git a/app/assets/images/peace-sign.svg b/app/assets/images/peace-sign.svg
new file mode 100644
index 0000000000000..622aaa779b2d4
--- /dev/null
+++ b/app/assets/images/peace-sign.svg
@@ -0,0 +1,53 @@
+
+
+
diff --git a/app/assets/images/person-reading.svg b/app/assets/images/person-reading.svg
new file mode 100644
index 0000000000000..4c8d935429177
--- /dev/null
+++ b/app/assets/images/person-reading.svg
@@ -0,0 +1,53 @@
+
+
+
+
diff --git a/app/assets/images/play-butt.svg b/app/assets/images/play-butt.svg
new file mode 100644
index 0000000000000..f7a2343a1a9f7
--- /dev/null
+++ b/app/assets/images/play-butt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/playbutt.png b/app/assets/images/playbutt.png
new file mode 100644
index 0000000000000..cb5c55d42f183
Binary files /dev/null and b/app/assets/images/playbutt.png differ
diff --git a/app/assets/images/podcast-symbol.svg b/app/assets/images/podcast-symbol.svg
new file mode 100644
index 0000000000000..af5b6bf166512
--- /dev/null
+++ b/app/assets/images/podcast-symbol.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/app/assets/images/podcasts.png b/app/assets/images/podcasts.png
new file mode 100644
index 0000000000000..d048d31c4f935
Binary files /dev/null and b/app/assets/images/podcasts.png differ
diff --git a/app/assets/images/search.svg b/app/assets/images/search.svg
new file mode 100644
index 0000000000000..255d2eb8a3230
--- /dev/null
+++ b/app/assets/images/search.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/app/assets/images/shaking-hands.svg b/app/assets/images/shaking-hands.svg
new file mode 100644
index 0000000000000..8c45ac834b5e1
--- /dev/null
+++ b/app/assets/images/shaking-hands.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/app/assets/images/she-coded-rectangle.png b/app/assets/images/she-coded-rectangle.png
new file mode 100644
index 0000000000000..8ac8d15fa14b3
Binary files /dev/null and b/app/assets/images/she-coded-rectangle.png differ
diff --git a/app/assets/images/shop-logo.png b/app/assets/images/shop-logo.png
new file mode 100644
index 0000000000000..45a81fa629daa
Binary files /dev/null and b/app/assets/images/shop-logo.png differ
diff --git a/app/assets/images/shopify-logo.svg b/app/assets/images/shopify-logo.svg
new file mode 100644
index 0000000000000..fe4e183e69c86
--- /dev/null
+++ b/app/assets/images/shopify-logo.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/app/assets/images/sloan.png b/app/assets/images/sloan.png
new file mode 100644
index 0000000000000..adaea57406572
Binary files /dev/null and b/app/assets/images/sloan.png differ
diff --git a/app/assets/images/smashmouth.mp3 b/app/assets/images/smashmouth.mp3
new file mode 100644
index 0000000000000..ab3bcc26ea188
Binary files /dev/null and b/app/assets/images/smashmouth.mp3 differ
diff --git a/app/assets/images/stack.svg b/app/assets/images/stack.svg
new file mode 100644
index 0000000000000..3d8806b1aa886
--- /dev/null
+++ b/app/assets/images/stack.svg
@@ -0,0 +1,52 @@
+
+
+
diff --git a/app/assets/images/star.svg b/app/assets/images/star.svg
new file mode 100644
index 0000000000000..844d5888ed55f
--- /dev/null
+++ b/app/assets/images/star.svg
@@ -0,0 +1,37 @@
+
+
+
diff --git a/app/assets/images/sustaining-membership.svg b/app/assets/images/sustaining-membership.svg
new file mode 100644
index 0000000000000..e2986550524d7
--- /dev/null
+++ b/app/assets/images/sustaining-membership.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/thepracticaldevlogo.png b/app/assets/images/thepracticaldevlogo.png
new file mode 100644
index 0000000000000..796bd03100a49
Binary files /dev/null and b/app/assets/images/thepracticaldevlogo.png differ
diff --git a/app/assets/images/three-dots.svg b/app/assets/images/three-dots.svg
new file mode 100644
index 0000000000000..ed64ae84daf50
--- /dev/null
+++ b/app/assets/images/three-dots.svg
@@ -0,0 +1,43 @@
+
+
+
+
diff --git a/app/assets/images/tools.svg b/app/assets/images/tools.svg
new file mode 100644
index 0000000000000..a7c28020df5ec
--- /dev/null
+++ b/app/assets/images/tools.svg
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/app/assets/images/triple-unicorn.png b/app/assets/images/triple-unicorn.png
new file mode 100644
index 0000000000000..7642503dcb39f
Binary files /dev/null and b/app/assets/images/triple-unicorn.png differ
diff --git a/app/assets/images/twitch-logo.png b/app/assets/images/twitch-logo.png
new file mode 100644
index 0000000000000..6808e6ec887bf
Binary files /dev/null and b/app/assets/images/twitch-logo.png differ
diff --git a/app/assets/images/twitch-logo.svg b/app/assets/images/twitch-logo.svg
new file mode 100644
index 0000000000000..75735f5ca5f2e
--- /dev/null
+++ b/app/assets/images/twitch-logo.svg
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/assets/images/twitter-like-action.png b/app/assets/images/twitter-like-action.png
new file mode 100644
index 0000000000000..2c11c49de22f9
Binary files /dev/null and b/app/assets/images/twitter-like-action.png differ
diff --git a/app/assets/images/twitter-like-action.svg b/app/assets/images/twitter-like-action.svg
new file mode 100644
index 0000000000000..1438a13736f14
--- /dev/null
+++ b/app/assets/images/twitter-like-action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/twitter-logo.svg b/app/assets/images/twitter-logo.svg
new file mode 100644
index 0000000000000..30a520b0fd356
--- /dev/null
+++ b/app/assets/images/twitter-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/twitter-reply-action.svg b/app/assets/images/twitter-reply-action.svg
new file mode 100644
index 0000000000000..25358ef9977c2
--- /dev/null
+++ b/app/assets/images/twitter-reply-action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/twitter-reply-action_0.png b/app/assets/images/twitter-reply-action_0.png
new file mode 100644
index 0000000000000..9ffff7610f763
Binary files /dev/null and b/app/assets/images/twitter-reply-action_0.png differ
diff --git a/app/assets/images/twitter-retweet-action.png b/app/assets/images/twitter-retweet-action.png
new file mode 100644
index 0000000000000..b4e327b60a0bb
Binary files /dev/null and b/app/assets/images/twitter-retweet-action.png differ
diff --git a/app/assets/images/twitter-retweet-action.svg b/app/assets/images/twitter-retweet-action.svg
new file mode 100644
index 0000000000000..75610f6948c2f
--- /dev/null
+++ b/app/assets/images/twitter-retweet-action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/twitter.svg b/app/assets/images/twitter.svg
new file mode 100644
index 0000000000000..dcafb5a4fbff7
--- /dev/null
+++ b/app/assets/images/twitter.svg
@@ -0,0 +1,43 @@
+
+
+
diff --git a/app/assets/images/volume-mute.png b/app/assets/images/volume-mute.png
new file mode 100644
index 0000000000000..cb88d6efeb51a
Binary files /dev/null and b/app/assets/images/volume-mute.png differ
diff --git a/app/assets/images/volume.png b/app/assets/images/volume.png
new file mode 100644
index 0000000000000..83f0594228614
Binary files /dev/null and b/app/assets/images/volume.png differ
diff --git a/app/assets/images/wires.png b/app/assets/images/wires.png
new file mode 100644
index 0000000000000..04f4b13c49730
Binary files /dev/null and b/app/assets/images/wires.png differ
diff --git a/app/assets/images/write-new.svg b/app/assets/images/write-new.svg
new file mode 100644
index 0000000000000..cafa4eec1182b
--- /dev/null
+++ b/app/assets/images/write-new.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
new file mode 100644
index 0000000000000..8a60c2a61d9e5
--- /dev/null
+++ b/app/assets/javascripts/application.js
@@ -0,0 +1,15 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// compiled file.
+//
+// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
+// about supported directives.
+//
+//= require jquery
+//= require jquery_ujs
+//= require_tree .
\ No newline at end of file
diff --git a/app/assets/javascripts/base.js.erb b/app/assets/javascripts/base.js.erb
new file mode 100644
index 0000000000000..58164466744fa
--- /dev/null
+++ b/app/assets/javascripts/base.js.erb
@@ -0,0 +1,684 @@
+//= require_tree ./initializers
+//= require_tree ./utilities
+//= require lib/xss
+//= require initializePage
+//= require utilities/getImageForLink
+//= require airbrake-js-client
+//= require serviceworker-companion
+//= require algolia/v3/algoliasearch.min
+//= require fetch
+
+var instantClick
+ , InstantClick = instantClick = function(document, location, $userAgent) {
+ // Internal variables
+ var $isChromeForIOS = $userAgent.indexOf(' CriOS/') > -1
+ , $currentLocationWithoutHash
+ , $urlToPreload
+ , $preloadTimer
+ , $lastTouchTimestamp
+
+ // Preloading-related variables
+ , $history = {}
+ , $xhr
+ , $url = false
+ , $mustRedirect = false
+ , $fetchedBodies = {}
+ , $timing = {}
+ , $isPreloading = false
+ , $isWaitingForCompletion = false
+ , $trackedAssets = []
+
+ // Variables defined by public functions
+ , $preloadOnMousedown
+ , $delayBeforePreload
+ , $eventsCallbacks = {
+ fetch: [],
+ receive: [],
+ wait: [],
+ change: [],
+ restore: []
+ }
+
+
+ ////////// HELPERS //////////
+
+
+ function removeHash(url) {
+ var index = url.indexOf('#')
+ if (index < 0) {
+ return url
+ }
+ return url.substr(0, index)
+ }
+
+ function getLinkTarget(target) {
+ while (target && target.nodeName != 'A') {
+ target = target.parentNode
+ }
+ return target
+ }
+
+ function isBlacklisted(elem) {
+ do {
+ if (!elem.hasAttribute) { // Parent of
+ break
+ }
+ if (elem.hasAttribute('data-instant')) {
+ return false
+ }
+ if (elem.hasAttribute('data-no-instant')) {
+ return true
+ }
+ }
+ while (elem = elem.parentNode)
+ return false
+ }
+
+ function isPreloadable(a) {
+ var domain = location.protocol + '//' + location.host
+
+ if (a.target // target="_blank" etc.
+ || a.hasAttribute('download')
+ || a.href.indexOf(domain + '/') != 0 // Another domain, or no href attribute
+ || (a.href.indexOf('#') > -1
+ && removeHash(a.href) == $currentLocationWithoutHash) // Anchor
+ || isBlacklisted(a)
+ ) {
+ return false
+ }
+ return true
+ }
+
+ function triggerPageEvent(eventType, arg1, arg2, arg3) {
+ var returnValue = false
+ for (var i = 0; i < $eventsCallbacks[eventType].length; i++) {
+ if (eventType == 'receive') {
+ var altered = $eventsCallbacks[eventType][i](arg1, arg2, arg3)
+ if (altered) {
+ /* Update args for the next iteration of the loop. */
+ if ('body' in altered) {
+ arg2 = altered.body
+ }
+ if ('title' in altered) {
+ arg3 = altered.title
+ }
+
+ returnValue = altered
+ }
+ }
+ else {
+ $eventsCallbacks[eventType][i](arg1, arg2, arg3)
+ }
+ }
+ return returnValue
+ }
+
+ function changePage(title, body, newUrl, scrollY, pop) {
+ // NOT TOTALLY SURE THIS WORKS FOR ALL CASES
+ // HACKALICIOUS
+ if (document.getElementById("navigation-butt")) {
+ document.getElementById("navigation-butt").classList.remove('showing')
+ }
+ document.getElementsByTagName("BODY")[0].replaceChild(body, document.getElementById("page-content"))
+
+ var prog = document.getElementById("navigation-progress");
+ prog.classList.remove("showing");
+
+ if (newUrl) {
+ history.pushState(null, null, newUrl.replace("?samepage=true","").replace("&samepage=true",""))
+
+ var hashIndex = newUrl.indexOf('#')
+ , hashElem = hashIndex > -1
+ && document.getElementById(newUrl.substr(hashIndex + 1))
+ , offset = 0,
+ samePage = newUrl.indexOf("samepage=true") > -1
+
+ if (hashElem) {
+ while (hashElem.offsetParent) {
+ offset += hashElem.offsetTop
+
+ hashElem = hashElem.offsetParent
+ }
+ }
+ if (!samePage){
+ scrollTo(0, offset)
+ }
+
+
+ $currentLocationWithoutHash = removeHash(newUrl)
+ }
+ else {
+ scrollTo(0, scrollY)
+ }
+
+ if ($isChromeForIOS && document.title == title) {
+ /* Chrome for iOS:
+ *
+ * 1. Removes title on pushState, so the title needs to be set after.
+ *
+ * 2. Will not set the title if it's identical when trimmed, so
+ * appending a space won't do; but a non-breaking space works.
+ */
+ document.title = title + String.fromCharCode(160)
+ }
+ else {
+ document.title = title
+ }
+
+ instantanize()
+ if (pop) {
+ triggerPageEvent('restore')
+ }
+ else {
+ triggerPageEvent('change', false)
+ }
+ }
+
+ function setPreloadingAsHalted() {
+ $isPreloading = false
+ $isWaitingForCompletion = false
+ }
+
+ function removeNoscriptTags(html) {
+ /* Must be done on text, not on a node's innerHTML, otherwise strange
+ * things happen with implicitly closed elements (see the Noscript test).
+ */
+ return html.replace(/