mirror of
https://github.com/harivansh-afk/betterNAS.git
synced 2026-04-15 03:00:44 +00:00
filesystem admin over HTTP
https://www.betternas.com
Replace custom CSS module UI with shadcn radix-luma components, Tailwind v4, and Manrope font. Remove packages/ui. |
||
|---|---|---|
| .agents/skills/shadcn | ||
| apps | ||
| docs | ||
| infra/docker | ||
| packages | ||
| scripts | ||
| .editorconfig | ||
| .env.agent.example | ||
| .gitignore | ||
| .prettierignore | ||
| CLAUDE.md | ||
| control.md | ||
| go.work | ||
| go.work.sum | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| skeleton.md | ||
| skills-lock.json | ||
| TODO.md | ||
| tsconfig.base.json | ||
| turbo.json | ||
betterNAS
betterNAS is a self-hostable WebDAV stack for mounting NAS exports in Finder.
The default product shape is:
node-serviceserves the real files from the NAS over WebDAVcontrol-serverowns auth, nodes, exports, grants, and mount profile issuanceweb control planelets the user manage the NAS and get mount instructionsmacOS clientstarts as native Finder WebDAV mounting, with a thin helper later
For now, the whole stack should be able to run on the user's NAS device.
Current repo shape
apps/node-agent- NAS-side Go runtime and WebDAV server
apps/control-plane- Go backend for auth, registry, and mount profile issuance
apps/web- Next.js web control plane
apps/nextcloud-app- optional Nextcloud adapter, not the product center
packages/contracts- canonical shared contracts
infra/docker- self-hosted local stack
The main planning docs are:
Default runtime model
self-hosted betterNAS on the user's NAS
+------------------------------+
| web control plane |
| Next.js UI |
+--------------+---------------+
|
v
+------------------------------+
| control-server |
| auth / nodes / exports |
| grants / mount profiles |
+--------------+---------------+
|
v
+------------------------------+
| node-service |
| WebDAV + export runtime |
| real NAS bytes |
+------------------------------+
user Mac
|
+--> browser -> web control plane
|
+--> Finder -> WebDAV mount URL from control-server
Verify
Static verification:
pnpm verify
Bootstrap clone-local runtime settings:
pnpm agent:bootstrap
Bring the self-hosted stack up, verify it, and tear it down:
pnpm stack:up
pnpm stack:verify
pnpm stack:down --volumes
Run the full loop:
pnpm agent:verify
Current end-to-end slice
The first proven slice is:
- boot the stack with
pnpm stack:up - verify it with
pnpm stack:verify - get the WebDAV mount profile from the control plane
- mount it in Finder with the issued credentials
If the stack is running on a remote machine, tunnel the WebDAV port first, then
use Finder Connect to Server with the tunneled URL.
Product boundary
The default betterNAS product is self-hosted and WebDAV-first.
Nextcloud remains optional and secondary:
- useful later for browser/mobile/share surfaces
- not required for the core mount flow
- not the system of record