diff --git a/hasura/config.yaml b/hasura/config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..85d6ce2a3c7285e4fa45de946f53a42991639060
--- /dev/null
+++ b/hasura/config.yaml
@@ -0,0 +1,6 @@
+version: 3
+endpoint: http://localhost:15432
+metadata_directory: metadata
+actions:
+  kind: synchronous
+  handler_webhook_baseurl: "http://172.17.0.1:7124/api"
diff --git a/hasura/jwk_props_dev.json b/hasura/jwk_props_dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..84d71062d53fbef34d6cea5478255c221f954f67
--- /dev/null
+++ b/hasura/jwk_props_dev.json
@@ -0,0 +1,13 @@
+{
+  "jwk_url": "http://172.17.0.1:7124/.well-known/jwks.json",
+  "header": {
+    "type": "Authorization"
+  },
+  "issuer": "urn:hackerfest:systems:auth",
+  "claims_namespace": "urn:hackerfest:resources:claims",
+  "claims_map": {
+    "x-hasura-user-id": { "path":  "$$['urn:hackerfest:resources:claims']['user-id']" },
+    "x-hasura-default-role": { "path": "$$['urn:hackerfest:resources:claims']['default-role']" },
+    "x-hasura-allowed-roles": { "path": "$$['urn:hackerfest:resources:claims']['allowed-roles']" }
+  }
+}
\ No newline at end of file
diff --git a/hasura/metadata/actions.graphql b/hasura/metadata/actions.graphql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/hasura/metadata/actions.yaml b/hasura/metadata/actions.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1edb4c2ffc54522b4a3fff02fbbee9dd1690b565
--- /dev/null
+++ b/hasura/metadata/actions.yaml
@@ -0,0 +1,6 @@
+actions: []
+custom_types:
+  enums: []
+  input_objects: []
+  objects: []
+  scalars: []
diff --git a/hasura/metadata/allow_list.yaml b/hasura/metadata/allow_list.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fe51488c7066f6687ef680d6bfaa4f7768ef205c
--- /dev/null
+++ b/hasura/metadata/allow_list.yaml
@@ -0,0 +1 @@
+[]
diff --git a/hasura/metadata/cron_triggers.yaml b/hasura/metadata/cron_triggers.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fe51488c7066f6687ef680d6bfaa4f7768ef205c
--- /dev/null
+++ b/hasura/metadata/cron_triggers.yaml
@@ -0,0 +1 @@
+[]
diff --git a/hasura/metadata/databases/databases.yaml b/hasura/metadata/databases/databases.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..65a11b202ed88526ac3cff9018de41a763814fd9
--- /dev/null
+++ b/hasura/metadata/databases/databases.yaml
@@ -0,0 +1,14 @@
+- name: default
+  kind: postgres
+  configuration:
+    connection_info:
+      database_url:
+        from_env: HASURA_GRAPHQL_DATABASE_URL
+      isolation_level: read-committed
+      pool_settings:
+        connection_lifetime: 600
+        idle_timeout: 180
+        max_connections: 50
+        retries: 1
+      use_prepared_statements: true
+  tables: "!include default/tables/tables.yaml"
diff --git a/hasura/metadata/databases/default/tables/public_analytics.yaml b/hasura/metadata/databases/default/tables/public_analytics.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ec71a3b68fe56dafe840f395bcbe31b5cc012949
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_analytics.yaml
@@ -0,0 +1,32 @@
+table:
+  name: analytics
+  schema: public
+object_relationships:
+- name: parent
+  using:
+    foreign_key_constraint_on: parent_id
+array_relationships:
+- name: children
+  using:
+    foreign_key_constraint_on:
+      column: parent_id
+      table:
+        name: analytics
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - session_id
+    - action
+    - event
+    - start_time
+    - end_time
+    - parent_id
+    - properties
+    - location
+    - device
+    - meta
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_bundle_codes.yaml b/hasura/metadata/databases/default/tables/public_bundle_codes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d49af64c4cebe385f7b86e0ce85e87a5b91f7333
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_bundle_codes.yaml
@@ -0,0 +1,25 @@
+table:
+  name: bundle_codes
+  schema: public
+array_relationships:
+- name: user_bundle_codes
+  using:
+    foreign_key_constraint_on:
+      column: bundle_code_id
+      table:
+        name: user_bundle_codes
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - name
+    - description
+    - platforms
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_files.yaml b/hasura/metadata/databases/default/tables/public_files.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e82bf5f883b26a5adb457bebaf1efa350aaf61a9
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_files.yaml
@@ -0,0 +1,45 @@
+table:
+  name: files
+  schema: public
+object_relationships:
+- name: files_search_index
+  using:
+    foreign_key_constraint_on:
+      column: file_id
+      table:
+        name: files_search_index
+        schema: public
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
+array_relationships:
+- name: user_file_likes
+  using:
+    foreign_key_constraint_on:
+      column: file_id
+      table:
+        name: user_file_likes
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - user_id
+    - provider
+    - file_root
+    - file_name
+    - stream
+    - comment
+    - tags
+    - labels
+    - featured
+    - requires_approval
+    - approved
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    - featured_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_files_search_index.yaml b/hasura/metadata/databases/default/tables/public_files_search_index.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..183be4b89af525732c2a9b45240d6ad434c578d7
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_files_search_index.yaml
@@ -0,0 +1,15 @@
+table:
+  name: files_search_index
+  schema: public
+object_relationships:
+- name: file
+  using:
+    foreign_key_constraint_on: file_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - file_id
+    - search_index
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_metrics.yaml b/hasura/metadata/databases/default/tables/public_metrics.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..72a28305f5ca224b7a06b9fe54f5f1056296e8c8
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_metrics.yaml
@@ -0,0 +1,21 @@
+table:
+  name: metrics
+  schema: public
+object_relationships:
+- name: user
+  using:
+    foreign_key_constraint_on: author_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - value
+    - type
+    - location
+    - author_id
+    - meta
+    - recorded_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_oauth_access_tokens.yaml b/hasura/metadata/databases/default/tables/public_oauth_access_tokens.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fbcc3007bb0429c27192fb9cbb4726f86200fa24
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_oauth_access_tokens.yaml
@@ -0,0 +1,10 @@
+table:
+  name: oauth_access_tokens
+  schema: public
+object_relationships:
+- name: oauth_client
+  using:
+    foreign_key_constraint_on: client_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
diff --git a/hasura/metadata/databases/default/tables/public_oauth_authorization_codes.yaml b/hasura/metadata/databases/default/tables/public_oauth_authorization_codes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..eafee9b233460a27823462a01d7a3d0d592f6c6f
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_oauth_authorization_codes.yaml
@@ -0,0 +1,10 @@
+table:
+  name: oauth_authorization_codes
+  schema: public
+object_relationships:
+- name: oauth_client
+  using:
+    foreign_key_constraint_on: client_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
diff --git a/hasura/metadata/databases/default/tables/public_oauth_clients.yaml b/hasura/metadata/databases/default/tables/public_oauth_clients.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..749d7f3013648dd033e6f4fd50731aa2422ec78a
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_oauth_clients.yaml
@@ -0,0 +1,47 @@
+table:
+  name: oauth_clients
+  schema: public
+object_relationships:
+- name: user
+  using:
+    foreign_key_constraint_on: owner_id
+array_relationships:
+- name: oauth_access_tokens
+  using:
+    foreign_key_constraint_on:
+      column: client_id
+      table:
+        name: oauth_access_tokens
+        schema: public
+- name: oauth_authorization_codes
+  using:
+    foreign_key_constraint_on:
+      column: client_id
+      table:
+        name: oauth_authorization_codes
+        schema: public
+- name: oauth_refresh_tokens
+  using:
+    foreign_key_constraint_on:
+      column: client_id
+      table:
+        name: oauth_refresh_tokens
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - secret
+    - owner_id
+    - redirect_uris
+    - grant_types
+    - internal
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    - name
+    - description
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_oauth_refresh_tokens.yaml b/hasura/metadata/databases/default/tables/public_oauth_refresh_tokens.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4aed769d5606c429a451b489ccbfc553f5fe0232
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_oauth_refresh_tokens.yaml
@@ -0,0 +1,10 @@
+table:
+  name: oauth_refresh_tokens
+  schema: public
+object_relationships:
+- name: oauth_client
+  using:
+    foreign_key_constraint_on: client_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
diff --git a/hasura/metadata/databases/default/tables/public_survey_users.yaml b/hasura/metadata/databases/default/tables/public_survey_users.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c598f860cbcd9a6be63586d4df9da0ac84a824ad
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_survey_users.yaml
@@ -0,0 +1,20 @@
+table:
+  name: survey_users
+  schema: public
+object_relationships:
+- name: survey
+  using:
+    foreign_key_constraint_on: survey_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - survey_id
+    - user_id
+    - properties
+    - created_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_surveys.yaml b/hasura/metadata/databases/default/tables/public_surveys.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c39d8d01a7749b8408cf87ca305b9cc88ff97c59
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_surveys.yaml
@@ -0,0 +1,33 @@
+table:
+  name: surveys
+  schema: public
+array_relationships:
+- name: survey_users
+  using:
+    foreign_key_constraint_on:
+      column: survey_id
+      table:
+        name: survey_users
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - slug
+    - name
+    - header_image_url
+    - partner_names
+    - description
+    - requirements
+    - settings
+    - properties
+    - public
+    - published_at
+    - expires_at
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_uploads.yaml b/hasura/metadata/databases/default/tables/public_uploads.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0d2f61c89ee2d31d5a71786a826b903b72d805c7
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_uploads.yaml
@@ -0,0 +1,25 @@
+table:
+  name: uploads
+  schema: public
+object_relationships:
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - user_id
+    - provider
+    - upload_url
+    - request_params
+    - expires_at
+    - status
+    - status_reason
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_user_bundle_codes.yaml b/hasura/metadata/databases/default/tables/public_user_bundle_codes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2044a9c5741092ffa37ba9d502e3faeb82a739cb
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_user_bundle_codes.yaml
@@ -0,0 +1,18 @@
+table:
+  name: user_bundle_codes
+  schema: public
+object_relationships:
+- name: bundle_code
+  using:
+    foreign_key_constraint_on: bundle_code_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - user_id
+    - bundle_code_id
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_user_file_likes.yaml b/hasura/metadata/databases/default/tables/public_user_file_likes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cb1016fd9d75793e6e9d220d713a1dbf016a6434
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_user_file_likes.yaml
@@ -0,0 +1,21 @@
+table:
+  name: user_file_likes
+  schema: public
+object_relationships:
+- name: file
+  using:
+    foreign_key_constraint_on: file_id
+- name: user
+  using:
+    foreign_key_constraint_on: user_id
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - user_id
+    - file_id
+    - created_at
+    - updated_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/public_users.yaml b/hasura/metadata/databases/default/tables/public_users.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3a2f1badf32a0e7a9c6c4d139ce7b0fa772685bb
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/public_users.yaml
@@ -0,0 +1,89 @@
+table:
+  name: users
+  schema: public
+array_relationships:
+- name: files
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: files
+        schema: public
+- name: metrics
+  using:
+    foreign_key_constraint_on:
+      column: author_id
+      table:
+        name: metrics
+        schema: public
+- name: oauth_access_tokens
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: oauth_access_tokens
+        schema: public
+- name: oauth_authorization_codes
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: oauth_authorization_codes
+        schema: public
+- name: oauth_clients
+  using:
+    foreign_key_constraint_on:
+      column: owner_id
+      table:
+        name: oauth_clients
+        schema: public
+- name: oauth_refresh_tokens
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: oauth_refresh_tokens
+        schema: public
+- name: survey_users
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: survey_users
+        schema: public
+- name: uploads
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: uploads
+        schema: public
+- name: user_bundle_codes
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: user_bundle_codes
+        schema: public
+- name: user_file_likes
+  using:
+    foreign_key_constraint_on:
+      column: user_id
+      table:
+        name: user_file_likes
+        schema: public
+select_permissions:
+- permission:
+    allow_aggregations: true
+    columns:
+    - id
+    - name
+    - email
+    - password
+    - reset_token
+    - meta
+    - created_at
+    - updated_at
+    - deleted_at
+    filter: {}
+  role: overseer
diff --git a/hasura/metadata/databases/default/tables/tables.yaml b/hasura/metadata/databases/default/tables/tables.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ae8e81f9b3d88e5b8a35da5f395bfea4c7ab5979
--- /dev/null
+++ b/hasura/metadata/databases/default/tables/tables.yaml
@@ -0,0 +1,15 @@
+- "!include public_analytics.yaml"
+- "!include public_bundle_codes.yaml"
+- "!include public_files.yaml"
+- "!include public_files_search_index.yaml"
+- "!include public_metrics.yaml"
+- "!include public_oauth_access_tokens.yaml"
+- "!include public_oauth_authorization_codes.yaml"
+- "!include public_oauth_clients.yaml"
+- "!include public_oauth_refresh_tokens.yaml"
+- "!include public_survey_users.yaml"
+- "!include public_surveys.yaml"
+- "!include public_uploads.yaml"
+- "!include public_user_bundle_codes.yaml"
+- "!include public_user_file_likes.yaml"
+- "!include public_users.yaml"
diff --git a/hasura/metadata/query_collections.yaml b/hasura/metadata/query_collections.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fe51488c7066f6687ef680d6bfaa4f7768ef205c
--- /dev/null
+++ b/hasura/metadata/query_collections.yaml
@@ -0,0 +1 @@
+[]
diff --git a/hasura/metadata/remote_schemas.yaml b/hasura/metadata/remote_schemas.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fe51488c7066f6687ef680d6bfaa4f7768ef205c
--- /dev/null
+++ b/hasura/metadata/remote_schemas.yaml
@@ -0,0 +1 @@
+[]
diff --git a/hasura/metadata/rest_endpoints.yaml b/hasura/metadata/rest_endpoints.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fe51488c7066f6687ef680d6bfaa4f7768ef205c
--- /dev/null
+++ b/hasura/metadata/rest_endpoints.yaml
@@ -0,0 +1 @@
+[]
diff --git a/hasura/metadata/version.yaml b/hasura/metadata/version.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0a70affa4bdaac5b06bfd9793ffc20f5f60e9ea6
--- /dev/null
+++ b/hasura/metadata/version.yaml
@@ -0,0 +1 @@
+version: 3