Skip to content

kaffolder7/davvy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

742 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 πŸ–ΌοΈ

Davvy dashboard with calendars and address booksDashboard Davvy admin control centerAdmin Control Center
Davvy contacts management pageContacts Davvy profile settings pageProfile

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 worker support (RUN_SCHEDULER=true) for periodic jobs (automated backups + milestone horizon roll-forward sync)
  • 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.