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:
@@ -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 |
|
||||||
|
|||||||
Reference in New Issue
Block a user