diff --git a/apps/ainas-controlplane/appinfo/info.xml b/apps/betternascontrolplane/appinfo/info.xml similarity index 67% rename from apps/ainas-controlplane/appinfo/info.xml rename to apps/betternascontrolplane/appinfo/info.xml index 5d459ca..7753e20 100644 --- a/apps/ainas-controlplane/appinfo/info.xml +++ b/apps/betternascontrolplane/appinfo/info.xml @@ -1,30 +1,30 @@ - ainascontrolplane + betternascontrolplane betterNAS Control Plane Thin betterNAS shell app for Nextcloud integration Provides betterNAS-branded entry points inside Nextcloud while delegating business logic to the betterNAS control plane. 0.1.0 AGPL-3.0-or-later - betterNAS - AinasControlplane + betterNAS + BetterNasControlplane integration - ainascontrolplane + betternascontrolplane betterNAS - ainascontrolplane.page.index + betternascontrolplane.page.index app.svg link - OCA\AinasControlplane\Settings\Admin - OCA\AinasControlplane\Settings\AdminSection + OCA\BetterNasControlplane\Settings\Admin + OCA\BetterNasControlplane\Settings\AdminSection diff --git a/apps/ainas-controlplane/composer.json b/apps/betternascontrolplane/composer.json similarity index 71% rename from apps/ainas-controlplane/composer.json rename to apps/betternascontrolplane/composer.json index 54e49f8..20a25ab 100644 --- a/apps/ainas-controlplane/composer.json +++ b/apps/betternascontrolplane/composer.json @@ -1,10 +1,10 @@ { - "name": "ainas/ainascontrolplane", + "name": "betternas/betternascontrolplane", "description": "betterNAS Nextcloud shell app", "license": "AGPL-3.0-or-later", "autoload": { "psr-4": { - "OCA\\AinasControlplane\\": "lib/" + "OCA\\BetterNasControlplane\\": "lib/" } }, "require": { diff --git a/apps/ainas-controlplane/css/ainascontrolplane.css b/apps/betternascontrolplane/css/betternascontrolplane.css similarity index 73% rename from apps/ainas-controlplane/css/ainascontrolplane.css rename to apps/betternascontrolplane/css/betternascontrolplane.css index d5aec9e..e4b2840 100644 --- a/apps/ainas-controlplane/css/ainascontrolplane.css +++ b/apps/betternascontrolplane/css/betternascontrolplane.css @@ -1,10 +1,10 @@ -.ainas-shell { +.betternas-shell { max-width: 1100px; margin: 0 auto; padding: 32px; } -.ainas-shell__hero { +.betternas-shell__hero { margin-bottom: 28px; padding: 28px; border-radius: 24px; @@ -12,7 +12,7 @@ color: #f6fafc; } -.ainas-shell__eyebrow { +.betternas-shell__eyebrow { margin: 0 0 12px; font-size: 12px; letter-spacing: 0.12em; @@ -20,26 +20,26 @@ opacity: 0.8; } -.ainas-shell__title { +.betternas-shell__title { margin: 0 0 12px; font-size: 32px; line-height: 1.1; } -.ainas-shell__copy { +.betternas-shell__copy { margin: 0; max-width: 70ch; font-size: 15px; line-height: 1.6; } -.ainas-shell__grid { +.betternas-shell__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; } -.ainas-shell__card { +.betternas-shell__card { padding: 24px; border: 1px solid rgba(16, 33, 45, 0.12); border-radius: 20px; @@ -47,38 +47,38 @@ box-shadow: 0 20px 40px rgba(16, 33, 45, 0.06); } -.ainas-shell__card h2 { +.betternas-shell__card h2 { margin-top: 0; } -.ainas-shell__card dl { +.betternas-shell__card dl { display: grid; grid-template-columns: minmax(120px, 160px) 1fr; gap: 8px 16px; margin: 0; } -.ainas-shell__card dt { +.betternas-shell__card dt { font-weight: 600; } -.ainas-shell__card dd { +.betternas-shell__card dd { margin: 0; } -.ainas-shell__card code { +.betternas-shell__card code { display: inline-block; padding: 4px 8px; border-radius: 999px; background: #eef4f7; } -.ainas-shell__card ul { +.betternas-shell__card ul { margin: 0; padding-left: 20px; } -.ainas-shell__error { +.betternas-shell__error { margin-top: 16px; color: #b42318; } diff --git a/apps/ainas-controlplane/img/app-dark.svg b/apps/betternascontrolplane/img/app-dark.svg similarity index 100% rename from apps/ainas-controlplane/img/app-dark.svg rename to apps/betternascontrolplane/img/app-dark.svg diff --git a/apps/ainas-controlplane/img/app.svg b/apps/betternascontrolplane/img/app.svg similarity index 100% rename from apps/ainas-controlplane/img/app.svg rename to apps/betternascontrolplane/img/app.svg diff --git a/apps/ainas-controlplane/lib/AppInfo/Application.php b/apps/betternascontrolplane/lib/AppInfo/Application.php similarity index 83% rename from apps/ainas-controlplane/lib/AppInfo/Application.php rename to apps/betternascontrolplane/lib/AppInfo/Application.php index 6a6dbd2..90167f5 100644 --- a/apps/ainas-controlplane/lib/AppInfo/Application.php +++ b/apps/betternascontrolplane/lib/AppInfo/Application.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\AppInfo; +namespace OCA\BetterNasControlplane\AppInfo; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; @@ -10,7 +10,7 @@ use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; class Application extends App implements IBootstrap { - public const APP_ID = 'ainascontrolplane'; + public const APP_ID = 'betternascontrolplane'; public function __construct() { parent::__construct(self::APP_ID); diff --git a/apps/ainas-controlplane/lib/Controller/ApiController.php b/apps/betternascontrolplane/lib/Controller/ApiController.php similarity index 80% rename from apps/ainas-controlplane/lib/Controller/ApiController.php rename to apps/betternascontrolplane/lib/Controller/ApiController.php index 78e52d9..528ae03 100644 --- a/apps/ainas-controlplane/lib/Controller/ApiController.php +++ b/apps/betternascontrolplane/lib/Controller/ApiController.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Controller; +namespace OCA\BetterNasControlplane\Controller; -use OCA\AinasControlplane\AppInfo\Application; -use OCA\AinasControlplane\Service\ControlPlaneClient; +use OCA\BetterNasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\Service\ControlPlaneClient; use OCP\AppFramework\Http\Attribute\ApiRoute; use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\DataResponse; diff --git a/apps/ainas-controlplane/lib/Controller/PageController.php b/apps/betternascontrolplane/lib/Controller/PageController.php similarity index 82% rename from apps/ainas-controlplane/lib/Controller/PageController.php rename to apps/betternascontrolplane/lib/Controller/PageController.php index f7f7b8d..f88c076 100644 --- a/apps/ainas-controlplane/lib/Controller/PageController.php +++ b/apps/betternascontrolplane/lib/Controller/PageController.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Controller; +namespace OCA\BetterNasControlplane\Controller; -use OCA\AinasControlplane\AppInfo\Application; -use OCA\AinasControlplane\Service\ControlPlaneClient; -use OCA\AinasControlplane\Service\ControlPlaneConfig; +use OCA\BetterNasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\Service\ControlPlaneClient; +use OCA\BetterNasControlplane\Service\ControlPlaneConfig; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\Attribute\FrontpageRoute; use OCP\AppFramework\Http\Attribute\NoAdminRequired; diff --git a/apps/ainas-controlplane/lib/Service/ControlPlaneClient.php b/apps/betternascontrolplane/lib/Service/ControlPlaneClient.php similarity index 97% rename from apps/ainas-controlplane/lib/Service/ControlPlaneClient.php rename to apps/betternascontrolplane/lib/Service/ControlPlaneClient.php index e60ca22..81fa93d 100644 --- a/apps/ainas-controlplane/lib/Service/ControlPlaneClient.php +++ b/apps/betternascontrolplane/lib/Service/ControlPlaneClient.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Service; +namespace OCA\BetterNasControlplane\Service; use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; diff --git a/apps/ainas-controlplane/lib/Service/ControlPlaneConfig.php b/apps/betternascontrolplane/lib/Service/ControlPlaneConfig.php similarity index 76% rename from apps/ainas-controlplane/lib/Service/ControlPlaneConfig.php rename to apps/betternascontrolplane/lib/Service/ControlPlaneConfig.php index 0b443d0..f167152 100644 --- a/apps/ainas-controlplane/lib/Service/ControlPlaneConfig.php +++ b/apps/betternascontrolplane/lib/Service/ControlPlaneConfig.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Service; +namespace OCA\BetterNasControlplane\Service; -use OCA\AinasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\AppInfo\Application; use OCP\IAppConfig; class ControlPlaneConfig { @@ -14,7 +14,7 @@ class ControlPlaneConfig { } public function getBaseUrl(): string { - $environmentUrl = getenv('AINAS_CONTROL_PLANE_URL'); + $environmentUrl = getenv('BETTERNAS_CONTROL_PLANE_URL'); if (is_string($environmentUrl) && $environmentUrl !== '') { return rtrim($environmentUrl, '/'); } diff --git a/apps/ainas-controlplane/lib/Settings/Admin.php b/apps/betternascontrolplane/lib/Settings/Admin.php similarity index 76% rename from apps/ainas-controlplane/lib/Settings/Admin.php rename to apps/betternascontrolplane/lib/Settings/Admin.php index 927bfb4..e900e4e 100644 --- a/apps/ainas-controlplane/lib/Settings/Admin.php +++ b/apps/betternascontrolplane/lib/Settings/Admin.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Settings; +namespace OCA\BetterNasControlplane\Settings; -use OCA\AinasControlplane\AppInfo\Application; -use OCA\AinasControlplane\Service\ControlPlaneClient; -use OCA\AinasControlplane\Service\ControlPlaneConfig; +use OCA\BetterNasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\Service\ControlPlaneClient; +use OCA\BetterNasControlplane\Service\ControlPlaneConfig; use OCP\AppFramework\Http\TemplateResponse; use OCP\Settings\ISettings; diff --git a/apps/ainas-controlplane/lib/Settings/AdminSection.php b/apps/betternascontrolplane/lib/Settings/AdminSection.php similarity index 85% rename from apps/ainas-controlplane/lib/Settings/AdminSection.php rename to apps/betternascontrolplane/lib/Settings/AdminSection.php index 2b2346f..5a3ab0b 100644 --- a/apps/ainas-controlplane/lib/Settings/AdminSection.php +++ b/apps/betternascontrolplane/lib/Settings/AdminSection.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace OCA\AinasControlplane\Settings; +namespace OCA\BetterNasControlplane\Settings; -use OCA\AinasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\AppInfo\Application; use OCP\IL10N; use OCP\IURLGenerator; use OCP\Settings\IIconSection; diff --git a/apps/ainas-controlplane/templates/admin.php b/apps/betternascontrolplane/templates/admin.php similarity index 56% rename from apps/ainas-controlplane/templates/admin.php rename to apps/betternascontrolplane/templates/admin.php index 465542a..57f4395 100644 --- a/apps/ainas-controlplane/templates/admin.php +++ b/apps/betternascontrolplane/templates/admin.php @@ -2,27 +2,27 @@ declare(strict_types=1); -use OCA\AinasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\AppInfo\Application; use OCP\Util; -Util::addStyle(Application::APP_ID, 'ainascontrolplane'); +Util::addStyle(Application::APP_ID, 'betternascontrolplane'); $snapshot = $_['snapshot']; $reachable = !empty($snapshot['available']) ? 'yes' : 'no'; $version = $snapshot['version']['version'] ?? 'unreachable'; ?> -
-
-

Admin settings

-

betterNAS control-plane wiring

-

- The local scaffold wires this app to the control plane through the AINAS_CONTROL_PLANE_URL environment variable in the Nextcloud container. +

+
+

Admin settings

+

betterNAS control-plane wiring

+

+ The local scaffold wires this app to the control plane through the BETTERNAS_CONTROL_PLANE_URL environment variable in the Nextcloud container.

-
-
+
+

Current wiring

Control-plane URL
@@ -34,7 +34,7 @@ $version = $snapshot['version']['version'] ?? 'unreachable';
-
+

Next step

Keep storage policy, sharing logic, and orchestration in the control-plane service. This page should remain a thin integration surface.

diff --git a/apps/ainas-controlplane/templates/index.php b/apps/betternascontrolplane/templates/index.php similarity index 64% rename from apps/ainas-controlplane/templates/index.php rename to apps/betternascontrolplane/templates/index.php index 17f5a19..f27317e 100644 --- a/apps/ainas-controlplane/templates/index.php +++ b/apps/betternascontrolplane/templates/index.php @@ -2,10 +2,10 @@ declare(strict_types=1); -use OCA\AinasControlplane\AppInfo\Application; +use OCA\BetterNasControlplane\AppInfo\Application; use OCP\Util; -Util::addStyle(Application::APP_ID, 'ainascontrolplane'); +Util::addStyle(Application::APP_ID, 'betternascontrolplane'); $snapshot = $_['snapshot']; $version = $snapshot['version']['version'] ?? 'unreachable'; @@ -13,17 +13,17 @@ $status = !empty($snapshot['available']) ? 'Connected' : 'Unavailable'; $error = $snapshot['error'] ?? null; ?> -
-
-

betterNAS inside Nextcloud

-

-

+

+
+

betterNAS inside Nextcloud

+

+

This shell app stays intentionally thin. It exposes betterNAS entry points inside Nextcloud and delegates business logic to the external control-plane service.

-
-
+
+

Control plane

Configured URL
@@ -34,11 +34,11 @@ $error = $snapshot['error'] ?? null;
-

+

-
+

Boundary

  • Nextcloud provides file and client primitives.
  • diff --git a/docker/compose.dev.yml b/docker/compose.dev.yml index fd21281..12ed203 100644 --- a/docker/compose.dev.yml +++ b/docker/compose.dev.yml @@ -30,7 +30,7 @@ services: dockerfile: exapps/control-plane/Dockerfile environment: PORT: 3000 - AINAS_VERSION: local-dev + BETTERNAS_VERSION: local-dev NEXTCLOUD_BASE_URL: http://nextcloud ports: - "3001:3000" @@ -61,7 +61,7 @@ services: REDIS_HOST: redis NEXTCLOUD_ADMIN_USER: admin NEXTCLOUD_ADMIN_PASSWORD: admin - AINAS_CONTROL_PLANE_URL: http://control-plane:3000 + BETTERNAS_CONTROL_PLANE_URL: http://control-plane:3000 ports: - "8080:80" volumes: diff --git a/docs/architecture.md b/docs/architecture.md index 56e0ec9..5171619 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -6,7 +6,7 @@ betterNAS treats Nextcloud as an upstream backend, not as the place where better That leads to three explicit boundaries: -1. `apps/ainas-controlplane/` is a thin shell inside Nextcloud. +1. `apps/betternascontrolplane/` is a thin shell inside Nextcloud. 2. `exapps/control-plane/` owns betterNAS business logic and internal APIs. 3. `packages/contracts/` defines the interface between the shell app and the control plane. diff --git a/exapps/control-plane/package.json b/exapps/control-plane/package.json index 80db795..040ca65 100644 --- a/exapps/control-plane/package.json +++ b/exapps/control-plane/package.json @@ -1,5 +1,5 @@ { - "name": "@ainas/control-plane", + "name": "@betternas/control-plane", "version": "0.1.0", "private": true, "type": "module", @@ -11,7 +11,7 @@ "typecheck": "tsc --noEmit -p tsconfig.json" }, "dependencies": { - "@ainas/contracts": "file:../../packages/contracts" + "@betternas/contracts": "file:../../packages/contracts" }, "devDependencies": { "@types/node": "^22.18.6", diff --git a/exapps/control-plane/src/adapters/nextcloud-backend.ts b/exapps/control-plane/src/adapters/nextcloud-backend.ts index ea2befd..8c892c0 100644 --- a/exapps/control-plane/src/adapters/nextcloud-backend.ts +++ b/exapps/control-plane/src/adapters/nextcloud-backend.ts @@ -1,4 +1,4 @@ -import type { NextcloudBackendStatus } from "@ainas/contracts"; +import type { NextcloudBackendStatus } from "@betternas/contracts"; export class NextcloudBackendAdapter { constructor(private readonly baseUrl: string) {} diff --git a/exapps/control-plane/src/app.ts b/exapps/control-plane/src/app.ts index e32f556..7f30e1e 100644 --- a/exapps/control-plane/src/app.ts +++ b/exapps/control-plane/src/app.ts @@ -3,7 +3,7 @@ import { CONTROL_PLANE_ROUTES, type ControlPlaneHealthResponse, type ControlPlaneVersionResponse -} from "@ainas/contracts"; +} from "@betternas/contracts"; import type { ControlPlaneConfig } from "./config.js"; import { NextcloudBackendAdapter } from "./adapters/nextcloud-backend.js"; diff --git a/exapps/control-plane/src/config.ts b/exapps/control-plane/src/config.ts index d3e3381..5be23d0 100644 --- a/exapps/control-plane/src/config.ts +++ b/exapps/control-plane/src/config.ts @@ -14,7 +14,7 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env): ControlPlaneCo return { port, - version: env.AINAS_VERSION ?? "0.1.0-dev", + version: env.BETTERNAS_VERSION ?? "0.1.0-dev", nextcloudBaseUrl: normalizeBaseUrl(env.NEXTCLOUD_BASE_URL ?? "http://nextcloud") }; } diff --git a/nextcloud.txt b/nextcloud.txt index a63f81b..c40637e 100644 --- a/nextcloud.txt +++ b/nextcloud.txt @@ -17,7 +17,7 @@ docker/ nextcloud/ CADDY/ apps/ - ainas-controlplane/ #generate from nextcloud tempalte + betternascontrolplane/ #generate from nextcloud tempalte exapps/ sharing-service/ #golang/python policy-service/ diff --git a/package-lock.json b/package-lock.json index fa88499..f1bdc02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { - "name": "ainas", + "name": "betternas", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "ainas", + "name": "betternas", "workspaces": [ "packages/*", "exapps/*" ] }, "exapps/control-plane": { - "name": "@ainas/control-plane", + "name": "@betternas/control-plane", "version": "0.1.0", "dependencies": { - "@ainas/contracts": "file:../../packages/contracts" + "@betternas/contracts": "file:../../packages/contracts" }, "devDependencies": { "@types/node": "^22.18.6", @@ -22,11 +22,11 @@ "typescript": "^5.9.3" } }, - "node_modules/@ainas/contracts": { + "node_modules/@betternas/contracts": { "resolved": "packages/contracts", "link": true }, - "node_modules/@ainas/control-plane": { + "node_modules/@betternas/control-plane": { "resolved": "exapps/control-plane", "link": true }, @@ -604,7 +604,7 @@ "license": "MIT" }, "packages/contracts": { - "name": "@ainas/contracts", + "name": "@betternas/contracts", "version": "0.1.0" } } diff --git a/package.json b/package.json index 39c245f..94bf31f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ainas", + "name": "betternas", "private": true, "packageManager": "npm@10.9.7", "workspaces": [ @@ -7,9 +7,9 @@ "exapps/*" ], "scripts": { - "build": "npm run build --workspace @ainas/contracts && npm run build --workspace @ainas/control-plane", - "typecheck": "npm run typecheck --workspace @ainas/contracts && npm run typecheck --workspace @ainas/control-plane", - "dev:control-plane": "npm run dev --workspace @ainas/control-plane" + "build": "npm run build --workspace @betternas/contracts && npm run build --workspace @betternas/control-plane", + "typecheck": "npm run typecheck --workspace @betternas/contracts && npm run typecheck --workspace @betternas/control-plane", + "dev:control-plane": "npm run dev --workspace @betternas/control-plane" } } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 428dbc6..c4c57e8 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,5 +1,5 @@ { - "name": "@ainas/contracts", + "name": "@betternas/contracts", "version": "0.1.0", "private": true, "type": "module", diff --git a/packages/contracts/schemas/control-plane-health.schema.json b/packages/contracts/schemas/control-plane-health.schema.json index 803bb10..c43bda2 100644 --- a/packages/contracts/schemas/control-plane-health.schema.json +++ b/packages/contracts/schemas/control-plane-health.schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ainas.local/schemas/control-plane-health.schema.json", + "$id": "https://betternas.local/schemas/control-plane-health.schema.json", "type": "object", "additionalProperties": false, "required": [ diff --git a/packages/contracts/schemas/control-plane-version.schema.json b/packages/contracts/schemas/control-plane-version.schema.json index 15b10da..1133e53 100644 --- a/packages/contracts/schemas/control-plane-version.schema.json +++ b/packages/contracts/schemas/control-plane-version.schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ainas.local/schemas/control-plane-version.schema.json", + "$id": "https://betternas.local/schemas/control-plane-version.schema.json", "type": "object", "additionalProperties": false, "required": [ diff --git a/phase1.txt b/phase1.txt index 7e58baf..4fd9c5f 100644 --- a/phase1.txt +++ b/phase1.txt @@ -1,9 +1,9 @@ betterNAS repo - │ apps/ainas-controlplane + │ apps/betternascontrolplane │ PHP Nextcloud app │ - nav entry: "betterNAS" - │ - page route: /index.php/apps/ainascontrolplane/ - │ - OCS route: /ocs/v2.php/apps/ainascontrolplane/api/status + │ - page route: /index.php/apps/betternascontrolplane/ + │ - OCS route: /ocs/v2.php/apps/betternascontrolplane/api/status │ - job today: call control-plane and render a thin shell │ │ exapps/control-plane diff --git a/scripts/dev-up b/scripts/dev-up index e611d11..c42ad65 100755 --- a/scripts/dev-up +++ b/scripts/dev-up @@ -4,7 +4,7 @@ set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" compose_file="$repo_root/docker/compose.dev.yml" -app_source_dir="$repo_root/apps/ainas-controlplane" +app_source_dir="$repo_root/apps/betternascontrolplane" nextcloud_occ() { docker compose -f "$compose_file" exec -T --user www-data --workdir /var/www/html nextcloud php occ "$@" @@ -17,13 +17,13 @@ nextcloud_is_installed() { docker compose -f "$compose_file" up -d --build docker compose -f "$compose_file" exec -T --user root nextcloud sh -lc ' - mkdir -p /var/www/html/custom_apps/ainascontrolplane + mkdir -p /var/www/html/custom_apps/betternascontrolplane chown -R www-data:www-data /var/www/html/custom_apps ' -docker compose -f "$compose_file" cp "$app_source_dir/." nextcloud:/var/www/html/custom_apps/ainascontrolplane +docker compose -f "$compose_file" cp "$app_source_dir/." nextcloud:/var/www/html/custom_apps/betternascontrolplane docker compose -f "$compose_file" exec -T --user root nextcloud sh -lc ' - chown -R www-data:www-data /var/www/html/custom_apps/ainascontrolplane + chown -R www-data:www-data /var/www/html/custom_apps/betternascontrolplane ' echo "Waiting for Nextcloud command interface..." @@ -60,7 +60,7 @@ if ! nextcloud_is_installed; then fi fi -nextcloud_occ app:enable --force ainascontrolplane >/dev/null +nextcloud_occ app:enable --force betternascontrolplane >/dev/null echo "Nextcloud: http://localhost:8080" echo "betterNAS control plane: http://localhost:3001"