@programinglive/dev-workflow-mcp-server 1.7.11 → 1.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.dockerignore +60 -0
  2. package/.env.example +1 -0
  3. package/.env.production +16 -0
  4. package/CHANGELOG.md +35 -0
  5. package/Dockerfile +32 -0
  6. package/README.md +20 -0
  7. package/db/migrations/002_create_users_table.sql +22 -0
  8. package/db/migrations/003_create_workflow_history.sql +14 -0
  9. package/db/migrations/004_fix_workflow_history.sql +3 -0
  10. package/docker-compose.yml +24 -0
  11. package/docs/GCP_DEPLOYMENT.md +298 -0
  12. package/docs/product/PRD.md +1 -1
  13. package/docs/release-notes/RELEASE_NOTES.md +34 -0
  14. package/package.json +7 -2
  15. package/scripts/add-user.js +52 -0
  16. package/scripts/create-admin.js +47 -0
  17. package/scripts/deploy-gcloud.ps1 +160 -0
  18. package/scripts/deploy-gcloud.sh +154 -0
  19. package/scripts/health-check.js +50 -0
  20. package/scripts/test-history.js +56 -0
  21. package/web/__tests__/api/workflow-history.test.js +61 -0
  22. package/web/app/api/history-fallback/route.ts +56 -0
  23. package/web/app/docs/page.tsx +1 -1
  24. package/web/app/history/page.tsx +213 -0
  25. package/web/app/layout.tsx +1 -1
  26. package/web/app/login/page.tsx +144 -0
  27. package/web/app/page.tsx +0 -2
  28. package/web/components/Hero.tsx +1 -1
  29. package/web/components/History.tsx +63 -16
  30. package/web/components/Navbar.tsx +111 -9
  31. package/web/lib/auth.js +75 -0
  32. package/web/middleware/auth.js +26 -0
  33. package/web/next.config.ts +8 -1
  34. package/web/package-lock.json +239 -54
  35. package/web/package.json +10 -5
  36. package/web/scripts/db-query-history.js +120 -0
  37. package/web/scripts/smoke-test.js +30 -0
  38. package/web/server.js +171 -18
  39. package/verify-db-mysql.js +0 -92
@@ -8,16 +8,20 @@
8
8
  "name": "web",
9
9
  "version": "0.1.0",
10
10
  "dependencies": {
11
+ "dotenv": "^17.2.3",
11
12
  "lucide-react": "^0.555.0",
12
- "next": "16.0.4",
13
+ "next": "^16.0.10",
14
+ "pg": "^8.16.3",
13
15
  "react": "19.2.0",
14
16
  "react-dom": "19.2.0"
15
17
  },
16
18
  "devDependencies": {
17
19
  "@types/node": "^20",
20
+ "@types/pg": "^8.16.0",
18
21
  "@types/react": "^19",
19
22
  "@types/react-dom": "^19",
20
23
  "autoprefixer": "^10.4.22",
24
+ "cross-env": "^10.1.0",
21
25
  "eslint": "^9",
22
26
  "eslint-config-next": "16.0.4",
23
27
  "postcss": "^8.5.6",
@@ -69,7 +73,6 @@
69
73
  "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
70
74
  "dev": true,
71
75
  "license": "MIT",
72
- "peer": true,
73
76
  "dependencies": {
74
77
  "@babel/code-frame": "^7.27.1",
75
78
  "@babel/generator": "^7.28.5",
@@ -312,6 +315,13 @@
312
315
  "tslib": "^2.4.0"
313
316
  }
314
317
  },
318
+ "node_modules/@epic-web/invariant": {
319
+ "version": "1.0.0",
320
+ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
321
+ "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
322
+ "dev": true,
323
+ "license": "MIT"
324
+ },
315
325
  "node_modules/@eslint-community/eslint-utils": {
316
326
  "version": "4.9.0",
317
327
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
@@ -1038,9 +1048,9 @@
1038
1048
  }
1039
1049
  },
1040
1050
  "node_modules/@next/env": {
1041
- "version": "16.0.4",
1042
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.4.tgz",
1043
- "integrity": "sha512-FDPaVoB1kYhtOz6Le0Jn2QV7RZJ3Ngxzqri7YX4yu3Ini+l5lciR7nA9eNDpKTmDm7LWZtxSju+/CQnwRBn2pA==",
1051
+ "version": "16.0.10",
1052
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.10.tgz",
1053
+ "integrity": "sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==",
1044
1054
  "license": "MIT"
1045
1055
  },
1046
1056
  "node_modules/@next/eslint-plugin-next": {
@@ -1054,9 +1064,9 @@
1054
1064
  }
1055
1065
  },
1056
1066
  "node_modules/@next/swc-darwin-arm64": {
1057
- "version": "16.0.4",
1058
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.4.tgz",
1059
- "integrity": "sha512-TN0cfB4HT2YyEio9fLwZY33J+s+vMIgC84gQCOLZOYusW7ptgjIn8RwxQt0BUpoo9XRRVVWEHLld0uhyux1ZcA==",
1067
+ "version": "16.0.10",
1068
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.10.tgz",
1069
+ "integrity": "sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==",
1060
1070
  "cpu": [
1061
1071
  "arm64"
1062
1072
  ],
@@ -1070,9 +1080,9 @@
1070
1080
  }
1071
1081
  },
1072
1082
  "node_modules/@next/swc-darwin-x64": {
1073
- "version": "16.0.4",
1074
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.4.tgz",
1075
- "integrity": "sha512-XsfI23jvimCaA7e+9f3yMCoVjrny2D11G6H8NCcgv+Ina/TQhKPXB9P4q0WjTuEoyZmcNvPdrZ+XtTh3uPfH7Q==",
1083
+ "version": "16.0.10",
1084
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.10.tgz",
1085
+ "integrity": "sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==",
1076
1086
  "cpu": [
1077
1087
  "x64"
1078
1088
  ],
@@ -1086,9 +1096,9 @@
1086
1096
  }
1087
1097
  },
1088
1098
  "node_modules/@next/swc-linux-arm64-gnu": {
1089
- "version": "16.0.4",
1090
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.4.tgz",
1091
- "integrity": "sha512-uo8X7qHDy4YdJUhaoJDMAbL8VT5Ed3lijip2DdBHIB4tfKAvB1XBih6INH2L4qIi4jA0Qq1J0ErxcOocBmUSwg==",
1099
+ "version": "16.0.10",
1100
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.10.tgz",
1101
+ "integrity": "sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==",
1092
1102
  "cpu": [
1093
1103
  "arm64"
1094
1104
  ],
@@ -1102,9 +1112,9 @@
1102
1112
  }
1103
1113
  },
1104
1114
  "node_modules/@next/swc-linux-arm64-musl": {
1105
- "version": "16.0.4",
1106
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.4.tgz",
1107
- "integrity": "sha512-pvR/AjNIAxsIz0PCNcZYpH+WmNIKNLcL4XYEfo+ArDi7GsxKWFO5BvVBLXbhti8Coyv3DE983NsitzUsGH5yTw==",
1115
+ "version": "16.0.10",
1116
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.10.tgz",
1117
+ "integrity": "sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==",
1108
1118
  "cpu": [
1109
1119
  "arm64"
1110
1120
  ],
@@ -1118,9 +1128,9 @@
1118
1128
  }
1119
1129
  },
1120
1130
  "node_modules/@next/swc-linux-x64-gnu": {
1121
- "version": "16.0.4",
1122
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.4.tgz",
1123
- "integrity": "sha512-2hebpsd5MRRtgqmT7Jj/Wze+wG+ZEXUK2KFFL4IlZ0amEEFADo4ywsifJNeFTQGsamH3/aXkKWymDvgEi+pc2Q==",
1131
+ "version": "16.0.10",
1132
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.10.tgz",
1133
+ "integrity": "sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==",
1124
1134
  "cpu": [
1125
1135
  "x64"
1126
1136
  ],
@@ -1134,9 +1144,9 @@
1134
1144
  }
1135
1145
  },
1136
1146
  "node_modules/@next/swc-linux-x64-musl": {
1137
- "version": "16.0.4",
1138
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.4.tgz",
1139
- "integrity": "sha512-pzRXf0LZZ8zMljH78j8SeLncg9ifIOp3ugAFka+Bq8qMzw6hPXOc7wydY7ardIELlczzzreahyTpwsim/WL3Sg==",
1147
+ "version": "16.0.10",
1148
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.10.tgz",
1149
+ "integrity": "sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==",
1140
1150
  "cpu": [
1141
1151
  "x64"
1142
1152
  ],
@@ -1150,9 +1160,9 @@
1150
1160
  }
1151
1161
  },
1152
1162
  "node_modules/@next/swc-win32-arm64-msvc": {
1153
- "version": "16.0.4",
1154
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.4.tgz",
1155
- "integrity": "sha512-7G/yJVzum52B5HOqqbQYX9bJHkN+c4YyZ2AIvEssMHQlbAWOn3iIJjD4sM6ihWsBxuljiTKJovEYlD1K8lCUHw==",
1163
+ "version": "16.0.10",
1164
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.10.tgz",
1165
+ "integrity": "sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==",
1156
1166
  "cpu": [
1157
1167
  "arm64"
1158
1168
  ],
@@ -1166,9 +1176,9 @@
1166
1176
  }
1167
1177
  },
1168
1178
  "node_modules/@next/swc-win32-x64-msvc": {
1169
- "version": "16.0.4",
1170
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.4.tgz",
1171
- "integrity": "sha512-0Vy4g8SSeVkuU89g2OFHqGKM4rxsQtihGfenjx2tRckPrge5+gtFnRWGAAwvGXr0ty3twQvcnYjEyOrLHJ4JWA==",
1179
+ "version": "16.0.10",
1180
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.10.tgz",
1181
+ "integrity": "sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==",
1172
1182
  "cpu": [
1173
1183
  "x64"
1174
1184
  ],
@@ -1287,13 +1297,24 @@
1287
1297
  "undici-types": "~6.21.0"
1288
1298
  }
1289
1299
  },
1300
+ "node_modules/@types/pg": {
1301
+ "version": "8.16.0",
1302
+ "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz",
1303
+ "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==",
1304
+ "dev": true,
1305
+ "license": "MIT",
1306
+ "dependencies": {
1307
+ "@types/node": "*",
1308
+ "pg-protocol": "*",
1309
+ "pg-types": "^2.2.0"
1310
+ }
1311
+ },
1290
1312
  "node_modules/@types/react": {
1291
1313
  "version": "19.2.7",
1292
1314
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
1293
1315
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
1294
1316
  "dev": true,
1295
1317
  "license": "MIT",
1296
- "peer": true,
1297
1318
  "dependencies": {
1298
1319
  "csstype": "^3.2.2"
1299
1320
  }
@@ -1354,7 +1375,6 @@
1354
1375
  "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==",
1355
1376
  "dev": true,
1356
1377
  "license": "MIT",
1357
- "peer": true,
1358
1378
  "dependencies": {
1359
1379
  "@typescript-eslint/scope-manager": "8.48.0",
1360
1380
  "@typescript-eslint/types": "8.48.0",
@@ -1854,7 +1874,6 @@
1854
1874
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
1855
1875
  "dev": true,
1856
1876
  "license": "MIT",
1857
- "peer": true,
1858
1877
  "bin": {
1859
1878
  "acorn": "bin/acorn"
1860
1879
  },
@@ -2275,7 +2294,6 @@
2275
2294
  }
2276
2295
  ],
2277
2296
  "license": "MIT",
2278
- "peer": true,
2279
2297
  "dependencies": {
2280
2298
  "baseline-browser-mapping": "^2.8.25",
2281
2299
  "caniuse-lite": "^1.0.30001754",
@@ -2485,6 +2503,24 @@
2485
2503
  "dev": true,
2486
2504
  "license": "MIT"
2487
2505
  },
2506
+ "node_modules/cross-env": {
2507
+ "version": "10.1.0",
2508
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
2509
+ "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
2510
+ "dev": true,
2511
+ "license": "MIT",
2512
+ "dependencies": {
2513
+ "@epic-web/invariant": "^1.0.0",
2514
+ "cross-spawn": "^7.0.6"
2515
+ },
2516
+ "bin": {
2517
+ "cross-env": "dist/bin/cross-env.js",
2518
+ "cross-env-shell": "dist/bin/cross-env-shell.js"
2519
+ },
2520
+ "engines": {
2521
+ "node": ">=20"
2522
+ }
2523
+ },
2488
2524
  "node_modules/cross-spawn": {
2489
2525
  "version": "7.0.6",
2490
2526
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -2679,6 +2715,18 @@
2679
2715
  "node": ">=0.10.0"
2680
2716
  }
2681
2717
  },
2718
+ "node_modules/dotenv": {
2719
+ "version": "17.2.3",
2720
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
2721
+ "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
2722
+ "license": "BSD-2-Clause",
2723
+ "engines": {
2724
+ "node": ">=12"
2725
+ },
2726
+ "funding": {
2727
+ "url": "https://dotenvx.com"
2728
+ }
2729
+ },
2682
2730
  "node_modules/dunder-proto": {
2683
2731
  "version": "1.0.1",
2684
2732
  "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -2914,7 +2962,6 @@
2914
2962
  "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
2915
2963
  "dev": true,
2916
2964
  "license": "MIT",
2917
- "peer": true,
2918
2965
  "dependencies": {
2919
2966
  "@eslint-community/eslint-utils": "^4.8.0",
2920
2967
  "@eslint-community/regexpp": "^4.12.1",
@@ -3100,7 +3147,6 @@
3100
3147
  "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
3101
3148
  "dev": true,
3102
3149
  "license": "MIT",
3103
- "peer": true,
3104
3150
  "dependencies": {
3105
3151
  "@rtsao/scc": "^1.1.0",
3106
3152
  "array-includes": "^3.1.9",
@@ -4327,7 +4373,6 @@
4327
4373
  "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
4328
4374
  "dev": true,
4329
4375
  "license": "MIT",
4330
- "peer": true,
4331
4376
  "bin": {
4332
4377
  "jiti": "bin/jiti.js"
4333
4378
  }
@@ -4652,12 +4697,12 @@
4652
4697
  "license": "MIT"
4653
4698
  },
4654
4699
  "node_modules/next": {
4655
- "version": "16.0.4",
4656
- "resolved": "https://registry.npmjs.org/next/-/next-16.0.4.tgz",
4657
- "integrity": "sha512-vICcxKusY8qW7QFOzTvnRL1ejz2ClTqDKtm1AcUjm2mPv/lVAdgpGNsftsPRIDJOXOjRQO68i1dM8Lp8GZnqoA==",
4700
+ "version": "16.0.10",
4701
+ "resolved": "https://registry.npmjs.org/next/-/next-16.0.10.tgz",
4702
+ "integrity": "sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==",
4658
4703
  "license": "MIT",
4659
4704
  "dependencies": {
4660
- "@next/env": "16.0.4",
4705
+ "@next/env": "16.0.10",
4661
4706
  "@swc/helpers": "0.5.15",
4662
4707
  "caniuse-lite": "^1.0.30001579",
4663
4708
  "postcss": "8.4.31",
@@ -4670,14 +4715,14 @@
4670
4715
  "node": ">=20.9.0"
4671
4716
  },
4672
4717
  "optionalDependencies": {
4673
- "@next/swc-darwin-arm64": "16.0.4",
4674
- "@next/swc-darwin-x64": "16.0.4",
4675
- "@next/swc-linux-arm64-gnu": "16.0.4",
4676
- "@next/swc-linux-arm64-musl": "16.0.4",
4677
- "@next/swc-linux-x64-gnu": "16.0.4",
4678
- "@next/swc-linux-x64-musl": "16.0.4",
4679
- "@next/swc-win32-arm64-msvc": "16.0.4",
4680
- "@next/swc-win32-x64-msvc": "16.0.4",
4718
+ "@next/swc-darwin-arm64": "16.0.10",
4719
+ "@next/swc-darwin-x64": "16.0.10",
4720
+ "@next/swc-linux-arm64-gnu": "16.0.10",
4721
+ "@next/swc-linux-arm64-musl": "16.0.10",
4722
+ "@next/swc-linux-x64-gnu": "16.0.10",
4723
+ "@next/swc-linux-x64-musl": "16.0.10",
4724
+ "@next/swc-win32-arm64-msvc": "16.0.10",
4725
+ "@next/swc-win32-x64-msvc": "16.0.10",
4681
4726
  "sharp": "^0.34.4"
4682
4727
  },
4683
4728
  "peerDependencies": {
@@ -4999,6 +5044,95 @@
4999
5044
  "dev": true,
5000
5045
  "license": "MIT"
5001
5046
  },
5047
+ "node_modules/pg": {
5048
+ "version": "8.16.3",
5049
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
5050
+ "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==",
5051
+ "license": "MIT",
5052
+ "dependencies": {
5053
+ "pg-connection-string": "^2.9.1",
5054
+ "pg-pool": "^3.10.1",
5055
+ "pg-protocol": "^1.10.3",
5056
+ "pg-types": "2.2.0",
5057
+ "pgpass": "1.0.5"
5058
+ },
5059
+ "engines": {
5060
+ "node": ">= 16.0.0"
5061
+ },
5062
+ "optionalDependencies": {
5063
+ "pg-cloudflare": "^1.2.7"
5064
+ },
5065
+ "peerDependencies": {
5066
+ "pg-native": ">=3.0.1"
5067
+ },
5068
+ "peerDependenciesMeta": {
5069
+ "pg-native": {
5070
+ "optional": true
5071
+ }
5072
+ }
5073
+ },
5074
+ "node_modules/pg-cloudflare": {
5075
+ "version": "1.2.7",
5076
+ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz",
5077
+ "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==",
5078
+ "license": "MIT",
5079
+ "optional": true
5080
+ },
5081
+ "node_modules/pg-connection-string": {
5082
+ "version": "2.9.1",
5083
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz",
5084
+ "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==",
5085
+ "license": "MIT"
5086
+ },
5087
+ "node_modules/pg-int8": {
5088
+ "version": "1.0.1",
5089
+ "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
5090
+ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
5091
+ "license": "ISC",
5092
+ "engines": {
5093
+ "node": ">=4.0.0"
5094
+ }
5095
+ },
5096
+ "node_modules/pg-pool": {
5097
+ "version": "3.10.1",
5098
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz",
5099
+ "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==",
5100
+ "license": "MIT",
5101
+ "peerDependencies": {
5102
+ "pg": ">=8.0"
5103
+ }
5104
+ },
5105
+ "node_modules/pg-protocol": {
5106
+ "version": "1.10.3",
5107
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz",
5108
+ "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==",
5109
+ "license": "MIT"
5110
+ },
5111
+ "node_modules/pg-types": {
5112
+ "version": "2.2.0",
5113
+ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
5114
+ "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
5115
+ "license": "MIT",
5116
+ "dependencies": {
5117
+ "pg-int8": "1.0.1",
5118
+ "postgres-array": "~2.0.0",
5119
+ "postgres-bytea": "~1.0.0",
5120
+ "postgres-date": "~1.0.4",
5121
+ "postgres-interval": "^1.1.0"
5122
+ },
5123
+ "engines": {
5124
+ "node": ">=4"
5125
+ }
5126
+ },
5127
+ "node_modules/pgpass": {
5128
+ "version": "1.0.5",
5129
+ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
5130
+ "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
5131
+ "license": "MIT",
5132
+ "dependencies": {
5133
+ "split2": "^4.1.0"
5134
+ }
5135
+ },
5002
5136
  "node_modules/picocolors": {
5003
5137
  "version": "1.1.1",
5004
5138
  "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -5068,7 +5202,6 @@
5068
5202
  }
5069
5203
  ],
5070
5204
  "license": "MIT",
5071
- "peer": true,
5072
5205
  "dependencies": {
5073
5206
  "nanoid": "^3.3.11",
5074
5207
  "picocolors": "^1.1.1",
@@ -5212,6 +5345,45 @@
5212
5345
  "dev": true,
5213
5346
  "license": "MIT"
5214
5347
  },
5348
+ "node_modules/postgres-array": {
5349
+ "version": "2.0.0",
5350
+ "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
5351
+ "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
5352
+ "license": "MIT",
5353
+ "engines": {
5354
+ "node": ">=4"
5355
+ }
5356
+ },
5357
+ "node_modules/postgres-bytea": {
5358
+ "version": "1.0.1",
5359
+ "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
5360
+ "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
5361
+ "license": "MIT",
5362
+ "engines": {
5363
+ "node": ">=0.10.0"
5364
+ }
5365
+ },
5366
+ "node_modules/postgres-date": {
5367
+ "version": "1.0.7",
5368
+ "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
5369
+ "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
5370
+ "license": "MIT",
5371
+ "engines": {
5372
+ "node": ">=0.10.0"
5373
+ }
5374
+ },
5375
+ "node_modules/postgres-interval": {
5376
+ "version": "1.2.0",
5377
+ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
5378
+ "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
5379
+ "license": "MIT",
5380
+ "dependencies": {
5381
+ "xtend": "^4.0.0"
5382
+ },
5383
+ "engines": {
5384
+ "node": ">=0.10.0"
5385
+ }
5386
+ },
5215
5387
  "node_modules/prelude-ls": {
5216
5388
  "version": "1.2.1",
5217
5389
  "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -5270,7 +5442,6 @@
5270
5442
  "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
5271
5443
  "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
5272
5444
  "license": "MIT",
5273
- "peer": true,
5274
5445
  "engines": {
5275
5446
  "node": ">=0.10.0"
5276
5447
  }
@@ -5280,7 +5451,6 @@
5280
5451
  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
5281
5452
  "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
5282
5453
  "license": "MIT",
5283
- "peer": true,
5284
5454
  "dependencies": {
5285
5455
  "scheduler": "^0.27.0"
5286
5456
  },
@@ -5724,6 +5894,15 @@
5724
5894
  "node": ">=0.10.0"
5725
5895
  }
5726
5896
  },
5897
+ "node_modules/split2": {
5898
+ "version": "4.2.0",
5899
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
5900
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
5901
+ "license": "ISC",
5902
+ "engines": {
5903
+ "node": ">= 10.x"
5904
+ }
5905
+ },
5727
5906
  "node_modules/stable-hash": {
5728
5907
  "version": "0.0.5",
5729
5908
  "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -6085,7 +6264,6 @@
6085
6264
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
6086
6265
  "dev": true,
6087
6266
  "license": "MIT",
6088
- "peer": true,
6089
6267
  "engines": {
6090
6268
  "node": ">=12"
6091
6269
  },
@@ -6255,7 +6433,6 @@
6255
6433
  "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
6256
6434
  "dev": true,
6257
6435
  "license": "Apache-2.0",
6258
- "peer": true,
6259
6436
  "bin": {
6260
6437
  "tsc": "bin/tsc",
6261
6438
  "tsserver": "bin/tsserver"
@@ -6512,6 +6689,15 @@
6512
6689
  "node": ">=0.10.0"
6513
6690
  }
6514
6691
  },
6692
+ "node_modules/xtend": {
6693
+ "version": "4.0.2",
6694
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
6695
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
6696
+ "license": "MIT",
6697
+ "engines": {
6698
+ "node": ">=0.4"
6699
+ }
6700
+ },
6515
6701
  "node_modules/yallist": {
6516
6702
  "version": "3.1.1",
6517
6703
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -6538,7 +6724,6 @@
6538
6724
  "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==",
6539
6725
  "dev": true,
6540
6726
  "license": "MIT",
6541
- "peer": true,
6542
6727
  "funding": {
6543
6728
  "url": "https://github.com/sponsors/colinhacks"
6544
6729
  }
package/web/package.json CHANGED
@@ -2,27 +2,32 @@
2
2
  "name": "web",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
+ "type": "module",
5
6
  "scripts": {
6
- "dev": "next dev",
7
+ "dev": "node server.js",
7
8
  "build": "next build",
8
- "start": "next start",
9
- "lint": "eslint"
9
+ "start": "cross-env NODE_ENV=production node server.js",
10
+ "lint": "next lint"
10
11
  },
11
12
  "dependencies": {
13
+ "dotenv": "^17.2.3",
12
14
  "lucide-react": "^0.555.0",
13
- "next": "16.0.4",
15
+ "next": "^16.0.10",
16
+ "pg": "^8.16.3",
14
17
  "react": "19.2.0",
15
18
  "react-dom": "19.2.0"
16
19
  },
17
20
  "devDependencies": {
18
21
  "@types/node": "^20",
22
+ "@types/pg": "^8.16.0",
19
23
  "@types/react": "^19",
20
24
  "@types/react-dom": "^19",
21
25
  "autoprefixer": "^10.4.22",
26
+ "cross-env": "^10.1.0",
22
27
  "eslint": "^9",
23
28
  "eslint-config-next": "16.0.4",
24
29
  "postcss": "^8.5.6",
25
30
  "tailwindcss": "^3.4.18",
26
31
  "typescript": "^5"
27
32
  }
28
- }
33
+ }