{"action":"created","comment":{"url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/comments/106525354","pull_request_review_id":27443112,"id":106525354,"diff_hunk":"@@ -0,0 +1,187 @@\n+---\n+layout: post\n+title: \"Проекты: Сервис Быстрой Доствки Еды FoodFox\"\n+date: 2017-03-15 16:00\n+comments: true\n+categories:\n+- \"development\"\n+- \"workflow\"\n+- \"projects\"\n+author: Николай Неустроев\n+---\n+\n+## О проекте\n+\n+FoodFox — сервис быстрой доставки еды из локальных ресторанов. Представлен [сайтом](https://www.foodfox.ru/), [приложением для iOS](https://itunes.apple.com/ru/app/foodfox/id1078986931?l=en&mt=8) и [приложением для Android](https://play.google.com/store/apps/details?id=ru.foodfox.client). Бета-запуск проекта произошел в конце 2015, а в апреле 2016 сервис был запущен официально.\n+\n+[<img align=\"center\" src=\"/assets/images/foodfox/01-logo-white.jpg\" />](https://www.foodfox.ru/)\n+\n+FoodFox решает проблему отсутствия у многих хороших ресторанов собственной доставки. Главные особенности сервиса:\n+\n+1. Посетителю предлагается выбор только из ближайших ресторанов (2-2,5 км)\n+2. Собственные курьеры\n+3. Представлены только лучшие рестораны, разного ценового уровня. \n+\n+На данный момент проект работает только в центре Москвы, подключено около 50 объектов.\n+\n+## Сотрудничество\n+\n+Мы работаем с FoodFox по принципу предоставления персонала, то есть не принимаем участия в управлении разработкой.\n+\n+Создатели проекта обратились к нам по рекомендации. Работу мы начали осенью 2015 года. Со стороны FoodFox на тот момент были основатели: Максим, Сергей и Илья. А с нашей стороны — три разработчика и менеджер для координации. Количество наших программистов на проекте периодически меняется в зависимости от текущих потребностей заказчика.\n+\n+На проекте с самого начала был собственный опытный технический директор, но тем не менее, мы не просто выполняли роль исполнителей задач, но и делились опытом как в технической части (например, по архитектуре API), так и в целом по продукту: помогали построить рабочие процессы, вносили предложения по функционалу проекта и давали советы по вопросам, важным для продукта, но не связанным с программированием.\n+\n+## Пользовательская часть проекта\n+\n+Интерфейс очень лаконичный: на главной странице посетитель вводит адрес доставки и нажимает “Найти еду”. Зарегистрированные пользователи могут сохранять свои адреса, чтобы не вводить их каждый раз.\n+\n+<div class=\"fotorama\" data-allowfullscreen=\"true\">\n+    <img align=\"center\"  src=\"/assets/images/foodfox/02-user-main-adress.jpg\" data-caption=\"Главная страница\" />\n+</div>\n+\n+Далее выводится список ресторанов вблизи указанного места. Для каждого из них указаны параметры:\n+\n+* Название\n+* Тип кухни\n+* Ценовой уровень\n+* Примерное время доставки\n+* Расстояние\n+\n+<div class=\"fotorama\" data-allowfullscreen=\"true\">\n+    <img align=\"center\"  src=\"/assets/images/foodfox/03-user-choose.jpg\" data-caption=\"Список ресторанов\" />\n+</div>\n+\n+Зайдя на страницу ресторана, пользователь видит меню, где он выбирает блюда и делает заказ.\n+\n+<div class=\"fotorama\" data-allowfullscreen=\"true\">\n+    <img align=\"center\"  src=\"/assets/images/foodfox/04-user-menu.jpg\" data-caption=\"Страница меню ресторана\" />\n+</div>\n+\n+Затем пользователь ждет доставки, получает заказ и наслаждается вкусным блюдом.\n+\n+## Административная часть проекта\n+\n+Первая ключевая функция админки — это управление ресторанами. \n+\n+В списке ресторанов выводится основная информация: адрес, категории, среднее время приготовления и режим работы.\n+\n+<div class=\"fotorama\" data-allowfullscreen=\"true\">\n+    <img align=\"center\"  src=\"/assets/images/foodfox/05-admin-rest-list.png\" data-caption=\"\" />\n+</div>\n+\n+У каждого ресторана есть меню. На странице меню редактируются доступные блюда.\n+\n+<div class=\"fotorama\" data-allowfullscreen=\"true\">\n+    <img align=\"center\"  src=\"/assets/images/foodfox/06-admin-rest-menu.jpg\" data-caption=\"\" />\n+</div>\n+\n+Вторая важная функция админки — управление заказами.\n+\n+На странице списка заказов каждая из строчек показывается соответствующим цветом, в зависимости от текущего статуса. Как и в случае со списком ресторанов, можно вести поиск по всем основным параметрам.","path":"_posts/2017-03-15-foodfox.markdown","position":81,"original_position":81,"commit_id":"8afcff9c5d168bffcccf30ea5cdfa47e60719483","original_commit_id":"8afcff9c5d168bffcccf30ea5cdfa47e60719483","user":{"login":"remedge","id":285520,"avatar_url":"https://avatars1.githubusercontent.com/u/285520?v=3","gravatar_id":"","url":"https://api.github.com/users/remedge","html_url":"https://github.com/remedge","followers_url":"https://api.github.com/users/remedge/followers","following_url":"https://api.github.com/users/remedge/following{/other_user}","gists_url":"https://api.github.com/users/remedge/gists{/gist_id}","starred_url":"https://api.github.com/users/remedge/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/remedge/subscriptions","organizations_url":"https://api.github.com/users/remedge/orgs","repos_url":"https://api.github.com/users/remedge/repos","events_url":"https://api.github.com/users/remedge/events{/privacy}","received_events_url":"https://api.github.com/users/remedge/received_events","type":"User","site_admin":false},"body":"Запятая перед \"в зависимости от текущего статуса\" вроде как лишняя","created_at":"2017-03-16T20:38:39Z","updated_at":"2017-03-16T20:55:21Z","html_url":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131#discussion_r106525354","pull_request_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131","_links":{"self":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/comments/106525354"},"html":{"href":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131#discussion_r106525354"},"pull_request":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131"}}},"pull_request":{"url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131","id":110877417,"html_url":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131","diff_url":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131.diff","patch_url":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131.patch","issue_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/131","number":131,"state":"open","locked":false,"title":"foodfox case","user":{"login":"memphys","id":391910,"avatar_url":"https://avatars0.githubusercontent.com/u/391910?v=3","gravatar_id":"","url":"https://api.github.com/users/memphys","html_url":"https://github.com/memphys","followers_url":"https://api.github.com/users/memphys/followers","following_url":"https://api.github.com/users/memphys/following{/other_user}","gists_url":"https://api.github.com/users/memphys/gists{/gist_id}","starred_url":"https://api.github.com/users/memphys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/memphys/subscriptions","organizations_url":"https://api.github.com/users/memphys/orgs","repos_url":"https://api.github.com/users/memphys/repos","events_url":"https://api.github.com/users/memphys/events{/privacy}","received_events_url":"https://api.github.com/users/memphys/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-03-15T15:53:32Z","updated_at":"2017-03-16T20:55:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2008b9773ef89ac2bdf1b95c1e138bbda7dc1503","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131/commits","review_comments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131/comments","review_comment_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/comments{/number}","comments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/131/comments","statuses_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/statuses/8afcff9c5d168bffcccf30ea5cdfa47e60719483","head":{"label":"EvercodeLab:foodfox","ref":"foodfox","sha":"8afcff9c5d168bffcccf30ea5cdfa47e60719483","user":{"login":"EvercodeLab","id":1304897,"avatar_url":"https://avatars2.githubusercontent.com/u/1304897?v=3","gravatar_id":"","url":"https://api.github.com/users/EvercodeLab","html_url":"https://github.com/EvercodeLab","followers_url":"https://api.github.com/users/EvercodeLab/followers","following_url":"https://api.github.com/users/EvercodeLab/following{/other_user}","gists_url":"https://api.github.com/users/EvercodeLab/gists{/gist_id}","starred_url":"https://api.github.com/users/EvercodeLab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvercodeLab/subscriptions","organizations_url":"https://api.github.com/users/EvercodeLab/orgs","repos_url":"https://api.github.com/users/EvercodeLab/repos","events_url":"https://api.github.com/users/EvercodeLab/events{/privacy}","received_events_url":"https://api.github.com/users/EvercodeLab/received_events","type":"Organization","site_admin":false},"repo":{"id":3893526,"name":"blog.evercodelab.com","full_name":"EvercodeLab/blog.evercodelab.com","owner":{"login":"EvercodeLab","id":1304897,"avatar_url":"https://avatars2.githubusercontent.com/u/1304897?v=3","gravatar_id":"","url":"https://api.github.com/users/EvercodeLab","html_url":"https://github.com/EvercodeLab","followers_url":"https://api.github.com/users/EvercodeLab/followers","following_url":"https://api.github.com/users/EvercodeLab/following{/other_user}","gists_url":"https://api.github.com/users/EvercodeLab/gists{/gist_id}","starred_url":"https://api.github.com/users/EvercodeLab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvercodeLab/subscriptions","organizations_url":"https://api.github.com/users/EvercodeLab/orgs","repos_url":"https://api.github.com/users/EvercodeLab/repos","events_url":"https://api.github.com/users/EvercodeLab/events{/privacy}","received_events_url":"https://api.github.com/users/EvercodeLab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/EvercodeLab/blog.evercodelab.com","description":"Evercode Lab blog","fork":false,"url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com","forks_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/forks","keys_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/teams","hooks_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/hooks","issue_events_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/events{/number}","events_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/events","assignees_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/assignees{/user}","branches_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/branches{/branch}","tags_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/tags","blobs_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/statuses/{sha}","languages_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/languages","stargazers_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/stargazers","contributors_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/contributors","subscribers_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/subscribers","subscription_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/subscription","commits_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/contents/{+path}","compare_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/merges","archive_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/downloads","issues_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues{/number}","pulls_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls{/number}","milestones_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/milestones{/number}","notifications_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/labels{/name}","releases_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/releases{/id}","deployments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/deployments","created_at":"2012-04-01T15:56:33Z","updated_at":"2016-10-28T13:40:03Z","pushed_at":"2017-03-16T11:47:30Z","git_url":"git://github.com/EvercodeLab/blog.evercodelab.com.git","ssh_url":"git@github.com:EvercodeLab/blog.evercodelab.com.git","clone_url":"https://github.com/EvercodeLab/blog.evercodelab.com.git","svn_url":"https://github.com/EvercodeLab/blog.evercodelab.com","homepage":"http://blog.evercodelab.com/","size":85584,"stargazers_count":2,"watchers_count":2,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":2,"default_branch":"gh-pages"}},"base":{"label":"EvercodeLab:gh-pages","ref":"gh-pages","sha":"9047226133406a4305bad05e85967679870899ec","user":{"login":"EvercodeLab","id":1304897,"avatar_url":"https://avatars2.githubusercontent.com/u/1304897?v=3","gravatar_id":"","url":"https://api.github.com/users/EvercodeLab","html_url":"https://github.com/EvercodeLab","followers_url":"https://api.github.com/users/EvercodeLab/followers","following_url":"https://api.github.com/users/EvercodeLab/following{/other_user}","gists_url":"https://api.github.com/users/EvercodeLab/gists{/gist_id}","starred_url":"https://api.github.com/users/EvercodeLab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvercodeLab/subscriptions","organizations_url":"https://api.github.com/users/EvercodeLab/orgs","repos_url":"https://api.github.com/users/EvercodeLab/repos","events_url":"https://api.github.com/users/EvercodeLab/events{/privacy}","received_events_url":"https://api.github.com/users/EvercodeLab/received_events","type":"Organization","site_admin":false},"repo":{"id":3893526,"name":"blog.evercodelab.com","full_name":"EvercodeLab/blog.evercodelab.com","owner":{"login":"EvercodeLab","id":1304897,"avatar_url":"https://avatars2.githubusercontent.com/u/1304897?v=3","gravatar_id":"","url":"https://api.github.com/users/EvercodeLab","html_url":"https://github.com/EvercodeLab","followers_url":"https://api.github.com/users/EvercodeLab/followers","following_url":"https://api.github.com/users/EvercodeLab/following{/other_user}","gists_url":"https://api.github.com/users/EvercodeLab/gists{/gist_id}","starred_url":"https://api.github.com/users/EvercodeLab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvercodeLab/subscriptions","organizations_url":"https://api.github.com/users/EvercodeLab/orgs","repos_url":"https://api.github.com/users/EvercodeLab/repos","events_url":"https://api.github.com/users/EvercodeLab/events{/privacy}","received_events_url":"https://api.github.com/users/EvercodeLab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/EvercodeLab/blog.evercodelab.com","description":"Evercode Lab blog","fork":false,"url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com","forks_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/forks","keys_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/teams","hooks_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/hooks","issue_events_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/events{/number}","events_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/events","assignees_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/assignees{/user}","branches_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/branches{/branch}","tags_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/tags","blobs_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/statuses/{sha}","languages_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/languages","stargazers_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/stargazers","contributors_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/contributors","subscribers_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/subscribers","subscription_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/subscription","commits_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/contents/{+path}","compare_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/merges","archive_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/downloads","issues_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues{/number}","pulls_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls{/number}","milestones_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/milestones{/number}","notifications_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/labels{/name}","releases_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/releases{/id}","deployments_url":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/deployments","created_at":"2012-04-01T15:56:33Z","updated_at":"2016-10-28T13:40:03Z","pushed_at":"2017-03-16T11:47:30Z","git_url":"git://github.com/EvercodeLab/blog.evercodelab.com.git","ssh_url":"git@github.com:EvercodeLab/blog.evercodelab.com.git","clone_url":"https://github.com/EvercodeLab/blog.evercodelab.com.git","svn_url":"https://github.com/EvercodeLab/blog.evercodelab.com","homepage":"http://blog.evercodelab.com/","size":85584,"stargazers_count":2,"watchers_count":2,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":2,"default_branch":"gh-pages"}},"_links":{"self":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131"},"html":{"href":"https://github.com/EvercodeLab/blog.evercodelab.com/pull/131"},"issue":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/131"},"comments":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/issues/131/comments"},"review_comments":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131/comments"},"review_comment":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/pulls/131/commits"},"statuses":{"href":"https://api.github.com/repos/EvercodeLab/blog.evercodelab.com/statuses/8afcff9c5d168bffcccf30ea5cdfa47e60719483"}}}}
{"actor":{"display_login":"remedge"}}