tangled
alpha
login
or
join now
slices.network
/
slices
137
fork
atom
Highly ambitious ATProtocol AppView service and sdks
137
fork
atom
overview
issues
10
pulls
3
pipelines
fix frontend config, add dockerignore
chadtmiller.com
4 months ago
500e45bf
54a1e92c
+125
-11
4 changed files
expand all
collapse all
unified
split
.dockerignore
deno.lock
frontend-v2
Dockerfile
frontend-v2.fly.toml
+51
.dockerignore
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
20
"jsr:@std/path@^1.0.6": "1.1.2",
21
"jsr:@std/path@^1.1.1": "1.1.2",
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",
24
"npm:@shikijs/core@^3.7.0": "3.13.0",
25
"npm:@shikijs/engine-oniguruma@^3.7.0": "3.13.0",
26
"npm:@shikijs/types@^3.7.0": "3.13.0",
···
29
"npm:@takumi-rs/core@~0.36.2": "0.36.2",
30
"npm:@takumi-rs/helpers@~0.29.8": "0.29.8",
31
"npm:@takumi-rs/helpers@~0.36.2": "0.36.2",
0
32
"npm:@types/node@^24.6.0": "24.7.2",
33
"npm:@types/react-dom@^19.1.9": "19.2.0_@types+react@19.2.0",
34
"npm:@types/react-relay@^18.2.1": "18.2.1",
35
"npm:@types/react@^19.1.16": "19.2.0",
36
"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:autoprefixer@^10.4.21": "10.4.21_postcss@8.5.6",
39
"npm:babel-plugin-relay@^20.1.1": "20.1.1",
40
"npm:clsx@^2.1.1": "2.1.1",
···
63
"npm:tailwindcss@^4.1.14": "4.1.14",
64
"npm:ts-morph@26.0.0": "26.0.0",
65
"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"
68
},
69
"jsr": {
70
"@shikijs/shiki@3.7.0": {
···
281
"@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
"integrity": "sha512-tLja5n4dyMhcze1NzvSs2iiriBymfBlDCZIrjMTxb9O2ru0gvmV6mn5oBD2teNw5Sd92cj3YJzKwsAs8tMJXlg==",
283
"dependencies": [
284
-
"vite"
0
0
0
0
0
0
285
]
286
},
287
"@emnapi/core@1.5.0": {
···
934
"@types/unist"
935
]
936
},
0
0
0
0
0
0
937
"@types/node@24.7.2": {
938
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
939
"dependencies": [
940
-
"undici-types"
941
]
942
},
943
"@types/parse-json@4.0.2": {
···
980
"@rolldown/pluginutils",
981
"@types/babel__core",
982
"react-refresh",
983
-
"vite"
0
0
0
0
0
0
0
0
0
0
0
0
984
]
985
},
986
"argparse@1.0.10": {
···
1961
"integrity": "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==",
1962
"bin": true
1963
},
0
0
0
1964
"undici-types@7.14.0": {
1965
"integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="
1966
},
···
2023
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3": {
2024
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
2025
"dependencies": [
2026
-
"@types/node",
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2027
"esbuild",
2028
"fdir",
2029
"picomatch@4.0.3",
···
2035
"fsevents"
2036
],
2037
"optionalPeers": [
2038
-
"@types/node"
2039
],
2040
"bin": true
2041
},
···
20
"jsr:@std/path@^1.0.6": "1.1.2",
21
"jsr:@std/path@^1.1.1": "1.1.2",
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_@types+node@24.2.0",
24
"npm:@shikijs/core@^3.7.0": "3.13.0",
25
"npm:@shikijs/engine-oniguruma@^3.7.0": "3.13.0",
26
"npm:@shikijs/types@^3.7.0": "3.13.0",
···
29
"npm:@takumi-rs/core@~0.36.2": "0.36.2",
30
"npm:@takumi-rs/helpers@~0.29.8": "0.29.8",
31
"npm:@takumi-rs/helpers@~0.36.2": "0.36.2",
32
+
"npm:@types/node@*": "24.2.0",
33
"npm:@types/node@^24.6.0": "24.7.2",
34
"npm:@types/react-dom@^19.1.9": "19.2.0_@types+react@19.2.0",
35
"npm:@types/react-relay@^18.2.1": "18.2.1",
36
"npm:@types/react@^19.1.16": "19.2.0",
37
"npm:@types/relay-runtime@^19.0.3": "19.0.3",
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",
39
"npm:autoprefixer@^10.4.21": "10.4.21_postcss@8.5.6",
40
"npm:babel-plugin-relay@^20.1.1": "20.1.1",
41
"npm:clsx@^2.1.1": "2.1.1",
···
64
"npm:tailwindcss@^4.1.14": "4.1.14",
65
"npm:ts-morph@26.0.0": "26.0.0",
66
"npm:typed-htmx@~0.3.1": "0.3.1",
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"
69
},
70
"jsr": {
71
"@shikijs/shiki@3.7.0": {
···
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": {
283
"integrity": "sha512-tLja5n4dyMhcze1NzvSs2iiriBymfBlDCZIrjMTxb9O2ru0gvmV6mn5oBD2teNw5Sd92cj3YJzKwsAs8tMJXlg==",
284
"dependencies": [
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"
292
]
293
},
294
"@emnapi/core@1.5.0": {
···
941
"@types/unist"
942
]
943
},
944
+
"@types/node@24.2.0": {
945
+
"integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==",
946
+
"dependencies": [
947
+
"undici-types@7.10.0"
948
+
]
949
+
},
950
"@types/node@24.7.2": {
951
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
952
"dependencies": [
953
+
"undici-types@7.14.0"
954
]
955
},
956
"@types/parse-json@4.0.2": {
···
993
"@rolldown/pluginutils",
994
"@types/babel__core",
995
"react-refresh",
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"
1009
]
1010
},
1011
"argparse@1.0.10": {
···
1986
"integrity": "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==",
1987
"bin": true
1988
},
1989
+
"undici-types@7.10.0": {
1990
+
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="
1991
+
},
1992
"undici-types@7.14.0": {
1993
"integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="
1994
},
···
2051
"vite@7.1.10_@types+node@24.7.2_picomatch@4.0.3": {
2052
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
2053
"dependencies": [
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",
2074
"esbuild",
2075
"fdir",
2076
"picomatch@4.0.3",
···
2082
"fsevents"
2083
],
2084
"optionalPeers": [
2085
+
"@types/node@24.2.0"
2086
],
2087
"bin": true
2088
},
+7
-1
frontend-v2.fly.toml
···
8
9
[build]
10
dockerfile = './frontend-v2/Dockerfile'
0
0
0
0
11
12
[env]
13
-
ADMIN_DID = 'did:plc:bcgltzqazw5tb6k2g3ttenbj'
14
API_URL = 'https://slices-api.fly.dev'
15
DATABASE_URL = '/data/slices.db'
16
DENO_ENV = 'production'
17
DOCS_PATH = '/app/docs'
18
PORT = '8080'
19
SLICE_URI = 'at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z'
0
0
0
20
21
[[mounts]]
22
source = 'frontend_data'
···
8
9
[build]
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'
15
16
[env]
0
17
API_URL = 'https://slices-api.fly.dev'
18
DATABASE_URL = '/data/slices.db'
19
DENO_ENV = 'production'
20
DOCS_PATH = '/app/docs'
21
PORT = '8080'
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'
26
27
[[mounts]]
28
source = 'frontend_data'
+11
-1
frontend-v2/Dockerfile
···
1
FROM denoland/deno:2.5.1
2
0
0
0
0
0
3
# Install sqlite3
4
RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
5
···
29
WORKDIR /app/frontend-v2
30
RUN deno cache ./server/main.ts
31
32
-
# Build the Vite frontend (fs.close bug fixed in Deno 2.5.1)
0
0
0
0
0
33
RUN deno task build
34
35
# Expose port
···
1
FROM denoland/deno:2.5.1
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
+
8
# Install sqlite3
9
RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
10
···
34
WORKDIR /app/frontend-v2
35
RUN deno cache ./server/main.ts
36
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
43
RUN deno task build
44
45
# Expose port