From ae7ff6df369787509e5eaf383ef57079cef0ff3b Mon Sep 17 00:00:00 2001 From: abruere Date: Tue, 2 Jul 2019 01:40:31 +0200 Subject: [PATCH] init: Stelace Jobs marketplace template --- .editorconfig | 14 + .env.example | 130 + .eslintignore | 3 + .eslintrc.js | 51 + .gitignore | 82 + .postcssrc.js | 8 + .stylintrc | 35 + LICENSE | 21 + README.md | 155 + babel.config.js | 8 + docs/accessibility.md | 31 + docs/coding-style.md | 163 + docs/current-user.md | 10 + docs/deployment.md | 26 + docs/development-data.md | 37 + docs/i18n.md | 214 + docs/own-cdn.md | 220 + docs/performance.md | 49 + docs/theming.md | 25 + netlify.toml | 103 + package.json | 92 + quasar.conf.js | 536 + scripts/admin-sdk.js | 17 + scripts/buildTranslationFiles.js | 147 + scripts/data.example.js | 1938 ++++ scripts/deployManuallyToNetlifyProd.js | 22 + scripts/deployTranslations.js | 127 + scripts/init-data.js | 505 + scripts/translationEntriesParams.js | 10 + src-ssr/extension.js | 21 + src-ssr/index.js | 69 + src/App.vue | 134 + src/assets/workingoo-logo-button.svg | 5 + src/boot/.gitkeep | 0 src/boot/analytics.js | 53 + src/boot/devDebug.js | 5 + src/boot/errors.js | 81 + src/boot/exchangePlugin.js | 18 + src/boot/fonts.js | 16 + src/boot/globalComponents.js | 21 + src/boot/globalMixins.js | 7 + src/boot/signal.js | 23 + src/boot/vue-intl.js | 53 + src/boot/vuelidate.js | 5 + src/boot/vuex-router-sync.js | 5 + src/components/.gitkeep | 0 src/components/AccessComponent.vue | 61 + src/components/AppAvatar.vue | 107 + src/components/AppCarousel.vue | 85 + src/components/AppContent.vue | 99 + src/components/AppFooter.vue | 133 + src/components/AppGalleryUploader.vue | 225 + src/components/AppLink.vue | 67 + src/components/AppLogo.vue | 10 + src/components/AppMap.vue | 126 + src/components/AppMiniLogo.vue | 42 + src/components/AppRating.vue | 270 + src/components/AppRatingSlider.vue | 48 + src/components/AppRatingStars.vue | 45 + src/components/AppSVGActionButton.vue | 59 + src/components/AppSwitchableEditor.vue | 202 + src/components/AppUpdateDialog.vue | 68 + src/components/AssetCard.vue | 119 + src/components/AuthDialog.vue | 696 ++ src/components/AuthDialogUserType.vue | 141 + src/components/CheckoutButton.vue | 29 + src/components/ConfirmDeleteDialog.vue | 67 + src/components/CustomAttributesEditor.vue | 205 + src/components/DatePickerInput.vue | 109 + src/components/DateRangePicker.vue | 111 + src/components/EmailValidationDialog.vue | 164 + src/components/OwnerAssetCard.vue | 272 + src/components/PhoneValidationDialog.vue | 363 + src/components/PlacesAutocomplete.vue | 191 + src/components/Plans.vue | 238 + src/components/PublicProfileExperience.vue | 102 + .../PublicProfileExperienceDialog.vue | 199 + .../PublicProfileExperienceList.vue | 153 + src/components/RatingDialog.vue | 291 + src/components/RatingPrompt.vue | 101 + src/components/SearchToolbar.vue | 424 + src/components/SelectCategories.vue | 183 + src/components/TaxIdInput.vue | 147 + src/components/TheContextCard.vue | 959 ++ src/components/TransactionActions.vue | 180 + src/components/TransactionRating.vue | 178 + src/components/TransactionRatingsList.vue | 151 + src/components/TransactionStatus.vue | 64 + src/components/ValidationDialog.vue | 139 + src/components/VuePhotoSwipe.vue | 379 + src/css/app.styl | 85 + src/css/browser-overrides.styl | 22 + src/css/debug.styl | 6 + src/css/flex.styl | 14 + src/css/fonts.styl | 32 + src/css/quasar-overrides.styl | 40 + src/css/quasar.variables.styl | 32 + src/css/stelace-variables.styl | 17 + src/i18n/email/email.yaml | 143 + src/i18n/source/asset.yaml | 161 + src/i18n/source/authentication.yaml | 109 + src/i18n/source/error.yaml | 57 + src/i18n/source/form.yaml | 128 + src/i18n/source/instant_pages.yaml | 58 + src/i18n/source/misc.yaml | 53 + src/i18n/source/navigation.yaml | 60 + src/i18n/source/notification.yaml | 47 + src/i18n/source/pages.yaml | 370 + src/i18n/source/payment.yaml | 130 + src/i18n/source/pricing.yaml | 129 + src/i18n/source/prompt.yaml | 139 + src/i18n/source/rating.yaml | 95 + src/i18n/source/status.yaml | 19 + src/i18n/source/time.yaml | 204 + src/i18n/source/transaction.yaml | 151 + src/i18n/source/user.yaml | 198 + src/i18n/theme/asset.yaml | 26 + src/i18n/theme/form.yaml | 25 + src/i18n/theme/instant.yaml | 16 + src/i18n/theme/instant_pages.yaml | 27 + src/i18n/theme/instant_plans.yaml | 50 + src/i18n/theme/navigation.yaml | 3 + src/i18n/theme/pages.yaml | 32 + src/i18n/theme/payment.yaml | 5 + src/i18n/theme/pricing.yaml | 36 + src/i18n/theme/rating.yaml | 44 + src/i18n/theme/time.yaml | 4 + src/i18n/theme/transaction.yaml | 27 + src/i18n/theme/user.yaml | 35 + src/index.template.html | 169 + src/layouts/BasicHeroLayout.vue | 30 + src/layouts/MainLayout.vue | 331 + src/layouts/MainLayoutHeader.vue | 643 ++ src/mixins/.gitkeep | 0 src/mixins/AppUpload.js | 169 + src/mixins/authDialog.js | 26 + src/mixins/authenticatedRoute.js | 21 + src/mixins/authorizedRoute.js | 37 + src/mixins/hashScroll.js | 34 + src/mixins/history.js | 16 + src/mixins/notify.js | 45 + src/mixins/pageComponent.js | 17 + src/mixins/payment.js | 194 + src/mixins/seo.js | 31 + src/mixins/validationDialog.js | 12 + src/pages/Asset.vue | 416 + src/pages/Conversation.vue | 479 + src/pages/Error404.vue | 58 + src/pages/Home.vue | 567 + src/pages/Inbox.vue | 457 + src/pages/InstantPage.vue | 85 + src/pages/NewAsset.vue | 566 + src/pages/PublicProfile.vue | 541 + src/pages/Search.vue | 271 + src/pages/Subscription.vue | 132 + src/router/index.js | 36 + src/router/routes.js | 113 + src/statics/android-chrome-192x192.png | Bin 0 -> 3865 bytes src/statics/android-chrome-512x512.png | Bin 0 -> 9055 bytes src/statics/apple-touch-icon.png | Bin 0 -> 3093 bytes src/statics/browserconfig.xml | 11 + src/statics/crossdomain.xml | 15 + src/statics/favicon-16x16.png | Bin 0 -> 559 bytes src/statics/favicon-32x32.png | Bin 0 -> 1131 bytes src/statics/favicon-generator/README.md | 23 + .../favicon-generator/faviconGenerator.json | 68 + src/statics/favicon.ico | Bin 0 -> 7406 bytes src/statics/images/custom-icons.svg | 5 + src/statics/images/recruit-list.svg | 1092 ++ src/statics/manifest.json | 21 + src/statics/mstile-144x144.png | Bin 0 -> 2280 bytes src/statics/mstile-150x150.png | Bin 0 -> 2307 bytes src/statics/mstile-310x150.png | Bin 0 -> 2431 bytes src/statics/mstile-310x310.png | Bin 0 -> 3731 bytes src/statics/mstile-70x70.png | Bin 0 -> 1777 bytes src/statics/robots.txt | 3 + src/statics/safari-pinned-tab.svg | 1 + src/statics/site.webmanifest | 19 + src/store/access/actions.js | 0 src/store/access/getters.js | 114 + src/store/access/index.js | 12 + src/store/access/mutations.js | 5 + src/store/access/state.js | 3 + src/store/asset/actions.js | 198 + src/store/asset/getters.js | 55 + src/store/asset/index.js | 12 + src/store/asset/mutations.js | 25 + src/store/asset/state.js | 9 + src/store/auth/actions.js | 209 + src/store/auth/api.js | 19 + src/store/auth/getters.js | 76 + src/store/auth/index.js | 12 + src/store/auth/mutations.js | 62 + src/store/auth/state.js | 13 + src/store/common/actions.js | 111 + src/store/common/getters.js | 48 + src/store/common/index.js | 12 + src/store/common/mutations.js | 36 + src/store/common/state.js | 15 + src/store/content/actions.js | 210 + src/store/content/getters.js | 213 + src/store/content/index.js | 12 + src/store/content/mutations.js | 35 + src/store/content/state.js | 24 + src/store/inbox/actions.js | 249 + src/store/inbox/api.js | 0 src/store/inbox/getters.js | 163 + src/store/inbox/index.js | 12 + src/store/inbox/mutations.js | 41 + src/store/inbox/state.js | 22 + src/store/index.js | 45 + src/store/layout/actions.js | 4 + src/store/layout/getters.js | 4 + src/store/layout/index.js | 12 + src/store/layout/mutations.js | 15 + src/store/layout/state.js | 5 + src/store/mutation-types.js | 82 + src/store/payment/actions.js | 90 + src/store/payment/getters.js | 31 + src/store/payment/index.js | 12 + src/store/payment/mutations.js | 5 + src/store/payment/state.js | 3 + src/store/payment/utils.js | 109 + src/store/rating/actions.js | 178 + src/store/rating/api.js | 35 + src/store/rating/getters.js | 0 src/store/rating/index.js | 12 + src/store/rating/mutations.js | 19 + src/store/rating/state.js | 4 + src/store/search/actions.js | 293 + src/store/search/api.js | 75 + src/store/search/getters.js | 150 + src/store/search/index.js | 12 + src/store/search/mutations.js | 92 + src/store/search/state.js | 50 + src/store/style/actions.js | 4 + src/store/style/getters.js | 4 + src/store/style/index.js | 12 + src/store/style/mutations.js | 7 + src/store/style/state.js | 3 + src/store/transaction/actions.js | 100 + src/store/transaction/getters.js | 0 src/store/transaction/index.js | 12 + src/store/transaction/mutations.js | 5 + src/store/transaction/state.js | 3 + src/store/user/actions.js | 166 + src/store/user/api.js | 0 src/store/user/getters.js | 34 + src/store/user/index.js | 12 + src/store/user/mutations.js | 34 + src/store/user/state.js | 21 + src/styles.json | 38 + src/styles.json.md | 54 + src/utils/asset.js | 37 + src/utils/auth.js | 42 + src/utils/content.js | 62 + src/utils/conversation.js | 12 + src/utils/currencies.js | 524 + src/utils/custom-attributes.js | 11 + src/utils/event-bus.js | 5 + src/utils/id.js | 10 + src/utils/image.js | 319 + src/utils/init-sdk.js | 22 + src/utils/locale.js | 25 + src/utils/logger.js | 33 + src/utils/merging.js | 13 + src/utils/places.js | 102 + src/utils/rating.js | 25 + src/utils/s3.js | 48 + src/utils/stelace.js | 41 + src/utils/string.js | 36 + src/utils/time.js | 8 + src/utils/user.js | 133 + yarn.lock | 9313 +++++++++++++++++ 274 files changed, 37574 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .postcssrc.js create mode 100644 .stylintrc create mode 100644 LICENSE create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 docs/accessibility.md create mode 100644 docs/coding-style.md create mode 100644 docs/current-user.md create mode 100644 docs/deployment.md create mode 100644 docs/development-data.md create mode 100644 docs/i18n.md create mode 100644 docs/own-cdn.md create mode 100644 docs/performance.md create mode 100644 docs/theming.md create mode 100644 netlify.toml create mode 100644 package.json create mode 100644 quasar.conf.js create mode 100644 scripts/admin-sdk.js create mode 100644 scripts/buildTranslationFiles.js create mode 100644 scripts/data.example.js create mode 100644 scripts/deployManuallyToNetlifyProd.js create mode 100644 scripts/deployTranslations.js create mode 100644 scripts/init-data.js create mode 100644 scripts/translationEntriesParams.js create mode 100644 src-ssr/extension.js create mode 100644 src-ssr/index.js create mode 100644 src/App.vue create mode 100644 src/assets/workingoo-logo-button.svg create mode 100644 src/boot/.gitkeep create mode 100644 src/boot/analytics.js create mode 100644 src/boot/devDebug.js create mode 100644 src/boot/errors.js create mode 100644 src/boot/exchangePlugin.js create mode 100644 src/boot/fonts.js create mode 100644 src/boot/globalComponents.js create mode 100644 src/boot/globalMixins.js create mode 100644 src/boot/signal.js create mode 100644 src/boot/vue-intl.js create mode 100644 src/boot/vuelidate.js create mode 100644 src/boot/vuex-router-sync.js create mode 100644 src/components/.gitkeep create mode 100644 src/components/AccessComponent.vue create mode 100644 src/components/AppAvatar.vue create mode 100644 src/components/AppCarousel.vue create mode 100644 src/components/AppContent.vue create mode 100644 src/components/AppFooter.vue create mode 100644 src/components/AppGalleryUploader.vue create mode 100644 src/components/AppLink.vue create mode 100644 src/components/AppLogo.vue create mode 100644 src/components/AppMap.vue create mode 100644 src/components/AppMiniLogo.vue create mode 100644 src/components/AppRating.vue create mode 100644 src/components/AppRatingSlider.vue create mode 100644 src/components/AppRatingStars.vue create mode 100644 src/components/AppSVGActionButton.vue create mode 100644 src/components/AppSwitchableEditor.vue create mode 100644 src/components/AppUpdateDialog.vue create mode 100644 src/components/AssetCard.vue create mode 100644 src/components/AuthDialog.vue create mode 100644 src/components/AuthDialogUserType.vue create mode 100644 src/components/CheckoutButton.vue create mode 100644 src/components/ConfirmDeleteDialog.vue create mode 100644 src/components/CustomAttributesEditor.vue create mode 100644 src/components/DatePickerInput.vue create mode 100644 src/components/DateRangePicker.vue create mode 100644 src/components/EmailValidationDialog.vue create mode 100644 src/components/OwnerAssetCard.vue create mode 100644 src/components/PhoneValidationDialog.vue create mode 100644 src/components/PlacesAutocomplete.vue create mode 100644 src/components/Plans.vue create mode 100644 src/components/PublicProfileExperience.vue create mode 100644 src/components/PublicProfileExperienceDialog.vue create mode 100644 src/components/PublicProfileExperienceList.vue create mode 100644 src/components/RatingDialog.vue create mode 100644 src/components/RatingPrompt.vue create mode 100644 src/components/SearchToolbar.vue create mode 100644 src/components/SelectCategories.vue create mode 100644 src/components/TaxIdInput.vue create mode 100644 src/components/TheContextCard.vue create mode 100644 src/components/TransactionActions.vue create mode 100644 src/components/TransactionRating.vue create mode 100644 src/components/TransactionRatingsList.vue create mode 100644 src/components/TransactionStatus.vue create mode 100644 src/components/ValidationDialog.vue create mode 100644 src/components/VuePhotoSwipe.vue create mode 100644 src/css/app.styl create mode 100644 src/css/browser-overrides.styl create mode 100644 src/css/debug.styl create mode 100644 src/css/flex.styl create mode 100644 src/css/fonts.styl create mode 100644 src/css/quasar-overrides.styl create mode 100644 src/css/quasar.variables.styl create mode 100644 src/css/stelace-variables.styl create mode 100644 src/i18n/email/email.yaml create mode 100644 src/i18n/source/asset.yaml create mode 100644 src/i18n/source/authentication.yaml create mode 100644 src/i18n/source/error.yaml create mode 100644 src/i18n/source/form.yaml create mode 100644 src/i18n/source/instant_pages.yaml create mode 100644 src/i18n/source/misc.yaml create mode 100644 src/i18n/source/navigation.yaml create mode 100644 src/i18n/source/notification.yaml create mode 100644 src/i18n/source/pages.yaml create mode 100644 src/i18n/source/payment.yaml create mode 100644 src/i18n/source/pricing.yaml create mode 100644 src/i18n/source/prompt.yaml create mode 100644 src/i18n/source/rating.yaml create mode 100644 src/i18n/source/status.yaml create mode 100644 src/i18n/source/time.yaml create mode 100644 src/i18n/source/transaction.yaml create mode 100644 src/i18n/source/user.yaml create mode 100644 src/i18n/theme/asset.yaml create mode 100644 src/i18n/theme/form.yaml create mode 100644 src/i18n/theme/instant.yaml create mode 100644 src/i18n/theme/instant_pages.yaml create mode 100644 src/i18n/theme/instant_plans.yaml create mode 100644 src/i18n/theme/navigation.yaml create mode 100644 src/i18n/theme/pages.yaml create mode 100644 src/i18n/theme/payment.yaml create mode 100644 src/i18n/theme/pricing.yaml create mode 100644 src/i18n/theme/rating.yaml create mode 100644 src/i18n/theme/time.yaml create mode 100644 src/i18n/theme/transaction.yaml create mode 100644 src/i18n/theme/user.yaml create mode 100644 src/index.template.html create mode 100644 src/layouts/BasicHeroLayout.vue create mode 100644 src/layouts/MainLayout.vue create mode 100644 src/layouts/MainLayoutHeader.vue create mode 100644 src/mixins/.gitkeep create mode 100644 src/mixins/AppUpload.js create mode 100644 src/mixins/authDialog.js create mode 100644 src/mixins/authenticatedRoute.js create mode 100644 src/mixins/authorizedRoute.js create mode 100644 src/mixins/hashScroll.js create mode 100644 src/mixins/history.js create mode 100644 src/mixins/notify.js create mode 100644 src/mixins/pageComponent.js create mode 100644 src/mixins/payment.js create mode 100644 src/mixins/seo.js create mode 100644 src/mixins/validationDialog.js create mode 100644 src/pages/Asset.vue create mode 100644 src/pages/Conversation.vue create mode 100644 src/pages/Error404.vue create mode 100644 src/pages/Home.vue create mode 100644 src/pages/Inbox.vue create mode 100644 src/pages/InstantPage.vue create mode 100644 src/pages/NewAsset.vue create mode 100644 src/pages/PublicProfile.vue create mode 100644 src/pages/Search.vue create mode 100644 src/pages/Subscription.vue create mode 100644 src/router/index.js create mode 100644 src/router/routes.js create mode 100644 src/statics/android-chrome-192x192.png create mode 100644 src/statics/android-chrome-512x512.png create mode 100644 src/statics/apple-touch-icon.png create mode 100644 src/statics/browserconfig.xml create mode 100644 src/statics/crossdomain.xml create mode 100644 src/statics/favicon-16x16.png create mode 100644 src/statics/favicon-32x32.png create mode 100644 src/statics/favicon-generator/README.md create mode 100644 src/statics/favicon-generator/faviconGenerator.json create mode 100644 src/statics/favicon.ico create mode 100644 src/statics/images/custom-icons.svg create mode 100644 src/statics/images/recruit-list.svg create mode 100644 src/statics/manifest.json create mode 100644 src/statics/mstile-144x144.png create mode 100644 src/statics/mstile-150x150.png create mode 100644 src/statics/mstile-310x150.png create mode 100644 src/statics/mstile-310x310.png create mode 100644 src/statics/mstile-70x70.png create mode 100644 src/statics/robots.txt create mode 100644 src/statics/safari-pinned-tab.svg create mode 100644 src/statics/site.webmanifest create mode 100644 src/store/access/actions.js create mode 100644 src/store/access/getters.js create mode 100644 src/store/access/index.js create mode 100644 src/store/access/mutations.js create mode 100644 src/store/access/state.js create mode 100644 src/store/asset/actions.js create mode 100644 src/store/asset/getters.js create mode 100644 src/store/asset/index.js create mode 100644 src/store/asset/mutations.js create mode 100644 src/store/asset/state.js create mode 100644 src/store/auth/actions.js create mode 100644 src/store/auth/api.js create mode 100644 src/store/auth/getters.js create mode 100644 src/store/auth/index.js create mode 100644 src/store/auth/mutations.js create mode 100644 src/store/auth/state.js create mode 100644 src/store/common/actions.js create mode 100644 src/store/common/getters.js create mode 100644 src/store/common/index.js create mode 100644 src/store/common/mutations.js create mode 100644 src/store/common/state.js create mode 100644 src/store/content/actions.js create mode 100644 src/store/content/getters.js create mode 100644 src/store/content/index.js create mode 100644 src/store/content/mutations.js create mode 100644 src/store/content/state.js create mode 100644 src/store/inbox/actions.js create mode 100644 src/store/inbox/api.js create mode 100644 src/store/inbox/getters.js create mode 100644 src/store/inbox/index.js create mode 100644 src/store/inbox/mutations.js create mode 100644 src/store/inbox/state.js create mode 100644 src/store/index.js create mode 100644 src/store/layout/actions.js create mode 100644 src/store/layout/getters.js create mode 100644 src/store/layout/index.js create mode 100644 src/store/layout/mutations.js create mode 100644 src/store/layout/state.js create mode 100644 src/store/mutation-types.js create mode 100644 src/store/payment/actions.js create mode 100644 src/store/payment/getters.js create mode 100644 src/store/payment/index.js create mode 100644 src/store/payment/mutations.js create mode 100644 src/store/payment/state.js create mode 100644 src/store/payment/utils.js create mode 100644 src/store/rating/actions.js create mode 100644 src/store/rating/api.js create mode 100644 src/store/rating/getters.js create mode 100644 src/store/rating/index.js create mode 100644 src/store/rating/mutations.js create mode 100644 src/store/rating/state.js create mode 100644 src/store/search/actions.js create mode 100644 src/store/search/api.js create mode 100644 src/store/search/getters.js create mode 100644 src/store/search/index.js create mode 100644 src/store/search/mutations.js create mode 100644 src/store/search/state.js create mode 100644 src/store/style/actions.js create mode 100644 src/store/style/getters.js create mode 100644 src/store/style/index.js create mode 100644 src/store/style/mutations.js create mode 100644 src/store/style/state.js create mode 100644 src/store/transaction/actions.js create mode 100644 src/store/transaction/getters.js create mode 100644 src/store/transaction/index.js create mode 100644 src/store/transaction/mutations.js create mode 100644 src/store/transaction/state.js create mode 100644 src/store/user/actions.js create mode 100644 src/store/user/api.js create mode 100644 src/store/user/getters.js create mode 100644 src/store/user/index.js create mode 100644 src/store/user/mutations.js create mode 100644 src/store/user/state.js create mode 100644 src/styles.json create mode 100644 src/styles.json.md create mode 100644 src/utils/asset.js create mode 100644 src/utils/auth.js create mode 100644 src/utils/content.js create mode 100644 src/utils/conversation.js create mode 100644 src/utils/currencies.js create mode 100644 src/utils/custom-attributes.js create mode 100644 src/utils/event-bus.js create mode 100644 src/utils/id.js create mode 100644 src/utils/image.js create mode 100644 src/utils/init-sdk.js create mode 100644 src/utils/locale.js create mode 100644 src/utils/logger.js create mode 100644 src/utils/merging.js create mode 100644 src/utils/places.js create mode 100644 src/utils/rating.js create mode 100644 src/utils/s3.js create mode 100644 src/utils/stelace.js create mode 100644 src/utils/string.js create mode 100644 src/utils/time.js create mode 100644 src/utils/user.js create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..5370727d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..472914cd --- /dev/null +++ b/.env.example @@ -0,0 +1,130 @@ +# Publishable API key used for website (pubk_...) +STELACE_PUBLISHABLE_API_KEY= +# Secret API key used to retrieve data to prebuild pages (seck_...). +# Warning: only needed for build (scripts). Don’t include this key in your app. +STELACE_SECRET_API_KEY= + +# Stelace Instant URL used in app meta tags and for email redirections +STELACE_INSTANT_WEBSITE_URL= + +# Injected in various contents such as default translations +VUE_APP_SERVICE_NAME=Stelace + +# Currently 'en' or 'fr' +VUE_APP_DEFAULT_LANGUAGE= +# ISO code supported by payment provider, like 'USD' or 'EUR' +VUE_APP_DEFAULT_CURRENCY= + +# Text-search is typo-tolerant and includes all asset text fields by default +# If this var is set to true, text search input will simply filter on categories instead +VUE_APP_SEARCH_BY_CATEGORY= + + +##################### +## MAP / GEOCODING ## +##################### + +# Mapbox tiles style such as mapbox://styles/mapbox/streets-v11 (cf. mapbox docs). +# You can also use third-party tiles provider such as Maptiler +VUE_APP_MAPBOX_STYLE= +VUE_APP_MAPBOX_TOKEN= + +# Nominatim host and key to search locations based on text +# We suggest VUE_APP_NOMINATIM_HOST=https://open.mapquestapi.com +VUE_APP_NOMINATIM_HOST= +VUE_APP_NOMINATIM_KEY= + + + +############### +## ANALYTICS ## +############### + +# Provide this (like UA-XXXXXXXX-1) to use Google Analytics +VUE_APP_GOOGLE_ANALYTICS_ID= +# 'true' by default except when NODE_ENV === 'production'. Set this to 'false' to disable +VUE_APP_GOOGLE_ANALYTICS_DEBUG= + + +############# +## LOGGING ## +############# + +# You can fill this to make debugging much easier in production environement: +# You just have create a free sentry (https://sentry.io/) account to start logging errors remotely. +VUE_APP_SENTRY_LOGGING_DSN= + +# Source maps will be sent to your Sentry account on production build if you provide these. +# Note that we’ve already configured Webpack for you :) +# https://docs.sentry.io/platforms/javascript/sourcemaps/ +# Your token may need to have the following permissions to upload sourcemaps: +# project:read, project:releases, project:write, org:read +SENTRY_AUTH_TOKEN= +SENTRY_ORG= +SENTRY_PROJECT= + + +######################### +## ADDITIONAL SERVICES ## +######################### + +# Most of these can also be needed in specific Workflows + +# Provide Stripe keys for payments or subscriptions +# WARNING: secret key should only be used server-side (e.g. in Stelace Workflows) +STRIPE_SECRET_KEY= +STRIPE_PUBLISH_KEY= + +# Provide Vatsense information to verify tax ID +VATSENSE_API_KEY= + +# Provide Nexmo information to send verify phone numbers and send SMS +NEXMO_API_KEY= +NEXMO_API_SECRET= + + +########################### +## CONTINUOUS DEPLOYMENT ## +########################### + +# To enjoy built-in continuous deployment just click on "Deploy to netlify" in readme to get started. +# You will generally use the same project for production and live environments. +# Only set this if you want `yarn deploy:prod` to publish to a specific Netlify project +NETLIFY_ID_FOR_PRODUCTION= + + +################# +## DEVELOPMENT ## +################# + +# All of these can usually be left empty + +# set to 'true' to ease styling of some often-hidden elements (e.g. depending on user rights) +VUE_APP_DEBUG_STYLES= + +# Set to 'true' to use the same fonts CSS file as in production +# and disable Webfontloader during development. +# Webfontloader is convenient to try out fonts during development by just updating `userFont` in styles.json +# But including Google Fonts CSS equivalent in build allows loading speed optimization +# You may want set this to 'true' to ensure styles.json is always up to date for deployment to production +VUE_APP_USE_PROD_FONTS_CSS= + +# Following vars are probably only useful to Stelace devs + +# Override API URL (default: https://api.stelace.com) +STELACE_API_URL= + +# Can be changed to another WebSocket server implementing Stelace Signal conventions +# (default: https://api.stelace.com/signal) +VUE_APP_STELACE_SIGNAL_URL= + +# Dashboard URL +STELACE_DASHBOARD_URL= + +# Endpoint where we can get S3 bucket signed URL to upload user images and attachments +VUE_APP_CDN_POLICY_ENDPOINT= +# Useful when using a shared S3 bucket, to easily single out app’s files, e.g. 'dev/myname' +VUE_APP_CDN_UPLOAD_PREFIX= +# CDN offering image resizing API (based on Thumbor API http://www.thumbor.org/) +# Include protocol and trailing slash: 'https://cdn.instant.stelace.com/' +VUE_APP_CDN_WITH_IMAGE_HANDLER_URL= diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..411e8c75 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +statics +.cache +/dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..a7c2323d --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,51 @@ +module.exports = { + root: true, + + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + + env: { + browser: true + }, + + extends: [ + // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention + // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. + 'plugin:vue/recommended', + // https://github.com/standard/standard/blob/master/docs/RULES-en.md + 'standard', + ], + + // required to lint *.vue files + plugins: [ + 'vue' + ], + + globals: { + 'ga': true, // Google Analytics + 'cordova': true, + '__statics': true, + 'process': true + }, + + // add your custom rules here + rules: { + // allow console.log during development only + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'warn', + // allow debugger during development only + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn', + + 'comma-dangle': 'off', + + 'vue/no-unused-components': process.env.NODE_ENV === 'production' ? 'error' : 'warn', + 'vue/max-attributes-per-line': ["error", { + "singleline": 3, // instead of 1: one-liners are nice + "multiline": { + "max": 1, // default + "allowFirstLine": false // default + } + }] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d26c3ab1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,82 @@ +.quasar + +/dist + +# Additional translation files +/src/i18n/build +# Theme translation files are not ignored on purpose to ease theme development in forks +# But these must be committed on a branch _not_ used for pull requests + +# Cordova +/src-cordova/node_modules +/src-cordova/platforms +/src-cordova/plugins +/src-cordova/www + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# dotenv environment variables file +.env* +!.env.example + +# OS files +.DS_Store +.thumbs.db + +# Yarn +.pnp/ +.pnp.js +.yarn-integrity + +# Marketplace data +data.js diff --git a/.postcssrc.js b/.postcssrc.js new file mode 100644 index 00000000..1174fe52 --- /dev/null +++ b/.postcssrc.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + plugins: [ + // to edit target browsers: use "browserslist" field in package.json + require('autoprefixer') + ] +} diff --git a/.stylintrc b/.stylintrc new file mode 100644 index 00000000..ce38d777 --- /dev/null +++ b/.stylintrc @@ -0,0 +1,35 @@ +{ + "blocks": "never", + "brackets": "never", + "colons": "never", + "colors": "always", + "commaSpace": "always", + "commentSpace": "always", + "cssLiteral": "never", + "depthLimit": false, + "duplicates": true, + "efficient": "always", + "extendPref": false, + "globalDupe": true, + "indentPref": 2, + "leadingZero": "never", + "maxErrors": false, + "maxWarnings": false, + "mixed": false, + "namingConvention": false, + "namingConventionStrict": false, + "none": "never", + "noImportant": false, + "parenSpace": "never", + "placeholder": false, + "prefixVarsWithDollar": "always", + "quotePref": "single", + "semicolons": "never", + "sortOrder": false, + "stackedProperties": "never", + "trailingWhitespace": "never", + "universal": "never", + "valid": true, + "zeroUnits": "never", + "zIndexNormalize": false +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..caa44700 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright © 2019-present, Stelace + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..bb891a39 --- /dev/null +++ b/README.md @@ -0,0 +1,155 @@ +[![Stelace-platform-runner](https://user-images.githubusercontent.com/12909094/59638847-c41f1900-9159-11e9-9fa5-6d7806d57c92.png)](https://stelace.com) + +[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/stelace/stelace-instant) + +# Vue marketplace template + +> This Stelace template is free to use, under the terms of the [MIT license](./LICENSE). +Feel free to fork, contribute or just make it your own :heart:. + +--- + +This template offers **a full Vue.js marketplace front-end with pre-configured serverless deployment**. + +![stellar-jobs-screenshot](https://user-images.githubusercontent.com/12909094/60470099-762d0980-9c5f-11e9-8d78-0bade89101c4.jpg) + +A lighter platform template focused on search and automation is [also available](https://github.com/stelace/heroes-platform-demo). + +**What is Stelace?** + +[Stelace](https://stelace.com/) provides search, inventory and user management infrastructure for Web platforms, ranging from search-intensive marketplaces to online community apps. Stelace offers powerful backend and APIs including advanced search, automation, and content delivery, to let you focus on what makes your platform unique. + +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +--- + +## Features :gift: + +- [Asset](https://stelace.com/docs/assets) management and platform transaction process :chart_with_upwards_trend: +- Powerful and typo-tolerant [Search](https://stelace.com/docs/search) :mag:, on a relevance _and_ dynamic availability basis +- [User](https://stelace.com/docs/users) authentication +- User management and [Ratings](https://stelace.com/docs/ratings) :star: +- Real-time [Events](https://stelace.com/docs/command/events) and [Messaging](https://stelace.com/docs/messages) +- Automation with Stelace [Workflows](https://stelace.com/docs/command/workflows) :traffic_light: +- Headless CMS :page_with_curl: with Stelace [Content API](https://stelace.com/docs/content) +- Global CDN for images and user files +- i18n :earth_africa: and full [translations](./docs/i18n.md) +- [Performance](./docs/performance.md) (90+ Lighthouse score) :checkered_flag: +- [Accessibility](./docs/accessibility.md) +- Built-in debugging for production +- … +- and [much more](https://stelace.com) with Stelace API + +## Integrations + +Leverage these integrations to start running your platform even faster: + +- Automated and continuous deployment with [Netlify](https://www.netlify.com/) +- Maps and place search with [OpenStreetMap](https://www.openstreetmap.org/) providers +- [Stripe](https://stripe.com/) subscriptions to monetize your premium features +- [Sentry](https://sentry.io/) for logging in production environment +- Phone validation with [Nexmo](https://www.nexmo.com/) +- Google Analytics + +## Stack + +- [Vue.js](https://github.com/vuejs/vue) and [Quasar](https://github.com/quasarframework/quasar) +- [Stelace Backend](https://stelace.com) +- [Stelace.js](https://github.com/stelace/stelace.js) SDK +- Node.js >= 8.9 for tooling + +## Stelace Dashboard + +You will be able to use [official Stelace dashboard](https://stelace.com), enabling your team to access real-time stats, settings, live design and content editing with translation tools, asset and user management and much more. + +[![Stelace Dashboard](https://user-images.githubusercontent.com/12909094/38527674-415ac06c-3c5c-11e8-89d3-c92c3be1d377.png)](https://stelace.com) + +## Getting started + +You first need to get your Stelace API Key. Good news: [it’s free](https://stelace.com/pricing). + +1. Clone this repository + +``` +git clone https://github.com/stelace/stelace-instant.git +cd stelace-instant +``` + +2. Install node_modules + +``` +yarn +# or +npm install +``` + +3. Create environment files for development and production. +You can copy `.env.example` and fill it with Stelace API keys. + +``` +cp .env.example .env.development +cp .env.example .env.production +``` + +You need to fill the following environment variables: + +- STELACE_INSTANT_WEBSITE_URL +- STELACE_*PUBLISHABLE_API_KEY (pubk_*...) used in Vue app +- STELACE_*SECRET_API_KEY (seck_*...) used in data seeding scripts + +4. Start the development server + +``` +yarn dev +# or +quasar dev +``` + +Please refer to [Quasar docs](https://v1.quasar-framework.org/) for more details about configuration and info on components. + +5. Seed development [data](./docs/development-data.md) + +``` +cp scripts/data.example.js scripts/data.js +node scripts/init-data.js +``` + +
+For Stelace Team or partners developing with on-premise API server. + +Stelace Core API server has to be launched locally before starting this project's server. + +First we need to launch services needed by Stelace Core API. + +``` +docker-compose up -d elasticsearch postgresql redis +``` + +Then we need to initialize the database with Instant configuration. + +``` +cd /path/to/stelace-core +git checkout dev +yarn setup:instant +``` + +Secret and publishable api keys will be displayed so you can use it as environment variables for this project. + +Let’s start the server. + +``` +yarn start +``` + +You’ll probably need to set some environment variables such as STELACE_API_URL (http://127.0.0.1:API_PORT). + +Please refer to`.env.example`. + +
+ +## Deployment + +We’ve set up continuous deployment for you with Netlify. + +You just have to click "_Deploy to netlify_" above and follow the instructions to deploy. + +Please refer to [deployment docs section](./docs/deployment.md) for more details or alternatives. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..be6a7e98 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,8 @@ +module.exports = { + plugins: [ + 'lodash' + ], + presets: [ + '@quasar/babel-preset-app' + ] +} diff --git a/docs/accessibility.md b/docs/accessibility.md new file mode 100644 index 00000000..976e7240 --- /dev/null +++ b/docs/accessibility.md @@ -0,0 +1,31 @@ +# Accessibility + +Great care is required when handling with accessibility, including: + +- Forms +- Focus and keyboard navigation +- Contrasts +- Screen-readers + +## Forms + +Inputs and other form elements must be wrapped in HTML form tags with main form button having `type="submit"` attribute. + +Vue can be used to prevent default browser refresh behavior with `@submit.prevent="optionalMethod"` on form element. + +## Focus + +Use native `