diff --git a/drizzle/0024_bored_valeria_richards.sql b/drizzle/0024_bored_valeria_richards.sql
new file mode 100644
index 0000000..e7bb2e6
--- /dev/null
+++ b/drizzle/0024_bored_valeria_richards.sql
@@ -0,0 +1,9 @@
+CREATE TABLE "ovenpheus_log" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "userId" integer,
+ "clay" real NOT NULL,
+ "bricksReceived" real NOT NULL,
+ "timestamp" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+ALTER TABLE "ovenpheus_log" ADD CONSTRAINT "ovenpheus_log_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action;
\ No newline at end of file
diff --git a/drizzle/meta/0024_snapshot.json b/drizzle/meta/0024_snapshot.json
new file mode 100644
index 0000000..c11faa9
--- /dev/null
+++ b/drizzle/meta/0024_snapshot.json
@@ -0,0 +1,1229 @@
+{
+ "id": "530bbae3-07b0-4ea9-bb7e-3d249c2632d1",
+ "prevId": "e061887a-050c-4b6a-a277-14fd95e9a49a",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.devlog": {
+ "name": "devlog",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "projectId": {
+ "name": "projectId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timeSpent": {
+ "name": "timeSpent",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "model": {
+ "name": "model",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "devlog_userId_user_id_fk": {
+ "name": "devlog_userId_user_id_fk",
+ "tableFrom": "devlog",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "devlog_projectId_project_id_fk": {
+ "name": "devlog_projectId_project_id_fk",
+ "tableFrom": "devlog",
+ "tableTo": "project",
+ "columnsFrom": [
+ "projectId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.impersonate_audit_log": {
+ "name": "impersonate_audit_log",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "adminUserId": {
+ "name": "adminUserId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "targetUserId": {
+ "name": "targetUserId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "impersonate_audit_log_adminUserId_user_id_fk": {
+ "name": "impersonate_audit_log_adminUserId_user_id_fk",
+ "tableFrom": "impersonate_audit_log",
+ "tableTo": "user",
+ "columnsFrom": [
+ "adminUserId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "impersonate_audit_log_targetUserId_user_id_fk": {
+ "name": "impersonate_audit_log_targetUserId_user_id_fk",
+ "tableFrom": "impersonate_audit_log",
+ "tableTo": "user",
+ "columnsFrom": [
+ "targetUserId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.legion_review": {
+ "name": "legion_review",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "projectId": {
+ "name": "projectId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "feedback": {
+ "name": "feedback",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notes": {
+ "name": "notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "filamentUsed": {
+ "name": "filamentUsed",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "action": {
+ "name": "action",
+ "type": "legion_action",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "legion_review_userId_user_id_fk": {
+ "name": "legion_review_userId_user_id_fk",
+ "tableFrom": "legion_review",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "legion_review_projectId_project_id_fk": {
+ "name": "legion_review_projectId_project_id_fk",
+ "tableFrom": "legion_review",
+ "tableTo": "project",
+ "columnsFrom": [
+ "projectId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.market_item": {
+ "name": "market_item",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "createdBy": {
+ "name": "createdBy",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "minRequiredShopScore": {
+ "name": "minRequiredShopScore",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "minShopScore": {
+ "name": "minShopScore",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "maxShopScore": {
+ "name": "maxShopScore",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "maxPrice": {
+ "name": "maxPrice",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "minPrice": {
+ "name": "minPrice",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "isPublic": {
+ "name": "isPublic",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "market_item_createdBy_user_id_fk": {
+ "name": "market_item_createdBy_user_id_fk",
+ "tableFrom": "market_item",
+ "tableTo": "user",
+ "columnsFrom": [
+ "createdBy"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.market_item_order": {
+ "name": "market_item_order",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "addressId": {
+ "name": "addressId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "bricksPaid": {
+ "name": "bricksPaid",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "market_order_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'awaiting_approval'"
+ },
+ "userNotes": {
+ "name": "userNotes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "notes": {
+ "name": "notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "market_item_order_userId_user_id_fk": {
+ "name": "market_item_order_userId_user_id_fk",
+ "tableFrom": "market_item_order",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ovenpheus_log": {
+ "name": "ovenpheus_log",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "clay": {
+ "name": "clay",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "bricksReceived": {
+ "name": "bricksReceived",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ovenpheus_log_userId_user_id_fk": {
+ "name": "ovenpheus_log_userId_user_id_fk",
+ "tableFrom": "ovenpheus_log",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.project": {
+ "name": "project",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "editorFileType": {
+ "name": "editorFileType",
+ "type": "editor_file_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "editorUrl": {
+ "name": "editorUrl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "uploadedFileUrl": {
+ "name": "uploadedFileUrl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modelFile": {
+ "name": "modelFile",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'building'"
+ },
+ "printedBy": {
+ "name": "printedBy",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "submittedToAirtable": {
+ "name": "submittedToAirtable",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "project_userId_user_id_fk": {
+ "name": "project_userId_user_id_fk",
+ "tableFrom": "project",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "project_printedBy_user_id_fk": {
+ "name": "project_printedBy_user_id_fk",
+ "tableFrom": "project",
+ "tableTo": "user",
+ "columnsFrom": [
+ "printedBy"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.session": {
+ "name": "session",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expiresAt": {
+ "name": "expiresAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "session_userId_user_id_fk": {
+ "name": "session_userId_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ship": {
+ "name": "ship",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "projectId": {
+ "name": "projectId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "editorFileType": {
+ "name": "editorFileType",
+ "type": "editor_file_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "editorUrl": {
+ "name": "editorUrl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "uploadedFileUrl": {
+ "name": "uploadedFileUrl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modelFile": {
+ "name": "modelFile",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ship_userId_user_id_fk": {
+ "name": "ship_userId_user_id_fk",
+ "tableFrom": "ship",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "ship_projectId_project_id_fk": {
+ "name": "ship_projectId_project_id_fk",
+ "tableFrom": "ship",
+ "tableTo": "project",
+ "columnsFrom": [
+ "projectId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.t1_review": {
+ "name": "t1_review",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "projectId": {
+ "name": "projectId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "feedback": {
+ "name": "feedback",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notes": {
+ "name": "notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "action": {
+ "name": "action",
+ "type": "t1_review_action",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "t1_review_userId_user_id_fk": {
+ "name": "t1_review_userId_user_id_fk",
+ "tableFrom": "t1_review",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "t1_review_projectId_project_id_fk": {
+ "name": "t1_review_projectId_project_id_fk",
+ "tableFrom": "t1_review",
+ "tableTo": "project",
+ "columnsFrom": [
+ "projectId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.t2_review": {
+ "name": "t2_review",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "projectId": {
+ "name": "projectId",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "feedback": {
+ "name": "feedback",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notes": {
+ "name": "notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "shopScoreMultiplier": {
+ "name": "shopScoreMultiplier",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 25
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "t2_review_userId_user_id_fk": {
+ "name": "t2_review_userId_user_id_fk",
+ "tableFrom": "t2_review",
+ "tableTo": "user",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "t2_review_projectId_project_id_fk": {
+ "name": "t2_review_projectId_project_id_fk",
+ "tableFrom": "t2_review",
+ "tableTo": "project",
+ "columnsFrom": [
+ "projectId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.user": {
+ "name": "user",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "idvId": {
+ "name": "idvId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "idvToken": {
+ "name": "idvToken",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "slackId": {
+ "name": "slackId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "profilePicture": {
+ "name": "profilePicture",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "hackatimeTrust": {
+ "name": "hackatimeTrust",
+ "type": "hackatime_trust",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trust": {
+ "name": "trust",
+ "type": "trust",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'blue'"
+ },
+ "clay": {
+ "name": "clay",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "brick": {
+ "name": "brick",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "shopScore": {
+ "name": "shopScore",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "hasBasePrinter": {
+ "name": "hasBasePrinter",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "hasT1Review": {
+ "name": "hasT1Review",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "hasT2Review": {
+ "name": "hasT2Review",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "hasAdmin": {
+ "name": "hasAdmin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "isPrinter": {
+ "name": "isPrinter",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "lastLoginAt": {
+ "name": "lastLoginAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_idvId_unique": {
+ "name": "user_idvId_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "idvId"
+ ]
+ },
+ "user_slackId_unique": {
+ "name": "user_slackId_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "slackId"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.editor_file_type": {
+ "name": "editor_file_type",
+ "schema": "public",
+ "values": [
+ "url",
+ "upload"
+ ]
+ },
+ "public.hackatime_trust": {
+ "name": "hackatime_trust",
+ "schema": "public",
+ "values": [
+ "green",
+ "blue",
+ "yellow",
+ "red"
+ ]
+ },
+ "public.legion_action": {
+ "name": "legion_action",
+ "schema": "public",
+ "values": [
+ "mark_for_printing",
+ "unmark_for_printing",
+ "print",
+ "add_comment",
+ "reject",
+ "already_printed"
+ ]
+ },
+ "public.market_order_status": {
+ "name": "market_order_status",
+ "schema": "public",
+ "values": [
+ "awaiting_approval",
+ "fulfilled",
+ "denied",
+ "refunded"
+ ]
+ },
+ "public.project_audit_log_type": {
+ "name": "project_audit_log_type",
+ "schema": "public",
+ "values": [
+ "create",
+ "update",
+ "delete"
+ ]
+ },
+ "public.status": {
+ "name": "status",
+ "schema": "public",
+ "values": [
+ "building",
+ "submitted",
+ "t1_approved",
+ "printing",
+ "printed",
+ "t2_approved",
+ "finalized",
+ "rejected",
+ "rejected_locked"
+ ]
+ },
+ "public.t1_review_action": {
+ "name": "t1_review_action",
+ "schema": "public",
+ "values": [
+ "approve",
+ "approve_no_print",
+ "add_comment",
+ "reject",
+ "reject_lock"
+ ]
+ },
+ "public.trust": {
+ "name": "trust",
+ "schema": "public",
+ "values": [
+ "green",
+ "blue",
+ "yellow",
+ "red"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json
index 803d64f..f350c57 100644
--- a/drizzle/meta/_journal.json
+++ b/drizzle/meta/_journal.json
@@ -169,6 +169,13 @@
"when": 1767292777224,
"tag": "0023_pale_junta",
"breakpoints": true
+ },
+ {
+ "idx": 24,
+ "version": "7",
+ "when": 1767390464394,
+ "tag": "0024_bored_valeria_richards",
+ "breakpoints": true
}
]
}
\ No newline at end of file
diff --git a/src/lib/assets/ovenpheus.png b/src/lib/assets/ovenpheus.png
new file mode 100644
index 0000000..d230d4a
Binary files /dev/null and b/src/lib/assets/ovenpheus.png differ
diff --git a/src/lib/defs.ts b/src/lib/defs.ts
index d3b5824..2215271 100644
--- a/src/lib/defs.ts
+++ b/src/lib/defs.ts
@@ -8,11 +8,11 @@ export const BASE_PRINTER_CLAY = 40;
export const CLAY_PER_HOUR = 1.0;
export const BRICKS_PER_HOUR = 12.0;
+export const BRICKS_PER_HOUR_CONVERTED = 10.0;
export const BASE_SHOP_SCORE_PER_HOUR = 25.0;
-export const BRICKS_PER_CLAY_CONVERTED = 10.0;
export const PRINT_PAYOUT_CENTS_PER_GRAM = 2.0;
export const PRINT_MINUTES_PER_GRAM = 0.24;
export const BETA_DATE_CUTOFF = new Date('2025-12-16');
-export const BETA_MULTIPLIER = 1.5;
\ No newline at end of file
+export const BETA_MULTIPLIER = 1.5;
diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts
index e9975f5..2f4591e 100644
--- a/src/lib/server/db/schema.ts
+++ b/src/lib/server/db/schema.ts
@@ -229,6 +229,16 @@ export const marketItem = pgTable('market_item', {
updatedAt: timestamp().notNull().defaultNow()
});
+export const ovenpheusLog = pgTable('ovenpheus_log', {
+ id: serial().primaryKey(),
+ userId: integer().references(() => user.id),
+
+ clay: real().notNull(),
+ bricksReceived: real().notNull(),
+
+ timestamp: timestamp().notNull().defaultNow(),
+});
+
export const marketOrderStatus = pgEnum('market_order_status', [
'awaiting_approval',
'fulfilled',
diff --git a/src/routes/dashboard/market/+page.svelte b/src/routes/dashboard/market/+page.svelte
index 2d531b8..7dab8ad 100644
--- a/src/routes/dashboard/market/+page.svelte
+++ b/src/routes/dashboard/market/+page.svelte
@@ -2,6 +2,8 @@
import Head from '$lib/components/Head.svelte';
import MarketItem from './MarketItem.svelte';
import MarketTimer from './MarketTimer.svelte';
+ import ovenpheus from '$lib/assets/ovenpheus.png';
+ import { BRICKS_PER_HOUR, BRICKS_PER_HOUR_CONVERTED, CLAY_PER_HOUR } from '$lib/defs';
let { data } = $props();
@@ -14,10 +16,34 @@
- Market score: {data.user.shopScore} + Market score: {Math.floor(data.user.shopScore)} (allows you to get stuff for cheaper and unlock more items!)
+Get your yummy yummy bricks here!
++ You'll get {(data.user.hasBasePrinter ? BRICKS_PER_HOUR : BRICKS_PER_HOUR_CONVERTED) / + CLAY_PER_HOUR} bricks per clay +
+ + Go get your bricks ++ {#if !data.user.hasBasePrinter} + Keep in mind that you'll need {BASE_PRINTER_CLAY} clay to get a base printer + {/if} +
+ + +