diff --git a/src/config/projectQuestions/caas_intake.v1.0.js b/src/config/projectQuestions/caas_intake.v1.0.js new file mode 100644 index 000000000..3cb9bcb42 --- /dev/null +++ b/src/config/projectQuestions/caas_intake.v1.0.js @@ -0,0 +1,337 @@ +// import NumberText from '../../components/NumberText/NumberText' +import { isFileRequired, findTitle, findFilesSectionTitle } from '../projectWizard' + +const sections = [ + { + id: 'appDefinition', + title: findTitle, + required: true, + description: 'Welcome to your own private Gig Crowd', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name to your project', + fieldName: 'name', + description: '', + title: 'Project Name', + type: 'project-name' + }, + { + id: 'questions', + required: true, + hideTitle: true, + title: 'Questions', + description: '', + type: 'questions', + questions: [ + { + id: 'projectInfo', + fieldName: 'description', + // required is not needed if we specifiy validations + // required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired: 'Please describe your application.', + minLength: 'Please enter at least 160 characters' + }, + description: 'Brief describe your application', + title: 'Description', + type: 'textbox' + }, + { + icon: 'question', + title: 'How many full time resources do you need?', + description: '', + fieldName: 'details.resources.total', + type: 'textbox', + required: true, + validationError: 'Please enter number of resources' + }, + { + icon: 'question', + title: 'How many months do you need the resource for', + description: '', + fieldName: 'details.resources.months', + type: 'slide-radiogroup', + options: [ + {value: '1', title: '1'}, + {value: '2', title: '2'}, + {value: '3', title: '3'}, + {value: '4', title: '4'}, + {value: '5', title: '5'}, + {value: '6', title: '6'}, + {value: '7', title: '7'}, + {value: '8', title: '8'}, + {value: '9', title: '9'}, + {value: '10', title: '10'}, + {value: '11', title: '11'}, + {value: '12', title: '12'} + ], + required: true, + validationError: 'Please select one' + }, + { + icon: 'question', + title: 'What skills do you need?', + description: '', + fieldName: 'details.resources.skills', + type: 'checkbox-group', + options: [ + { value: 'ios', label:'iOS' }, + { value: 'data-sci', label:'Data Science' }, + { value: 'android', label:'Android' }, + { value: 'java', label:'java' }, + { value: 'dotnet', label:'.NET' }, + { value: 'node', label:'NodeJS' }, + { value: 'javascript', label:'Javascript' }, + { value: 'react', label:'ReactJS' }, + { value: 'angular', label:'AngularJS' } + ] + }, + { + icon: 'question', + title: 'What is the typical hourly rate you are paying?', + description: '', + fieldName: 'details.resources.hourlyrate', + type: 'slide-radiogroup', + options: [ + { value: 'under30', title:'Under $30' }, + { value: 'under60', title:'Under $60' }, + { value: 'under80', title:'Under $80' }, + { value: 'under100', title:'Under $100' }, + { value: 'under125', title:'Under $125' }, + { value: 'under150', title:'Under $150' }, + { value: 'over150', title:'Over $150' }, + ] + }, + { + icon: 'question', + title: 'What language would you like to interact with the team?', + description: '', + fieldName: 'details.resources.hourlyrate', + type: 'slide-radiogroup', + options: [ + { value: 'english', title:'English' }, + { value: 'spanish', title:'Spanish' }, + { value: 'german', title:'German' }, + { value: 'japanese', title:'Japanese' }, + { value: 'other', title:'Other' } + ] + }, + { + fieldName: 'details.resources.tooling', + // required is not needed if we specifiy validations + // required: true, + description: 'Please List all project tools you normally interact with', + title: 'Project Tools you utilize for interacting with developers', + type: 'textbox' + }, + ] + }, + { + id: 'notes', + fieldName: 'details.appDefinition.notes', + title: 'Additional Notes', + description: 'Please detail any other additional information. After \ + completing this form, you\'ll be able to add additional information about \ + your code base', + type: 'notes' + } + + + ] + }, + { + id: 'optionals', + required: false, + title: 'Code base', + description: 'Please provide us access to your codebase below or contact \ + Topcoder through your dashboard.', + subSections: [ + { + id: 'additional', + required: false, + title: 'Codebase questions', + description: '', + type: 'questions', + questions: [ + { + icon: 'question', + fieldName: 'details.security.codeURL', + description: '(if you prefer you can also upload your code below)', + title: 'Please provide a URL to your code base repository', + type: 'textbox' + + }, + { + icon: 'question', + title: 'Please provide Topcoder with any additional information about \ + accessing your code base', + description: '', + fieldName: 'details.security.additionalInfo', + type: 'textbox' + } + ] + }, + { + id: 'files', + required: isFileRequired, + title: findFilesSectionTitle, + description: '', + type: 'files', + fieldName: 'attachments' + } + + ] + } + + +] + +export default sections + +export const basicSections = [ + { + id: 'appDefinition', + title: '', + required: true, + description: 'Create your own private Gig Workforce with Topcoder by answering \ + a few simple questions', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name to your project', + fieldName: 'name', + title: 'Project Name', + description: '', + type: 'project-name' + }, + { + id: 'questions', + required: true, + hideTitle: true, + title: 'Questions', + description: '', + type: 'questions', + questions: [ + { + id: 'projectInfo', + fieldName: 'description', + // required is not needed if we specifiy validations + // required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired: 'Please describe your application.', + minLength: 'Please enter at least 160 characters' + }, + description: 'Brief describe your application', + title: 'Description', + type: 'textbox' + }, + { + icon: 'question', + title: 'How many full time resources do you need?', + description: '', + fieldName: 'details.resources.total', + type: 'textbox', + required: true, + validationError: 'Please enter number of resources' + }, + { + icon: 'question', + title: 'How many months do you need the resource for', + description: '', + fieldName: 'details.resources.months', + type: 'slide-radiogroup', + options: [ + {value: '1', title: '1'}, + {value: '2', title: '2'}, + {value: '3', title: '3'}, + {value: '4', title: '4'}, + {value: '5', title: '5'}, + {value: '6', title: '6'}, + {value: '7', title: '7'}, + {value: '8', title: '8'}, + {value: '9', title: '9'}, + {value: '10', title: '10'}, + {value: '11', title: '11'}, + {value: '12', title: '12'} + ], + required: true, + validationError: 'Please select one' + }, + { + icon: 'question', + title: 'What skills do you need?', + description: '', + fieldName: 'details.resources.skills', + type: 'checkbox-group', + options: [ + { value: 'ios', label:'iOS' }, + { value: 'data-sci', label:'Data Science' }, + { value: 'android', label:'Android' }, + { value: 'java', label:'java' }, + { value: 'dotnet', label:'.NET' }, + { value: 'node', label:'NodeJS' }, + { value: 'javascript', label:'Javascript' }, + { value: 'react', label:'ReactJS' }, + { value: 'angular', label:'AngularJS' } + ] + }, + { + icon: 'question', + title: 'What is the typical hourly rate you are paying?', + description: '', + fieldName: 'details.resources.hourlyrate', + type: 'slide-radiogroup', + options: [ + { value: 'under30', title:'Under $30' }, + { value: 'under60', title:'Under $60' }, + { value: 'under80', title:'Under $80' }, + { value: 'under100', title:'Under $100' }, + { value: 'under125', title:'Under $125' }, + { value: 'under150', title:'Under $150' }, + { value: 'over150', title:'Over $150' }, + ] + }, + { + icon: 'question', + title: 'What language would you like to interact with the team?', + description: '', + fieldName: 'details.resources.hourlyrate', + type: 'slide-radiogroup', + options: [ + { value: 'english', title:'English' }, + { value: 'spanish', title:'Spanish' }, + { value: 'german', title:'German' }, + { value: 'japanese', title:'Japanese' }, + { value: 'other', title:'Other' } + ] + }, + { + fieldName: 'details.resources.tooling', + // required is not needed if we specifiy validations + // required: true, + description: 'Please List all project tools you normally interact with', + title: 'Project Tools you utilize for interacting with developers', + type: 'textbox' + }, + ] + }, + { + id: 'notes', + fieldName: 'details.appDefinition.notes', + title: 'Additional Notes', + description: 'Please detail any other additional information. After \ + completing this form, you\'ll be able to add additional information about \ + your code base', + type: 'notes' + } + + ] + } + + +] diff --git a/src/config/projectQuestions/enterprise_mobile.v1.0.js b/src/config/projectQuestions/enterprise_mobile.v1.0.js index 77e57f9c4..3f33fe16a 100644 --- a/src/config/projectQuestions/enterprise_mobile.v1.0.js +++ b/src/config/projectQuestions/enterprise_mobile.v1.0.js @@ -1,5 +1,4 @@ import React from 'react' // eslint-disable-line no-unused-vars -import { isFileRequired, findFilesSectionTitle } from '../projectWizard' const sections = [ { @@ -17,7 +16,7 @@ const sections = [ type: 'project-name' }, { - id: 'questions', + id: 'user', required: true, hideTitle: true, title: 'Questions', @@ -75,71 +74,67 @@ const sections = [ }, { icon: 'question', - validationError: 'Please let us know the form factor required', - title: 'App Type', - description: 'Please place an X in the Required column for each form \ - factor/orientation that must be supported.', + title: 'Form Factor/Orientation', + description: 'Please place an X in the Required column for each \ + form factor/orientation that must be supported.', fieldName: 'details.appDefinition.formFactor', type: 'checkbox-group', options: [ - { value: 'mobile-portrait', label: 'Mobile - Portrait' }, - { value: 'mobile-landscape', label: 'Mobile - Landscape' }, - { value: 'tablet-portrait', label: 'Tablet - Portrait' }, - { value: 'tablet-landscape', label: 'Tablet - Landscape' } + { value: 'mobile-phone-portrait', label: 'Mobile Phone - Portrait' }, + { value: 'mobile-phone-landscape', label: 'Mobile Phone - Landscape' }, + { value: 'tablet-device-portrait', label: 'Tablet Device - Portrait'}, + { value: 'tablet-device-landscape', label: 'Tablet Device - Landscape' } ] + } + + ] + }, + { + required: false, + hideTitle: false, + title: 'Style Guide & Brand Guidelines', + description: '', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.Styleguide', + title: 'Do you have a style guide or branding guidelines that need to be followed?', + type: 'textbox' }, { - icon: 'question', - description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', + // required is not needed if we specifiy validations + // required: true, - title: 'Budget', - fieldName: 'details.loadDetails.budget', - type: 'slide-radiogroup', - options: [ - { value: 'upto-25', title: 'Under $25K '}, - { value: 'upto-50', title: '$25K to $50K' }, - { value: 'upto-75', title: '$50K to $75K' }, - { value: 'upto-100', title: '$75K to $100K' }, - { value: 'above-100', title: 'More than $100K' } - ], - required: true, - validationError: 'Please provide expected hours of execution' + fieldName: 'details.designGuidelines.fonts', + title: 'Are there any particular fonts you want used?', + type: 'textbox' }, { - icon: 'question', - description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', - title: 'Timeline', - fieldName: 'details.loadDetails.timeline', - type: 'slide-radiogroup', - options: [ - { value: 'upto-1month', title: 'Under 1 month'}, - { value: 'upto-2months', title: '1 to 2 months' }, - { value: 'upto-3months', title: '2 to 3 months' }, - { value: 'upto-6months', title: '3 to 6 months' } - ], - required: true, - validationError: 'Please provide expected hours of execution' + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.colors', + title: 'Are there any particular colors/themes you want used?', + type: 'textbox' }, { - icon: 'question', - title: 'Feature requirements', - description: 'Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.', - type: 'see-attached-features', - fieldName: 'details.appDefinition.features' + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.appIcon', + title: 'Do you need an app icon designed, or will you provide one?', + type: 'textbox' } ] }, - { - id: 'notes', - fieldName: 'details.appDefinition.notes', - title: 'Notes', - description: 'Add any other important information regarding your project (e.g., links to documents or existing applications)', - type: 'notes' - }, { required: false, hideTitle: false, title: 'User Roles', + type: 'questions', description: 'Please place an X in the Required column for each user type/role. Please provide details on what the user/role should do in the Description column.', questions: [ { @@ -201,6 +196,81 @@ const sections = [ } ] }, + { + id: 'screen-features', + required: false, + hideTitle: false, + title: 'Screen and Features', + description: '', + type: 'questions', + questions: [ + { + icon: 'question', + title: 'Screen / Feature List', + description: 'Please note that each added feature incurs a cost, \ + but that the cost will be detailed and broken out in the \ + final project proposal. ', + fieldName: 'details.appDefinition.screens', + type: 'checkbox-group', + options: [ + { value: 'enterprise-login', label:'Enterprise Login - Supports integration with an existing authorization/authentication mechanism.'}, + { value: 'email-login', label:'Email Login - Support sign in using an email address/password.'}, + { value: 'social-login', label:'Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.'}, + { value: 'registration', label:'Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.'}, + { value: 'invitations', label:'Invitations - Allow users to invite others to use your app via email. '}, + { value: 'introductions', label:'Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.'}, + { value: 'onboarding', label:'Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.'}, + { value: 'search', label:'Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.'}, + { value: 'location-based-services', label:'Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.'}, + { value: 'camera', label:'Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.'}, + { value: 'file-upload', label:'File Upload - Allow users to upload photos or other files.'}, + { value: 'notifications', label:'Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.'}, + { value: 'dashboard', label:'Dashboard - App must have a central dashboard where users can access functionality'}, + { value: 'tagging', label:'Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.'}, + { value: 'account-settings', label:'Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.'}, + { value: 'help-faws', label:'Help/FAQs - Include a section dedicated to FAQ or Help content.'}, + { value: 'marketplace', label:'Marketplace - Allow users to buy, sell, or rent products or services.'}, + { value: 'ratings-reviews', label:'Ratings & Reviews - Let users rate or review people, products, or services.'}, + { value: 'payments', label:'Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.'}, + { value: 'shopping-cart', label:'Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.'}, + { value: 'product-listing', label:'Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.'}, + { value: 'activity-feed', label:'Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.'}, + { value: 'profiles', label:'Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.'}, + { value: 'messaging', label:'Messaging - Allow direct communication between two or more users.'}, + { value: 'admin-tool', label:'Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.'}, + { value: 'social-media-integration', label:'Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)'}, + { value: 'reporting', label:'Reporting - App must have the ability to report/export data'}, + { value: 'contact-us', label:'Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.'}, + { value: '3d-touch', label:'3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?'} + ] + }, + + { + icon: 'question', + title: 'Tech Features', + description: '', + fieldName: 'details.appDefinition.techFeatures', + type: 'checkbox-group', + options: [ + { value: 'enterprise-login', label:'SSO Integration - App must integrate with enterprise single-sign-on capability.'}, + { value: 'api-integration', label:'API Integration - App must integrate with a pre-existing API.'}, + { value: 'third-party-system-integration', label:'Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.'}, + { value: 'containerized-code', label:'Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.'}, + { value: 'unit-tests', label:'Unit Tests - App must have unit tests to ensure code coverage.'}, + { value: 'continuous-integration-/-continuous-deployment', label:'Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.'}, + { value: 'analytics-implementation', label:'Analytics Implementation - Implementation of analytics to track user behavior and app usage.'}, + { value: 'email-(smtp-server)-setup', label:'Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.'}, + { value: 'offline-capability', label:'Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.'}, + { value: 'camera', label:'Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.'}, + { value: 'apple-app-store-&-google-play-submission-support', label:'Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.'}, + { value: 'sms-gateway-integration', label:'SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.'}, + { value: 'error-logging', label:'Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?'}, + { value: 'faceid-touchid', label:'Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login'} + ] + } + ] + + }, { id: 'techStack', required: false, @@ -251,48 +321,6 @@ const sections = [ } ] }, - { - required: false, - hideTitle: false, - title: 'Style Guide & Brand Guidelines', - description: '', - type: 'questions', - questions: [ - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.Styleguide', - title: 'Do you have a style guide or branding guidelines that need to be followed?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.fonts', - title: 'Are there any particular fonts you want used?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.colors', - title: 'Are there any particular colors/themes you want used?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.appIcon', - title: 'Do you need an app icon designed, or will you provide one?', - type: 'textbox' - } - ] - }, - { hideTitle: true, title: 'Quality Assurance, Testing and Security', @@ -301,6 +329,7 @@ const sections = [ questions: [ { fieldName: 'details.qaTesting.security', + title: 'Security Requirements', type: 'checkbox-group', options: [ { value: 'standard', label: 'Standard Security' }, @@ -354,19 +383,59 @@ const sections = [ type: 'checkbox-group', options: [ { value: 'uat', label: '1 UAT/Beta Test Cycle.' }, - { value: 'uat-updates', label: 'Implementation of Updates (update the app based on UAT/Beta Testing feedback)' }, + { value: 'uat-updates', label: 'Implementation of Updates (update the app based on UAT/Beta Testing feedback)' } ] - } - + }, ] + + }, { - id: 'files', - required: isFileRequired, - title: findFilesSectionTitle, + hideTitle: false, + title: 'Budget and Timeline', description: '', - type: 'files', - fieldName: 'attachments' + type: 'questions', + questions: [ + { + icon: 'question', + description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', + + title: 'Budget', + fieldName: 'details.loadDetails.budget', + type: 'slide-radiogroup', + options: [ + { value: 'upto-25', title: 'Under $25K '}, + { value: 'upto-50', title: '$25K to $50K' }, + { value: 'upto-75', title: '$50K to $75K' }, + { value: 'upto-100', title: '$75K to $100K' }, + { value: 'above-100', title: 'More than $100K' } + ], + required: true, + validationError: 'Please provide expected hours of execution' + }, + { + icon: 'question', + description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', + title: 'Timeline', + fieldName: 'details.loadDetails.timeline', + type: 'slide-radiogroup', + options: [ + { value: 'upto-1month', title: 'Under 1 month'}, + { value: 'upto-2months', title: '1 to 2 months' }, + { value: 'upto-3months', title: '2 to 3 months' }, + { value: 'upto-6months', title: '3 to 6 months' } + ], + required: true, + validationError: 'Please provide expected hours of execution' + } + ] + }, + { + id: 'notes', + fieldName: 'details.appDefinition.notes', + title: 'Notes', + description: 'Add any other important information regarding your project (e.g., links to documents or existing applications)', + type: 'notes' } ] } @@ -447,46 +516,69 @@ export const basicSections = [ title: 'Objectives', type: 'textbox' }, - { icon: 'question', - description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', - - title: 'Budget', - fieldName: 'details.loadDetails.budget', - type: 'slide-radiogroup', + title: 'Form Factor/Orientation', + description: 'Please place an X in the Required column for each \ + form factor/orientation that must be supported.', + fieldName: 'details.appDefinition.formFactor', + type: 'checkbox-group', options: [ - { value: 'upto-25', title: 'Under $25K '}, - { value: 'upto-50', title: '$25K to $50K' }, - { value: 'upto-75', title: '$50K to $75K' }, - { value: 'upto-100', title: '$75K to $100K' }, - { value: 'above-100', title: 'More than $100K' } - ], - required: true, - validationError: 'Please provide expected hours of execution' + { value: 'mobile-phone-portrait', label: 'Mobile Phone - Portrait' }, + { value: 'mobile-phone-landscape', label: 'Mobile Phone - Landscape' }, + { value: 'tablet-device-portrait', label: 'Tablet Device - Portrait'}, + { value: 'tablet-device-landscape', label: 'Tablet Device - Landscape' } + ] + } + + ] + }, + { + required: false, + hideTitle: false, + title: 'Style Guide & Brand Guidelines', + description: '', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.Styleguide', + title: 'Do you have a style guide or branding guidelines that need to be followed?', + type: 'textbox' }, { - icon: 'question', - description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', - title: 'Timeline', - fieldName: 'details.loadDetails.timeline', - type: 'slide-radiogroup', - options: [ - { value: 'upto-1month', title: 'Under 1 month'}, - { value: 'upto-2months', title: '1 to 2 months' }, - { value: 'upto-3months', title: '2 to 3 months' }, - { value: 'upto-6months', title: '3 to 6 months' } - ], - required: true, - validationError: 'Please provide expected hours of execution' - } + // required is not needed if we specifiy validations + // required: true, + fieldName: 'details.designGuidelines.fonts', + title: 'Are there any particular fonts you want used?', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.colors', + title: 'Are there any particular colors/themes you want used?', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.designGuidelines.appIcon', + title: 'Do you need an app icon designed, or will you provide one?', + type: 'textbox' + } ] }, { required: false, hideTitle: false, title: 'User Roles', + type: 'questions', description: 'Please place an X in the Required column for each user type/role. Please provide details on what the user/role should do in the Description column.', questions: [ { @@ -548,6 +640,81 @@ export const basicSections = [ } ] }, + { + id: 'screen-features', + required: false, + hideTitle: false, + title: 'Screen and Features', + description: '', + type: 'questions', + questions: [ + { + icon: 'question', + title: 'Screen / Feature List', + description: 'Please note that each added feature incurs a cost, \ + but that the cost will be detailed and broken out in the \ + final project proposal. ', + fieldName: 'details.appDefinition.screens', + type: 'checkbox-group', + options: [ + { value: 'enterprise-login', label:'Enterprise Login - Supports integration with an existing authorization/authentication mechanism.'}, + { value: 'email-login', label:'Email Login - Support sign in using an email address/password.'}, + { value: 'social-login', label:'Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.'}, + { value: 'registration', label:'Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.'}, + { value: 'invitations', label:'Invitations - Allow users to invite others to use your app via email. '}, + { value: 'introductions', label:'Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.'}, + { value: 'onboarding', label:'Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.'}, + { value: 'search', label:'Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.'}, + { value: 'location-based-services', label:'Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.'}, + { value: 'camera', label:'Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.'}, + { value: 'file-upload', label:'File Upload - Allow users to upload photos or other files.'}, + { value: 'notifications', label:'Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.'}, + { value: 'dashboard', label:'Dashboard - App must have a central dashboard where users can access functionality'}, + { value: 'tagging', label:'Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.'}, + { value: 'account-settings', label:'Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.'}, + { value: 'help-faws', label:'Help/FAQs - Include a section dedicated to FAQ or Help content.'}, + { value: 'marketplace', label:'Marketplace - Allow users to buy, sell, or rent products or services.'}, + { value: 'ratings-reviews', label:'Ratings & Reviews - Let users rate or review people, products, or services.'}, + { value: 'payments', label:'Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.'}, + { value: 'shopping-cart', label:'Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.'}, + { value: 'product-listing', label:'Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.'}, + { value: 'activity-feed', label:'Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.'}, + { value: 'profiles', label:'Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.'}, + { value: 'messaging', label:'Messaging - Allow direct communication between two or more users.'}, + { value: 'admin-tool', label:'Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.'}, + { value: 'social-media-integration', label:'Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)'}, + { value: 'reporting', label:'Reporting - App must have the ability to report/export data'}, + { value: 'contact-us', label:'Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.'}, + { value: '3d-touch', label:'3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?'} + ] + }, + + { + icon: 'question', + title: 'Tech Features', + description: '', + fieldName: 'details.appDefinition.techFeatures', + type: 'checkbox-group', + options: [ + { value: 'enterprise-login', label:'SSO Integration - App must integrate with enterprise single-sign-on capability.'}, + { value: 'api-integration', label:'API Integration - App must integrate with a pre-existing API.'}, + { value: 'third-party-system-integration', label:'Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.'}, + { value: 'containerized-code', label:'Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.'}, + { value: 'unit-tests', label:'Unit Tests - App must have unit tests to ensure code coverage.'}, + { value: 'continuous-integration-/-continuous-deployment', label:'Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.'}, + { value: 'analytics-implementation', label:'Analytics Implementation - Implementation of analytics to track user behavior and app usage.'}, + { value: 'email-(smtp-server)-setup', label:'Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.'}, + { value: 'offline-capability', label:'Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.'}, + { value: 'camera', label:'Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.'}, + { value: 'apple-app-store-&-google-play-submission-support', label:'Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.'}, + { value: 'sms-gateway-integration', label:'SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.'}, + { value: 'error-logging', label:'Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?'}, + { value: 'faceid-touchid', label:'Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login'} + ] + } + ] + + }, { id: 'techStack', required: false, @@ -598,48 +765,6 @@ export const basicSections = [ } ] }, - { - required: false, - hideTitle: false, - title: 'Style Guide & Brand Guidelines', - description: '', - type: 'questions', - questions: [ - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.Styleguide', - title: 'Do you have a style guide or branding guidelines that need to be followed?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.fonts', - title: 'Are there any particular fonts you want used?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.colors', - title: 'Are there any particular colors/themes you want used?', - type: 'textbox' - }, - { - // required is not needed if we specifiy validations - // required: true, - - fieldName: 'details.designGuidelines.appIcon', - title: 'Do you need an app icon designed, or will you provide one?', - type: 'textbox' - } - ] - }, - { hideTitle: true, title: 'Quality Assurance, Testing and Security', @@ -702,10 +827,51 @@ export const basicSections = [ type: 'checkbox-group', options: [ { value: 'uat', label: '1 UAT/Beta Test Cycle.' }, - { value: 'uat-updates', label: 'Implementation of Updates (update the app based on UAT/Beta Testing feedback)' }, + { value: 'uat-updates', label: 'Implementation of Updates (update the app based on UAT/Beta Testing feedback)' } ] - } + }, + ] + + }, + { + hideTitle: false, + title: 'Budget and Timeline', + description: '', + type: 'questions', + questions: [ + { + icon: 'question', + description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', + + title: 'Budget', + fieldName: 'details.loadDetails.budget', + type: 'slide-radiogroup', + options: [ + { value: 'upto-25', title: 'Under $25K '}, + { value: 'upto-50', title: '$25K to $50K' }, + { value: 'upto-75', title: '$50K to $75K' }, + { value: 'upto-100', title: '$75K to $100K' }, + { value: 'above-100', title: 'More than $100K' } + ], + required: true, + validationError: 'Please provide expected hours of execution' + }, + { + icon: 'question', + description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', + title: 'Timeline', + fieldName: 'details.loadDetails.timeline', + type: 'slide-radiogroup', + options: [ + { value: 'upto-1month', title: 'Under 1 month'}, + { value: 'upto-2months', title: '1 to 2 months' }, + { value: 'upto-3months', title: '2 to 3 months' }, + { value: 'upto-6months', title: '3 to 6 months' } + ], + required: true, + validationError: 'Please provide expected hours of execution' + } ] }, { @@ -717,4 +883,4 @@ export const basicSections = [ } ] } -] +] \ No newline at end of file diff --git a/src/config/projectSpecification/typeToSpecification.json b/src/config/projectSpecification/typeToSpecification.json index 143e62ecb..95e757d4b 100644 --- a/src/config/projectSpecification/typeToSpecification.json +++ b/src/config/projectSpecification/typeToSpecification.json @@ -4,6 +4,7 @@ "visual_design_prod": "avd.v1.0", "infographic": "avd.v1.0", "topgear_dev": "topgear-dev.v1.0", + "caas_intake": "caas_intake.v1.0", "generic_design": "topcoder.v1", "visual_prototype": "app_dev.v1.0", "website_development": "website.v1.0", diff --git a/src/config/projectWizard/index.js b/src/config/projectWizard/index.js index ecb95774d..a9cc50194 100644 --- a/src/config/projectWizard/index.js +++ b/src/config/projectWizard/index.js @@ -33,6 +33,15 @@ const products = { id: 'topgear_dev', aliases: ['topgear-dev'], hidden: true + }, + 'caas-intake': { + brief: 'CaaS', + details: 'CaaS', + formTitle: 'CaaS', + icon: 'product-app-app', + id: 'caas_intake', + aliases: ['caas-intake', 'caas', 'caas_intake'], + hidden: true } } },