diff --git a/README.md b/README.md index 21e22ec..baf7ada 100644 --- a/README.md +++ b/README.md @@ -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 |