From 04f744ebc4602d0acfe648df369d1016a4dbdd96 Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Fri, 14 Aug 2026 23:45:10 +0100 Subject: [PATCH 1/5] chore: point portal dev script at the vite app and bind it for docker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The root dev script still launched @fluxify/web; the portal is the admin UI now. Also binds vite to 0.0.0.0 so Caddy running in a container can reach the dev server through host.docker.internal, and redirects the bare /_/admin/ui path — vite's base only serves the trailing-slash form. Co-Authored-By: Claude Opus 5 --- Caddyfile.local | 9 ++++++--- Readme.md | 2 +- apps/portal/package.json | 2 +- apps/portal/vite.config.ts | 5 ++++- img/banner.png | Bin 46033 -> 61029 bytes img/logo_title.png | Bin 27843 -> 63840 bytes package.json | 4 ++-- 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Caddyfile.local b/Caddyfile.local index f0f23035..9900bd7a 100644 --- a/Caddyfile.local +++ b/Caddyfile.local @@ -1,10 +1,13 @@ http://localhost:8080 { - @admin_ui { - path /_/admin/ui/* - path /_/admin/ui + # vite's base is /_/admin/ui/ and it won't redirect the bare path itself + @admin_ui_bare path /_/admin/ui + handle @admin_ui_bare { + redir * /_/admin/ui/ 308 } + @admin_ui path /_/admin/ui/* + handle @admin_ui { reverse_proxy host.docker.internal:3000 } diff --git a/Readme.md b/Readme.md index 58b36b53..558b6eb8 100644 --- a/Readme.md +++ b/Readme.md @@ -24,7 +24,7 @@
- + Fluxify Platform Preview diff --git a/apps/portal/package.json b/apps/portal/package.json index 0a3c2e7a..e720e5ca 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port 3001", + "dev": "vite --port 3000", "build": "vite build", "preview": "vite preview", "lint": "tsgo --noEmit", diff --git a/apps/portal/vite.config.ts b/apps/portal/vite.config.ts index bdb14f1a..cbc309b0 100644 --- a/apps/portal/vite.config.ts +++ b/apps/portal/vite.config.ts @@ -34,7 +34,10 @@ export default defineConfig({ }, }, server: { - port: 3001, + port: 3000, + // bind 0.0.0.0 so Caddy in Docker can reach us via host.docker.internal + host: true, + allowedHosts: ["localhost"], proxy: { // ws: the harness socket.io transport lives at /_/admin/api/ai/socket.io/ // and upgrades to a websocket; without this it never leaves long-polling. diff --git a/img/banner.png b/img/banner.png index 8e8bba5c2e7e6208b188980f3e0b6a399020ce22..0d9d4d8040e31fcf745fb5fc9b1ca7ba518b7704 100644 GIT binary patch literal 61029 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%0DwJdl+Sr4YRh0Xgrqnt!RqTM1VRe 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 literal 27843 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 diff --git a/package.json b/package.json index 884339e4..4e3b48f2 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,11 @@ "version": "1.0.0", "type": "module", "scripts": { - "dev": "concurrently 'bun run dev:server' 'bun run dev:worker' 'bun run dev:web' 'bun run dev:ai' 'bun run dev:docs'", + "dev": "concurrently 'bun run dev:server' 'bun run dev:worker' 'bun run dev:portal' 'bun run dev:ai' 'bun run dev:docs'", "dev:server": "bun run --env-file=.env --watch ./apps/server/deployments/standalone.ts", "dev:worker": "bun run --env-file=.env --watch ./apps/server/deployments/compiledWorker.ts", "dev:worker:dag": "bun run --env-file=.env --watch ./apps/server/deployments/worker.ts", - "dev:web": "turbo run dev --filter=@fluxify/web", + "dev:portal": "turbo run dev --filter=@fluxify/portal", "dev:ai": "bun run --env-file=.env --watch ./apps/ai-gateway/src/server.ts", "dev:docs": "vitepress dev docs", "build": "turbo run build", From ebfa62c11b2fb63922b46391b98127981b0f5153 Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Sat, 15 Aug 2026 00:14:12 +0100 Subject: [PATCH 2/5] feat(kit): bundle postgres, valkey and nats into the kit image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The kit is the trial/demo build, so "copy env.example, edit it, run compose" was the wrong first step. All three backing services now ship in the image and start automatically, making `docker run -p 8080:8080` a complete stack. Each bundled service is skipped when its connection variable is already set (PG_URL / REDIS_HOST / NATS_URL), so docker-compose.yml drives the external topology from the same image with no changes. Also in here, because the kit could not boot without them: - The admin UI is apps/portal now, not the legacy Next.js app. It is a static Vite bundle served directly by Caddy, so the UI process is gone entirely and the build no longer depends on @fluxify/web (which does not typecheck against the current server schemas). - entrypoint.sh supervises properly. A bare `wait` blocks until every child exits, so one dead service left the container "up" and quietly broken — that is how the AI gateway had been crash-looping unnoticed. It now exits non-zero on the first death and lets the restart policy handle it. - DOCS_INDEX_PATH used path.join against an absolute env value, producing /app/ai-gateway/app/ai-gateway/docs-index.bin. path.resolve honours absolute paths and still resolves relative ones against the module directory. - The AI gateway has no schema-wait of its own and died on a missing app_config, so startup is now gated on the admin server answering. - HEALTHCHECK pointed at /_/admin/api/healthchecks/startup, which does not exist; the container never became healthy. Uses public-settings instead. - SEED_USER_EMAIL/PASSWORD are validated before initdb: a fresh database refuses to boot without them rather than coming up with no way to log in. - .gitattributes pins shell scripts to LF. A CRLF shebang makes the kernel look for "/bin/sh\r" and the container dies with "No such file or directory". Verified both paths: bundled boots clean to healthy on a fresh volume, reuses the cluster and generated secrets on restart, and serves the UI, admin API and worker routes; external mode skips all three bundled services. Image is 338MB. Co-Authored-By: Claude Opus 5 --- .gitattributes | 6 + apps/ai-gateway/src/constants.ts | 6 +- docker/kit/Caddyfile | 14 +- docker/kit/Dockerfile | 81 ++++++++--- docker/kit/entrypoint.sh | 222 +++++++++++++++++++++++++++++-- docker/kit/env.example | 19 ++- 6 files changed, 316 insertions(+), 32 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..94338931 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Shell scripts must keep LF: a CRLF shebang makes the kernel look for +# "/bin/sh " and the container dies with "exec ... No such file or directory". +*.sh text eol=lf +Dockerfile text eol=lf +Caddyfile* text eol=lf +entrypoint.sh text eol=lf diff --git a/apps/ai-gateway/src/constants.ts b/apps/ai-gateway/src/constants.ts index 4bb8cb9e..5f6b4081 100644 --- a/apps/ai-gateway/src/constants.ts +++ b/apps/ai-gateway/src/constants.ts @@ -1,7 +1,11 @@ import path from "path"; import { DOCS_INDEX_FILE_PATH } from "./lib/env"; -export const DOCS_INDEX_PATH = path.join( +// resolve, not join: DOCS_INDEX_FILE_PATH is absolute in container images, and +// path.join would append it to dirname instead of honouring it +// (/app/ai-gateway + /app/ai-gateway/docs-index.bin). Relative values still +// resolve against this file's directory, which is what the default expects. +export const DOCS_INDEX_PATH = path.resolve( import.meta.dirname, DOCS_INDEX_FILE_PATH, ); diff --git a/docker/kit/Caddyfile b/docker/kit/Caddyfile index d590fa8e..2e9e2f9b 100644 --- a/docker/kit/Caddyfile +++ b/docker/kit/Caddyfile @@ -1,7 +1,19 @@ # Single published port for the whole kit. Everything below is in-container. :8080 { + # Vite's base only serves the trailing-slash form; redirect the bare path. + @admin_ui_bare path /_/admin/ui + handle @admin_ui_bare { + redir * /_/admin/ui/ 308 + } + + # Admin UI: a static SPA built by Vite with base /_/admin/ui/. strip_prefix + # maps the public path onto the bundle root; the try_files fallback hands + # client-routed deep links back to index.html instead of 404ing. handle /_/admin/ui* { - reverse_proxy localhost:3000 + uri strip_prefix /_/admin/ui + root * /app/portal + try_files {path} /index.html + file_server } handle /_/admin/api/ai* { reverse_proxy localhost:8001 diff --git a/docker/kit/Dockerfile b/docker/kit/Dockerfile index 7a48439e..339c5717 100644 --- a/docker/kit/Dockerfile +++ b/docker/kit/Dockerfile @@ -5,8 +5,11 @@ # run it on a small VPS without wiring a stack together: # # caddy :8080 reverse proxy — the only port you need to publish +# postgres :5432 bundled, loopback only (skipped when PG_URL is set) +# valkey :6379 bundled, loopback only (skipped when REDIS_HOST is set) +# nats :4222 bundled, loopback only (skipped when NATS_URL is set) # admin server :5500 control plane API + the compiler -# web UI :3000 admin dashboard +# admin UI static Vite bundle served by caddy from /app/portal # ai-gateway :8001 AI assistant # compiled worker :5600 serves your API traffic from compiled JavaScript # :5601 worker health/readiness @@ -18,21 +21,49 @@ # BUILD (from the repo root, the CBE directory) # docker build -f docker/kit/Dockerfile -t fluxify-kit . # -# RUN -# docker run --rm -p 8080:8080 --env-file docker/kit/.env fluxify-kit +# RUN — nothing external needed +# docker run -p 8080:8080 -v fluxify_kit_data:/data \ +# -e SEED_USER_EMAIL=you@example.com -e SEED_USER_PASSWORD=changeme123 \ +# fluxify-kit # # Then open http://localhost:8080/_/admin/ui # # ------------------------------------------------------------------------------ +# BATTERIES INCLUDED +# PostgreSQL, Valkey and NATS ship inside the image and start automatically. +# Each one is skipped when its connection variable is already set, so pointing +# the kit at external services is opt-in and needs no different image: +# +# PG_URL set -> bundled PostgreSQL is not started +# REDIS_HOST set -> bundled Valkey is not started +# NATS_URL set -> bundled NATS is not started +# +# docker/kit/docker-compose.yml sets all three, so it runs the external +# topology unchanged. +# +# State lives in the /data volume: the Postgres cluster, the JetStream store, +# and secrets.env. MASTER_ENCRYPTION_KEY, BETTER_AUTH_SECRET and +# SYSTEM_ACCESS_KEY are generated there on first boot when not supplied. +# BACK IT UP — losing it means stored project credentials cannot be decrypted. +# +# NOT FOR PRODUCTION. Bundled Postgres cannot be major-version upgraded in +# place; a base-image bump would orphan the data directory. +# +# ------------------------------------------------------------------------------ # REQUIRED ENVIRONMENT +# SEED_USER_EMAIL first admin account — no default, and a fresh +# SEED_USER_PASSWORD database REFUSES to boot without both (min 8 chars). +# Nothing else can create the first login. +# SERVER_URL public URL, e.g. http://localhost:8080 +# BETTER_AUTH_URL same as SERVER_URL +# TRUSTED_ORIGINS comma-separated allowed origins +# +# REQUIRED ONLY WHEN USING EXTERNAL SERVICES # PG_URL postgres://user:pass@host:5432/fluxify # REDIS_HOST Redis/Valkey hostname # NATS_URL nats://host:4222 — JetStream MUST be on (`-js`) # MASTER_ENCRYPTION_KEY `openssl rand -base64 32`; encrypts project config # BETTER_AUTH_SECRET session signing secret -# SERVER_URL public URL, e.g. http://localhost:8080 -# BETTER_AUTH_URL same as SERVER_URL -# TRUSTED_ORIGINS comma-separated allowed origins # # REQUIRED ONCE YOU HAVE A PROJECT # WORKER_PROJECT_ID the project this kit serves. Leave it unset on the @@ -90,8 +121,10 @@ COPY . . # Required because turbo sub-package builds need per-workspace .bin symlinks. RUN bun install --frozen-lockfile -# Workspace packages + admin server (standalone.js + schema.sql) + web + gateway. -RUN bun run build +# Workspace packages + admin server (standalone.js + schema.sql) + gateway. +# --filter excludes @fluxify/web: the admin UI is apps/portal now, and the +# legacy Next.js app no longer typechecks against the current server schemas. +RUN bun run build --filter=!@fluxify/web # The compiled worker is TWO bundles, not one. Bun's bundler does not pull a # child-process entry point into its parent's bundle; it leaves the reference and resolves @@ -99,11 +132,6 @@ RUN bun run build # so this flat sibling layout in dist/ is load-bearing — do not nest it. RUN bun run --cwd apps/server build:worker:compiled -# Next.js standalone output does not include these; copy them in. -WORKDIR /app/apps/web -RUN cp -r public .next/standalone/apps/web/public && \ - cp -r .next/static .next/standalone/apps/web/.next/static - # AI Gateway documentation search index. WORKDIR /app/apps/ai-gateway RUN bun run gather @@ -132,14 +160,23 @@ LABEL org.opencontainers.image.title="Fluxify Kit" \ org.opencontainers.image.created="${BUILD_DATE}" # tini reaps the child processes the entrypoint spawns; caddy is the proxy. -RUN apk add --no-cache tini caddy nss-tools +# +# postgresql/valkey/nats-server are the bundled backing services. The major +# version of postgresql is PINNED deliberately: an unpinned bump would ship an +# image that refuses to mount an existing data directory, and there is no +# pg_upgrade path in a single-shot container. Treat a bump as breaking. +RUN apk add --no-cache tini caddy nss-tools \ + postgresql16 postgresql16-client valkey valkey-cli nats-server + +# initdb/postgres live outside /usr/bin on Alpine's versioned packages. +ENV PATH="/usr/libexec/postgresql16:${PATH}" RUN adduser -D -s /sbin/nologin -h /app appuser # Admin server bundle + compiled worker bundles + schema.sql, all siblings. COPY --from=build --chown=appuser:appuser /app/apps/server/dist /app/server -# Next.js standalone build. -COPY --from=build --chown=appuser:appuser /app/apps/web/.next/standalone /app/web +# Admin UI — a static Vite bundle, served directly by Caddy. No Node process. +COPY --from=build --chown=appuser:appuser /app/apps/portal/dist /app/portal # AI Gateway single-file bundle + docs index. COPY --from=build --chown=appuser:appuser /app/apps/ai-gateway/dist /app/ai-gateway @@ -147,14 +184,22 @@ COPY --chown=appuser:appuser docker/kit/Caddyfile /app/Caddyfile COPY --chown=appuser:appuser docker/kit/entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh +# Everything stateful the kit owns: the bundled Postgres cluster, the JetStream +# store, and the secrets generated on first boot. Declared so a bare +# `docker run` survives a restart; mount it explicitly to survive `rm`. +RUN mkdir -p /data && chown appuser:appuser /data +VOLUME /data + USER appuser # 8080 is the only port you need to publish; the rest are internal. -EXPOSE 8080 5500 5600 5601 3000 8001 +EXPOSE 8080 5500 5600 5601 8001 ENV NODE_ENV=production \ ENVIRONMENT=production \ HOSTNAME=0.0.0.0 \ + KIT_DATA_DIR=/data \ + REDIS_PORT=6379 \ WEB_PORT=3000 \ SERVER_PORT=5500 \ WORKER_PORT=5600 \ @@ -173,7 +218,7 @@ ENV NODE_ENV=production \ # Reports healthy once the admin API answers; the worker has its own probe on # 5601 because it may legitimately be absent (see WORKER_PROJECT_ID above). HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \ - CMD wget -qO- http://localhost:5500/_/admin/api/healthchecks/startup || exit 1 + CMD wget -qO- http://localhost:5500/_/admin/api/public-settings || exit 1 # tini as PID 1 so signals reach every service and nothing is orphaned. ENTRYPOINT ["tini", "--"] diff --git a/docker/kit/entrypoint.sh b/docker/kit/entrypoint.sh index 7e2ca762..e8112279 100644 --- a/docker/kit/entrypoint.sh +++ b/docker/kit/entrypoint.sh @@ -3,23 +3,210 @@ set -e echo "[kit] Starting Fluxify services..." -pids="" -start() { "$@" & pids="$pids $!"; } +DATA_DIR="${KIT_DATA_DIR:-/data}" +PGDATA="$DATA_DIR/postgres" +NATS_STORE="$DATA_DIR/nats" +SECRETS_FILE="$DATA_DIR/secrets.env" + +# "name:pid name:pid ..." — names are only used to say WHICH service died. +services="" +start() { + _name="$1" + shift + "$@" & + services="$services $_name:$!" +} + +pids_of_services() { + for entry in $services; do + printf '%s ' "${entry##*:}" + done +} # Forward SIGTERM/SIGINT to every child, then wait for them to drain. # Without this trap the shell (PID 1 under tini) swallows the signal and the # backgrounded services are orphaned — `docker stop` hangs until SIGKILL. +shutting_down=0 term() { + shutting_down=1 echo "[kit] signal received — stopping services..." - kill -TERM $pids 2>/dev/null || true + # shellcheck disable=SC2046 + kill -TERM $(pids_of_services) 2>/dev/null || true wait exit 0 } trap term TERM INT +die() { + echo "[kit] FATAL: $1" >&2 + exit 1 +} + +# Polls a readiness command until it succeeds. Each service gets its own probe +# rather than a generic port check: busybox `nc` has no portable -z, and an open +# port does not mean postgres is accepting queries anyway. +wait_until() { + _label="$1" + shift + _n=0 + while [ "$_n" -lt 60 ]; do + if "$@" >/dev/null 2>&1; then + return 0 + fi + _n=$((_n + 1)) + sleep 1 + done + die "$_label did not become ready after 60s" +} + +# ------------------------------------------------------------------------------ +# Secrets — generated once on first boot and reused from the data volume. +# +# Without this a bare `docker run` fails: MASTER_ENCRYPTION_KEY and +# BETTER_AUTH_SECRET are required and have no safe default. Anything explicitly +# passed in the environment always wins over the generated file. +# ------------------------------------------------------------------------------ +provision_secrets() { + if [ -f "$SECRETS_FILE" ]; then + # shellcheck disable=SC1090 + . "$SECRETS_FILE" + fi + + _generated=0 + for var in MASTER_ENCRYPTION_KEY BETTER_AUTH_SECRET SYSTEM_ACCESS_KEY; do + eval "_current=\$$var" + if [ -z "$_current" ]; then + eval "$var=\$(head -c 32 /dev/urandom | base64 | tr -d '\n')" + _generated=1 + fi + eval "export $var" + done + + if [ "$_generated" = "1" ]; then + umask 077 + { + echo "# Generated by the Fluxify kit on first boot. Losing this file means" + echo "# stored project credentials can no longer be decrypted." + for var in MASTER_ENCRYPTION_KEY BETTER_AUTH_SECRET SYSTEM_ACCESS_KEY; do + eval "printf '%s=%s\n' \"$var\" \"\$$var\"" + done + } >"$SECRETS_FILE" + echo "[kit] generated instance secrets -> $SECRETS_FILE (back this up)" + fi +} + +# ------------------------------------------------------------------------------ +# Admin credentials. +# +# The seeder skips silently when these are missing or malformed, which leaves a +# running instance nobody can log into. Refuse to boot a fresh database instead +# — the failure is the same either way, but this one explains itself. +# ------------------------------------------------------------------------------ +require_admin_credentials() { + _why="$1" + [ -n "$SEED_USER_EMAIL" ] || + die "SEED_USER_EMAIL is required ($_why). Without it no admin account is created and the UI cannot be logged into." + [ -n "$SEED_USER_PASSWORD" ] || + die "SEED_USER_PASSWORD is required ($_why). Without it no admin account is created and the UI cannot be logged into." + case "$SEED_USER_EMAIL" in + ?*@?*.?*) ;; + *) die "SEED_USER_EMAIL ('$SEED_USER_EMAIL') is not a valid email address; the seeder would reject it and create no admin account." ;; + esac + [ "${#SEED_USER_PASSWORD}" -ge 8 ] || + die "SEED_USER_PASSWORD must be at least 8 characters; the seeder would reject it and create no admin account." +} + +# ------------------------------------------------------------------------------ +# Bundled backing services. +# +# Each starts only when its connection variable is absent, so setting PG_URL / +# NATS_URL / REDIS_HOST (as docker-compose.yml does) opts out of the bundled +# copy and points the stack at an external one. Same image either way. +# ------------------------------------------------------------------------------ +start_bundled_postgres() { + _fresh=0 + if [ ! -s "$PGDATA/PG_VERSION" ]; then + _fresh=1 + # Fresh database => nobody has an account yet. Check before initdb so a + # misconfigured run fails in a second rather than after a full boot. + require_admin_credentials "this is a first boot with the bundled database" + echo "[kit] initialising bundled PostgreSQL in $PGDATA..." + mkdir -p "$PGDATA" + chmod 700 "$PGDATA" + # trust auth is safe here: postgres listens on loopback inside this + # container only and the port is never published. + initdb --username=postgres --auth-local=trust --auth-host=trust \ + --encoding=UTF8 --pgdata="$PGDATA" >/dev/null + fi + + echo "[kit] starting bundled PostgreSQL..." + start postgres postgres -D "$PGDATA" \ + -c listen_addresses=127.0.0.1 \ + -c port=5432 \ + -c unix_socket_directories="$DATA_DIR" + + wait_until "bundled PostgreSQL" pg_isready -h 127.0.0.1 -p 5432 -U postgres -q + + if [ "$_fresh" = "1" ]; then + createdb -h 127.0.0.1 -U postgres fluxify + echo "[kit] created database 'fluxify'" + fi + + export PG_URL="postgres://postgres@127.0.0.1:5432/fluxify" +} + +start_bundled_nats() { + echo "[kit] starting bundled NATS (JetStream)..." + mkdir -p "$NATS_STORE" + # -js is REQUIRED: the compile work queue is a JetStream stream and compiled + # routes live in a KV bucket, which is built on JetStream. + # -m enables the monitoring endpoint, which is how we probe readiness. + if [ -n "$NATS_TOKEN" ]; then + start nats nats-server -js --store_dir "$NATS_STORE" \ + --addr 127.0.0.1 --port 4222 -m 8222 --auth "$NATS_TOKEN" + else + start nats nats-server -js --store_dir "$NATS_STORE" \ + --addr 127.0.0.1 --port 4222 -m 8222 + fi + wait_until "bundled NATS" wget -qO- http://127.0.0.1:8222/healthz + export NATS_URL="nats://127.0.0.1:4222" +} + +start_bundled_valkey() { + echo "[kit] starting bundled Valkey..." + # Cache only — pub/sub moved to NATS — so persistence buys nothing and an + # unwritable/half-written dump would just be a new failure mode. + start valkey valkey-server --save '' --appendonly no \ + --bind 127.0.0.1 --port 6379 + wait_until "bundled Valkey" valkey-cli -h 127.0.0.1 -p 6379 ping + export REDIS_HOST=127.0.0.1 + export REDIS_PORT="${REDIS_PORT:-6379}" + unset REDIS_USER REDIS_PASS +} + +mkdir -p "$DATA_DIR" +provision_secrets + +[ -n "$PG_URL" ] || start_bundled_postgres +[ -n "$NATS_URL" ] || start_bundled_nats +[ -n "$REDIS_HOST" ] || start_bundled_valkey + +# External database: we cannot tell whether it is already seeded, so warn rather +# than refuse — an existing deployment restarting must not be blocked. +if [ -z "$SEED_USER_EMAIL" ] || [ -z "$SEED_USER_PASSWORD" ]; then + echo "[kit] WARNING: SEED_USER_EMAIL / SEED_USER_PASSWORD are unset. If this" + echo "[kit] database has no admin account yet, nothing can log in." +fi + # Admin/control-plane server. Runs migrations and hosts the compiler, which # turns saved routes into JavaScript and publishes them to the NATS KV bucket. -start bun --cwd=/app/server standalone.js +start server bun --cwd=/app/server standalone.js + +# Everything downstream reads tables the admin server creates, so nothing else +# may start until its migrations have run. The AI gateway has no schema-wait of +# its own and dies outright on a missing app_config. +wait_until "admin server" \ + wget -qO- "http://127.0.0.1:${SERVER_PORT:-5500}/_/admin/api/public-settings" # Compiled request worker — serves user API traffic from those artifacts. # @@ -27,22 +214,37 @@ start bun --cwd=/app/server standalone.js # On a first boot that is the normal state: bring the kit up without it, create # a project in the UI, then set WORKER_PROJECT_ID and restart. if [ -n "$WORKER_PROJECT_ID" ]; then - start bun --cwd=/app/server compiledWorker.js + start worker bun --cwd=/app/server compiledWorker.js else echo "[kit] WORKER_PROJECT_ID is not set — starting without the request worker." echo "[kit] Create a project at /_/admin/ui, then set WORKER_PROJECT_ID and restart." fi -# Next.js admin UI -start bun --cwd=/app/web apps/web/server.js +# The admin UI is a static Vite bundle in /app/portal, served by Caddy — there +# is no UI process to start. # AI Gateway -start bun --cwd=/app/ai-gateway server.js +start ai-gateway bun --cwd=/app/ai-gateway server.js # Reverse proxy — the single published port -start caddy run --config /app/Caddyfile +start caddy caddy run --config /app/Caddyfile echo "[kit] All services launched." -# Wait for the background processes (or the trap) to finish. +# Supervision: a bare `wait` blocks until EVERY child exits, so one dead service +# leaves the container "up" and quietly broken. Poll instead and exit non-zero +# on the first death — `restart: unless-stopped` then restarts the whole kit. +# ponytail: whole-container restart, not per-service; add a real supervisor +# (s6-overlay) only if partial restarts turn out to matter. +while [ "$shutting_down" = "0" ]; do + for entry in $services; do + if ! kill -0 "${entry##*:}" 2>/dev/null; then + echo "[kit] service '${entry%%:*}' exited — stopping the container" >&2 + kill -TERM $(pids_of_services) 2>/dev/null || true + exit 1 + fi + done + sleep 5 +done + wait diff --git a/docker/kit/env.example b/docker/kit/env.example index 39026cad..0bd5d468 100644 --- a/docker/kit/env.example +++ b/docker/kit/env.example @@ -4,6 +4,20 @@ ENVIRONMENT=production # Node environment mode: development | production NODE_ENV=production +# ====================== BUNDLED vs EXTERNAL SERVICES ====================== +# The kit image ships PostgreSQL, Valkey and NATS and starts them automatically. +# Each is SKIPPED when its connection variable below is set, which is exactly +# what this file does — so docker-compose.yml runs the external containers and a +# bare `docker run` (no env file) runs the bundled ones. Same image both ways. +# +# PG_URL set -> bundled PostgreSQL not started +# REDIS_HOST set -> bundled Valkey not started +# NATS_URL set -> bundled NATS not started +# +# In bundled mode MASTER_ENCRYPTION_KEY / BETTER_AUTH_SECRET / SYSTEM_ACCESS_KEY +# are generated into /data/secrets.env on first boot if unset. Back that up: +# losing it means stored project credentials can no longer be decrypted. + # ====================== DATABASES ====================== # PostgreSQL connection string: postgres://{username}:{password}@{host}:{port}/{database} PG_URL=postgres://postgres:postgres@postgres:5432/fluxify_alpha @@ -80,9 +94,10 @@ BETTER_AUTH_URL=http://localhost:8080 SYSTEM_ACCESS_KEY=2zhJ7KpBp4s6WECoCHsG3ss6SwZuldw6 # Disable npm package installations in execution environment (true | false) DISABLE_NPM=true -# Default email address for initial admin user seed +# Initial admin account. REQUIRED — a first boot with the bundled database +# refuses to start without both, because nothing else can create a login and the +# seeder skips silently on a malformed value. Password must be 8+ characters. SEED_USER_EMAIL=admin@company.com -# Default password for initial admin user seed SEED_USER_PASSWORD=admin@123 # Default full name for initial admin user seed SEED_USER_NAME=Admin user From 3ecf91d40771accba63b90e691d8357760535be0 Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Sat, 15 Aug 2026 00:26:54 +0100 Subject: [PATCH 3/5] docs(kit): document the bundled single-command self-hosting path The kit ships its own database, cache and event bus now, so the guide no longer starts at "copy an env file and run compose". It leads with the one-command run and keeps the bring-your-own-services path as the second option, since the image picks between them on its own. Covers the parts that bite: /data must be mounted or everything is discarded, the generated keys in it need backing up, admin credentials are mandatory on a fresh instance, and a bundled major database upgrade is not applied in place. Also documents WORKER_PROJECT_ID=* as a way to skip the create-project-then- restart step, with the path-collision caveat stated plainly. Fixes two dead anchors in the deployments index that pointed at removed sections, and folds the backing services into the kit diagram now that they are inside the container. Production docs deliberately untouched. Co-Authored-By: Claude Opus 5 --- docs/deployments/index.md | 7 +- docs/deployments/kit.md | 227 ++++++++++++++++++++++++++++---------- 2 files changed, 170 insertions(+), 64 deletions(-) diff --git a/docs/deployments/index.md b/docs/deployments/index.md index a45a334b..f77e84fd 100644 --- a/docs/deployments/index.md +++ b/docs/deployments/index.md @@ -25,7 +25,7 @@ steps for each. | | **Kit** (all-in-one) | **Admin + Workers** (scale-out) | | :--- | :--- | :--- | | **Best for** | Trials, demos, single-machine hosting | Real production traffic | -| **Containers** | One app container | Separate admin + many workers | +| **Containers** | One — database, cache and event bus included | Separate admin + many workers | | **Scaling** | Vertical only (bigger machine) | Horizontal — add workers on demand | | **Edge proxy** | Built into the image | Traefik (load-balances the workers) | | **Setup effort** | Lowest — one command | Moderate | @@ -63,8 +63,8 @@ flowchart TB ADM["Admin API
+ compiler"] WRK["Request worker"] AI["AI gateway"] + BS["PostgreSQL · Valkey · NATS
(bundled, or bring your own)"] end - K --> BS["PostgreSQL · Valkey · NATS"] style C fill:#111113,stroke:#EF4444,color:#FAFAFA style K fill:#111113,stroke:#D2FF4D,color:#FAFAFA @@ -182,7 +182,8 @@ projects can only resolve to one of them, and a slow project slows the rest. Pick your path and jump straight to the steps: -- **Kit:** [create your `.env`](./kit#env) → [start the stack](./kit#start) +- **Kit:** [run one command](./kit#bundled) → + [turn on the request worker](./kit#worker) - **Admin + Workers:** [why Traefik](./production#why-traefik) → [create your `.env`](./production#env) → [start the stack](./production#start) → [scale the workers](./production#scaling) diff --git a/docs/deployments/kit.md b/docs/deployments/kit.md index 854c00b3..bf4745a9 100644 --- a/docs/deployments/kit.md +++ b/docs/deployments/kit.md @@ -1,14 +1,17 @@ --- title: Quick Run with the Kit Image -description: Run all of Fluxify in a single container using the fluxify-kit image — ideal for local trials, demos, and evaluation. Includes a ready-to-use Docker Compose stack. +description: Run all of Fluxify in a single container using the fluxify-kit image — ideal for local trials, demos, and evaluation. Includes a batteries-included single command and a Docker Compose stack. --- # Quick Run with the Kit Image The **Kit** image (`fluxify-kit`) bundles everything Fluxify needs into a single -container: the admin API, the request worker, the web dashboard, the AI gateway, -and a built-in proxy. One container, one port, one command — perfect for **local -trials, demos, and evaluation**. +container: the admin API, the request worker, the dashboard, the AI gateway, and +a built-in proxy. It also ships its own database, cache, and event bus, so you +can start the whole thing with one command and nothing else installed. + +One container, one port, one command — perfect for **local trials, demos, and +evaluation**. > [!TIP] > Running a real production instance? Use the [Production Setup](./production) @@ -21,7 +24,7 @@ trials, demos, and evaluation**. | Item | Value | | :--- | :--- | -| Containers to run | 1 app container + Postgres + Valkey + NATS | +| Containers to run | 1 (or 4, if you supply your own database, cache, and event bus) | | Public port | `8080` | | Best for | Trials, demos, single-machine self-hosting | | Scaling | Vertical only (bigger machine) | @@ -30,14 +33,90 @@ Traffic enters on port `8080` and is routed for you: | URL | Goes to | | :--- | :--- | -| `http://localhost:8080/_/admin/ui` | Web dashboard (visual editor) | +| `http://localhost:8080/_/admin/ui` | Dashboard (visual editor) | | `http://localhost:8080/_/admin/api` | Admin REST API | | `http://localhost:8080/_/admin/api/openapi/ui` | API documentation | | `http://localhost:8080/` | Your published workflows & custom endpoints | --- -## Step 1 — Create your `.env` {#env} +## Two ways to run it + +Pick one. Both use the same image. + +| | **Bundled** (recommended for trials) | **Bring your own services** | +| :--- | :--- | :--- | +| Command | `docker run` | `docker compose` | +| Database, cache, event bus | Included in the container | You supply them | +| Setup | One command, no config file | Copy and edit an environment file | +| Good for | Trying Fluxify out today | Keeping data in a database you manage | + +The image decides automatically: if you tell it where to find a database, cache, +or event bus, it uses yours. If you don't, it starts its own. + +--- + +## Option A — One command {#bundled} + +Nothing to install, no configuration file: + +```bash +docker run -d --name fluxify \ + -p 8080:8080 \ + -v fluxify_data:/data \ + -e SEED_USER_EMAIL=admin@example.com \ + -e SEED_USER_PASSWORD=ChangeThisPassword123! \ + fluxify-kit +``` + +Then open `http://localhost:8080/_/admin/ui` and log in with the email and +password you just set. + +> [!IMPORTANT] +> `SEED_USER_EMAIL` and `SEED_USER_PASSWORD` are **required** and have no +> defaults. They create the first administrator account, and nothing else can +> create it for you. A brand-new instance refuses to start without them rather +> than starting up with no way to log in. The password must be at least 8 +> characters. + +### About that `-v fluxify_data:/data` + +Everything the kit stores lives in `/data`: your projects and routes, the event +history, and the security keys it generates the first time it starts. + +**Don't skip the volume.** Without it, removing the container throws all of that +away. + +> [!WARNING] +> On first start the kit generates its own encryption and session keys and saves +> them in `/data`. **Back this up.** If you lose it, saved credentials — database +> passwords, integration keys — can no longer be read, even with the same +> projects restored. + +### Changing the port + +If `8080` is taken, map a different one on the left-hand side and tell Fluxify +its public address: + +```bash +docker run -d --name fluxify \ + -p 9090:8080 \ + -v fluxify_data:/data \ + -e SERVER_URL=http://localhost:9090 \ + -e BETTER_AUTH_URL=http://localhost:9090 \ + -e TRUSTED_ORIGINS=http://localhost:9090 \ + -e SEED_USER_EMAIL=admin@example.com \ + -e SEED_USER_PASSWORD=ChangeThisPassword123! \ + fluxify-kit +``` + +--- + +## Option B — Bring your own database, cache, and event bus {#compose} + +Use this when you want your data in a database you manage and back up yourself. + +### Step 1 — Create your `.env` Copy `docker/kit/env.example` to `docker/kit/.env` next to the compose file: @@ -45,19 +124,18 @@ Copy `docker/kit/env.example` to `docker/kit/.env` next to the compose file: cp docker/kit/env.example docker/kit/.env ``` -At minimum verify the key environment variables: +At minimum verify these values: ```env #====================== ENVIRONMENT ====================== NODE_ENV=production ENVIRONMENT=production -#====================== DATABASES ====================== +#====================== YOUR OWN SERVICES ====================== +# Setting these three switches off the built-in copies. PG_URL=postgres://postgres:postgres@postgres:5432/fluxify_alpha REDIS_HOST=valkey REDIS_PORT=6379 - -#====================== EVENT BUS ====================== NATS_URL=nats://nats:4222 NATS_TOKEN=fluxify_nats_token @@ -81,9 +159,10 @@ SEED_USER_NAME=Admin User > Back up `MASTER_ENCRYPTION_KEY`. If you lose or change it after storing data, > every saved credential becomes unreadable. -> [!IMPORTANT] -> `SEED_USER_EMAIL` / `SEED_USER_PASSWORD` create the first admin account on the -> **first run only**. Set them before you start the stack. +> [!NOTE] +> When you supply your own services you must also supply your own +> `MASTER_ENCRYPTION_KEY` and `BETTER_AUTH_SECRET`. The kit only generates those +> for you in bundled mode, where it has somewhere of its own to keep them. ### Generate your secret keys @@ -92,24 +171,16 @@ Use this generator to create secure values for `MASTER_ENCRYPTION_KEY` and ---- - -## Step 2 — Start the stack {#start} - -Use the ready-made compose file from the repository: +### Step 2 — Start the stack ```bash docker compose -f docker/kit/docker-compose.yml up -d ``` -This starts four containers: the Fluxify Kit plus its Postgres, Valkey, and NATS -dependencies. Database setup runs automatically on first boot. +This starts four containers: Fluxify plus the database, cache, and event bus. +Database setup runs automatically on first boot. ---- - -## Step 3 — Open the dashboard - -Once the containers are healthy, open: +### Step 3 — Open the dashboard ``` http://localhost:8080/_/admin/ui @@ -119,7 +190,9 @@ Log in with the seed admin credentials from your `.env`. --- -## Step 4 — Create a project and switch on the request worker {#worker} +## Turning on the request worker {#worker} + +This part applies to **both** options. The first time you start, you'll see this in the logs: @@ -136,38 +209,48 @@ So: 1. **Create a project** in the dashboard. 2. **Copy its id** from the project's settings page. -3. **Put it in `docker/kit/.env`:** +3. **Set `WORKER_PROJECT_ID` to that id** — in `docker/kit/.env` for Option B, or + as another `-e WORKER_PROJECT_ID=...` for Option A. +4. **Start the container again** with the new value. - ```env - WORKER_PROJECT_ID= - ``` +Your routes are then served at `http://localhost:8080/`. -4. **Bring the stack up again:** - - ```bash - docker compose -f docker/kit/docker-compose.yml up -d - ``` - -The worker now starts, and `http://localhost:8080/` serves your routes. +> [!TIP] +> Prefer not to do this at all? Set `WORKER_PROJECT_ID=*` from the very first +> start and the kit serves **every** project you create, picking up new ones +> immediately with no restart. The catch: two projects that define the same path +> — say both have a `/users` endpoint — collide, and only one of them answers. +> Fine while you have one project, which is the usual case for a trial. To opt into experimental CPU-stall protection, set the project setting -`experimental.workerTimeouts.enabled` to `true`. The worker receives that -change through NATS immediately; no Docker restart is required. +`experimental.workerTimeouts.enabled` to `true`. The worker receives that change +immediately; no restart is required. > [!TIP] > From here on, saving a route in the editor publishes it to the worker in place -> — no restart and no redeploy. You only ever do this step again if you switch -> the kit to a different project. See +> — no restart and no redeploy. You only repeat this step if you point the kit at +> a different project. See > [Request Lifecycle](/architecture/request-lifecycle) for what happens on save. > [!NOTE] -> One kit serves one project. To serve several, move to the -> [Production Setup](./production), which runs a worker group per project. +> One kit serves one project (unless you use `*` above, with the caveat noted). +> To serve several properly, move to the [Production Setup](./production), which +> runs a worker group per project. --- ## Upgrading +**Option A:** + +```bash +docker pull fluxify-kit +docker rm -f fluxify +# then run the same `docker run` command again — your /data volume is reused +``` + +**Option B:** + ```bash docker compose -f docker/kit/docker-compose.yml pull docker compose -f docker/kit/docker-compose.yml up -d @@ -175,33 +258,55 @@ docker compose -f docker/kit/docker-compose.yml up -d Any required database updates run automatically at startup. +> [!WARNING] +> In bundled mode, a major upgrade of the built-in database cannot be applied to +> data already on disk. Upgrades that change it are announced in the release +> notes, and the safe path is to export what you need before upgrading. This is +> one of the reasons the kit isn't meant for production — see +> [Production Setup](./production). + --- ## Troubleshooting -**Container exits immediately** -Check the logs: `docker compose -f docker/kit/docker-compose.yml logs fluxify`. -The most common cause is a bad `PG_URL` or a `NATS_TOKEN` that doesn't match the -one passed to the NATS container. +**Container exits immediately, log says an admin email or password is required** +The first administrator account can only come from `SEED_USER_EMAIL` and +`SEED_USER_PASSWORD`. Set both (password 8+ characters) and start it again. + +**Container exits immediately, other causes** +Check the logs: `docker logs fluxify` (Option A) or +`docker compose -f docker/kit/docker-compose.yml logs fluxify` (Option B). In +Option B the usual cause is a bad `PG_URL`, or a `NATS_TOKEN` that doesn't match +the one given to the event bus container. + +**The container stops when one part of it fails** +That's deliberate. If any internal service dies, the whole container exits so +your restart policy brings it back, instead of leaving it running and quietly +broken. The log line naming the failed service is the last one printed. **Can't log in after first run** -The seed admin is created only on the very first boot. Confirm `SEED_USER_EMAIL` -and `SEED_USER_PASSWORD` were set **before** the stack started. +The seed admin is created only on the very first boot, against an empty +database. If you changed the values afterwards, they had no effect — reset the +password from the dashboard, or start over with a fresh volume. + +**Everything was working, then a restart lost all my projects** +You most likely ran without `-v fluxify_data:/data`. Data lives in that volume; +without it, removing the container discards everything. **Port 8080 already in use** -Change the host side of the mapping in the compose file (for example -`"9090:8080"`) and update `BETTER_AUTH_URL` to match. +Map a different host port and update `SERVER_URL`, `BETTER_AUTH_URL`, and +`TRUSTED_ORIGINS` to match. See [Changing the port](#bundled). **Requests to `/` return 502 Bad Gateway** The request worker isn't running. Almost always this means `WORKER_PROJECT_ID` -is empty — see [Step 4](#worker). Check with -`docker compose -f docker/kit/docker-compose.yml logs fluxify | grep WORKER_PROJECT_ID`. - -**Routes save fine but never go live** -NATS needs JetStream enabled. The bundled compose file starts it with `-js` -already; if you swapped in your own NATS, add that flag. +is empty — see [Turning on the request worker](#worker). Confirm with +`docker logs fluxify | grep WORKER_PROJECT_ID`. **Requests to `/` return 404 Route not found** -The worker is running but hasn't been given that route. Confirm the route is -marked active and belongs to the project in `WORKER_PROJECT_ID`, then save it -again to trigger a fresh publish. +The worker is running but doesn't have that route. Confirm the route is marked +active and belongs to the project in `WORKER_PROJECT_ID`, then save it again to +publish it. + +**Routes save fine but never go live** +The event bus needs JetStream enabled. The bundled copy and the supplied compose +file both do this already; if you swapped in your own, start it with `-js`. From ab8e8df84bf9f0baa686ed3b69e33c120071f591 Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Sat, 15 Aug 2026 00:34:55 +0100 Subject: [PATCH 4/5] refactor(portal): drop the editor page, open routes on the canvas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two flow editors existed for the same job. The canvas is the real one — block picker, playground, route switcher, settings modal — while the editor page was a thinner duplicate whose non-editor tabs were still "coming soon". Every entry point now goes to the canvas: the Open button on the routes list, the redirect after creating a route, the AI resource chip, and the "Go to route" link on an applied artifact. That last one had a `target` prop to pick between the two destinations; with one destination left it is dead flexibility, so it is gone rather than pinned to a constant. components/editor went with the page — nothing else imported it, the canvas has its own block catalog. Co-Authored-By: Claude Opus 5 --- .../portal/src/components/ai/ResourceChip.tsx | 2 +- .../src/components/ai/artifacts/ApplyBar.tsx | 16 +- .../ai/artifacts/CanvasArtifact.tsx | 1 - .../src/components/editor/BlockPalette.tsx | 65 ---- .../components/editor/GenericBlockNode.tsx | 69 ---- .../src/components/editor/blockCatalog.ts | 60 ---- .../components/editor/blocks/BaseBlock.tsx | 63 ---- .../components/editor/blocks/BlockHandle.tsx | 39 --- .../src/components/editor/blocks/nodes.tsx | 116 ------- .../src/routes/_authed/$projectId/routes.tsx | 2 +- .../routes/_authed/$projectId/routes_.new.tsx | 2 +- .../_authed/$projectId_.editor.$routeId.tsx | 310 ------------------ 12 files changed, 6 insertions(+), 739 deletions(-) delete mode 100644 apps/portal/src/components/editor/BlockPalette.tsx delete mode 100644 apps/portal/src/components/editor/GenericBlockNode.tsx delete mode 100644 apps/portal/src/components/editor/blockCatalog.ts delete mode 100644 apps/portal/src/components/editor/blocks/BaseBlock.tsx delete mode 100644 apps/portal/src/components/editor/blocks/BlockHandle.tsx delete mode 100644 apps/portal/src/components/editor/blocks/nodes.tsx delete mode 100644 apps/portal/src/routes/_authed/$projectId_.editor.$routeId.tsx diff --git a/apps/portal/src/components/ai/ResourceChip.tsx b/apps/portal/src/components/ai/ResourceChip.tsx index 137c67b7..292f5b5a 100644 --- a/apps/portal/src/components/ai/ResourceChip.tsx +++ b/apps/portal/src/components/ai/ResourceChip.tsx @@ -57,7 +57,7 @@ export function ResourceChip({ type, identifier, name, data }: ResourceChipProps let targetUrl = ""; if (projectId) { if (type === "route") { - targetUrl = `/${projectId}/editor/${identifier}`; + targetUrl = `/${projectId}/canvas/${identifier}`; } else if (type === "integration") { targetUrl = `/${projectId}/integrations?group=ai&open=${identifier}`; } else if (type === "app_config") { diff --git a/apps/portal/src/components/ai/artifacts/ApplyBar.tsx b/apps/portal/src/components/ai/artifacts/ApplyBar.tsx index f460ecd1..20f604eb 100644 --- a/apps/portal/src/components/ai/artifacts/ApplyBar.tsx +++ b/apps/portal/src/components/ai/artifacts/ApplyBar.tsx @@ -11,11 +11,9 @@ import { useArtifactParams } from "./useArtifact"; function Applied({ appliedAt, routeId, - target, }: { appliedAt: string | Date; routeId?: string; - target: "editor" | "canvas"; }) { const { projectId } = useArtifactParams(); return ( @@ -23,11 +21,7 @@ function Applied({ {routeId && ( - -
- - - - -
-
- {groups.map((g) => ( -
-
- {g.group} -
- {g.blocks.map((b) => ( - - ))} -
- ))} - {groups.length === 0 && ( -

No blocks match.

- )} -
- - ); -} diff --git a/apps/portal/src/components/editor/GenericBlockNode.tsx b/apps/portal/src/components/editor/GenericBlockNode.tsx deleted file mode 100644 index ef140d68..00000000 --- a/apps/portal/src/components/editor/GenericBlockNode.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Handle, Position } from "@xyflow/react"; - -export type GenericNodeData = { - label?: string; - name?: string; - targets?: string[]; - sources?: string[]; -}; - -// ponytail: Stage 2 node — generic visual, but renders the exact handle IDs its -// edges reference (derived in the editor route) so connections draw correctly -// for any block type. Stage 3 swaps in per-type icons/UIs. -export function GenericBlockNode({ - data, - type, - selected, -}: { - data?: GenericNodeData; - type?: string; - selected?: boolean; -}) { - const targets = data?.targets ?? []; - const sources = data?.sources ?? []; - - return ( -
- {targets.length === 0 ? ( - - ) : ( - targets.map((id, i) => ( - - )) - )} - -
- {type} -
-
- {data?.label ?? data?.name ?? type ?? "Block"} -
- - {sources.length === 0 ? ( - - ) : ( - sources.map((id, i) => ( - - )) - )} -
- ); -} diff --git a/apps/portal/src/components/editor/blockCatalog.ts b/apps/portal/src/components/editor/blockCatalog.ts deleted file mode 100644 index 2a203051..00000000 --- a/apps/portal/src/components/editor/blockCatalog.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { BlockTypes } from "@/types/block"; - -export type CatalogEntry = { type: string; label: string }; -export type CatalogGroup = { group: string; blocks: CatalogEntry[] }; - -// Addable blocks grouped by category (mirrors the web block palette). -export const BLOCK_CATALOG: CatalogGroup[] = [ - { - group: "Core", - blocks: [ - { type: BlockTypes.response, label: "Response" }, - { type: BlockTypes.errorHandler, label: "Error Handler" }, - { type: BlockTypes.setvar, label: "Set Variable" }, - { type: BlockTypes.getvar, label: "Get Variable" }, - { type: BlockTypes.transformer, label: "Transformer" }, - { type: BlockTypes.jsrunner, label: "JS Runner" }, - { type: BlockTypes.arrayops, label: "Array Operations" }, - ], - }, - { - group: "Flow", - blocks: [ - { type: BlockTypes.if, label: "If" }, - { type: BlockTypes.forloop, label: "For Loop" }, - { type: BlockTypes.foreachloop, label: "Foreach Loop" }, - ], - }, - { - group: "Database", - blocks: [ - { type: BlockTypes.db_getsingle, label: "Get Single Record" }, - { type: BlockTypes.db_getall, label: "Get All Records" }, - { type: BlockTypes.db_insert, label: "Insert New Record" }, - { type: BlockTypes.db_insertbulk, label: "Insert Bulk Record" }, - { type: BlockTypes.db_update, label: "Update Record(s)" }, - { type: BlockTypes.db_delete, label: "Delete Record(s)" }, - { type: BlockTypes.db_transaction, label: "Database Transaction" }, - { type: BlockTypes.db_native, label: "Native Database" }, - ], - }, - { - group: "HTTP", - blocks: [ - { type: BlockTypes.httprequest, label: "Http Request" }, - { type: BlockTypes.httpgetcookie, label: "Get Cookie" }, - { type: BlockTypes.httpsetcookie, label: "Set Cookie" }, - { type: BlockTypes.httpgetheader, label: "Get Header" }, - { type: BlockTypes.httpsetheader, label: "Set Header" }, - { type: BlockTypes.httpgetparam, label: "Get Param" }, - { type: BlockTypes.httpgetrequestbody, label: "Get Request Body" }, - ], - }, - { - group: "Logging", - blocks: [ - { type: BlockTypes.consolelog, label: "Console" }, - { type: BlockTypes.cloudLogs, label: "Cloud Log store" }, - ], - }, -]; diff --git a/apps/portal/src/components/editor/blocks/BaseBlock.tsx b/apps/portal/src/components/editor/blocks/BaseBlock.tsx deleted file mode 100644 index 8bf1a43d..00000000 --- a/apps/portal/src/components/editor/blocks/BaseBlock.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import type { ReactNode } from "react"; -import { cn } from "@fluxify/components"; - -type Props = { - blockId: string; - blockName: string; - icon?: ReactNode; - children?: ReactNode; // handles - selected?: boolean; - labelPlacement?: "top" | "bottom" | "left" | "right"; - topLeftRounded?: boolean; - topRightRounded?: boolean; - bottomLeftRounded?: boolean; - bottomRightRounded?: boolean; - color?: string; -}; - -// HeroUI/Tailwind port of the web BaseBlock: compact icon card with a label and -// per-corner rounding (entrypoint = rounded top, response = rounded bottom). -export function BaseBlock({ - blockName, - icon, - children, - selected, - labelPlacement = "top", - topLeftRounded, - topRightRounded, - bottomLeftRounded, - bottomRightRounded, - color, -}: Props) { - return ( -
- {icon} - {children} - - {blockName} - -
- ); -} diff --git a/apps/portal/src/components/editor/blocks/BlockHandle.tsx b/apps/portal/src/components/editor/blocks/BlockHandle.tsx deleted file mode 100644 index 66379d43..00000000 --- a/apps/portal/src/components/editor/blocks/BlockHandle.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Handle, Position, useNodeConnections } from "@xyflow/react"; -import type React from "react"; - -type Props = { - style?: React.CSSProperties; - position?: Position; - blockId: string; - type: "source" | "target"; - handleVariant?: string; - color?: string; -}; - -// Ported verbatim from web: handle id is `${blockId}-${variant ?? type}`, which -// is exactly what the saved edges reference. -export function BlockHandle(props: Props) { - const handleId = `${props.blockId}-${props.handleVariant ?? props.type}`; - const isVertical = - props.position === Position.Top || props.position === Position.Bottom; - const isTarget = props.type === "target"; - const width = isVertical ? "15px" : "6px"; - const height = isVertical ? "6px" : "15px"; - const connection = useNodeConnections({ handleId, handleType: props.type }); - - return ( - - ); -} diff --git a/apps/portal/src/components/editor/blocks/nodes.tsx b/apps/portal/src/components/editor/blocks/nodes.tsx deleted file mode 100644 index 749ae075..00000000 --- a/apps/portal/src/components/editor/blocks/nodes.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import type { ReactNode } from "react"; -import { type NodeProps, Position } from "@xyflow/react"; -import { TbWorldCode, TbDoorExit, TbInfinity, TbTransform, TbCodeVariablePlus, TbMatrix, TbCookie, TbDatabaseX, TbDatabaseSearch, TbDatabasePlus, TbDatabaseEdit, TbDatabaseImport, TbTerminal2, TbCloud } from "react-icons/tb"; -import { MdOutlineReportGmailerrorred, MdHttp, MdDataObject } from "react-icons/md"; -import { FaMapSigns, FaHeading } from "react-icons/fa"; -import { IoLogoJavascript } from "react-icons/io"; -import { VscSymbolParameter } from "react-icons/vsc"; -import { LuDatabaseZap } from "react-icons/lu"; -import { BlockTypes } from "@/types/block"; -import { BaseBlock } from "./BaseBlock"; -import { BlockHandle } from "./BlockHandle"; - -const GREEN = "#40c057"; -const VIOLET = "#7c5cff"; -const RED = "#e5484d"; - -type Label = "top" | "bottom" | "left" | "right"; -type HandleCfg = { - type: "source" | "target"; - position: Position; - variant?: string; - color?: string; -}; -type Shape = { - topLeftRounded?: boolean; - topRightRounded?: boolean; - bottomLeftRounded?: boolean; - bottomRightRounded?: boolean; -}; - -// Standard block: one target on top, one source on bottom. -const STD: HandleCfg[] = [ - { type: "target", position: Position.Top }, - { type: "source", position: Position.Bottom }, -]; - -function node( - name: string, - icon: ReactNode, - label: Label, - handles: HandleCfg[] = STD, - shape: Shape = {}, -) { - return function Node(props: NodeProps) { - return ( - - {handles.map((h) => ( - - ))} - - ); - }; -} - -const sz = 18; - -export const blocksList: Record ReactNode> = { - [BlockTypes.entrypoint]: node("Entrypoint", , "top", [{ type: "source", position: Position.Bottom }], { topLeftRounded: true, topRightRounded: true }), - [BlockTypes.response]: node("Response", , "bottom", [{ type: "target", position: Position.Top }], { bottomLeftRounded: true, bottomRightRounded: true }), - [BlockTypes.errorHandler]: node("Error Handler", , "top", [{ type: "source", position: Position.Bottom, color: RED }]), - [BlockTypes.if]: node("If", , "bottom", [ - { type: "target", position: Position.Top }, - { type: "source", position: Position.Left, variant: "success", color: GREEN }, - { type: "source", position: Position.Right, variant: "failure", color: RED }, - ]), - [BlockTypes.forloop]: node("For", , "left", [ - { type: "target", position: Position.Top }, - { type: "source", position: Position.Bottom }, - { type: "source", position: Position.Right, variant: "executor", color: GREEN }, - ]), - [BlockTypes.foreachloop]: node("Foreach", , "left", [ - { type: "target", position: Position.Top }, - { type: "source", position: Position.Bottom }, - { type: "source", position: Position.Right, variant: "executor", color: VIOLET }, - ]), - [BlockTypes.transformer]: node("Transformer", , "left"), - [BlockTypes.jsrunner]: node("JS Runner", , "left"), - [BlockTypes.setvar]: node("Set Variable", , "left"), - [BlockTypes.getvar]: node("Get Variable", , "left"), - [BlockTypes.arrayops]: node("Array Operations", , "left"), - [BlockTypes.httprequest]: node("Http Request", , "left"), - [BlockTypes.httpgetcookie]: node("Get Cookie", , "left"), - [BlockTypes.httpsetcookie]: node("Set Cookie", , "left"), - [BlockTypes.httpgetheader]: node("Get Header", , "left"), - [BlockTypes.httpsetheader]: node("Set Header", , "left"), - [BlockTypes.httpgetparam]: node("Get Param", , "left"), - [BlockTypes.httpgetrequestbody]: node("Get Request Body", , "left"), - [BlockTypes.db_getsingle]: node("Get Single Record", , "left"), - [BlockTypes.db_getall]: node("Get All Records", , "left"), - [BlockTypes.db_insert]: node("Insert New Record", , "left"), - [BlockTypes.db_insertbulk]: node("Insert Bulk Record", , "left"), - [BlockTypes.db_update]: node("Update Record(s)", , "left"), - [BlockTypes.db_delete]: node("Delete Record(s)", , "left"), - [BlockTypes.db_native]: node("Native Database", , "left"), - [BlockTypes.db_transaction]: node("Database Transaction", , "left", [ - { type: "target", position: Position.Top }, - { type: "source", position: Position.Bottom }, - { type: "source", position: Position.Right, variant: "executor", color: GREEN }, - ]), - [BlockTypes.consolelog]: node("Console", , "left"), - [BlockTypes.cloudLogs]: node("Cloud Log store", , "left"), -}; diff --git a/apps/portal/src/routes/_authed/$projectId/routes.tsx b/apps/portal/src/routes/_authed/$projectId/routes.tsx index f5a9367f..19b512f3 100644 --- a/apps/portal/src/routes/_authed/$projectId/routes.tsx +++ b/apps/portal/src/routes/_authed/$projectId/routes.tsx @@ -94,7 +94,7 @@ function RoutesPage() {
- + - {route?.name ?? "Editor"} - {route?.method && ( - - {route.method} {route.path} - - )} -
- -
- {TABS.map((t) => ( - - ))} -
- -
- {route && ( - - toggle.mutate( - { id: routeId, active }, - { - onSuccess: () => - toast.success(active ? "Route enabled" : "Route disabled"), - onError: (e) => showErrorNotification(e as Error), - }, - ) - } - > - {route.active ? "Active" : "Inactive"} - - )} - -
- - -
- {tab !== "editor" ? ( -
- {tab === "executions" ? "Executions" : "Testing"} panel — coming soon. -
- ) : canvas.isLoading ? ( -
- -
- ) : canvas.isError ? ( -
- Couldn't load the flow. -
- ) : ( - - setDirty(true)} - /> - - )} -
- - ); -} - -type FlowProps = { - nodes: Node[]; - edges: Edge[]; - onNodesChange: Parameters[0]["onNodesChange"]; - onEdgesChange: Parameters[0]["onEdgesChange"]; - setNodes: ReturnType>[1]; - setEdges: ReturnType>[1]; - markDirty: () => void; -}; - -function Flow({ nodes, edges, onNodesChange, onEdgesChange, setNodes, setEdges, markDirty }: FlowProps) { - const [paletteOpen, setPaletteOpen] = useState(false); - const { screenToFlowPosition } = useReactFlow(); - - function addBlock(type: string) { - const position = screenToFlowPosition({ - x: window.innerWidth / 2, - y: window.innerHeight / 2, - }); - setNodes((n) => [ - ...n, - { id: crypto.randomUUID(), type, position, data: { sources: [], targets: [] } }, - ]); - setPaletteOpen(false); - markDirty(); - toast.success("Block added"); - } - - function onConnect(conn: Connection) { - setEdges((e) => addEdge(conn, e)); - markDirty(); - } - - return ( - <> - { - onNodesChange?.(c); - if (c.some((ch) => ch.type !== "select" && ch.type !== "dimensions")) - markDirty(); - }} - onEdgesChange={(c) => { - onEdgesChange?.(c); - if (c.some((ch) => ch.type !== "select")) markDirty(); - }} - onConnect={onConnect} - nodeTypes={nodeTypes} - fitView - proOptions={{ hideAttribution: true }} - > - - - - - - - setPaletteOpen(false)} - onAdd={addBlock} - /> - - ); -} From 595167b64e6f3426167257fdd8e7cc26900ee3bd Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Sat, 15 Aug 2026 00:44:11 +0100 Subject: [PATCH 5/5] fix(portal): correct the sidebar and AI home logo paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both hardcoded /_/admin/ui/public/icons/logo.svg. Files under public/ are served from the bundle root, so the public/ segment resolves to nothing — and because the SPA fallback answers unknown paths with index.html, the request returned 200 with an HTML body instead of 404. The browser got markup where an image was expected and rendered nothing, which is why it looked like a routing fault. Uses BASE_URL like the login and projects pages already do, so the path stays correct if the base ever moves, and switches to webp (18KB). Co-Authored-By: Claude Opus 5 --- apps/portal/src/components/ai/AiHome.tsx | 2 +- apps/portal/src/routes/_authed/$projectId.tsx | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/portal/src/components/ai/AiHome.tsx b/apps/portal/src/components/ai/AiHome.tsx index da866dcb..c23214a4 100644 --- a/apps/portal/src/components/ai/AiHome.tsx +++ b/apps/portal/src/components/ai/AiHome.tsx @@ -10,7 +10,7 @@ import { PromptEditor } from "./PromptEditor"; import { STARTERS } from "./starters"; import { useAiModels } from "./useAiModels"; -const logo = `/_/admin/ui/public/icons/logo.svg`; +const logo = `${import.meta.env.BASE_URL}icons/logo.webp`; export function AiHome() { const { projectId } = useParams({ from: "/_authed/$projectId/ai/" }); diff --git a/apps/portal/src/routes/_authed/$projectId.tsx b/apps/portal/src/routes/_authed/$projectId.tsx index 48a63e8c..9410b125 100644 --- a/apps/portal/src/routes/_authed/$projectId.tsx +++ b/apps/portal/src/routes/_authed/$projectId.tsx @@ -23,6 +23,11 @@ import { authClient } from "@/lib/auth"; import { useAuthStore } from "@/store/auth"; import { createRouteHead } from "@/lib/seo"; +// BASE_URL, not a hardcoded path: files in public/ are served from the bundle +// root, so the literal "/_/admin/ui/public/..." resolved to nothing and the SPA +// fallback answered with index.html — an HTML body where an image was expected. +const logo = `${import.meta.env.BASE_URL}icons/logo.webp`; + const NAV = [ { key: "ai", label: "Fluxify AI", to: "/$projectId/ai", icon: TbSparkles }, { key: "routes", label: "Routes", to: "/$projectId/routes", icon: TbStack2 }, @@ -79,7 +84,7 @@ function ProjectLayout() { {/* Logo */}
- logo + logo
FLUXIFY