{"action":"closed","issue":{"url":"https://api.github.com/repos/feathersjs/feathers/issues/163","repository_url":"https://api.github.com/repos/feathersjs/feathers","labels_url":"https://api.github.com/repos/feathersjs/feathers/issues/163/labels{/name}","comments_url":"https://api.github.com/repos/feathersjs/feathers/issues/163/comments","events_url":"https://api.github.com/repos/feathersjs/feathers/issues/163/events","html_url":"https://github.com/feathersjs/feathers/issues/163","id":114967260,"number":163,"title":"Create a comprehensive tutorial/example","user":{"login":"ekryski","id":599019,"avatar_url":"https://avatars.githubusercontent.com/u/599019?v=3","gravatar_id":"","url":"https://api.github.com/users/ekryski","html_url":"https://github.com/ekryski","followers_url":"https://api.github.com/users/ekryski/followers","following_url":"https://api.github.com/users/ekryski/following{/other_user}","gists_url":"https://api.github.com/users/ekryski/gists{/gist_id}","starred_url":"https://api.github.com/users/ekryski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ekryski/subscriptions","organizations_url":"https://api.github.com/users/ekryski/orgs","repos_url":"https://api.github.com/users/ekryski/repos","events_url":"https://api.github.com/users/ekryski/events{/privacy}","received_events_url":"https://api.github.com/users/ekryski/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/feathersjs/feathers/labels/documentation","name":"documentation","color":"d4c5f9"},{"url":"https://api.github.com/repos/feathersjs/feathers/labels/task","name":"task","color":"009800"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/feathersjs/feathers/milestones/6","html_url":"https://github.com/feathersjs/feathers/milestones/2.0.0","labels_url":"https://api.github.com/repos/feathersjs/feathers/milestones/6/labels","id":1015565,"number":6,"title":"2.0.0","description":"Next major Feathers release which will be split up into several submodules and fully use ES6. This will be a breaking change.\r\n\r\nIn addition we should have:\r\n\r\n- authentication with JWT sorted out\r\n- better documentation\r\n- a more comprehensive example\r\n- micro-service scaling using `feathers-sync`\r\n- app and service generators","creator":{"login":"daffl","id":338316,"avatar_url":"https://avatars.githubusercontent.com/u/338316?v=3","gravatar_id":"","url":"https://api.github.com/users/daffl","html_url":"https://github.com/daffl","followers_url":"https://api.github.com/users/daffl/followers","following_url":"https://api.github.com/users/daffl/following{/other_user}","gists_url":"https://api.github.com/users/daffl/gists{/gist_id}","starred_url":"https://api.github.com/users/daffl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daffl/subscriptions","organizations_url":"https://api.github.com/users/daffl/orgs","repos_url":"https://api.github.com/users/daffl/repos","events_url":"https://api.github.com/users/daffl/events{/privacy}","received_events_url":"https://api.github.com/users/daffl/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":22,"state":"open","created_at":"2015-03-10T21:56:21Z","updated_at":"2016-03-16T17:44:28Z","due_on":"2016-03-14T07:00:00Z","closed_at":null},"comments":6,"created_at":"2015-11-04T04:34:39Z","updated_at":"2016-03-16T17:44:28Z","closed_at":"2016-03-16T17:44:28Z","body":"Our Todo example is great for simplicity but doesn't answer questions most people have when they come to feathers. The tutorial needs to be more comprehensive and should demonstrate:\r\n\r\n- How do you authenticate\r\n- How do you do authorization (ie. permissions)\r\n- How do you sanitize data prior to it hitting a service\r\n- How to do data serialization out (ie. remove passwords)\r\n- How do you run multiple real time instances (ie. how do you scale?)\r\n- How do you filter/namespace events\r\n\r\nSo with this in mind we are going to be creating a new, very simple real time chat app. There are a lot of reasons for this but the TL;DR is it will make more sense as a realistic example for a Feathers app.\r\n\r\nThis was actually a difficult decision because we don't want to create more work for ourselves than we need to but a Todo list with login, different user roles, multiple micro services running on different machines just doesn't really make sense. That's one of the issues with [Meteor's Todo example](https://www.meteor.com/todos). It shoe horns realistic requirements into an unrealistic situation.\r\n\r\nSo with that said building a chat app is great choice for these reasons:\r\n\r\n- It immediately makes sense why it should be real time. Real time Todos are kind of a gimmick, real time chat is actually valuable.\r\n- It makes sense to have login and different user roles\r\n- We can separate it out into different services more naturally and it makes sense to scale certain ones more than others. For example, the message service will get way more traffic in a chat app than auth or user services.\r\n- It will still be fairly simple to grasp\r\n- It can showcase all that feathers offers (hooks, db adapters, real time, isomorphic)\r\n- It can be expanded on for more advanced examples (picture/video chat, mobile apps, mail sending, etc)\r\n\r\n## Feathers Real Time Chat Tutorial Steps\r\n\r\nThese are the things the app/tutorial should cover, in this order:\r\n\r\n### Basic Intro\r\n\r\n- [x] Brief intro to Feathers\r\n    - What it is\r\n    - Philosophy\r\n- [x] Download Feathers\r\n- [x] Generate a new app\r\n- [x] Start the app (we should already have a Users service)\r\n- [x] Set up/test out authentication\r\n- [x] Generate additional Messages service\r\n- [x] Introduce hooks and add authorization for the Users service\r\n    - Admin roles (can delete/edit any messages)\r\n    - Regular user roles (can send a message, can only edit their own messages)\r\n- [x] Wire up the client side code\r\n\r\n### Next Steps (Advanced Intro)\r\n\r\nThese might be a continuation of the actual guide or may be separate projects/blog posts. I don't feel that they need to be done for this issue to be complete so we'll probably move them to their own later.\r\n\r\n- [ ] Adding social sign-on with Github and explaining how to consolidate accounts\r\n- [ ] Adding email confirmation\r\n- [ ] Adding direct messages (ie. name spacing events)\r\n- [ ] Breaking out services into their own apps (ie. scaling)\r\n    - Real time communication options (via db, via feathers client, via pub-sub/redis)\r\n- [ ] Dockerizing your Feathers app\r\n- [ ] Deploying to Digital Ocean\r\n- [ ] Creating mobile clients\r\n"}}