diff --git a/django/poc/migrations/0001_initial.py b/django/poc/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..a35de704c0eccdf9424d4bfd47d65e1f64109834
--- /dev/null
+++ b/django/poc/migrations/0001_initial.py
@@ -0,0 +1,265 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2018-03-16 13:20
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ArInternalMetadata',
+            fields=[
+                ('key', models.CharField(max_length=255, primary_key=True, serialize=False)),
+                ('value', models.CharField(blank=True, max_length=255, null=True)),
+                ('created_at', models.DateTimeField()),
+                ('updated_at', models.DateTimeField()),
+            ],
+            options={
+                'db_table': 'ar_internal_metadata',
+            },
+        ),
+        migrations.CreateModel(
+            name='Datasets',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('size', models.IntegerField(blank=True, null=True)),
+                ('extension', models.CharField(blank=True, max_length=255, null=True)),
+                ('user_id', models.IntegerField(blank=True, null=True)),
+                ('created_at', models.DateTimeField()),
+                ('updated_at', models.DateTimeField()),
+                ('file_name', models.CharField(blank=True, max_length=255, null=True)),
+            ],
+            options={
+                'db_table': 'datasets',
+            },
+        ),
+        migrations.CreateModel(
+            name='DockerOs',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=255, null=True)),
+                ('version', models.CharField(blank=True, max_length=255, null=True)),
+                ('docker_name', models.CharField(blank=True, max_length=255, null=True)),
+            ],
+            options={
+                'db_table': 'docker_os',
+            },
+        ),
+        migrations.CreateModel(
+            name='JobQueues',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('timeout', models.IntegerField(blank=True, null=True)),
+                ('is_default', models.IntegerField()),
+                ('created_at', models.DateTimeField()),
+                ('updated_at', models.DateTimeField()),
+            ],
+            options={
+                'db_table': 'job_queues',
+            },
+        ),
+        migrations.CreateModel(
+            name='Jobs',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('webapp_id', models.IntegerField(blank=True, null=True)),
+                ('user_id', models.IntegerField(blank=True, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
+                ('param', models.CharField(blank=True, max_length=255, null=True)),
+                ('datasize', models.IntegerField(blank=True, null=True)),
+                ('version', models.CharField(blank=True, max_length=255, null=True)),
+                ('exec_time', models.IntegerField(blank=True, null=True)),
+                ('size_generated_data', models.IntegerField(blank=True, null=True)),
+                ('ipaddress', models.CharField(blank=True, max_length=255, null=True)),
+                ('access_token', models.CharField(blank=True, max_length=255, null=True)),
+                ('state', models.IntegerField()),
+                ('container_id', models.CharField(blank=True, max_length=64, null=True)),
+                ('queue_id', models.IntegerField()),
+                ('result', models.IntegerField()),
+            ],
+            options={
+                'db_table': 'jobs',
+            },
+        ),
+        migrations.CreateModel(
+            name='JobUploads',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('job_file_file_name', models.CharField(blank=True, max_length=255, null=True)),
+                ('job_file_content_type', models.CharField(blank=True, max_length=255, null=True)),
+                ('job_file_file_size', models.IntegerField(blank=True, null=True)),
+                ('job_file_updated_at', models.DateTimeField(blank=True, null=True)),
+                ('type', models.CharField(blank=True, max_length=255, null=True)),
+                ('job_id', models.IntegerField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'job_uploads',
+            },
+        ),
+        migrations.CreateModel(
+            name='Quotas',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('user_id', models.IntegerField()),
+                ('webapp_id', models.IntegerField()),
+                ('quantity', models.BigIntegerField(blank=True, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'quotas',
+            },
+        ),
+        migrations.CreateModel(
+            name='SchemaMigrations',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('version', models.CharField(max_length=255, unique=True)),
+            ],
+            options={
+                'db_table': 'schema_migrations',
+            },
+        ),
+        migrations.CreateModel(
+            name='Taggings',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('tag_id', models.IntegerField(blank=True, null=True)),
+                ('taggable_id', models.IntegerField(blank=True, null=True)),
+                ('taggable_type', models.CharField(blank=True, max_length=255, null=True)),
+                ('tagger_id', models.IntegerField(blank=True, null=True)),
+                ('tagger_type', models.CharField(blank=True, max_length=255, null=True)),
+                ('context', models.CharField(blank=True, max_length=128, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'taggings',
+            },
+        ),
+        migrations.CreateModel(
+            name='Tags',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=255, null=True, unique=True)),
+                ('taggings_count', models.IntegerField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'tags',
+            },
+        ),
+        migrations.CreateModel(
+            name='Users',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('email', models.CharField(max_length=255, unique=True)),
+                ('encrypted_password', models.CharField(max_length=255)),
+                ('reset_password_token', models.CharField(blank=True, max_length=255, null=True, unique=True)),
+                ('reset_password_sent_at', models.DateTimeField(blank=True, null=True)),
+                ('remember_created_at', models.DateTimeField(blank=True, null=True)),
+                ('sign_in_count', models.IntegerField()),
+                ('current_sign_in_at', models.DateTimeField(blank=True, null=True)),
+                ('last_sign_in_at', models.DateTimeField(blank=True, null=True)),
+                ('current_sign_in_ip', models.CharField(blank=True, max_length=255, null=True)),
+                ('last_sign_in_ip', models.CharField(blank=True, max_length=255, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
+                ('admin', models.IntegerField(blank=True, null=True)),
+                ('confirmation_token', models.CharField(blank=True, max_length=255, null=True, unique=True)),
+                ('confirmed_at', models.DateTimeField(blank=True, null=True)),
+                ('confirmation_sent_at', models.DateTimeField(blank=True, null=True)),
+                ('sshkey', models.TextField(blank=True, null=True)),
+                ('auth_token', models.CharField(blank=True, max_length=255, null=True)),
+            ],
+            options={
+                'db_table': 'users',
+            },
+        ),
+        migrations.CreateModel(
+            name='WebappDemos',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=255, null=True)),
+                ('extension', models.CharField(blank=True, max_length=255, null=True)),
+                ('webapp_id', models.IntegerField(blank=True, null=True)),
+                ('file_type', models.CharField(blank=True, max_length=255, null=True)),
+            ],
+            options={
+                'db_table': 'webapp_demos',
+            },
+        ),
+        migrations.CreateModel(
+            name='WebappParameters',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('value', models.CharField(blank=True, max_length=255, null=True)),
+                ('name', models.CharField(blank=True, max_length=255, null=True)),
+                ('detail', models.CharField(blank=True, max_length=255, null=True)),
+                ('webapp_id', models.IntegerField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'webapp_parameters',
+            },
+        ),
+        migrations.CreateModel(
+            name='Webapps',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=255, null=True, unique=True)),
+                ('description', models.TextField(blank=True, null=True)),
+                ('contact', models.CharField(blank=True, max_length=255, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
+                ('logo_file_name', models.CharField(blank=True, max_length=255, null=True)),
+                ('logo_content_type', models.CharField(blank=True, max_length=255, null=True)),
+                ('logo_file_size', models.IntegerField(blank=True, null=True)),
+                ('logo_updated_at', models.DateTimeField(blank=True, null=True)),
+                ('user_id', models.IntegerField(blank=True, null=True)),
+                ('default_quota', models.IntegerField(blank=True, null=True)),
+                ('docker_os_id', models.IntegerField(blank=True, null=True)),
+                ('docker_name', models.CharField(blank=True, max_length=255, null=True)),
+                ('readme', models.IntegerField(blank=True, null=True)),
+                ('entrypoint', models.CharField(blank=True, max_length=255, null=True)),
+                ('exec_time', models.IntegerField(blank=True, null=True)),
+                ('private', models.IntegerField(blank=True, null=True)),
+                ('access_token', models.CharField(blank=True, max_length=255, null=True)),
+                ('sandbox_state', models.IntegerField()),
+                ('sandbox_version_id', models.IntegerField(blank=True, null=True)),
+                ('default_job_queue_id', models.IntegerField()),
+                ('memory_limit', models.BigIntegerField(blank=True, null=True)),
+            ],
+            options={
+                'db_table': 'webapps',
+            },
+        ),
+        migrations.CreateModel(
+            name='WebappVersions',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('number', models.CharField(blank=True, max_length=255, null=True)),
+                ('changelog', models.CharField(blank=True, max_length=255, null=True)),
+                ('created_at', models.DateTimeField(blank=True, null=True)),
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
+                ('webapp_id', models.IntegerField(blank=True, null=True)),
+                ('docker_image_size', models.FloatField(blank=True, null=True)),
+                ('state', models.IntegerField()),
+                ('published', models.IntegerField()),
+            ],
+            options={
+                'db_table': 'webapp_versions',
+            },
+        ),
+        migrations.AlterUniqueTogether(
+            name='taggings',
+            unique_together=set([('tag_id', 'taggable_id', 'taggable_type', 'context', 'tagger_id', 'tagger_type')]),
+        ),
+    ]
diff --git a/django/poc/migrations/__init__.py b/django/poc/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/django/poc/models.py b/django/poc/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..9da948ae0946c5c385ba02f14e2859c4d870dc34
--- /dev/null
+++ b/django/poc/models.py
@@ -0,0 +1,223 @@
+# This is an auto-generated Django model module.
+# You'll have to do the following manually to clean this up:
+#   * Rearrange models' order
+#   * Make sure each model has one field with primary_key=True
+#   * Make sure each ForeignKey has `on_delete` set to the desired behavior.
+#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
+# Feel free to rename the models, but don't rename db_table values or field names.
+from __future__ import unicode_literals
+
+from django.db import models
+
+
+class ArInternalMetadata(models.Model):
+    key = models.CharField(primary_key=True, max_length=255)
+    value = models.CharField(max_length=255, blank=True, null=True)
+    created_at = models.DateTimeField()
+    updated_at = models.DateTimeField()
+
+    class Meta:
+        db_table = 'ar_internal_metadata'
+
+
+class Users(models.Model):
+    email = models.CharField(unique=True, max_length=255)
+    encrypted_password = models.CharField(max_length=255)
+    reset_password_token = models.CharField(unique=True, max_length=255, blank=True, null=True)
+    reset_password_sent_at = models.DateTimeField(blank=True, null=True)
+    remember_created_at = models.DateTimeField(blank=True, null=True)
+    sign_in_count = models.IntegerField()
+    current_sign_in_at = models.DateTimeField(blank=True, null=True)
+    last_sign_in_at = models.DateTimeField(blank=True, null=True)
+    current_sign_in_ip = models.CharField(max_length=255, blank=True, null=True)
+    last_sign_in_ip = models.CharField(max_length=255, blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+    updated_at = models.DateTimeField(blank=True, null=True)
+    admin = models.IntegerField(blank=True, null=True)
+    confirmation_token = models.CharField(unique=True, max_length=255, blank=True, null=True)
+    confirmed_at = models.DateTimeField(blank=True, null=True)
+    confirmation_sent_at = models.DateTimeField(blank=True, null=True)
+    sshkey = models.TextField(blank=True, null=True)
+    auth_token = models.CharField(max_length=255, blank=True, null=True)
+
+
+    class Meta:
+        db_table = 'users'
+
+
+class Webapps(models.Model):
+    name = models.CharField(unique=True, max_length=255, blank=True, null=True)
+    description = models.TextField(blank=True, null=True)
+    contact = models.CharField(max_length=255, blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+    updated_at = models.DateTimeField(blank=True, null=True)
+    logo_file_name = models.CharField(max_length=255, blank=True, null=True)
+    logo_content_type = models.CharField(max_length=255, blank=True, null=True)
+    logo_file_size = models.IntegerField(blank=True, null=True)
+    logo_updated_at = models.DateTimeField(blank=True, null=True)
+    user_id = models.IntegerField(blank=True, null=True)
+    default_quota = models.IntegerField(blank=True, null=True)
+    docker_os_id = models.IntegerField(blank=True, null=True)
+    docker_name = models.CharField(max_length=255, blank=True, null=True)
+    readme = models.IntegerField(blank=True, null=True)
+    entrypoint = models.CharField(max_length=255, blank=True, null=True)
+    exec_time = models.IntegerField(blank=True, null=True)
+    private = models.IntegerField(blank=True, null=True)
+    access_token = models.CharField(max_length=255, blank=True, null=True)
+    sandbox_state = models.IntegerField()
+    sandbox_version_id = models.IntegerField(blank=True, null=True)
+    default_job_queue_id = models.IntegerField()
+    memory_limit = models.BigIntegerField(blank=True, null=True)
+
+    class Meta:
+        db_table = 'webapps'
+
+
+
+class Datasets(models.Model):
+    name = models.CharField(max_length=255)
+    size = models.IntegerField(blank=True, null=True)
+    extension = models.CharField(max_length=255, blank=True, null=True)
+    user_id = models.IntegerField(blank=True, null=True)
+    created_at = models.DateTimeField()
+    updated_at = models.DateTimeField()
+    file_name = models.CharField(max_length=255, blank=True, null=True)
+
+    class Meta:
+        db_table = 'datasets'
+
+
+class DockerOs(models.Model):
+    name = models.CharField(max_length=255, blank=True, null=True)
+    version = models.CharField(max_length=255, blank=True, null=True)
+    docker_name = models.CharField(max_length=255, blank=True, null=True)
+
+    class Meta:
+        db_table = 'docker_os'
+
+
+class JobQueues(models.Model):
+    name = models.CharField(max_length=255)
+    timeout = models.IntegerField(blank=True, null=True)
+    is_default = models.IntegerField()
+    created_at = models.DateTimeField()
+    updated_at = models.DateTimeField()
+
+    class Meta:
+        db_table = 'job_queues'
+
+
+class JobUploads(models.Model):
+    job_file_file_name = models.CharField(max_length=255, blank=True, null=True)
+    job_file_content_type = models.CharField(max_length=255, blank=True, null=True)
+    job_file_file_size = models.IntegerField(blank=True, null=True)
+    job_file_updated_at = models.DateTimeField(blank=True, null=True)
+    type = models.CharField(max_length=255, blank=True, null=True)
+    job_id = models.IntegerField(blank=True, null=True)
+
+    class Meta:
+        db_table = 'job_uploads'
+
+
+class Jobs(models.Model):
+    webapp_id = models.IntegerField(blank=True, null=True)
+    user_id = models.IntegerField(blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+    updated_at = models.DateTimeField(blank=True, null=True)
+    param = models.CharField(max_length=255, blank=True, null=True)
+    datasize = models.IntegerField(blank=True, null=True)
+    version = models.CharField(max_length=255, blank=True, null=True)
+    exec_time = models.IntegerField(blank=True, null=True)
+    size_generated_data = models.IntegerField(blank=True, null=True)
+    ipaddress = models.CharField(max_length=255, blank=True, null=True)
+    access_token = models.CharField(max_length=255, blank=True, null=True)
+    state = models.IntegerField()
+    container_id = models.CharField(max_length=64, blank=True, null=True)
+    queue_id = models.IntegerField()
+    result = models.IntegerField()
+
+    class Meta:
+        db_table = 'jobs'
+
+
+class Quotas(models.Model):
+    #user_id = models.IntegerField()
+    webapp_id = models.IntegerField()
+    quantity = models.BigIntegerField(blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+    updated_at = models.DateTimeField(blank=True, null=True)
+
+    # Relationships
+    user = models.ForeignKey(Users, on_delete=models.CASCADE, null=True)
+    # webapp_id = models.ForeignKey(Webapps, on_delete=models.CASCADE, null=True)
+
+    class Meta:
+        db_table = 'quotas'
+
+
+class SchemaMigrations(models.Model):
+    version = models.CharField(unique=True, max_length=255)
+
+    class Meta:
+        db_table = 'schema_migrations'
+
+
+class Taggings(models.Model):
+    tag_id = models.IntegerField(blank=True, null=True)
+    taggable_id = models.IntegerField(blank=True, null=True)
+    taggable_type = models.CharField(max_length=255, blank=True, null=True)
+    tagger_id = models.IntegerField(blank=True, null=True)
+    tagger_type = models.CharField(max_length=255, blank=True, null=True)
+    context = models.CharField(max_length=128, blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+
+    class Meta:
+        db_table = 'taggings'
+        unique_together = (('tag_id', 'taggable_id', 'taggable_type', 'context', 'tagger_id', 'tagger_type'),)
+
+
+class Tags(models.Model):
+    name = models.CharField(unique=True, max_length=255, blank=True, null=True)
+    taggings_count = models.IntegerField(blank=True, null=True)
+
+    class Meta:
+        db_table = 'tags'
+
+
+
+
+
+class WebappDemos(models.Model):
+    name = models.CharField(max_length=255, blank=True, null=True)
+    extension = models.CharField(max_length=255, blank=True, null=True)
+    webapp_id = models.IntegerField(blank=True, null=True)
+    file_type = models.CharField(max_length=255, blank=True, null=True)
+
+    class Meta:
+        db_table = 'webapp_demos'
+
+
+class WebappParameters(models.Model):
+    value = models.CharField(max_length=255, blank=True, null=True)
+    name = models.CharField(max_length=255, blank=True, null=True)
+    detail = models.CharField(max_length=255, blank=True, null=True)
+    webapp_id = models.IntegerField(blank=True, null=True)
+
+    class Meta:
+        db_table = 'webapp_parameters'
+
+
+class WebappVersions(models.Model):
+    number = models.CharField(max_length=255, blank=True, null=True)
+    changelog = models.CharField(max_length=255, blank=True, null=True)
+    created_at = models.DateTimeField(blank=True, null=True)
+    updated_at = models.DateTimeField(blank=True, null=True)
+    webapp_id = models.IntegerField(blank=True, null=True)
+    docker_image_size = models.FloatField(blank=True, null=True)
+    state = models.IntegerField()
+    published = models.IntegerField()
+
+    class Meta:
+        db_table = 'webapp_versions'
+
+