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.
|
||||
|
||||
## 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 |
|
||||
|
||||
Reference in New Issue
Block a user