Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

kaffolder7/davvy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

824 Commits

Repository files navigation

Davvy ✨

Lint & Format Checks Release Image Latest Release license

Davvy is a Laravel + React app that combines a web admin/dashboard experience with a built-in SabreDAV CalDAV/CardDAV server.

It is designed for:

  • Multi-user calendar and address-book hosting
  • Share-based collaboration (read_only, editor, admin)
  • Browser-based administration and operational controls
  • DAV client interoperability with strict validation plus compatibility mode when needed
  • Automated rotating backups (local + optional S3) with restore tooling

Screenshots πŸ–ΌοΈ

Core Capabilities πŸš€

Identity and Access πŸ”

  • Session-based web auth (/api/auth/*)
  • Optional TOTP two-factor auth with backup codes
  • Optional org-wide 2FA enforcement with grace period
  • Localization support with per-user language preference and request-level locale negotiation
  • DAV basic auth at /dav
  • DAV app passwords for CalDAV/CardDAV clients when 2FA is enabled
  • Roles: admin, regular
  • Feature flags controlled by admins (public registration, owner sharing, contact management, review queue moderation, DAV compatibility mode)
  • Admin user lifecycle controls, including typed-confirm account deletion with optional ownership transfer
  • Admin backup controls for schedule, destinations, retention strategy, and ZIP restore import

Calendars and Address Books πŸ—“οΈ

  • Default Personal Calendar and Contacts resources provisioned for each new user
  • Owned + shared resource visibility in web dashboard
  • Create, rename, mark sharable, and export resources
  • Per-resource permission enforcement for web and DAV access

Sharing 🀝

  • Share permissions:
    • read_only: view only
    • editor: write/update, no collection delete
    • admin: full write + collection delete
  • Owner-managed sharing can be globally disabled by admin
  • Admin global sharing controls across all users/resources

Contacts and Advanced Workflows πŸ‘₯

  • Managed contact UI (feature-gated)
  • Contact writes synchronized to vCards in assigned address books
  • CardDAV writes synchronized back into managed contacts
  • Bidirectional related-name sync with inverse family mapping, pronoun-aware gendered labels, and neutral fallbacks when pronouns are not inferable
  • Optional contact change moderation queue for cross-owner edits (opt-in, default off for personal deployments)
  • Birthday/anniversary generated milestone calendars per address book, including combined couple anniversaries when relationships are mutually linked
  • Apple compatibility mirror mode (selected sources mirrored into user's default contacts book)

DAV and Interoperability πŸ”Œ

  • CalDAV/CardDAV endpoint: /dav
  • Autodiscovery redirects:
    • /.well-known/caldav
    • /.well-known/carddav
  • Sync-token incremental change tracking (added, modified, deleted)
  • Strict payload validation by default (toggle compatibility mode for legacy clients)

Runtime and Deployment πŸ› οΈ

  • Docker-first runtime with preflight checks (php artisan app:preflight)
  • Built-in scheduler (RUN_SCHEDULER=true) and queue worker (RUN_QUEUE_WORKER=true) support for periodic and queued jobs
  • Automated backup tiers with rotating retention (daily, weekly, monthly, yearly)
  • Restore snapshots via CLI (app:backup:restore) or Admin Control Center import flow
  • Railway and Coolify deployment support
  • PostgreSQL advisory-lock startup bootstrap for multi-replica safety

Documentation Map πŸ“š

Quick Start (Docker Compose) 🐳

The repository compose.yml is tuned for production-style deployment (including Coolify magic variables).

For local development, prefer the DDEV flow below. If you still want local Docker Compose:

  1. Provide required environment values (for example in .env):
    • APP_KEY=base64:<generated-key>
    • SERVICE_URL_APP=http://localhost:8080
    • SERVICE_USER_POSTGRES=<db-user>
    • SERVICE_PASSWORD_POSTGRES=<db-password>
  2. Optionally enable bootstrap admin creation:
    • RUN_DB_SEED=true
    • DEFAULT_ADMIN_EMAIL=<admin email>
    • DEFAULT_ADMIN_PASSWORD=<strong password>
  3. Start app + database:
docker compose up --build

If you need host-accessible ports locally, uncomment the ports mappings in compose.yml.

Local Development (DDEV) πŸ’»

ddev start
ddev composer install
ddev npm install
cp .env.ddev.example .env
ddev artisan key:generate
ddev artisan migrate --seed

Create a local admin if needed:

ddev exec sh -lc "DEFAULT_ADMIN_EMAIL='admin@davvy.local' DEFAULT_ADMIN_PASSWORD='ChangeMe123!' php artisan db:seed --force --no-interaction"

Run assets:

ddev vite

Access πŸ”—:

  • App: https://davvy.ddev.site
  • DAV: https://davvy.ddev.site/dav

Testing βœ…

Run test suite:

ddev artisan test

Or via Docker:

docker build --target ci-test -t davvy-ci-test .
docker run --rm davvy-ci-test

Deployment 🚒

Davvy is deployed as a Docker image. See:

License πŸ“„

Davvy Source-Available License 1.0 (DSAL-1.0) (LICENSE)

Commercial internal use is allowed. Selling the software, or offering a competing hosted service, requires a separate written commercial agreement from the maintainer.

Contributions are accepted under CLA.md. See CONTRIBUTING.md. Commercial terms can be requested via COMMERCIAL-LICENSE.md.

Sponsor this project

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /