diff --git a/.github/workflows/buid.yaml b/.github/workflows/buid.yaml
new file mode 100644
index 0000000..22345c7
--- /dev/null
+++ b/.github/workflows/buid.yaml
@@ -0,0 +1,44 @@
+name: Build and publish
+run-name: Build and publish
+
+on:
+ push:
+
+jobs:
+ container:
+ name: Build Container
+ runs-on: ubuntu-latest
+ container: docker
+ steps:
+ - name: Build Container
+ run: |
+ git clone -b "${{github.ref_name}}" "$(echo ${{github.server_url}}/${{github.repository}}.git | sed s%://%://${{github.token}}@% )" .
+ DOCKER_HUB=$([ -n "${{secrets.DOCKER_HUB_USER}}" ] && [ -n "${{secrets.DOCKER_HUB_TOKEN}}" ] && [ -n "${{secrets.DOCKER_HUB_IMAGE}}" ] && echo "true" || echo "false")
+ REGISTRY="$(echo "${{github.server_url}}" | sed -E 's|https?://||')"
+ VERSION=$(cat package.json | grep version | grep -Eo '[0-9][[:alnum:]\.\/\-]+')
+
+ docker login -u "${{github.repository_owner}}" -p "${{secrets.DEPLOY_TOKEN}}" "$REGISTRY"
+ if [ "$DOCKER_HUB" = "true" ]; then docker login -u "${{secrets.DOCKER_HUB_USER}}" -p "${{secrets.DOCKER_HUB_TOKEN}}" docker.io; fi
+
+ docker build -t "$REGISTRY/${{github.repository}}:${{github.ref_name}}" .
+ docker push "$REGISTRY/${{github.repository}}:${{github.ref_name}}"
+ if [ "$DOCKER_HUB" = "true" ]; then
+ docker tag "$REGISTRY/${{github.repository}}:${{github.ref_name}}" "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:${{github.ref_name}}"
+ docker push "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:${{github.ref_name}}"
+ fi
+
+ if [ "${{github.ref_name}}" = "master" ]; then
+ docker tag "$REGISTRY/${{github.repository}}:${{github.ref_name}}" "$REGISTRY/${{github.repository}}:$VERSION"
+ docker push "$REGISTRY/${{github.repository}}:$VERSION"
+ if [ "$DOCKER_HUB" = "true" ]; then
+ docker tag "$REGISTRY/${{github.repository}}:${{github.ref_name}}" "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:$VERSION"
+ docker push "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:$VERSION"
+ fi
+
+ docker tag "$REGISTRY/${{github.repository}}:${{github.ref_name}}" "$REGISTRY/${{github.repository}}:latest"
+ docker push "$REGISTRY/${{github.repository}}:latest"
+ if [ "$DOCKER_HUB" = "true" ]; then
+ docker tag "$REGISTRY/${{github.repository}}:${{github.ref_name}}" "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:latest"
+ docker push "docker.io/${{secrets.DOCKER_HUB_IMAGE}}:latest"
+ fi
+ fi
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..40de804
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# IDEs
+.idea
+.proxyai
+.vscode
+
+# Artifacts
+**/dist
+**/node_modules
+coverage
+navi/*.json
+
+# Logs
+*.log
+*.tsbuildinfo
+
+# Databases
+*.db
+*.db3
+*.sqlite
+*.sqlite3
+dump
+
+# Environment files
+*.local
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..9adf1a0
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,11 @@
+
+FROM node:22-alpine
+
+ENV PORT=80
+
+WORKDIR /app
+
+COPY . .
+RUN npm ci
+
+CMD ["npm", "run", "start"]
diff --git a/README.md b/README.md
index 62d4043..849ad86 100644
--- a/README.md
+++ b/README.md
@@ -3,36 +3,35 @@
-
+
- ### Template
+ ### Net Navi
- Simple repository template
+ Your personal AI assistant
- [](https://git.zakscode.com/ztimson/template/tags)
- [](https://git.zakscode.com/ztimson/template/pulls)
- [](https://git.zakscode.com/ztimson/template/issues)
+ [](https://git.zakscode.com/ztimson/navi/tags)
+ [](https://git.zakscode.com/ztimson/navi/pulls)
+ [](https://git.zakscode.com/ztimson/navi/issues)
---