+51
.dockerignore
+51
.dockerignore
···
1
+
# Environment files
2
+
*.env*
3
+
!.env.example
4
+
5
+
# Build artifacts
6
+
**/dist/
7
+
**/.vite/
8
+
**/build/
9
+
**/out/
10
+
11
+
# Dependencies
12
+
**/node_modules/
13
+
14
+
# Database files
15
+
**/*.db
16
+
**/*.db-shm
17
+
**/*.db-wal
18
+
19
+
# Git
20
+
.git/
21
+
.gitignore
22
+
23
+
# IDE
24
+
.vscode/
25
+
.idea/
26
+
*.swp
27
+
*.swo
28
+
*~
29
+
30
+
# OS
31
+
.DS_Store
32
+
Thumbs.db
33
+
34
+
# Logs
35
+
*.log
36
+
npm-debug.log*
37
+
yarn-debug.log*
38
+
yarn-error.log*
39
+
40
+
# Testing
41
+
**/coverage/
42
+
**/.nyc_output/
43
+
44
+
# Temporary files
45
+
**/.tmp/
46
+
**/tmp/
47
+
48
+
# Docker
49
+
Dockerfile*
50
+
docker-compose*
51
+
.dockerignore
+56
-9
deno.lock
+56
-9
deno.lock
···
20
20
"jsr:@std/path@^1.0.6": "1.1.2",
21
21
"jsr:@std/path@^1.1.1": "1.1.2",
22
22
"jsr:@std/streams@^1.0.10": "1.0.12",
23
-
"npm:@deno/vite-plugin@^1.0.5": "1.0.5_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@types+node@24.7.2",
23
+
"npm:@deno/vite-plugin@^1.0.5": "1.0.5_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@types+node@24.7.2_@types+node@24.2.0",
24
24
"npm:@shikijs/core@^3.7.0": "3.13.0",
25
25
"npm:@shikijs/engine-oniguruma@^3.7.0": "3.13.0",
26
26
"npm:@shikijs/types@^3.7.0": "3.13.0",
···
29
29
"npm:@takumi-rs/core@~0.36.2": "0.36.2",
30
30
"npm:@takumi-rs/helpers@~0.29.8": "0.29.8",
31
31
"npm:@takumi-rs/helpers@~0.36.2": "0.36.2",
32
+
"npm:@types/node@*": "24.2.0",
32
33
"npm:@types/node@^24.6.0": "24.7.2",
33
34
"npm:@types/react-dom@^19.1.9": "19.2.0_@types+react@19.2.0",
34
35
"npm:@types/react-relay@^18.2.1": "18.2.1",
35
36
"npm:@types/react@^19.1.16": "19.2.0",
36
37
"npm:@types/relay-runtime@^19.0.3": "19.0.3",
37
-
"npm:@vitejs/plugin-react@^5.0.4": "5.0.4_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@babel+core@7.28.4_@types+node@24.7.2",
38
+
"npm:@vitejs/plugin-react@^5.0.4": "5.0.4_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@babel+core@7.28.4_@types+node@24.7.2_@types+node@24.2.0",
38
39
"npm:autoprefixer@^10.4.21": "10.4.21_postcss@8.5.6",
39
40
"npm:babel-plugin-relay@^20.1.1": "20.1.1",
40
41
"npm:clsx@^2.1.1": "2.1.1",
···
63
64
"npm:tailwindcss@^4.1.14": "4.1.14",
64
65
"npm:ts-morph@26.0.0": "26.0.0",
65
66
"npm:typed-htmx@~0.3.1": "0.3.1",
66
-
"npm:vite@*": "7.1.10_@types+node@24.7.2_picomatch@4.0.3",
67
-
"npm:vite@^7.1.7": "7.1.10_@types+node@24.7.2_picomatch@4.0.3"
67
+
"npm:vite@*": "7.1.10_@types+node@24.7.2_picomatch@4.0.3_@types+node@24.2.0",
68
+
"npm:vite@^7.1.7": "7.1.10_@types+node@24.7.2_picomatch@4.0.3_@types+node@24.2.0"
68
69
},
69
70
"jsr": {
70
71
"@shikijs/shiki@3.7.0": {
···
281
282
"@deno/vite-plugin@1.0.5_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@types+node@24.7.2": {
282
283
"integrity": "sha512-tLja5n4dyMhcze1NzvSs2iiriBymfBlDCZIrjMTxb9O2ru0gvmV6mn5oBD2teNw5Sd92cj3YJzKwsAs8tMJXlg==",
283
284
"dependencies": [
284
-
"vite"
285
+
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3"
286
+
]
287
+
},
288
+
"@deno/vite-plugin@1.0.5_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@types+node@24.7.2_@types+node@24.2.0": {
289
+
"integrity": "sha512-tLja5n4dyMhcze1NzvSs2iiriBymfBlDCZIrjMTxb9O2ru0gvmV6mn5oBD2teNw5Sd92cj3YJzKwsAs8tMJXlg==",
290
+
"dependencies": [
291
+
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3_@types+node@24.2.0"
285
292
]
286
293
},
287
294
"@emnapi/core@1.5.0": {
···
934
941
"@types/unist"
935
942
]
936
943
},
944
+
"@types/node@24.2.0": {
945
+
"integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==",
946
+
"dependencies": [
947
+
"undici-types@7.10.0"
948
+
]
949
+
},
937
950
"@types/node@24.7.2": {
938
951
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
939
952
"dependencies": [
940
-
"undici-types"
953
+
"undici-types@7.14.0"
941
954
]
942
955
},
943
956
"@types/parse-json@4.0.2": {
···
980
993
"@rolldown/pluginutils",
981
994
"@types/babel__core",
982
995
"react-refresh",
983
-
"vite"
996
+
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3"
997
+
]
998
+
},
999
+
"@vitejs/plugin-react@5.0.4_vite@7.1.10__@types+node@24.7.2__picomatch@4.0.3_@babel+core@7.28.4_@types+node@24.7.2_@types+node@24.2.0": {
1000
+
"integrity": "sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==",
1001
+
"dependencies": [
1002
+
"@babel/core",
1003
+
"@babel/plugin-transform-react-jsx-self",
1004
+
"@babel/plugin-transform-react-jsx-source",
1005
+
"@rolldown/pluginutils",
1006
+
"@types/babel__core",
1007
+
"react-refresh",
1008
+
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3_@types+node@24.2.0"
984
1009
]
985
1010
},
986
1011
"argparse@1.0.10": {
···
1961
1986
"integrity": "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==",
1962
1987
"bin": true
1963
1988
},
1989
+
"undici-types@7.10.0": {
1990
+
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="
1991
+
},
1964
1992
"undici-types@7.14.0": {
1965
1993
"integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="
1966
1994
},
···
2023
2051
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3": {
2024
2052
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
2025
2053
"dependencies": [
2026
-
"@types/node",
2054
+
"@types/node@24.7.2",
2055
+
"esbuild",
2056
+
"fdir",
2057
+
"picomatch@4.0.3",
2058
+
"postcss",
2059
+
"rollup",
2060
+
"tinyglobby"
2061
+
],
2062
+
"optionalDependencies": [
2063
+
"fsevents"
2064
+
],
2065
+
"optionalPeers": [
2066
+
"@types/node@24.7.2"
2067
+
],
2068
+
"bin": true
2069
+
},
2070
+
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3_@types+node@24.2.0": {
2071
+
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
2072
+
"dependencies": [
2073
+
"@types/node@24.2.0",
2027
2074
"esbuild",
2028
2075
"fdir",
2029
2076
"picomatch@4.0.3",
···
2035
2082
"fsevents"
2036
2083
],
2037
2084
"optionalPeers": [
2038
-
"@types/node"
2085
+
"@types/node@24.2.0"
2039
2086
],
2040
2087
"bin": true
2041
2088
},
+7
-1
frontend-v2.fly.toml
+7
-1
frontend-v2.fly.toml
···
8
8
9
9
[build]
10
10
dockerfile = './frontend-v2/Dockerfile'
11
+
[build.args]
12
+
VITE_API_URL = 'https://slices-api.fly.dev'
13
+
VITE_SLICE_URI = 'at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z'
14
+
VITE_ADMIN_DIDS = 'did:plc:bcgltzqazw5tb6k2g3ttenbj'
11
15
12
16
[env]
13
-
ADMIN_DID = 'did:plc:bcgltzqazw5tb6k2g3ttenbj'
14
17
API_URL = 'https://slices-api.fly.dev'
15
18
DATABASE_URL = '/data/slices.db'
16
19
DENO_ENV = 'production'
17
20
DOCS_PATH = '/app/docs'
18
21
PORT = '8080'
19
22
SLICE_URI = 'at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z'
23
+
VITE_API_URL = 'https://slices-api.fly.dev'
24
+
VITE_SLICE_URI = 'at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z'
25
+
VITE_ADMIN_DIDS = 'did:plc:bcgltzqazw5tb6k2g3ttenbj'
20
26
21
27
[[mounts]]
22
28
source = 'frontend_data'
+11
-1
frontend-v2/Dockerfile
+11
-1
frontend-v2/Dockerfile
···
1
1
FROM denoland/deno:2.5.1
2
2
3
+
# Build arguments for Vite environment variables (embedded at build time)
4
+
ARG VITE_API_URL
5
+
ARG VITE_SLICE_URI
6
+
ARG VITE_ADMIN_DIDS
7
+
3
8
# Install sqlite3
4
9
RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
5
10
···
29
34
WORKDIR /app/frontend-v2
30
35
RUN deno cache ./server/main.ts
31
36
32
-
# Build the Vite frontend (fs.close bug fixed in Deno 2.5.1)
37
+
# Set Vite environment variables for build (these get embedded in the bundle)
38
+
ENV VITE_API_URL=$VITE_API_URL
39
+
ENV VITE_SLICE_URI=$VITE_SLICE_URI
40
+
ENV VITE_ADMIN_DIDS=$VITE_ADMIN_DIDS
41
+
42
+
# Build the Vite frontend
33
43
RUN deno task build
34
44
35
45
# Expose port