diff --git a/README.md b/README.md
index a03c6cd66..af3ef4ace 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,8 @@
Website •
Documentation •
Blog •
- Discord
+ Discord •
+ Roadmap
@@ -80,3 +81,4 @@ Nixopus is derived from the combination of "octopus" and the Linux penguin (Tux)
+
diff --git a/api/api/versions.json b/api/api/versions.json
index 0f1755677..bca329973 100644
--- a/api/api/versions.json
+++ b/api/api/versions.json
@@ -3,7 +3,7 @@
{
"version": "v1",
"status": "active",
- "release_date": "2025-09-11T20:17:18.854289411+05:30",
+ "release_date": "2025-09-18T09:02:53.080017+05:30",
"end_of_life": "0001-01-01T00:00:00Z",
"changes": [
"Initial API version"
diff --git a/api/internal/features/deploy/tasks/create.go b/api/internal/features/deploy/tasks/create.go
index f194e9317..8984bf21a 100644
--- a/api/internal/features/deploy/tasks/create.go
+++ b/api/internal/features/deploy/tasks/create.go
@@ -7,6 +7,7 @@ import (
"github.com/google/uuid"
"github.com/raghavyuva/caddygo"
+ "github.com/raghavyuva/nixopus-api/internal/config"
"github.com/raghavyuva/nixopus-api/internal/features/deploy/types"
shared_types "github.com/raghavyuva/nixopus-api/internal/types"
)
@@ -81,7 +82,9 @@ func (t *TaskService) HandleCreateDockerfileDeployment(ctx context.Context, Task
taskCtx.LogAndUpdateStatus("Failed to convert port to int: "+err.Error(), shared_types.Failed)
return err
}
- err = client.AddDomainWithAutoTLS(TaskPayload.Application.Domain, TaskPayload.Application.Domain, port, caddygo.DomainOptions{})
+ upstreamHost := config.AppConfig.SSH.Host
+
+ err = client.AddDomainWithAutoTLS(TaskPayload.Application.Domain, upstreamHost, port, caddygo.DomainOptions{})
if err != nil {
fmt.Println("Failed to add domain: ", err)
taskCtx.LogAndUpdateStatus("Failed to add domain: "+err.Error(), shared_types.Failed)
diff --git a/docker-compose.yml b/docker-compose.yml
index 1ea795f7a..e7d120eda 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -62,7 +62,7 @@ services:
nixopus-redis:
image: redis:7-alpine
- container_name: nixopus-redis-container
+ container_name: nixopus-redis
restart: unless-stopped
ports:
- "${REDIS_PORT:-6379}:6379"
diff --git a/helpers/config.dev.yaml b/helpers/config.dev.yaml
index c75278930..383f5d5bc 100644
--- a/helpers/config.dev.yaml
+++ b/helpers/config.dev.yaml
@@ -17,6 +17,7 @@ services:
SSH_PASSWORD: ${SSH_PASSWORD:-}
DOCKER_HOST: ${DOCKER_HOST:-unix:///var/run/docker.sock}
REDIS_URL: ${REDIS_URL:-redis://localhost:6379}
+ CADDY_ENDPOINT: ${CADDY_ENDPOINT:-http://127.0.0.1:2019}
ALLOWED_ORIGIN: ${ALLOWED_ORIGIN:-http://localhost:7443}
ENV: ${ENV:-development}
LOGS_PATH: ${LOGS_PATH:-./logs}
diff --git a/view/app/containers/components/table.tsx b/view/app/containers/components/table.tsx
index 0c1366e22..3bc70a721 100644
--- a/view/app/containers/components/table.tsx
+++ b/view/app/containers/components/table.tsx
@@ -83,10 +83,10 @@ const ContainersTable = ({
const hasPorts = container.ports && container.ports.length > 0;
const formattedDate = container.created
- ? new Intl.DateTimeFormat(undefined, { day: 'numeric', month: 'long' }).format(
- new Date(parseInt(container.created) * 1000)
- )
- : '-';
+ ? new Intl.DateTimeFormat('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).format(
+ new Date(parseInt(container.created) * 1000)
+ )
+ : '-';
return (
router.push(`/containers/${container.id}`)}
diff --git a/view/app/globals.css b/view/app/globals.css
index 87ebc30c0..494f7b620 100644
--- a/view/app/globals.css
+++ b/view/app/globals.css
@@ -523,3 +523,5 @@
scrollbar-width: none;
}
}
+
+
diff --git a/view/components/layout/app-sidebar.tsx b/view/components/layout/app-sidebar.tsx
index 7b631fec6..6c4dc37fb 100644
--- a/view/components/layout/app-sidebar.tsx
+++ b/view/components/layout/app-sidebar.tsx
@@ -151,7 +151,7 @@ export function AppSidebar({
}
return (
-
+
diff --git a/view/components/layout/nav-user.tsx b/view/components/layout/nav-user.tsx
index 26c74037d..af23f78eb 100644
--- a/view/components/layout/nav-user.tsx
+++ b/view/components/layout/nav-user.tsx
@@ -220,10 +220,6 @@ Add any other context about the problem here.`;
{t('user.menu.help')}
-
-
- {t('user.menu.reportIssue')}
-
@@ -232,6 +228,20 @@ Add any other context about the problem here.`;
+
+ {/* Bottom-aligned actions */}
+
+
+ {t('user.menu.sponsor')}
+
+
+
+ {t('user.menu.help')}
+
+
+
+ {t('user.menu.reportIssue')}
+
);
}
diff --git a/view/components/ui/password-input-field.tsx b/view/components/ui/password-input-field.tsx
index 7a17b842d..b4b5badb7 100644
--- a/view/components/ui/password-input-field.tsx
+++ b/view/components/ui/password-input-field.tsx
@@ -9,17 +9,17 @@ export interface PasswordInputFieldProps extends React.ComponentProps<'input'> {
}
const PasswordInputField = React.forwardRef(
- function PasswordInputField({ className, containerClassName, ...props }, ref) {
+ function PasswordInputField({ className, containerClassName, autoComplete, ...props }, ref) {
const [showPassword, setShowPassword] = React.useState(false);
return (