From 921f048170f9e8425e9473e8a2f9870cbbfd2669 Mon Sep 17 00:00:00 2001 From: davemess34 Date: Mon, 14 May 2018 23:22:03 -0400 Subject: [PATCH 1/3] fixed flows for 3 new flows enterprise mobile, caas, topgear --- .../projectQuestions/caas_intake.v1.0.js | 289 ++++++ .../enterprise_mobile.v1.0.js | 886 ++++++++++++++++++ .../projectQuestions/topgear-dev.v1.0.js | 141 +++ .../typeToSpecification.json | 3 + src/config/projectWizard/index.js | 31 +- 5 files changed, 1348 insertions(+), 2 deletions(-) create mode 100644 src/config/projectQuestions/caas_intake.v1.0.js create mode 100644 src/config/projectQuestions/enterprise_mobile.v1.0.js create mode 100644 src/config/projectQuestions/topgear-dev.v1.0.js 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..0dff04e3b --- /dev/null +++ b/src/config/projectQuestions/caas_intake.v1.0.js @@ -0,0 +1,289 @@ +// 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: 'Topcoder will scan your application using our properiatary formula\ + for security standards. To rate your application we combine state of the art \ + static code analysis, security scanning, export code review and other techniques \ + to produce a Security Health Check scorecard.', + 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: 'Please describe your application.', + title: 'Description', + type: 'textbox' + }, + { + icon: 'question', + title: 'What is the maximum level of acceptable risk for this application?', + description: 'Based on the features and data, how secure do you feel this application should be?', + fieldName: 'details.security.howSecure', + type: 'slide-radiogroup', + options: [ + { value: 'low-risk', title: 'Low Risk'}, + { value: 'medium-risk', title: 'Medium Risk' }, + { value: 'high-risk', title: 'High Risk' }, + { value: 'custom', title: 'Custom' } + ], + required: true, + validationError: 'Please select security rating' + }, + { + icon: 'question', + title: 'Do you require additional documentation for workers?', + description: '', + fieldName: 'details.caas.docs', + type: 'radio-group', + options: [ + {value: 'topcoder', label: 'Topcoder NDA'}, + {value: 'custom', label: 'Custom NDA'}, + {value: 'custom', label: 'Background Check'}, + {value: 'custom', label: 'Other'} + ] + }, + { + icon: 'question', + title: 'If you chose other, please detail your baseline testing standard', + description: '(if applicable)', + type: 'textbox', + fieldName: 'details.security.baselineOther', + required: false + } + + ] + }, + { + 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 new file mode 100644 index 000000000..bf0c47b70 --- /dev/null +++ b/src/config/projectQuestions/enterprise_mobile.v1.0.js @@ -0,0 +1,886 @@ +import React from 'react' // eslint-disable-line no-unused-vars + +const sections = [ + { + id: 'appDefinition', + required: true, + description: 'Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name for your project', + fieldName: 'name', + description: '', + title: 'Project Name', + type: 'project-name' + }, + { + id: 'user', + required: true, + hideTitle: true, + title: 'Questions', + description: '', + type: 'questions', + questions: [ + { + id: 'projectInfo', + // required is not needed if we specifiy validations + required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired : 'Please provide a description', + minLength : 'Please enter at least 160 characters' + }, + fieldName: 'description', + description: 'Can you provide a brief summary of the application you’d like to develop?', + title: 'App Summary', + type: 'textbox' + }, + { + icon: 'question', + required: true, + validationError: 'Please let us know the target device', + title: 'App Type', + description: 'What type of application are we developing? Please \ + place an X in the Required column for each required app \ + type. Please note that each additional app type incurs \ + a cost, but that the cost will be detailed and broken \ + out in the final project proposal. ', + fieldName: 'details.appDefinition.appType', + type: 'checkbox-group', + options: [ + { value: 'ios', label: 'iOS App - An app built for iPhone or iPads' }, + { value: 'android', label: 'Android App - An app built for mobile phones or tablets running Android.' }, + { value: 'hybrid', label: 'Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).' }, + { value: 'web', label: 'Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.' } + ] + }, + { + // required is not needed if we specifiy validations + // required: true, + fieldName: 'details.appDefinition.workflow', + description: 'Please describe the ideal workflow for the proposed solution.', + title: 'Workflow', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + fieldName: 'details.appDefinition.objectives', + description: 'What are the main business objectives you want to achieve by developing this application?', + title: 'Objectives', + type: 'textbox' + }, + { + icon: 'question', + 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-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' + }, + { + // 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: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.standard', + title: 'Standard User', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.admin', + title: 'Admin', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.superAdmin', + title: 'Super Admin', + type: 'textbox' + } + ] + }, + { + required: false, + hideTitle: false, + title: 'Integrations', + description: 'Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.api', + title: 'API', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.backend', + title: 'Backend', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.database', + title: 'Database', + type: 'textbox' + } + ] + }, + { + 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, + hideTitle: false, + title: 'Technology Stack', + description: 'Do you have a preferred technology stack? If yes, please list those requirements here:', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.languages', + title: 'Programming Languages', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.frameworks', + title: 'Frameworks', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.Database', + title: 'Database', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.server', + title: 'Server', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.hosting', + title: 'Hosting Environment', + type: 'textbox' + } + ] + }, + { + hideTitle: true, + title: 'Quality Assurance, Testing and Security', + description: '', + type: 'questions', + questions: [ + { + fieldName: 'details.qaTesting.security', + title: 'Security Requirements', + type: 'checkbox-group', + options: [ + { value: 'standard', label: 'Standard Security' }, + { value: 'enterprise', label: 'Enterprise - if your application will house\ + or transmit PII or sensitive data. The data will be encrypted on the device and the server.' }, + { value: 'vulnerability', label: 'Vulnerability Scanning - Scan your application for weaknesses' }, + { value: 'auditing', label: 'Audit - Auditing will record user information on actions performed.' }, + { value: 'confidential', label: 'System will be working with confidential, health or financial records'} + ], + description: 'Please place an X in the Required column for each required security requirement.', + }, + { + icon: 'question', + title: 'Quality Assurance, Test Data & Performance Testing', + description: 'Please place an X in the Required column for each required QA requirement.', + fieldName: 'details.qaTesting.testing', + type: 'checkbox-group', + options: [ + { value: 'rw-unstructured', label: 'Real World Unstructured - Users search on their own for bugs or usability issues.' }, + { value: 'rw-structured', label: 'Structured Functional - execution of predefined test scripts' }, + { value: 'testcases', label: 'Test Case Creation - creation of scenarios, instructions and exepected results' }, + { value: 'certification', label: 'Certify your mobile application release against predefined device set including.' }, + { value: 'devicelab', label: 'Test real devices in real cell networks across the world' }, + { value: 'performanceTuning', label: 'Identify and provide perfromance improvements' }, + { value: 'performanceTesting', label: 'Testing web application robustness' }, + ] + }, + { + icon: 'question', + title: 'How many users do you intend to support?', + type: 'textbox', + fieldName: 'details.qaTesting.users', + required: false + }, + { + icon: 'question', + title: 'Do you intend to supply test data or should Topcoder create it?', + fieldName: 'details.qaTesting.data', + type: 'slide-radiogroup', + options: [ + { value: 'create', title: 'We will provide obfuscated data'}, + { value: 'provide', title: 'Topcoder will create data' } + ], + required: false + }, + { + icon: 'question', + title: 'User Acceptance / Beta Testing', + description: 'UAT is the process of sharing the final application with users and gathering feedback. Please place an X in the Required column for each required UAT requirement.', + fieldName: 'details.qaTesting.uat', + 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)' } + ] + }, + ] + + + }, + { + 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' + } + ] + }, + { + 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' + } + ] + } +] + +export default sections + +export const basicSections = [ + { + id: 'appDefinition', + title: '', + required: true, + description: 'Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name for your project', + fieldName: 'name', + description: '', + title: 'Project Name', + type: 'project-name' + }, + { + id: 'user', + required: true, + hideTitle: true, + title: 'Questions', + description: '', + type: 'questions', + questions: [ + { + id: 'projectInfo', + // required is not needed if we specifiy validations + required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired : 'Please provide a description', + minLength : 'Please enter at least 160 characters' + }, + fieldName: 'description', + description: 'Can you provide a brief summary of the application you’d like to develop?', + title: 'App Summary', + type: 'textbox' + }, + { + icon: 'question', + required: true, + validationError: 'Please let us know the target device', + title: 'App Type', + description: 'What type of application are we developing? Please \ + place an X in the Required column for each required app \ + type. Please note that each additional app type incurs \ + a cost, but that the cost will be detailed and broken \ + out in the final project proposal. ', + fieldName: 'details.appDefinition.appType', + type: 'checkbox-group', + options: [ + { value: 'ios', label: 'iOS App - An app built for iPhone or iPads' }, + { value: 'android', label: 'Android App - An app built for mobile phones or tablets running Android.' }, + { value: 'hybrid', label: 'Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).' }, + { value: 'web', label: 'Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.' } + ] + }, + { + // required is not needed if we specifiy validations + // required: true, + fieldName: 'details.appDefinition.workflow', + description: 'Please describe the ideal workflow for the proposed solution.', + title: 'Workflow', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + fieldName: 'details.appDefinition.objectives', + description: 'What are the main business objectives you want to achieve by developing this application?', + title: 'Objectives', + type: 'textbox' + }, + { + icon: 'question', + 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-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' + }, + { + // 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: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.standard', + title: 'Standard User', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.admin', + title: 'Admin', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.userRoles.superAdmin', + title: 'Super Admin', + type: 'textbox' + } + ] + }, + { + required: false, + hideTitle: false, + title: 'Integrations', + description: 'Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.api', + title: 'API', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.backend', + title: 'Backend', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.integrations.database', + title: 'Database', + type: 'textbox' + } + ] + }, + { + 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, + hideTitle: false, + title: 'Technology Stack', + description: 'Do you have a preferred technology stack? If yes, please list those requirements here:', + type: 'questions', + questions: [ + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.languages', + title: 'Programming Languages', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.frameworks', + title: 'Frameworks', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.Database', + title: 'Database', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.server', + title: 'Server', + type: 'textbox' + }, + { + // required is not needed if we specifiy validations + // required: true, + + fieldName: 'details.techstack.hosting', + title: 'Hosting Environment', + type: 'textbox' + } + ] + }, + { + hideTitle: true, + title: 'Quality Assurance, Testing and Security', + description: '', + type: 'questions', + questions: [ + { + fieldName: 'details.qaTesting.security', + title: 'Security Requirements', + type: 'checkbox-group', + options: [ + { value: 'standard', label: 'Standard Security' }, + { value: 'enterprise', label: 'Enterprise - if your application will house\ + or transmit PII or sensitive data. The data will be encrypted on the device and the server.' }, + { value: 'vulnerability', label: 'Vulnerability Scanning - Scan your application for weaknesses' }, + { value: 'auditing', label: 'Audit - Auditing will record user information on actions performed.' }, + { value: 'confidential', label: 'System will be working with confidential, health or financial records'} + ], + description: 'Please place an X in the Required column for each required security requirement.', + }, + { + icon: 'question', + title: 'Quality Assurance, Test Data & Performance Testing', + description: 'Please place an X in the Required column for each required QA requirement.', + fieldName: 'details.qaTesting.testing', + type: 'checkbox-group', + options: [ + { value: 'rw-unstructured', label: 'Real World Unstructured - Users search on their own for bugs or usability issues.' }, + { value: 'rw-structured', label: 'Structured Functional - execution of predefined test scripts' }, + { value: 'testcases', label: 'Test Case Creation - creation of scenarios, instructions and exepected results' }, + { value: 'certification', label: 'Certify your mobile application release against predefined device set including.' }, + { value: 'devicelab', label: 'Test real devices in real cell networks across the world' }, + { value: 'performanceTuning', label: 'Identify and provide perfromance improvements' }, + { value: 'performanceTesting', label: 'Testing web application robustness' }, + ] + }, + { + icon: 'question', + title: 'How many users do you intend to support?', + type: 'textbox', + fieldName: 'details.qaTesting.users', + required: false + }, + { + icon: 'question', + title: 'Do you intend to supply test data or should Topcoder create it?', + fieldName: 'details.qaTesting.data', + type: 'slide-radiogroup', + options: [ + { value: 'create', title: 'We will provide obfuscated data'}, + { value: 'provide', title: 'Topcoder will create data' } + ], + required: false + }, + { + icon: 'question', + title: 'User Acceptance / Beta Testing', + description: 'UAT is the process of sharing the final application with users and gathering feedback. Please place an X in the Required column for each required UAT requirement.', + fieldName: 'details.qaTesting.uat', + 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)' } + ] + }, + ] + + + }, + { + 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' + } + ] + }, + { + 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' + } + ] + } +] diff --git a/src/config/projectQuestions/topgear-dev.v1.0.js b/src/config/projectQuestions/topgear-dev.v1.0.js new file mode 100644 index 000000000..0fe3d4c56 --- /dev/null +++ b/src/config/projectQuestions/topgear-dev.v1.0.js @@ -0,0 +1,141 @@ +import React from 'react' // eslint-disable-line no-unused-vars + +const sections = [ + { + id: 'appDefinition', + required: true, + description: 'Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name for 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', + // required is not needed if we specifiy validations + // required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired : 'Please provide a description', + minLength : 'Please enter at least 160 characters' + }, + fieldName: 'description', + description: 'Brief Description', + title: 'Description', + type: 'textbox' + }, + { + icon: 'question', + title: 'DU', + description: '', + type: 'textbox', + fieldName: 'details.appDefinition.goal.du' + }, + { + icon: 'question', + title: 'Project Code', + type: 'textbox', + fieldName: 'details.appDefinition.users.projectCode' + }, + { + icon: 'question', + title: 'Cost Center code', + type: 'textbox', + fieldName: 'details.appDefinition.users.cost_center' + }, + { + icon: 'question', + title: 'Part of NG3', + type: 'textbox', + fieldName: 'details.appDefinition.users.ng3' + } + ] + } + ] + } +] + +export default sections + +export const basicSections = [ + { + id: 'appDefinition', + title: '', + required: true, + description: 'Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.', + subSections: [ + { + id: 'projectName', + required: true, + validationError: 'Please provide a name for 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', + // required is not needed if we specifiy validations + // required: true, + validations: 'isRequired,minLength:160', + validationErrors: { + isRequired : 'Please provide a description', + minLength : 'Please enter at least 160 characters' + }, + fieldName: 'description', + description: 'Brief Description', + title: 'Description', + type: 'textbox' + }, + { + icon: 'question', + title: 'DU', + description: '', + type: 'textbox', + fieldName: 'details.appDefinition.goal.du' + }, + { + icon: 'question', + title: 'Project Code', + type: 'textbox', + fieldName: 'details.appDefinition.users.projectCode' + }, + { + icon: 'question', + title: 'Cost Center code', + type: 'textbox', + fieldName: 'details.appDefinition.users.cost_center' + }, + { + icon: 'question', + title: 'Part of NG3', + type: 'textbox', + fieldName: 'details.appDefinition.users.ng3' + } + + ] + } + ] + } +] diff --git a/src/config/projectSpecification/typeToSpecification.json b/src/config/projectSpecification/typeToSpecification.json index fceee496c..95e757d4b 100644 --- a/src/config/projectSpecification/typeToSpecification.json +++ b/src/config/projectSpecification/typeToSpecification.json @@ -3,6 +3,8 @@ "visual_design_concepts": "avd.v1.0", "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", @@ -22,5 +24,6 @@ "api_dev": "app_dev.v1.0", "health_check": "health_check.v1.0", "frontend_dev" : "app_dev.v1.0", + "enterprise_mobile" : "enterprise_mobile.v1.0", "sfdc_testing" : "sfdc_accelerator.v1.0" } diff --git a/src/config/projectWizard/index.js b/src/config/projectWizard/index.js index 99c5b4643..a9cc50194 100644 --- a/src/config/projectWizard/index.js +++ b/src/config/projectWizard/index.js @@ -15,6 +15,33 @@ const products = { icon: 'product-app-app', id: 'application_development', aliases: ['app', 'application_development'] + }, + 'Enterprise Mobile': { + brief: 'Enterprise Mobile', + details: 'Enterprise Mobile', + formTitle: 'Enterprise Mobile', + icon: 'product-app-app', + id: 'enterprise_mobile', + aliases: ['enterprise-mobile'], + hidden: true + }, + 'topgear-dev': { + brief: 'Topgear', + details: 'Topgear', + formTitle: 'Topgear', + icon: 'product-app-app', + 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 } } }, @@ -462,7 +489,7 @@ export function getProjectCreationTemplateField(product, sectionId, subSectionId * * @param {string} productId id of the product. It should resolve to a valid product template * @param {object} productConfig project object which contains the current value - * + * * @return {object} object containing price and time estimate */ export function getProductEstimate(productId, productConfig) { @@ -542,7 +569,7 @@ export function findTitle(project, showProduct) { } /** - * Finds the title for the project files section + * Finds the title for the project files section * * @param {object} project project object to fetch the product title * From 00a3a7a0ac56a6d1de04d0829868993eb6ae1422 Mon Sep 17 00:00:00 2001 From: davemess34 Date: Mon, 14 May 2018 23:25:44 -0400 Subject: [PATCH 2/3] tweaked caas --- .../projectQuestions/caas_intake.v1.0.js | 102 +++++++++++++----- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/src/config/projectQuestions/caas_intake.v1.0.js b/src/config/projectQuestions/caas_intake.v1.0.js index 0dff04e3b..3cb9bcb42 100644 --- a/src/config/projectQuestions/caas_intake.v1.0.js +++ b/src/config/projectQuestions/caas_intake.v1.0.js @@ -22,10 +22,7 @@ const sections = [ required: true, hideTitle: true, title: 'Questions', - description: 'Topcoder will scan your application using our properiatary formula\ - for security standards. To rate your application we combine state of the art \ - static code analysis, security scanning, export code review and other techniques \ - to produce a Security Health Check scorecard.', + description: '', type: 'questions', questions: [ { @@ -38,47 +35,98 @@ const sections = [ isRequired: 'Please describe your application.', minLength: 'Please enter at least 160 characters' }, - description: 'Please describe your application.', + description: 'Brief describe your application', title: 'Description', type: 'textbox' }, { icon: 'question', - title: 'What is the maximum level of acceptable risk for this application?', - description: 'Based on the features and data, how secure do you feel this application should be?', - fieldName: 'details.security.howSecure', + 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: 'low-risk', title: 'Low Risk'}, - { value: 'medium-risk', title: 'Medium Risk' }, - { value: 'high-risk', title: 'High Risk' }, - { value: 'custom', title: 'Custom' } + {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 security rating' + 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: 'Do you require additional documentation for workers?', + title: 'What is the typical hourly rate you are paying?', description: '', - fieldName: 'details.caas.docs', - type: 'radio-group', + fieldName: 'details.resources.hourlyrate', + type: 'slide-radiogroup', options: [ - {value: 'topcoder', label: 'Topcoder NDA'}, - {value: 'custom', label: 'Custom NDA'}, - {value: 'custom', label: 'Background Check'}, - {value: 'custom', label: 'Other'} + { 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: 'If you chose other, please detail your baseline testing standard', - description: '(if applicable)', - type: 'textbox', - fieldName: 'details.security.baselineOther', - required: false - } - + 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' + }, ] }, { From 3c0d6750670f3697b5eaf58c07bb0fa795067507 Mon Sep 17 00:00:00 2001 From: davemess34 Date: Tue, 29 May 2018 21:42:40 -0400 Subject: [PATCH 3/3] updated enterprise mobile --- .../enterprise_mobile.v1.0.js | 87 ++++++++++--------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/src/config/projectQuestions/enterprise_mobile.v1.0.js b/src/config/projectQuestions/enterprise_mobile.v1.0.js index 3f33fe16a..a4bc672ca 100644 --- a/src/config/projectQuestions/enterprise_mobile.v1.0.js +++ b/src/config/projectQuestions/enterprise_mobile.v1.0.js @@ -53,7 +53,7 @@ const sections = [ { value: 'ios', label: 'iOS App - An app built for iPhone or iPads' }, { value: 'android', label: 'Android App - An app built for mobile phones or tablets running Android.' }, { value: 'hybrid', label: 'Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).' }, - { value: 'web', label: 'Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.' } + { value: 'web', label: 'Progressive Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome, but that provides a native mobile app experience (rich features, i.e access device features such as GPS)' } ] }, { @@ -75,7 +75,7 @@ const sections = [ { icon: 'question', title: 'Form Factor/Orientation', - description: 'Please place an X in the Required column for each \ + description: 'Please select each for each \ form factor/orientation that must be supported.', fieldName: 'details.appDefinition.formFactor', type: 'checkbox-group', @@ -92,7 +92,7 @@ const sections = [ { required: false, hideTitle: false, - title: 'Style Guide & Brand Guidelines', + title: 'Style Guide & Brand Guidelines -- Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”', description: '', type: 'questions', questions: [ @@ -135,7 +135,7 @@ const sections = [ 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.', + description: 'Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.', questions: [ { // required is not needed if we specifiy validations @@ -200,7 +200,7 @@ const sections = [ id: 'screen-features', required: false, hideTitle: false, - title: 'Screen and Features', + title: 'Screens and Features', description: '', type: 'questions', questions: [ @@ -339,12 +339,12 @@ const sections = [ { value: 'auditing', label: 'Audit - Auditing will record user information on actions performed.' }, { value: 'confidential', label: 'System will be working with confidential, health or financial records'} ], - description: 'Please place an X in the Required column for each required security requirement.', + description: 'Please select each for each required security requirement.', }, { icon: 'question', title: 'Quality Assurance, Test Data & Performance Testing', - description: 'Please place an X in the Required column for each required QA requirement.', + description: 'Please select each for each required QA requirement.', fieldName: 'details.qaTesting.testing', type: 'checkbox-group', options: [ @@ -378,7 +378,7 @@ const sections = [ { icon: 'question', title: 'User Acceptance / Beta Testing', - description: 'UAT is the process of sharing the final application with users and gathering feedback. Please place an X in the Required column for each required UAT requirement.', + description: 'UAT is the process of sharing the final application with users and gathering feedback. Please select each for each required UAT requirement.', fieldName: 'details.qaTesting.uat', type: 'checkbox-group', options: [ @@ -398,7 +398,7 @@ const sections = [ questions: [ { icon: 'question', - description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', + description: 'How much budget do you have?', title: 'Budget', fieldName: 'details.loadDetails.budget', @@ -415,7 +415,7 @@ const sections = [ }, { icon: 'question', - description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', + description: 'When do you need your app by? ', title: 'Timeline', fieldName: 'details.loadDetails.timeline', type: 'slide-radiogroup', @@ -487,7 +487,7 @@ export const basicSections = [ validationError: 'Please let us know the target device', title: 'App Type', description: 'What type of application are we developing? Please \ - place an X in the Required column for each required app \ + the required app \ type. Please note that each additional app type incurs \ a cost, but that the cost will be detailed and broken \ out in the final project proposal. ', @@ -519,7 +519,7 @@ export const basicSections = [ { icon: 'question', title: 'Form Factor/Orientation', - description: 'Please place an X in the Required column for each \ + description: 'Please select each for each \ form factor/orientation that must be supported.', fieldName: 'details.appDefinition.formFactor', type: 'checkbox-group', @@ -536,7 +536,7 @@ export const basicSections = [ { required: false, hideTitle: false, - title: 'Style Guide & Brand Guidelines', + title: 'Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”', description: '', type: 'questions', questions: [ @@ -577,9 +577,9 @@ export const basicSections = [ { required: false, hideTitle: false, - title: 'User Roles', + title: 'User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A', 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.', + description: 'Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.', questions: [ { // required is not needed if we specifiy validations @@ -610,7 +610,7 @@ export const basicSections = [ { required: false, hideTitle: false, - title: 'Integrations', + title: ' - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.', description: 'Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.', type: 'questions', questions: [ @@ -651,9 +651,7 @@ export const basicSections = [ { 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. ', + description: 'Please select each required feature. 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: [ @@ -691,8 +689,8 @@ export const basicSections = [ { icon: 'question', - title: 'Tech Features', - description: '', + title: 'Technology Requirements', + description: 'Please select each required technology requirement above', fieldName: 'details.appDefinition.techFeatures', type: 'checkbox-group', options: [ @@ -719,7 +717,7 @@ export const basicSections = [ id: 'techStack', required: false, hideTitle: false, - title: 'Technology Stack', + title: 'Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:', description: 'Do you have a preferred technology stack? If yes, please list those requirements here:', type: 'questions', questions: [ @@ -776,29 +774,36 @@ export const basicSections = [ title: 'Security Requirements', type: 'checkbox-group', options: [ - { value: 'standard', label: 'Standard Security' }, - { value: 'enterprise', label: 'Enterprise - if your application will house\ - or transmit PII or sensitive data. The data will be encrypted on the device and the server.' }, - { value: 'vulnerability', label: 'Vulnerability Scanning - Scan your application for weaknesses' }, - { value: 'auditing', label: 'Audit - Auditing will record user information on actions performed.' }, - { value: 'confidential', label: 'System will be working with confidential, health or financial records'} + { value: 'standard', label: 'Standard Security - Select this option if your app requires standard security.' }, + { value: 'enterprise', label: 'Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.' }, + { value: 'vulnerability', label: 'Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.' }, + { value: 'auditing', label: 'Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.' }, + { value: 'confidential', label: 'Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?'}, + { value: 'mdm', label: 'Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?'} ], - description: 'Please place an X in the Required column for each required security requirement.', + description: 'Please select each required security requirement above.', }, { icon: 'question', title: 'Quality Assurance, Test Data & Performance Testing', - description: 'Please place an X in the Required column for each required QA requirement.', + description: 'Please select each for each required QA requirement.', fieldName: 'details.qaTesting.testing', type: 'checkbox-group', options: [ - { value: 'rw-unstructured', label: 'Real World Unstructured - Users search on their own for bugs or usability issues.' }, - { value: 'rw-structured', label: 'Structured Functional - execution of predefined test scripts' }, - { value: 'testcases', label: 'Test Case Creation - creation of scenarios, instructions and exepected results' }, - { value: 'certification', label: 'Certify your mobile application release against predefined device set including.' }, - { value: 'devicelab', label: 'Test real devices in real cell networks across the world' }, - { value: 'performanceTuning', label: 'Identify and provide perfromance improvements' }, - { value: 'performanceTesting', label: 'Testing web application robustness' }, + { value: 'rw-unstructured', label: 'Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.' }, + { value: 'rw-structured', label: 'Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.' }, + { value: 'testcases', label: 'Test Cases/Scenarios - \ +Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results' }, + { value: 'certification', label: 'App Certification - Certify your mobile application release against predefined device set including; \ +\ + --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP;\ +\ + --App behavior analysis in different modes (inactive, active, low battery, );\ +\ + --App performance under various interrupts, under simulated network conditions, etc. ' }, + { value: 'devicelab', label: 'Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world' }, + { value: 'performanceTuning', label: 'Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.' }, + { value: 'performanceTesting', label: 'Performance Tuning - Analyze and identify performance issues, actionable items for improvement.' }, ] }, { @@ -822,7 +827,7 @@ export const basicSections = [ { icon: 'question', title: 'User Acceptance / Beta Testing', - description: 'UAT is the process of sharing the final application with users and gathering feedback. Please place an X in the Required column for each required UAT requirement.', + description: 'UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.', fieldName: 'details.qaTesting.uat', type: 'checkbox-group', options: [ @@ -842,7 +847,7 @@ export const basicSections = [ questions: [ { icon: 'question', - description: 'How much budget do you have? Please place an X in the Confirm column to specify your budget.', + description: 'How much budget do you have?', title: 'Budget', fieldName: 'details.loadDetails.budget', @@ -859,7 +864,7 @@ export const basicSections = [ }, { icon: 'question', - description: 'When do you need your app by? Please place an X in the Confirm column to specify your timeline.', + description: 'When do you need your app by?', title: 'Timeline', fieldName: 'details.loadDetails.timeline', type: 'slide-radiogroup', @@ -883,4 +888,4 @@ export const basicSections = [ } ] } -] \ No newline at end of file +]