   testGroupNumberUS: {type: 'integer', minimum: 0, maximum: 256, exclusiveMaximum: true}
   mailChimp: {type: 'object'}
   hourOfCode: {type: 'boolean'}
+  hourOfCode2019: {type: 'boolean'} # adding for hoc 2019, TODO refactor into a reusable property if needed
   hourOfCodeComplete: {type: 'boolean'}
+  hourOfCodeOptions: c.object({title: 'Options useful for hour of code users'}, {
+    showCompleteSignupModal: {type: 'boolean', description: 'Whether to show complete signup modal on teacher dashboard - only valid for teachers who signup from hoc signup flow'}
+    showHocProgress: {type: 'boolean', description: 'Set true for students who sign up from hoc save progress modal since they didnt have a class code'}
+    hocCodeLanguage: {type: 'string', description: 'HoC code language played as anonymous student, used to show progress on student dashboard until they have a class code'}
+  })
   createdOnHost: { type: 'string' }
 
   emailLower: c.shortString()

      # Ensure we can add new properties on the Ozaria server without breaking CodeCombat users.
      additionalProperties: true
    }, {
      cinematicThangTypeOriginal: c.stringID(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Thang Type', description: 'The ThangType of the hero.', format: 'thang-type'),
      playerHeroName: c.shortString({ title: 'Ozaria Hero Name', description: 'The user set name for the ozaria hero. Used in cinematics.' }),
      tints: c.array(
        {

changes is how we can avoid validation errors as the user traverses between
the two products.
###

UserSchema = c.object
  title: 'User'
