stefan.tollkuehn dd4716faf4 Update README
- add license section,
- add info about vibe coding at top
- add information about contacts search GET
- minor changes
2026-10-27 11:43:43 +01:00
2026-10-27 10:50:51 +01:00
2026-10-07 21:57:34 +02:00
2026-10-08 14:09:12 +02:00
2026-10-08 14:09:12 +02:00
2026-10-08 14:13:27 +02:00
2026-10-08 14:09:12 +02:00
2026-10-27 11:43:43 +01:00

AToCal — Add To Calendar

Vibe-coded: AToCal is written by Mistral AI's coding agent, not by hand. The maintainer sets the goals, makes the product decisions and tries the app out in the browser; there has been no independent human code review and no security audit.

A Nextcloud app that lets remote applications create events in the authenticated user's Nextcloud Calendar via a simple link.

How it works

remote app                  Nextcloud (atocal)
    |                              |
    |  GET /apps/atocal/confirm    |
    |  summary, start, end, ...    |
    |----------------------------->|
    |                              |  confirm page
    |<-----------------------------|
    |                              |
    |  POST /apps/atocal/create    |  (CSRF token from form)
    |----------------------------->|
    |                              |  event in "Personal" calendar
    |<-----------------------------|  redirect to Calendar app

The remote app links the user to the confirm page. The user reviews the event and submits the form. The event lands in a calendar the user chooses. The user adds invitees/attendees to the event, who receive an invitation, as long as the user owns the calendar. After the event is created the browser opens the Calendar app.

Routes

Method Path Purpose
GET /apps/atocal/confirm Show confirmation page
POST /apps/atocal/create Create the event
GET /apps/atocal/contacts/search Contact search for the invitee input

Link parameters (GET /confirm and form POST /create)

Parameter Required Rules
summary yes max 255 chars
start yes datetime-local, e.g. 2026-10-07T14:15
end yes after start, same format
description no max 10000 chars
location no HTTPS URL
url no HTTPS URL; merged into description
organizer no email address; display info only

The create form adds calendarId (selected calendar) and attendees (emails, max 20).

Dates carry no timezone and are interpreted in the user's Nextcloud timezone (server default as fallback).

Organizer

The event's ICS ORGANIZER is the Nextcloud user's own email address. Invitations to attendees are scheduled by the CalDAV backend in the calendar owner's name, which only works when the organizer matches the owner.

The organizer link parameter is shown on the confirm page as meeting information and is used as ORGANIZER fallback only when the user has no profile email — in that case no working invitations may be sent, so profile emails should be set.

Reminder

Every created event gets a display alarm 15 minutes before it starts (TRIGGER:-PT15M VALARM). The reminder is not configurable.

Example:

https://cloud.example.com/apps/atocal/confirm?summary=Kickoff&start=2026-10-12T10:00&end=2026-10-12T11:00&location=https%3A%2F%2Fmeet.example.com%2Fkickoff

Requirements

  • Nextcloud 34 or 35
  • Calendar app enabled
  • A writable calendar ("Personal" is preselected if present)

Install

Copy this directory to the Nextcloud server as apps/atocal, then:

occ app:enable atocal

Structure

appinfo/info.xml                        app metadata
appinfo/routes.php                      routes
css/style.css                           page styles
js/invitees.js                          invitee input
l10n/*.json                             translations
lib/AppInfo/Application.php             container setup
lib/Controller/CalendarController.php   confirm/create logic
templates/confirm.php                   confirmation page

Licence

AGPL-3.0-or-later, see LICENSE. AToCal comes without any warranty.

AToCal is an independent project and is not affiliated with any other product or company of a similar name.

S
Description
AToCal is a Nextcloud app to create calendar events from a GET request. It emails attendees, books the slot as an event with organizer details, and lets invitees confirm or decline online
Readme AGPL-3.0
388 KiB
0 Stars 1 Watchers 0 Forks
Languages
PHP 83.6%
JavaScript 10.2%
CSS 6.2%