Update README: project name, AI note, and current Web UI feature set

- Explain the "nidus" name (Latin for "nest").
- Note that AI coding assistants were used during development and that
  not everything has been fully reviewed yet.
- Bring the Web UI section up to date with the Files, Contacts,
  Calendar, and Account areas that already existed but weren't
  documented.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-08-21 09:16:08 +02:00
co-authored by Copilot
parent 9f8bfba420
commit 26044366de
+43 -10
View File
@@ -2,6 +2,12 @@
A self-hosted **CalDAV**, **CardDAV**, and **WebDAV** server written in Go.
## About the name
The project is called **nidus** — Latin for *"nest"*. Like a nest, it's a
small, self-hosted, personal home for your own data: calendars, contacts,
and files, all kept under your own roof instead of a third-party cloud.
## Features
| Protocol | Use case |
@@ -14,8 +20,9 @@ A self-hosted **CalDAV**, **CardDAV**, and **WebDAV** server written in Go.
- Per-user isolated collections
- **Calendar/address book sharing** — grant other users read or write
access to your calendars/address books
- **Web UI** — a small dashboard (login, manage shares) at `/web/`, built
with templ + Tailwind + htmx
- **Web UI** — a mobile-friendly app at `/web/` for managing calendars,
contacts, files, and account settings (see [Web UI](#web-ui) below),
built with templ + Tailwind + htmx
- Auto-discovery via `/.well-known/caldav` and `/.well-known/carddav`
- Optional **TLS** (or use a reverse proxy)
- Structured logging (text or JSON)
@@ -173,17 +180,33 @@ Read-only shares reject any write (PUT/DELETE) with `403 Forbidden`.
## Web UI
A small server-rendered dashboard is served at `/web/` (separate from the
DAV endpoints, which stay on HTTP Basic Auth):
A small server-rendered app is served at `/web/` (separate from the DAV
endpoints, which stay on HTTP Basic Auth), and works on both desktop and
mobile browsers:
- **Login** (`/web/login`) — cookie-based session, stored server-side in
`nidus.db` (`web_sessions` table), independent of DAV Basic Auth. Includes
a "Show/Hide" password toggle to rule out typos before submitting.
- **Dashboard** (`/web/`) — lists your own calendars/address books, who
they're shared with, and any resources other users have shared with you.
- **Share management** — add/remove shares directly from the dashboard
(same effect as `nidusctl`); updates happen in place via
- **Dashboard** (`/web/`) — create/delete your own calendars, address
books, and ICS/webcal subscriptions; see who your resources are shared
with and what others have shared with you; manage sharing grants
directly (same effect as `nidusctl`) updates happen in place via
[htmx](https://htmx.org/) without a full page reload.
- **Files** (`/web/files/`) — a browser for the same storage the WebDAV
endpoint (`/files/`) serves: navigate folders, create new folders,
upload files/folders (including via drag & drop), download, and delete
files or folders. Files open **inline** in the browser when the type
supports it (video, audio, images, PDF, …) instead of always forcing a
download; a separate "Download" action is always available to force a
save-as.
- **Contacts** (`/web/contacts/`) — browse address books, create/edit/
delete contacts (name, organization, birthday, phone numbers, emails,
addresses, photo), and import/export vCards (`.vcf`).
- **Calendar** (`/web/calendar`) — month and week views across all your
own and shared calendars, create/edit/delete events, per-calendar
colors, and import/export `.ics` files.
- **Account** (`/web/account`) — update your display name/email and
change your password.
- **Logout** (`/web/logout`).
Implementation: [templ](https://templ.guide/) for type-safe Go HTML
@@ -191,8 +214,8 @@ templates, [Tailwind CSS v4](https://tailwindcss.com/) for styling, htmx
for the sprinkles of dynamic behavior (form submission via POST/DELETE,
partial page swaps), and TypeScript (compiled to plain JS, `web/ts/`) for
the few bits of client-side-only logic (e.g. the password-visibility
toggle) — no separate JS framework needed. The compiled CSS, compiled JS,
and the htmx bundle are all embedded into the Go binary
toggle, file drag & drop) — no separate JS framework needed. The compiled
CSS, compiled JS, and the htmx bundle are all embedded into the Go binary
(`web/staticassets.go`), so no Node.js is required at runtime, only when
you change styles, templates, or TypeScript during development:
@@ -335,6 +358,16 @@ go test ./... -race
---
## A note on AI assistance
Large parts of this project's code and documentation were written with
the help of AI coding assistants (e.g. GitHub Copilot). Changes are
reviewed and tested where practical, but not every part of the codebase
has been fully reviewed yet — use accordingly, especially before relying
on this in security-sensitive environments.
---
## Dependencies
| Package | Purpose |