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. 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 ## Features
| Protocol | Use case | | Protocol | Use case |
@@ -14,8 +20,9 @@ A self-hosted **CalDAV**, **CardDAV**, and **WebDAV** server written in Go.
- Per-user isolated collections - Per-user isolated collections
- **Calendar/address book sharing** — grant other users read or write - **Calendar/address book sharing** — grant other users read or write
access to your calendars/address books access to your calendars/address books
- **Web UI** — a small dashboard (login, manage shares) at `/web/`, built - **Web UI** — a mobile-friendly app at `/web/` for managing calendars,
with templ + Tailwind + htmx 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` - Auto-discovery via `/.well-known/caldav` and `/.well-known/carddav`
- Optional **TLS** (or use a reverse proxy) - Optional **TLS** (or use a reverse proxy)
- Structured logging (text or JSON) - Structured logging (text or JSON)
@@ -173,17 +180,33 @@ Read-only shares reject any write (PUT/DELETE) with `403 Forbidden`.
## Web UI ## Web UI
A small server-rendered dashboard is served at `/web/` (separate from the A small server-rendered app is served at `/web/` (separate from the DAV
DAV endpoints, which stay on HTTP Basic Auth): 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 - **Login** (`/web/login`) — cookie-based session, stored server-side in
`nidus.db` (`web_sessions` table), independent of DAV Basic Auth. Includes `nidus.db` (`web_sessions` table), independent of DAV Basic Auth. Includes
a "Show/Hide" password toggle to rule out typos before submitting. a "Show/Hide" password toggle to rule out typos before submitting.
- **Dashboard** (`/web/`) — lists your own calendars/address books, who - **Dashboard** (`/web/`) — create/delete your own calendars, address
they're shared with, and any resources other users have shared with you. books, and ICS/webcal subscriptions; see who your resources are shared
- **Share management** — add/remove shares directly from the dashboard with and what others have shared with you; manage sharing grants
(same effect as `nidusctl`); updates happen in place via directly (same effect as `nidusctl`) updates happen in place via
[htmx](https://htmx.org/) without a full page reload. [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`). - **Logout** (`/web/logout`).
Implementation: [templ](https://templ.guide/) for type-safe Go HTML 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, for the sprinkles of dynamic behavior (form submission via POST/DELETE,
partial page swaps), and TypeScript (compiled to plain JS, `web/ts/`) for 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 the few bits of client-side-only logic (e.g. the password-visibility
toggle) — no separate JS framework needed. The compiled CSS, compiled JS, toggle, file drag & drop) — no separate JS framework needed. The compiled
and the htmx bundle are all embedded into the Go binary 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 (`web/staticassets.go`), so no Node.js is required at runtime, only when
you change styles, templates, or TypeScript during development: 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 ## Dependencies
| Package | Purpose | | Package | Purpose |