             <hr/>
             {@render_upgrade_rows(purchased_upgrades, applied_upgrades, num_projects, total_upgrades, your_upgrades)}
             {@render_upgrade_submit_buttons()}
+            {@render_admin_upgrade() if redux.getStore('account').get('groups')?.contains('admin')}
         </Alert>
+
+    save_admin_upgrade: (e) ->
+        e.preventDefault()
+        s = @refs.admin_input.getValue()
+        quotas = JSON.parse(s)
+        console.log("admin upgrade '#{s}' -->", quotas)
+        @props.redux.getActions(@props.name).admin_upgrade_all_student_projects(quotas)
+        return false
+
+    render_admin_upgrade: ->
+        <div>
+            <br/>
+            <hr/>
+            <h3>Admin Upgrade</h3>
+            Enter an Javascript-parseable object and hit enter (see the Javascript console for feedback):
+            <form onSubmit={@save_admin_upgrade}>
+                <Input
+                    ref         = 'admin_input'
+                    type        = 'text'
+                    placeholder = {JSON.stringify(require('smc-util/schema').DEFAULT_QUOTAS)}
+                />
+            </form>
+        </div>
 
     render_upgrade_submit_buttons: ->
         <ButtonToolbar>

            for project_id in store.get_student_project_ids()
                redux.getActions('projects').apply_upgrades_to_project(project_id, upgrades)
            @set_activity(id:id)

        set_student_note: (student, note) =>
            store = get_store()

        account_store = redux.getStore('account')
        if not account_store?
            return <Loading/>

        purchased_upgrades = account_store.get_total_upgrades()
        if misc.is_zero_map(purchased_upgrades)
            # user has no upgrades on their account
