├── .gitignore ├── app ├── imports │ ├── server │ │ └── main.js │ ├── client │ │ ├── lib │ │ │ └── routes.js │ │ ├── utils │ │ │ ├── functions.js │ │ │ └── helpers.js │ │ ├── views │ │ │ ├── partials │ │ │ │ ├── footer │ │ │ │ │ ├── footer.jade │ │ │ │ │ └── footer.js │ │ │ │ └── header │ │ │ │ │ ├── header.jade │ │ │ │ │ └── header.js │ │ │ └── pages │ │ │ │ └── home │ │ │ │ ├── home.jade │ │ │ │ └── home.js │ │ └── main.js │ └── lib │ │ ├── schemas │ │ └── users.js │ │ └── main.js ├── .meteor │ ├── .gitignore │ ├── release │ ├── platforms │ ├── .id │ ├── .finished-upgraders │ ├── packages │ └── versions ├── lib │ └── main.js ├── client │ ├── main.js │ └── main.jade ├── server │ └── main.js ├── settings.json ├── .dockerignore ├── Dockerfile ├── .eslintrc └── package.json ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /app/imports/server/main.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /app/imports/client/lib/routes.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/imports/lib/schemas/users.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.6.0.1 2 | -------------------------------------------------------------------------------- /app/imports/client/utils/functions.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/imports/client/utils/helpers.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /app/lib/main.js: -------------------------------------------------------------------------------- 1 | import '/imports/lib/main.js'; -------------------------------------------------------------------------------- /app/imports/client/views/partials/footer/footer.jade: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/imports/client/views/partials/header/header.jade: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/imports/lib/main.js: -------------------------------------------------------------------------------- 1 | import './schemas/users.js'; -------------------------------------------------------------------------------- /app/client/main.js: -------------------------------------------------------------------------------- 1 | import '/imports/client/main.js'; 2 | -------------------------------------------------------------------------------- /app/server/main.js: -------------------------------------------------------------------------------- 1 | import '/imports/server/main.js'; 2 | -------------------------------------------------------------------------------- /app/imports/client/views/pages/home/home.jade: -------------------------------------------------------------------------------- 1 | template(name="home") -------------------------------------------------------------------------------- /app/imports/client/views/partials/footer/footer.js: -------------------------------------------------------------------------------- 1 | import './footer.jade'; 2 | -------------------------------------------------------------------------------- /app/imports/client/views/partials/header/header.js: -------------------------------------------------------------------------------- 1 | import './header.jade'; 2 | -------------------------------------------------------------------------------- /app/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "public": { 3 | 4 | }, 5 | "private": { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | .git 4 | .gitignore 5 | .idea 6 | .jshintrc 7 | .eslintrc 8 | README.md 9 | 10 | -------------------------------------------------------------------------------- /app/imports/client/views/pages/home/home.js: -------------------------------------------------------------------------------- 1 | Template.home.helpers({}); 2 | Template.home.events({}); 3 | Template.home.onRendered(function() {}); 4 | Template.home.onCreated(function() {}); 5 | -------------------------------------------------------------------------------- /app/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jshimko/meteor-launchpad:latest 2 | # todo: This is only temporary solution, this should be switched to sth smaller like alpine based image 3 | 4 | ENV NODE_ENV production 5 | -------------------------------------------------------------------------------- /app/imports/client/main.js: -------------------------------------------------------------------------------- 1 | // Routes 2 | import './lib/routes.js'; 3 | 4 | // Helpful things 5 | import './utils/functions.js'; 6 | import './utils/helpers.js'; 7 | 8 | // Partials 9 | import './views/partials/header/header.js'; 10 | import './views/partials/footer/footer.js'; 11 | -------------------------------------------------------------------------------- /app/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "meteor" 4 | ], 5 | "extends": [ 6 | "airbnb", 7 | "plugin:meteor/recommended" 8 | ], 9 | "parserOptions": { 10 | "ecmaVersion": 6, 11 | "sourceType": "module" 12 | }, 13 | "rules": { 14 | "import/no-unresolved": 0 15 | } 16 | } -------------------------------------------------------------------------------- /app/.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | 4fjthh4qatm01q3xeq4 8 | -------------------------------------------------------------------------------- /app/.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | 1.3.0-split-minifiers-package 14 | 1.4.0-remove-old-dev-bundle-link 15 | 1.4.1-add-shell-server-package 16 | 1.4.3-split-account-service-packages 17 | 1.5-add-dynamic-import-package 18 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app", 3 | "private": true, 4 | "scripts": { 5 | "start": "meteor run", 6 | "lint": "eslint .", 7 | "pretest": "npm run lint --silent" 8 | }, 9 | "dependencies": { 10 | "meteor-node-stubs": "~0.2.0" 11 | }, 12 | "devDependencies": { 13 | "babel-eslint": "^6.0.4", 14 | "eslint": "^2.13.0", 15 | "eslint-config-airbnb": "^9.0.1", 16 | "eslint-plugin-import": "^1.8.1", 17 | "eslint-plugin-jsx-a11y": "^1.5.3", 18 | "eslint-plugin-meteor": "^3.6.0", 19 | "eslint-plugin-react": "^5.2.2" 20 | }, 21 | "eslintConfig": { 22 | "plugins": [ 23 | "meteor" 24 | ], 25 | "extends": [ 26 | "airbnb", 27 | "plugin:meteor/recommended" 28 | ], 29 | "parserOptions": { 30 | "ecmaVersion": 6, 31 | "sourceType": "module" 32 | }, 33 | "rules": { 34 | "import/no-unresolved": 0 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # Check this file (and the other files in this directory) into your repository. 3 | # 4 | # 'meteor add' and 'meteor remove' will edit this file for you, 5 | # but you can also edit it by hand. 6 | 7 | meteor-base@1.2.0 # Packages every Meteor app needs to have 8 | mobile-experience@1.0.5 # Packages for a great mobile UX 9 | mongo@1.3.1 # The database Meteor supports right now 10 | blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views 11 | reactive-var@1.0.11 # Reactive variable for tracker 12 | jquery@1.11.10 # Helpful client-side library 13 | tracker@1.1.3 # Meteor's client-side reactive programming library 14 | 15 | standard-minifier-css@1.3.5 # CSS minifier run for production mode 16 | standard-minifier-js@2.2.0 # JS minifier run for production mode 17 | es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. 18 | ecmascript@0.9.0 # Enable ECMAScript2015+ syntax in app code 19 | 20 | iron:router 21 | mquandalle:jade 22 | aldeed:simple-schema 23 | aldeed:autoform 24 | check@1.2.5 25 | accounts-base@1.4.0 26 | less@2.7.11 27 | jabbslad:basic-auth 28 | shell-server 29 | dynamic-import 30 | -------------------------------------------------------------------------------- /app/.meteor/versions: -------------------------------------------------------------------------------- 1 | accounts-base@1.4.1 2 | aldeed:autoform@5.8.1 3 | aldeed:simple-schema@1.5.3 4 | allow-deny@1.1.0 5 | autoupdate@1.3.12 6 | babel-compiler@6.24.7 7 | babel-runtime@1.1.1 8 | base64@1.0.10 9 | binary-heap@1.0.10 10 | blaze@2.3.2 11 | blaze-html-templates@1.1.2 12 | blaze-tools@1.0.10 13 | boilerplate-generator@1.3.1 14 | caching-compiler@1.1.9 15 | caching-html-compiler@1.1.2 16 | callback-hook@1.0.10 17 | check@1.2.5 18 | ddp@1.4.0 19 | ddp-client@2.2.0 20 | ddp-common@1.3.0 21 | ddp-rate-limiter@1.0.7 22 | ddp-server@2.1.1 23 | deps@1.0.12 24 | diff-sequence@1.0.7 25 | dynamic-import@0.2.1 26 | ecmascript@0.9.0 27 | ecmascript-runtime@0.5.0 28 | ecmascript-runtime-client@0.5.0 29 | ecmascript-runtime-server@0.5.0 30 | ejson@1.1.0 31 | es5-shim@4.6.15 32 | geojson-utils@1.0.10 33 | hot-code-push@1.0.4 34 | html-tools@1.0.11 35 | htmljs@1.0.11 36 | http@1.3.0 37 | id-map@1.0.9 38 | iron:controller@1.0.12 39 | iron:core@1.0.11 40 | iron:dynamic-template@1.0.12 41 | iron:layout@1.0.12 42 | iron:location@1.0.11 43 | iron:middleware-stack@1.1.0 44 | iron:router@1.1.2 45 | iron:url@1.1.0 46 | jabbslad:basic-auth@0.2.2 47 | jquery@1.11.10 48 | launch-screen@1.1.1 49 | less@2.7.11 50 | livedata@1.0.18 51 | localstorage@1.2.0 52 | logging@1.1.19 53 | mdg:validation-error@0.5.1 54 | meteor@1.8.2 55 | meteor-base@1.2.0 56 | minifier-css@1.2.16 57 | minifier-js@2.2.2 58 | minifiers@1.1.7 59 | minimongo@1.4.3 60 | mobile-experience@1.0.5 61 | mobile-status-bar@1.0.14 62 | modules@0.11.2 63 | modules-runtime@0.9.1 64 | momentjs:moment@2.14.4 65 | mongo@1.3.1 66 | mongo-dev-server@1.1.0 67 | mongo-id@1.0.6 68 | mquandalle:jade@0.4.9 69 | mquandalle:jade-compiler@0.4.5 70 | npm-mongo@2.2.33 71 | observe-sequence@1.0.16 72 | ordered-dict@1.0.9 73 | promise@0.10.0 74 | random@1.0.10 75 | rate-limit@1.0.8 76 | reactive-dict@1.2.0 77 | reactive-var@1.0.11 78 | reload@1.1.11 79 | retry@1.0.9 80 | routepolicy@1.0.12 81 | service-configuration@1.0.11 82 | shell-server@0.3.1 83 | spacebars@1.0.15 84 | spacebars-compiler@1.1.3 85 | standard-minifier-css@1.3.5 86 | standard-minifier-js@2.2.3 87 | templating@1.3.2 88 | templating-compiler@1.3.3 89 | templating-runtime@1.3.2 90 | templating-tools@1.1.2 91 | tracker@1.1.3 92 | ui@1.0.13 93 | underscore@1.0.10 94 | url@1.1.0 95 | webapp@1.4.0 96 | webapp-hashing@1.0.9 97 | -------------------------------------------------------------------------------- /app/client/main.jade: -------------------------------------------------------------------------------- 1 | head 2 | meta(name="viewport" content="width=device-width, initial-scale=1.0") 3 | meta(http-equiv="X-UA-Compatible" content="IE=edge") 4 | link(rel='apple-touch-icon', sizes='57x57', href='/apple-touch-icon-57x57.png') 5 | link(rel='apple-touch-icon', sizes='60x60', href='/apple-touch-icon-60x60.png') 6 | link(rel='apple-touch-icon', sizes='72x72', href='/apple-touch-icon-72x72.png') 7 | link(rel='apple-touch-icon', sizes='76x76', href='/apple-touch-icon-76x76.png') 8 | link(rel='apple-touch-icon', sizes='114x114', href='/apple-touch-icon-114x114.png') 9 | link(rel='apple-touch-icon', sizes='120x120', href='/apple-touch-icon-120x120.png') 10 | link(rel='apple-touch-icon', sizes='144x144', href='/apple-touch-icon-144x144.png') 11 | link(rel='apple-touch-icon', sizes='152x152', href='/apple-touch-icon-152x152.png') 12 | link(rel='apple-touch-icon', sizes='180x180', href='/apple-touch-icon-180x180.png') 13 | link(rel='icon', type='image/png', href='/favicon-32x32.png', sizes='32x32') 14 | link(rel='icon', type='image/png', href='/favicon-194x194.png', sizes='194x194') 15 | link(rel='icon', type='image/png', href='/favicon-96x96.png', sizes='96x96') 16 | link(rel='icon', type='image/png', href='/android-chrome-192x192.png', sizes='192x192') 17 | link(rel='icon', type='image/png', href='/favicon-16x16.png', sizes='16x16') 18 | link(rel='manifest', href='/manifest.json') 19 | meta(name='msapplication-TileColor', content='#df6823') 20 | meta(name='msapplication-TileImage', content='/mstile-144x144.png') 21 | meta(name='theme-color', content='#f2d44d') 22 | meta(name='description', content='Fill me before going live!') 23 | meta(property='og:url', content='Fill me before going live!') 24 | meta(property='og:title', content='Fill me before going live!') 25 | meta(property='og:site_name', content='Fill me before going live!') 26 | meta(property='og:type', content='Fill me before going live!') 27 | meta(property='og:image', content='Fill me before going live!') 28 | meta(property='og:description', content='Fill me before going live!') 29 | meta(property='twitter:url', content='Fill me before going live!') 30 | meta(property='twitter:title', content='Fill me before going live!') 31 | meta(property='twitter:card', content='Fill me before going live!') 32 | meta(property='twitter:creator', content='Fill me before going live!') 33 | meta(property='twitter:image', content='Fill me before going live!') 34 | body 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Cat In Black Meteor](http://res.cloudinary.com/czarny-kod/image/upload/v1467275882/meteor_mfdvco.jpg) 2 | #Cat In Black 3 | From the beginning, we have done successfully more than 300 projects for companies from different sectors. We create startups, we precursors and love Lean Startup methodology and Customer Development. We know many of the technologies and know which one will be the most right for you. 4 | 5 | Read more about company: https://catin.black and our Meteor Partnership: http://catin.black/meteor 6 | 7 | ## Meteor Starter Pack for Apps 8 | To fully use the module system and ensure that our code only runs when we ask it to, we recommend that all of your application code should be placed inside the imports/ directory. This means that the Meteor build system will only bundle and include that file if it is referenced from another file using an import (also called “lazy evaluation or loading”). 9 | 10 | Meteor will load all files outside of any directory named imports/ in the application using the default file load order rules (also called “eager evaluation or loading”). It is recommended that you create exactly two eagerly loaded files, client/main.js and server/main.js, in order to define explicit entry points for both the client and the server. Meteor ensures that any file in any directory named server/ will only be available on the server, and likewise for files in any directory named client/. This also precludes trying to import a file to be used on the server from any directory named client/ even if it is nested in an imports/ directory and vice versa for importing client files from server/. 11 | 12 | These main.js files won’t do anything themselves, but they should import some startup modules which will run immediately, on client and server respectively, when the app loads. These modules should do any configuration necessary for the packages you are using in your app, and import the rest of your app’s code. 13 | 14 | 15 | ## Structure 16 | ### APP 17 | ``` 18 | imports/ 19 | client/ 20 | main.js # import client startup through a single index entry point 21 | lib/ 22 | routes.js # set up all routes in the app 23 | utils/ 24 | functions.js 25 | helpers.js 26 | views/ 27 | pages/ 28 | home/ 29 | home.js 30 | home.jade 31 | partials/ 32 | footer/ 33 | footer.js 34 | footer.jade 35 | header/ 36 | header.js 37 | header.jade 38 | 39 | server/ 40 | main.js # import server startup through a single index entry point 41 | 42 | client/ 43 | main.js # client entry point, imports all client code 44 | main.jade 45 | 46 | lib/ 47 | main.js # lib entry point, imports all lib code 48 | 49 | ``` 50 | #### Development server 51 | For example if you are using: http://meteor.toys you will be able to use Mongol in your browser. 52 | It is a good idea to use: ```jabbslad:basic-auth``` and set password when using this deploy version. Use it on your server site code: 53 | ``` 54 | 55 | if (process.env.NODE_ENV === "development") { 56 | var basicAuth = new HttpBasicAuth("catinblack-login", "catinblack-password"); 57 | basicAuth.protect(); 58 | METEORTOYSSHELL = true; 59 | } 60 | 61 | ``` 62 | 63 | Structure: 64 | 65 | ``` 66 | 67 | devel/ 68 | mupx.json # Meteor Up configuration file 69 | settings.json # Settings for Meteor's settings API 70 | 71 | ``` 72 | 73 | #### Production server 74 | Structure: 75 | 76 | ``` 77 | 78 | production/ 79 | mupx.json # Meteor Up configuration file 80 | settings.json # Settings for Meteor's settings API 81 | 82 | ``` 83 | 84 | ## Packages 85 | ``` 86 | meteor-base # Packages every Meteor app needs to have 87 | mobile-experience # Packages for a great mobile UX 88 | mongo # The database Meteor supports right now 89 | blaze-html-templates # Compile .html files into Meteor Blaze views 90 | reactive-var # Reactive variable for tracker 91 | jquery # Helpful client-side library 92 | tracker # Meteor's client-side reactive programming library 93 | 94 | standard-minifier-css # CSS minifier run for production mode 95 | standard-minifier-js # JS minifier run for production mode 96 | es5-shim # ECMAScript 5 compatibility for older browsers. 97 | ecmascript # Enable ECMAScript2015+ syntax in app code 98 | 99 | iron:router 100 | mquandalle:jade 101 | fourseven:scss 102 | aldeed:simple-schema 103 | aldeed:autoform 104 | check 105 | accounts-base 106 | ``` 107 | 108 | ## Motivation 109 | 110 | Fast start new project 111 | 112 | ## Installation 113 | 114 | ``` 115 | > meteor npm install 116 | > meteor --settings settings.json 117 | ``` 118 | 119 | ## Tests 120 | 121 | ``` 122 | meteor test --driver-package=practicalmeteor:mocha --full-app --settings settings.json 123 | ``` 124 | 125 | ### Simple test 126 | 127 | This loads your application in a special “test mode”. What this does is: 128 | Doesn’t eagerly load any of our application code as Meteor normally would. 129 | Does eagerly load any file in our application (including in imports/ folders) that look like *.test[s].*, or *.spec[s].* 130 | Sets the Meteor.isTest flag to be true. 131 | Starts up the test driver package (see below). 132 | 133 | ### --full-app 134 | 135 | It loads test files matching *.app-test[s].* and *.app-spec[s].*. 136 | It does eagerly load our application code as Meteor normally would. 137 | Sets the Meteor.isAppTest flag to be true (instead of the Meteor.isTest flag). 138 | 139 | 140 | 141 | --------------------------------------------------------------------------------