Trying Bolt.diy

Published: Mar 4, 2025 by Isaac Johnson

Today we are going to attempt to build out an app with Bolt.diy which is the official OS backend to Bolt.new. I’m to try a few different ways as well as augment with Google Gemini Code Assist as well as Github Copilot (free). I’m also going to compare with something built purely with Gemini Code Assist, Copilot and Midjourney.

Spoiler: I’ll get it going below, but only after many tries with many timeouts. There are some things with Bolt.diy that tend to work better in Firefox. Also, the best working instances came from running docker compose locally; provided you have the CPU/GPU to handle it.

Setup

Let’s clone the repo

builder@LuiGi:~/Workspaces$ git clone https://github.com/stackblitz-labs/bolt.diy.git
Cloning into 'bolt.diy'...
remote: Enumerating objects: 8959, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 8959 (delta 16), reused 11 (delta 11), pack-reused 8927 (from 3)
Receiving objects: 100% (8959/8959), 7.25 MiB | 8.67 MiB/s, done.
Resolving deltas: 100% (5509/5509), done.
builder@LuiGi:~/Workspaces$ cd bolt.diy/
builder@LuiGi:~/Workspaces/bolt.diy$

I can then docker build the image

builder@LuiGi:~/Workspaces/bolt.diy$ docker build . --target bolt-ai-development
[+] Building 97.9s (13/13) FINISHED                                                                                               docker:default
 => [internal] load build definition from Dockerfile                                                                                        0.1s
 => => transferring dockerfile: 2.72kB                                                                                                      0.0s
 => [internal] load metadata for docker.io/library/node:20.18.0                                                                             1.3s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                           0.1s
 => => transferring context: 427B                                                                                                           0.0s
 => [base 1/6] FROM docker.io/library/node:20.18.0@sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc                 50.4s
 => => resolve docker.io/library/node:20.18.0@sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc                       0.0s
 => => sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc 6.41kB / 6.41kB                                              0.0s
 => => sha256:2fdabcc143ddee8d2041316316a238a35f56423362c503fd93e06b1bff79ed56 6.61kB / 6.61kB                                              0.0s
 => => sha256:c3cc7b6f04730c072f8b292917e0d95bb886096a2b2b1781196170965161cd27 24.06MB / 24.06MB                                            6.9s
 => => sha256:202ae32103f362765c42bb8283fbec5167cb7c5687feca97ad6bfbf4af3df444 2.49kB / 2.49kB                                              0.0s
 => => sha256:b2b31b28ee3c96e96195c754f8679f690db4b18e475682d716122016ef056f39 49.58MB / 49.58MB                                           11.4s
 => => sha256:2112e5e7c3ff699043b282f1ff24d3ef185c080c28846f1d7acc5ccf650bc13d 64.39MB / 64.39MB                                           15.6s
 => => sha256:af247aac076473044d24960a352a8ec6f154cf0a28f4fbf35fe5d43b52687ba2 211.29MB / 211.29MB                                         38.0s
 => => sha256:2768a6d600d198b5718b29d1969ea6ab9b8b21360dff78d13b9538f72c39ad82 3.32kB / 3.32kB                                             11.8s
 => => extracting sha256:b2b31b28ee3c96e96195c754f8679f690db4b18e475682d716122016ef056f39                                                   5.4s
 => => sha256:8090fa0edd88988819cd881e9de2459a837e9cda762ca011e8b77f61bc42ac3c 48.22MB / 48.22MB                                           23.7s
 => => sha256:4cf85a38fb04969a4853c458afc84c5078320d8927ec4c87d36dbdd3cc736962 1.25MB / 1.25MB                                             16.1s
 => => sha256:22496bd6ed1beb11b73e005e295874fae0231e98e60289a5e82ca92d0b4997ca 446B / 446B                                                 16.4s
 => => extracting sha256:c3cc7b6f04730c072f8b292917e0d95bb886096a2b2b1781196170965161cd27                                                   1.4s
 => => extracting sha256:2112e5e7c3ff699043b282f1ff24d3ef185c080c28846f1d7acc5ccf650bc13d                                                   9.4s
 => => extracting sha256:af247aac076473044d24960a352a8ec6f154cf0a28f4fbf35fe5d43b52687ba2                                                   9.0s
 => => extracting sha256:2768a6d600d198b5718b29d1969ea6ab9b8b21360dff78d13b9538f72c39ad82                                                   0.0s
 => => extracting sha256:8090fa0edd88988819cd881e9de2459a837e9cda762ca011e8b77f61bc42ac3c                                                   2.4s
 => => extracting sha256:4cf85a38fb04969a4853c458afc84c5078320d8927ec4c87d36dbdd3cc736962                                                   0.0s
 => => extracting sha256:22496bd6ed1beb11b73e005e295874fae0231e98e60289a5e82ca92d0b4997ca                                                   0.0s
 => [internal] load build context                                                                                                           0.1s
 => => transferring context: 3.19MB                                                                                                         0.1s
 => [base 2/6] WORKDIR /app                                                                                                                 0.3s
 => [base 3/6] COPY package.json pnpm-lock.yaml ./                                                                                          0.1s
 => [base 4/6] RUN npm install -g corepack@latest                                                                                           1.4s
 => [base 5/6] RUN corepack enable pnpm && pnpm install                                                                                    28.6s
 => [base 6/6] COPY . .                                                                                                                     0.2s
 => [bolt-ai-development 1/1] RUN mkdir -p ${WORKDIR}/run                                                                                   0.4s
 => exporting to image                                                                                                                     14.9s
 => => exporting layers                                                                                                                    14.9s
 => => writing image sha256:e53d6f78e8f0e5936a8ba390c9fcb39c9b1592b1605819fd335aefc80f3a00bf                                                0.0s

I can see it built

REPOSITORY                                                                         TAG         IMAGE ID       CREATED          SIZE
<none>                                                                             <none>      e53d6f78e8f0   33 seconds ago   1.82GB

I can tag and push it to my private CR

builder@LuiGi:~/Workspaces/bolt.diy$ docker tag e53d6f78e8f0 harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1
builder@LuiGi:~/Workspaces/bolt.diy$ docker push harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1
The push refers to repository [harbor.freshbrewed.science/freshbrewedprivate/boltdiy]
7690c87c2bb9: Pushed
4fb1e303fbba: Pushed
03a71a0c7cf7: Pushed
b8e0c75a2ff7: Pushed
bcb885017ef0: Pushed
be16a895febb: Pushed
7df03414f5a4: Pushed
c8f2469bd408: Pushed
393a1f3c1d17: Pushed
cb4ea2995b11: Pushed
96d99c63b722: Pushed
00547dd240c4: Pushed
b6ca42156b9f: Pushed
24b5ce0f1e07: Pushed
0.1: digest: sha256:6c61c99ffeb4e0aed3bd97bd73c09219b20ca6d6dbebdbb70e6ca26817c2265f size: 3261

I can no go to my Docker running host and pull it

builder@builder-T100:~$ docker pull harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1
0.1: Pulling from freshbrewedprivate/boltdiy
b2b31b28ee3c: Pull complete
c3cc7b6f0473: Pull complete
2112e5e7c3ff: Pull complete
af247aac0764: Pull complete
2768a6d600d1: Pull complete
8090fa0edd88: Pull complete
4cf85a38fb04: Pull complete
22496bd6ed1b: Pull complete
f5ef8ee6508f: Pull complete
b72f70bdab45: Pull complete
730d11a82ce3: Pull complete
325268dbd776: Pull complete
7ab50fec58cf: Pull complete
0be61ce03a7a: Pull complete
Digest: sha256:6c61c99ffeb4e0aed3bd97bd73c09219b20ca6d6dbebdbb70e6ca26817c2265f
Status: Downloaded newer image for harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1
harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1

Now let’s try and run it

$ docker run -p 5173:5173 -e NODE_ENV=production -e COMPOSE_PROFILES=production -e PORT=5173 -e RUNNING_IN_DOCKER=true -e O
LLAMA_API_BASE_URL=http://192.168.1.143:11434 harbor.freshbrewed.science/freshbrewedprivate/boltdiy:0.1

> bolt@0.0.6 dev /app
> node pre-start.cjs  && remix vite:dev "--host"

fatal: not a git repository (or any of the parent directories): .git

★═══════════════════════════════════════★
          B O L T . D I Y
         ⚡️  Welcome  ⚡️
★═══════════════════════════════════════★

📍 Current Version Tag: v"0.0.6"
📍 Current Commit Version: "no-git-info"
  Please wait until the URL appears here
★═══════════════════════════════════════★
fatal: not a git repository (or any of the parent directories): .git
[warn] Data fetching is changing to a single fetch in React Router v7
┃ You can use the `v3_singleFetch` future flag to opt-in early.
┃ -> https://remix.run/docs/en/2.13.1/start/future-flags#v3_singleFetch
┗
fatal: not a git repository (or any of the parent directories): .git
  ➜  Local:   http://localhost:5173/
  ➜  Network: http://172.17.0.14:5173/

That didn’t work tho

/content/images/2025/02/boltdiy-01.png

I’ll try pulling the repo and running docker compose

builder@builder-T100:~/bolt.diy$ cat .env.local
PORT=5173
RUNNING_IN_DOCKER=true
OLLAMA_API_BASE_URL=http://192.168.1.143:11434

builder@builder-T100:~/bolt.diy$ docker compose --profile development up
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OLLAMA_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string.
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OLLAMA_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string.
[+] Building 0.0s (0/0)
Attaching to boltdiy-app-dev-1
boltdiy-app-dev-1  |
boltdiy-app-dev-1  | > bolt@0.0.6 dev /app
boltdiy-app-dev-1  | > node pre-start.cjs  && remix vite:dev "--host" "0.0.0.0"
boltdiy-app-dev-1  |
boltdiy-app-dev-1  | fatal: detected dubious ownership in repository at '/app'
boltdiy-app-dev-1  | To add an exception for this directory, call:
boltdiy-app-dev-1  |
boltdiy-app-dev-1  |    git config --global --add safe.directory /app
boltdiy-app-dev-1  |
boltdiy-app-dev-1  | ★═══════════════════════════════════════★
boltdiy-app-dev-1  |           B O L T . D I Y
boltdiy-app-dev-1  |          ⚡️  Welcome  ⚡️
boltdiy-app-dev-1  | ★═══════════════════════════════════════★
boltdiy-app-dev-1  |
boltdiy-app-dev-1  | 📍 Current Version Tag: v"0.0.6"
boltdiy-app-dev-1  | 📍 Current Commit Version: "no-git-info"
boltdiy-app-dev-1  |   Please wait until the URL appears here
boltdiy-app-dev-1  | ★═══════════════════════════════════════★
boltdiy-app-dev-1  | fatal: detected dubious ownership in repository at '/app'
boltdiy-app-dev-1  | To add an exception for this directory, call:
boltdiy-app-dev-1  |
boltdiy-app-dev-1  |    git config --global --add safe.directory /app
boltdiy-app-dev-1  | [warn] Data fetching is changing to a single fetch in React Router v7
boltdiy-app-dev-1  | ┃ You can use the `v3_singleFetch` future flag to opt-in early.
boltdiy-app-dev-1  | ┃ -> https://remix.run/docs/en/2.13.1/start/future-flags#v3_singleFetch
boltdiy-app-dev-1  | ┗
boltdiy-app-dev-1  | fatal: detected dubious ownership in repository at '/app'
boltdiy-app-dev-1  | To add an exception for this directory, call:
boltdiy-app-dev-1  |
boltdiy-app-dev-1  |    git config --global --add safe.directory /app
boltdiy-app-dev-1  |   ➜  Local:   http://localhost:5173/
boltdiy-app-dev-1  |   ➜  Network: http://172.19.0.2:5173/

This time it came up

/content/images/2025/02/boltdiy-02.png

But all it showed was SaaS endpoints

/content/images/2025/02/boltdiy-03.png

For some reason, by default the local models are disabled.

we can click a gear icon (barely visible) in the lower left and get to the settings for local to enable

/content/images/2025/02/boltdiy-04.png

If I do nothing else, the drop down won’t show the models I have installed

/content/images/2025/02/boltdiy-05.png

I found this issue about not finding models is actually a bug others have reported.

I’ll try on the Ollama host

builder@bosgamerz9:~/bolt.diy$ cat .env.local | grep OLLAMA
OLLAMA_API_BASE_URL=http://127.0.0.1:11434

builder@bosgamerz9:~/bolt.diy$ sudo docker compose --profile development up
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OLLAMA_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string.
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OLLAMA_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string.
[+] Running 1/1
 ! app-dev Warning pull access denied for bolt-ai, repository does not exist or may require 'docker login': denied: req...                  0.7s
[+] Building 26.6s (13/13) FINISHED                                                                                               docker:default
 => [app-dev internal] load build definition from Dockerfile                                                                                0.0s
 => => transferring dockerfile: 2.72kB                                                                                                      0.0s
 => [app-dev internal] load metadata for docker.io/library/node:20.18.0                                                                     0.9s
 => [app-dev internal] load .dockerignore                                                                                                   0.0s
 => => transferring context: 427B                                                                                                           0.0s
 => [app-dev base 1/6] FROM docker.io/library/node:20.18.0@sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc          8.1s
 => => resolve docker.io/library/node:20.18.0@sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc                       0.0s
 => => sha256:202ae32103f362765c42bb8283fbec5167cb7c5687feca97ad6bfbf4af3df444 2.49kB / 2.49kB                                              0.0s
 => => sha256:2112e5e7c3ff699043b282f1ff24d3ef185c080c28846f1d7acc5ccf650bc13d 64.39MB / 64.39MB                                            1.7s
 => => sha256:c3cc7b6f04730c072f8b292917e0d95bb886096a2b2b1781196170965161cd27 24.06MB / 24.06MB                                            1.3s
 => => sha256:a7a3b7ec6de4b11bb2d673b31de9d28c6da09c557ee65453672c8e4f754c23fc 6.41kB / 6.41kB                                              0.0s
 => => sha256:2fdabcc143ddee8d2041316316a238a35f56423362c503fd93e06b1bff79ed56 6.61kB / 6.61kB                                              0.0s
 => => sha256:b2b31b28ee3c96e96195c754f8679f690db4b18e475682d716122016ef056f39 49.58MB / 49.58MB                                            1.7s
 => => sha256:af247aac076473044d24960a352a8ec6f154cf0a28f4fbf35fe5d43b52687ba2 211.29MB / 211.29MB                                          4.7s
 => => extracting sha256:b2b31b28ee3c96e96195c754f8679f690db4b18e475682d716122016ef056f39                                                   0.8s
 => => sha256:2768a6d600d198b5718b29d1969ea6ab9b8b21360dff78d13b9538f72c39ad82 3.32kB / 3.32kB                                              1.9s
 => => sha256:8090fa0edd88988819cd881e9de2459a837e9cda762ca011e8b77f61bc42ac3c 48.22MB / 48.22MB                                            3.0s
 => => sha256:4cf85a38fb04969a4853c458afc84c5078320d8927ec4c87d36dbdd3cc736962 1.25MB / 1.25MB                                              2.1s
 => => sha256:22496bd6ed1beb11b73e005e295874fae0231e98e60289a5e82ca92d0b4997ca 446B / 446B                                                  2.3s
 => => extracting sha256:c3cc7b6f04730c072f8b292917e0d95bb886096a2b2b1781196170965161cd27                                                   0.2s
 => => extracting sha256:2112e5e7c3ff699043b282f1ff24d3ef185c080c28846f1d7acc5ccf650bc13d                                                   0.9s
 => => extracting sha256:af247aac076473044d24960a352a8ec6f154cf0a28f4fbf35fe5d43b52687ba2                                                   2.3s
 => => extracting sha256:2768a6d600d198b5718b29d1969ea6ab9b8b21360dff78d13b9538f72c39ad82                                                   0.0s
 => => extracting sha256:8090fa0edd88988819cd881e9de2459a837e9cda762ca011e8b77f61bc42ac3c                                                   0.8s
 => => extracting sha256:4cf85a38fb04969a4853c458afc84c5078320d8927ec4c87d36dbdd3cc736962                                                   0.0s
 => => extracting sha256:22496bd6ed1beb11b73e005e295874fae0231e98e60289a5e82ca92d0b4997ca                                                   0.0s
 => [app-dev internal] load build context                                                                                                   0.1s
 => => transferring context: 3.19MB                                                                                                         0.0s
 => [app-dev base 2/6] WORKDIR /app                                                                                                         0.5s
 => [app-dev base 3/6] COPY package.json pnpm-lock.yaml ./                                                                                  0.0s
 => [app-dev base 4/6] RUN npm install -g corepack@latest                                                                                   0.8s
 => [app-dev base 5/6] RUN corepack enable pnpm && pnpm install                                                                            10.8s
 => [app-dev base 6/6] COPY . .                                                                                                             0.1s
 => [app-dev bolt-ai-development 1/1] RUN mkdir -p ${WORKDIR}/run                                                                           0.1s
 => [app-dev] exporting to image                                                                                                            5.3s
 => => exporting layers                                                                                                                     5.3s
 => => writing image sha256:7f7d22b20b3b36310c663c801fa50ad93e38543150b401dc9070564244ae1829                                                0.0s
 => => naming to docker.io/library/bolt-ai:development                                                                                      0.0s
 => [app-dev] resolving provenance for metadata file                                                                                        0.0s
[+] Running 3/3
 ✔ app-dev                      Built                                                                                                       0.0s
 ✔ Network boltdiy_default      Created                                                                                                     0.1s
 ✔ Container boltdiy-app-dev-1  Created                                                                                                     4.9s
Attaching to app-dev-1
app-dev-1  |
app-dev-1  | > bolt@0.0.6 dev /app
app-dev-1  | > node pre-start.cjs  && remix vite:dev "--host" "0.0.0.0"
app-dev-1  |
app-dev-1  | fatal: detected dubious ownership in repository at '/app'
app-dev-1  | To add an exception for this directory, call:
app-dev-1  |
app-dev-1  |    git config --global --add safe.directory /app
app-dev-1  |
app-dev-1  | ★═══════════════════════════════════════★
app-dev-1  |           B O L T . D I Y
app-dev-1  |          ⚡️  Welcome  ⚡️
app-dev-1  | ★═══════════════════════════════════════★
app-dev-1  |
app-dev-1  | 📍 Current Version Tag: v"0.0.6"
app-dev-1  | 📍 Current Commit Version: "no-git-info"
app-dev-1  |   Please wait until the URL appears here
app-dev-1  | ★═══════════════════════════════════════★
app-dev-1  | fatal: detected dubious ownership in repository at '/app'
app-dev-1  | To add an exception for this directory, call:
app-dev-1  |
app-dev-1  |    git config --global --add safe.directory /app
app-dev-1  | [warn] Data fetching is changing to a single fetch in React Router v7
app-dev-1  | ┃ You can use the `v3_singleFetch` future flag to opt-in early.
app-dev-1  | ┃ -> https://remix.run/docs/en/2.13.1/start/future-flags#v3_singleFetch
app-dev-1  | ┗
app-dev-1  | fatal: detected dubious ownership in repository at '/app'
app-dev-1  | To add an exception for this directory, call:
app-dev-1  |
app-dev-1  |    git config --global --add safe.directory /app
app-dev-1  |   ➜  Local:   http://localhost:5173/
app-dev-1  |   ➜  Network: http://172.18.0.2:5173/

That said, nothing seems to work for local Ollama

/content/images/2025/02/boltdiy-06.png

I’ll try editing the systemctl to add origins

builder@bosgamerz9:~/bolt.diy$ sudo systemctl edit ollama.service
Successfully installed edited file '/etc/systemd/system/ollama.service.d/override.conf'.
builder@bosgamerz9:~/bolt.diy$ cat /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"`

Then restart the service

builder@bosgamerz9:~/bolt.diy$ sudo systemctl restart ollama.service

I finally did a sed on the docker-compose file to set localhost:

builder@bosgamerz9:~/bolt.diy$ cat docker-compose.yaml
services:
  app-prod:
    image: bolt-ai:production
    build:
      context: .
      dockerfile: Dockerfile
      target: bolt-ai-production
    ports:
      - '5173:5173'
    env_file: '.env.local'
    environment:
      - NODE_ENV=production
      - COMPOSE_PROFILES=production
      # No strictly needed but serving as hints for Coolify
      - PORT=5173
      - GROQ_API_KEY=${GROQ_API_KEY}
      - HuggingFace_API_KEY=${HuggingFace_API_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
      - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
      - OLLAMA_API_BASE_URL=http://127.0.0.1:11434
      - XAI_API_KEY=${XAI_API_KEY}
      - TOGETHER_API_KEY=${TOGETHER_API_KEY}
      - TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL}
      - AWS_BEDROCK_CONFIG=${AWS_BEDROCK_CONFIG}
      - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
      - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
      - RUNNING_IN_DOCKER=true
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    command: pnpm run dockerstart
    profiles:
      - production

  app-dev:
    image: bolt-ai:development
    build:
      target: bolt-ai-development
    env_file: '.env.local'
    environment:
      - NODE_ENV=development
      - VITE_HMR_PROTOCOL=ws
      - VITE_HMR_HOST=localhost
      - VITE_HMR_PORT=5173
      - CHOKIDAR_USEPOLLING=true
      - WATCHPACK_POLLING=true
      - PORT=5173
      - GROQ_API_KEY=${GROQ_API_KEY}
      - HuggingFace_API_KEY=${HuggingFace_API_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
      - XAI_API_KEY=${XAI_API_KEY}
      - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
      - OLLAMA_API_BASE_URL=http://127.0.0.1:11434
      - TOGETHER_API_KEY=${TOGETHER_API_KEY}
      - TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL}
      - AWS_BEDROCK_CONFIG=${AWS_BEDROCK_CONFIG}
      - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
      - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
      - RUNNING_IN_DOCKER=true
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    volumes:
      - type: bind
        source: .
        target: /app
        consistency: cached
      - /app/node_modules
    ports:
      - '5173:5173'
    command: pnpm run dev --host 0.0.0.0
    profiles: ['development', 'default']

  app-prebuild:
    image: ghcr.io/stackblitz-labs/bolt.diy:latest
    ports:
      - '5173:5173'
    environment:
      - NODE_ENV=production
      - COMPOSE_PROFILES=production
      # No strictly needed but serving as hints for Coolify
      - PORT=5173
      - OLLAMA_API_BASE_URL=http://127.0.0.1:11434
      - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
      - RUNNING_IN_DOCKER=true
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    command: pnpm run dockerstart
    profiles:
      - prebuilt

And now it seems to work

/content/images/2025/02/boltdiy-07.png

And I can confirm that unblocked the Dockerhost version as well

/content/images/2025/02/boltdiy-08.png

Via Kubernetes and Ingress

I’m going to try exposing this to see if works any better

$ gcloud dns --project=myanthosproject2 record-sets create boltdiy.steeped.space --zone="steepedspace" --type="A" --ttl="300" --rrdatas="75.73.224.240"
NAME                    TYPE  TTL  DATA
boltdiy.steeped.space.  A     300  75.73.224.240

I can now make an ingress to connect to the Dockerhost for when I’m away from my home network

$ cat ingress.boltdiy.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: boltdiy-external-ip
subsets:
- addresses:
  - ip: 192.168.1.100
  ports:
  - name: boltdiyint
    port: 5173
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: boltdiy-external-ip
spec:
  clusterIP: None
  clusterIPs:
  - None
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  - IPv6
  ipFamilyPolicy: RequireDualStack
  ports:
  - name: boltdiy
    port: 80
    protocol: TCP
    targetPort: 5173
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: gcpleprod2
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.org/websocket-services: boltdiy-external-ip
  generation: 1
  labels:
    app.kubernetes.io/instance: boltdiyingress
  name: boltdiyingress
spec:
  rules:
  - host: boltdiy.steeped.space
    http:
      paths:
      - backend:
          service:
            name: boltdiy-external-ip
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - boltdiy.steeped.space
    secretName: boltdiy-tls

I’ll create the ingress

$ kubectl apply -f ./ingress.boltdiy.yaml
endpoints/boltdiy-external-ip created
service/boltdiy-external-ip created
ingress.networking.k8s.io/boltdiyingress created

When the cert is satisified

$ kubectl get cert boltdiy-tls
NAME          READY   SECRET        AGE
boltdiy-tls   True    boltdiy-tls   73s

I can now test https://boltdiy.steeped.space

/content/images/2025/02/boltdiy-09.png

I used Cursor to find a fix

/content/images/2025/02/boltdiy-10.png

Then applied and ran with Docker compose on my Dockerhost

builder@builder-T100:~/bolt.diy$ docker compose --profile development down
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string. 
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string. 
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string. 
[+] Running 2/2
 ✔ Container boltdiy-app-dev-1  Removed                                                                                                                                                   0.8s 
 ✔ Network boltdiy_default      Removed                                                                                                                                                   0.3s 
builder@builder-T100:~/bolt.diy$ docker compose --profile development up
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string. 
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GROQ_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "HuggingFace_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "ANTHROPIC_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "OPEN_ROUTER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "XAI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "GOOGLE_GENERATIVE_AI_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "TOGETHER_API_BASE_URL" variable is not set. Defaulting to a blank string. 
WARN[0000] The "AWS_BEDROCK_CONFIG" variable is not set. Defaulting to a blank string. 
[+] Building 0.0s (0/0)                                                                                                                                                                        
[+] Running 2/2
 ✔ Network boltdiy_default      Created                                                                                                                                                   0.3s 
 ✔ Container boltdiy-app-dev-1  Created                                                                                                                                                  20.0s 
Attaching to boltdiy-app-dev-1
boltdiy-app-dev-1  | 
boltdiy-app-dev-1  | > bolt@0.0.6 dev /app
boltdiy-app-dev-1  | > node pre-start.cjs  && remix vite:dev "--host" "0.0.0.0"
boltdiy-app-dev-1  | 
boltdiy-app-dev-1  | fatal: detected dubious ownership in repository at '/app'
boltdiy-app-dev-1  | To add an exception for this directory, call:
boltdiy-app-dev-1  | 
boltdiy-app-dev-1  |    git config --global --add safe.directory /app
boltdiy-app-dev-1  | 
boltdiy-app-dev-1  | ★═══════════════════════════════════════★
boltdiy-app-dev-1  |           B O L T . D I Y
boltdiy-app-dev-1  |          ⚡️  Welcome  ⚡️
boltdiy-app-dev-1  | ★═══════════════════════════════════════★

I can now access bolt.diy without issue

/content/images/2025/02/boltdiy-11.png

I still need to hop to settings and enable Ollama

/content/images/2025/02/boltdiy-12.png

Usage

I’m going to swing big first.

I’ll describe the basics of an app:

Create a devotional webapp that with a login page that allows login or create account. We need to know name and email. Optionally they may add phone and an icon picture. Once the user is logged in lets them see a landing page with groups, schedules, plans. there should be a right-hand pane to show their next scheduled rotation. allow light and dark themes.

Using Groq it started, but then just stopped going further

/content/images/2025/02/boltdiy-13.png

Mistral hit my limit

/content/images/2025/02/boltdiy-14.png

I tried Firefox

/content/images/2025/02/boltdiy-15.png

But new errors. I’ve tried fixing the origins in the config

    server: {
      host: true,
      allowedHosts: [
        'localhost',
        'boltdiy.steeped.space'
      ],
      headers: {
        'Cross-Origin-Opener-Policy': 'same-origin',
        'Cross-Origin-Embedder-Policy': 'credentialless',
        'Cross-Origin-Resource-Policy': 'cross-origin'
      }
    },
    build

Gemini times out

/content/images/2025/02/boltdiy-17.png

However, I see errors in Gemini so it might be the calls

/content/images/2025/02/boltdiy-16.png

Nothing was working so I pivoted to running locally

/content/images/2025/02/boltdiy-18.png

I tried downloading and running

builder@LuiGi:/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j$ npm install
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.

added 821 packages, and audited 822 packages in 7m

263 packages are looking for funding
  run `npm fund` for details

12 vulnerabilities (6 low, 6 moderate)

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.
npm notice
npm notice New major version of npm available! 10.5.0 -> 11.1.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.1.0
npm notice Run npm install -g npm@11.1.0 to update!
npm notice
builder@LuiGi:/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j$ npm start

> start
> remix-serve ./build/server/index.js

Error: ENOENT: no such file or directory, stat '/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j/build/server/index.js'
    at Object.statSync (node:fs:1659:25)
    at reimportServer (/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j/node_modules/@remix-run/serve/dist/cli.js:83:39)
    at run (/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j/node_modules/@remix-run/serve/dist/cli.js:112:21)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
builder@LuiGi:/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j$

I opened it up in Cursor and saw I need to npm run build first

/content/images/2025/02/boltdiy-19.png

builder@LuiGi:/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j$ npm run build

> build
> remix vite:build





 warn  Route discovery/manifest behavior is changing in React Router v7
┃ You can use the `v3_lazyRouteDiscovery` future flag to opt-in early.
┃ -> https://remix.run/docs/en/2.13.1/start/future-flags#v3_lazyRouteDiscovery
┗
 warn  Data fetching is changing to a single fetch in React Router v7
┃ You can use the `v3_singleFetch` future flag to opt-in early.
┃ -> https://remix.run/docs/en/2.13.1/start/future-flags#v3_singleFetch
┗

vite v5.4.14 building for production...
✓ 85 modules transformed.
build/client/.vite/manifest.json                1.12 kB │ gzip:  0.31 kB
build/client/assets/root-DxwBsIzs.css           6.79 kB │ gzip:  2.01 kB
build/client/assets/root-RND1-uet.js            1.73 kB │ gzip:  0.98 kB
build/client/assets/entry.client-D9x4GCfA.js    3.74 kB │ gzip:  1.42 kB
build/client/assets/_index-DnPs6FvX.js          5.05 kB │ gzip:  2.05 kB
build/client/assets/jsx-runtime-56DGgGmo.js     8.11 kB │ gzip:  3.05 kB
build/client/assets/components-BoXGomAp.js    246.87 kB │ gzip: 79.69 kB
✓ built in 11.51s
vite v5.4.14 building SSR bundle for production...
✓ 6 modules transformed.
build/server/.vite/manifest.json                0.22 kB
build/server/assets/server-build-DxwBsIzs.css   6.79 kB
build/server/index.js                          12.86 kB
✓ built in 2.19s

Now I can run

builder@LuiGi:/mnt/c/Users/isaac/Downloads/devotional_webapp_with_auth_and_scheduling_dyr59j$ npm start

> start
> remix-serve ./build/server/index.js

[remix-serve] http://localhost:3000 (http://172.19.76.98:3000)

Seems to just be a blank remix template

/content/images/2025/02/boltdiy-20.png

Trying Bolt.new

I tried the same prompt on Bolt.new. Is what I’m asking for not making sense?

/content/images/2025/02/boltdiy-21.png

The preview page was blank.

Perhaps it needs to connect to Supabase?

/content/images/2025/02/boltdiy-22.png

I think it’s now creating a supabase project

/content/images/2025/02/boltdiy-23.png

That seemed to do it

/content/images/2025/02/boltdiy-24.png

Here we can see the app it created, supabase setup and fixing a bug:

I tried Bolt.diy locally again, this time with Mistral AI’s Codestral backend

/content/images/2025/02/boltdiy-25.png

i fed the error back into Bolt and asked it to fix

/content/images/2025/02/boltdiy-26.png

That looks like it’s actually working

/content/images/2025/02/boltdiy-27.png

Let me see if I can pivot to a local sqllite db

/content/images/2025/02/boltdiy-28.png

Local Laptop Bolt.diy issues

The problem I’m having isn’t actually docker. The issue is a lot of the work is pushed to the browser which brings the whole laptop to a crawl as it uses every bit of RAM when it’s working a solution

/content/images/2025/02/boltdiy-29.png

Running locally is okay, but the layout is funky and images are missing

/content/images/2025/02/boltdiy-30.png

I can create an account and login

/content/images/2025/02/boltdiy-31.png

Though in debugging I did see an image load

/content/images/2025/02/boltdiy-32.png

I want to Dockerize this. I’ll use Github Copilot to solve it

/content/images/2025/02/boltdiy-33.png

I will now try building

/content/images/2025/02/boltdiy-34.png

I changed it myself

$ cat Dockerfile
# Use an official Node.js runtime as a parent image
FROM node:21-alpine AS build

# Set the working directory in the container
WORKDIR /app

# Copy package.json and package-lock.json to the working directory
COPY package.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code to the working directory
COPY . .

# Build the application
RUN npm run build

EXPOSE 4173

# Start Nginx when the container launches
CMD ["npm", "run", "preview","--host"]

Then test and ran

builder@LuiGi:~/Workspaces/devWebApp$ docker build -t mytest1:0.1 .
[+] Building 44.0s (12/12) FINISHED                                                                                                                docker:default
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 520B                                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/node:21-alpine                                                                                            0.7s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 2B                                                                                                                              0.0s
 => [1/6] FROM docker.io/library/node:21-alpine@sha256:78c45726ea205bbe2f23889470f03b46ac988d14b6d813d095e2e9909f586f93                                      8.1s
 => => resolve docker.io/library/node:21-alpine@sha256:78c45726ea205bbe2f23889470f03b46ac988d14b6d813d095e2e9909f586f93                                      0.0s
 => => sha256:78c45726ea205bbe2f23889470f03b46ac988d14b6d813d095e2e9909f586f93 1.43kB / 1.43kB                                                               0.0s
 => => sha256:6908bbe242172d79727839290c3d893aa66607aec20e405823c8e56b0b27d8c4 1.16kB / 1.16kB                                                               0.0s
 => => sha256:cad63adc9266f2381a0730aabdb7f8dc65ef32c446cdeb238dae9a54a1ea490f 7.23kB / 7.23kB                                                               0.0s
 => => sha256:d25f557d7f31bf7acfac935859b5153da41d13c41f2b468d16f729a5b883634f 3.62MB / 3.62MB                                                               1.9s
 => => sha256:9e36186fec5a5e04e517871f6901245a86def1db1f6864470f5669a7baf2582f 43.94MB / 43.94MB                                                             5.9s
 => => sha256:14d453f422e7d10a7e49d97e6a77f66239fcc1503954b4a887b7ac16e66220a8 1.38MB / 1.38MB                                                               1.0s
 => => sha256:24ff74239155098e7efecdea07095e1d467cb0c2bd55b3795b0a080716951fe7 450B / 450B                                                                   1.3s
 => => extracting sha256:d25f557d7f31bf7acfac935859b5153da41d13c41f2b468d16f729a5b883634f                                                                    0.2s
 => => extracting sha256:9e36186fec5a5e04e517871f6901245a86def1db1f6864470f5669a7baf2582f                                                                    1.6s
 => => extracting sha256:14d453f422e7d10a7e49d97e6a77f66239fcc1503954b4a887b7ac16e66220a8                                                                    0.0s
 => => extracting sha256:24ff74239155098e7efecdea07095e1d467cb0c2bd55b3795b0a080716951fe7                                                                    0.0s
 => [internal] load build context                                                                                                                            2.6s
 => => transferring context: 135.21MB                                                                                                                        2.5s
 => [2/6] WORKDIR /app                                                                                                                                       0.3s
 => [3/6] COPY package.json ./                                                                                                                               0.1s
 => [4/6] RUN npm install                                                                                                                                   26.0s
 => [5/6] COPY . .                                                                                                                                           1.5s
 => [6/6] RUN npm run build                                                                                                                                  5.4s
 => exporting to image                                                                                                                                       1.6s
 => => exporting layers                                                                                                                                      1.6s
 => => writing image sha256:af7ed179e6d1e2c9f496886b162be0f149a6e3654724c7bce9460233e2808cdc                                                                 0.0s
 => => naming to docker.io/library/mytest1:0.1                                                                                                               0.0s
builder@LuiGi:~/Workspaces/devWebApp$ docker run -p 4173:4173 mytest1:0.1

> vite-react-typescript-starter@0.0.0 preview
> vite preview --host

  ➜  Local:   http://localhost:4173/
  ➜  Network: http://172.17.0.2:4173/

which we can see now running in docker

We can see that indeed logins worked and it saved credentials, but the UI is a bit wonky.

Python

I started to build an app just using copilot

/content/images/2025/02/boltdiy-37.png

and then Gemini to help improve the UI

/content/images/2025/02/boltdiy-35.png

While it stopped short of showing me a logo, it did fix the styling to look much much better

/content/images/2025/02/boltdiy-36.png

Though I’ll use Gemini with 2.0 Flash to kick out a functional logo

/content/images/2025/02/boltdiy-38.png

Like having two helpful assistants, I would often go back and forth between Gemini Code Assist and Copilot for help

/content/images/2025/02/boltdiy-39.png

I was pleased enough with this basic setup

I’ll create a private repo in Forgejo and push so that I can use as a basis for more apps.

/content/images/2025/02/boltdiy-41.png

My thoughts here are that if I have a base template, I can add some polish then re-use it for a variety of ideas.

/content/images/2025/02/boltdiy-42.png

I’ll use those instructions above to create a remote URL and push to the origin

builder@LuiGi:~/Workspaces/devAppNew$ git remote add origin https://forgejo.freshbrewed.science/builderadmin/flaskAppBase.git
builder@LuiGi:~/Workspaces/devAppNew$ git push -u origin main
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 16 threads
Compressing objects: 100% (23/23), done.
Writing objects: 100% (24/24), 36.26 KiB | 9.06 MiB/s, done.
Total 24 (delta 10), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To https://forgejo.freshbrewed.science/builderadmin/flaskAppBase.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

I’ll even make a tag in Forgejo now that it’s pushed

/content/images/2025/02/boltdiy-43.png

One more time

I came back and tried again. With the local Ollama I gave it 12 hours to reply and it just sat there

/content/images/2025/02/boltdiy-45.png

I tried the URL and an external endpoint, it too timed out

/content/images/2025/02/boltdiy-46.png

I went over to the Linux box that hosts Ollama and tried the docker compose up with the local settings there. Perhaps if I do everything local it will work.

You can see it picked up the local Ollama settings

/content/images/2025/02/boltdiy-47.png

But whether I was using local Ollama, Mistral or GroqCloud, it just timed out and didn’t return anything

Summary

We attempted to run Bolt.diy many different ways. The only successful path i found was actually to run locally with Docker compose and even then it brough my laptop to a crawl.

I tried a few engines but they all generated just fair results. I tweaked with other AI assistants before trying to just switch all-together to an AI generated app with Gemini Code Assist and Copilot. I really do find myself dancing between the two on a regular basis.

Lastly, I took that final basic Flask framework and pushed it into Forgejo to be a base template for the next round of the project.

I’m not sure if I’m just doing things wrong or what, but I didn’t find Bolt.diy to really do what I wanted. I plan to keep testing with the hopes I can tweak it through to success.

But for now, I’m going to wait for Bolt.diy to bake a bit longer or have better setup instructions.

OpenSource Bolt.diy Ollama AI Docker Kubernetes

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes