Skip to content

Documentation

Meetings from Google Calendar

Connect your own Google account and a meeting with somebody already in your workspace lands on their record, from a week ago to a month ahead. A meeting with nobody from the workspace in it is read and left alone. A task with a due date can go the other way, into your calendar, with nobody invited to it.

Connect your own Google account and Kicklace reads your main calendar. A meeting whose guests include somebody already in your workspace lands on their record, so the timeline says you met them without anybody typing it in. A task with a due date can go the other way, into your calendar.

The connection belongs to you, not to the workspace. An owner cannot switch it on for anybody else, other members see nothing of your calendar, and connecting in one workspace does not connect any other.

What to press

Settings → Integrations → Meetings from Google CalendarConnect Google Calendar. Google asks you to allow it; nothing is read until you do.

Kicklace asks for one permission — calendar.events, which reads and writes events on your calendars — and asks for it on top of the sign-in rather than inside it. Somebody who only ever signs in with Google is never asked for a calendar.

What Kicklace reads

Your main calendar, from seven days ago to thirty days ahead, every few minutes.

For each event in that window it looks at the guest list. If one of the guests is an email address that already belongs to a person in this workspace, the meeting is written on that person's record: the event's title, when it starts and ends, the guests who are people here, and a link back to the event. That is the whole of it.

If none of the guests is somebody here, nothing is kept. The event was read and forgotten. There is no copy of your calendar in Kicklace, and no meeting becomes a person: Kicklace never creates anybody from a guest list.

A meeting that has not happened yet is on the timeline too, above today, so a record shows what is coming as well as what has been.

When a meeting changes

Kicklace keeps up with the calendar rather than making a second copy of it. Move a meeting and the row moves with it; rename it and the row is renamed; cancel it and the row goes; take a guest off it and it comes off their record and stays on everybody else's.

What it does not do

  • It never writes to your calendar except the tasks you ask it to (below).
  • It never invites anybody, and it never answers an invitation for you.
  • It never reads a calendar it was not connected to — not a colleague's, not one shared with you, only your own main one.
  • A meeting starts no automation. An automation that ran on every meeting would fire once for every fortnight of history the first time a calendar was read, and again every time somebody moved something by ten minutes. A meeting you log by hand on a record still starts one.

A task in your calendar

Any task with a due date carries a small calendar button — on the Tasks page, on a record, and on your dashboard. Press it and the task becomes half an hour at 09:00 in the workspace's timezone on the day it is due, in your own calendar, with the task's title and a link back to the record. If the task has a time of day rather than just a date, that time is used instead.

Nobody is invited, so Google sends no invitation to anybody. Finish the task, or remove it, and the event comes out of your calendar again; press the button a second time to take it out yourself.

The event is in the calendar of whoever pressed the button. If a colleague put a task in their calendar, only they can take it out.

Disconnecting

Disconnect stops the reading at once.

What happens to the Google account itself depends on how you sign in. If Google is not the only account linked to you, Kicklace unlinks it as well and the permission goes with it. If it is — if Google is how you get in — Kicklace keeps the account so that you can still sign in, and stops reading. Google's permission covers the whole connection rather than one part of it, so there is no way to hand back the calendar and keep the sign-in: to take the permission away as well, remove Kicklace at myaccount.google.com/permissions.

Nothing already written is removed by disconnecting. The meetings on the records stay, the way a note stays.

Gmail

Not yet. The same Google connection will carry it when it lands, and the Integrations screen says which of Calendar and Gmail your account has given Kicklace. Until then, the way to file the email you send from your own mailbox is the BCC address under Settings → Sending → Replies; see Filing the emails you send yourself.

Setting up the Google side of a deployment

This section is for whoever runs this Kicklace, not for a customer using one.

Google Calendar needs an OAuth client — GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET, the same pair that makes the Continue with Google button appear on the sign-in card — with /api/auth/callback/google as an authorised redirect URI. With no client set, the Integrations screen says this deployment has no Google connection and offers no button.

Two things then have to be done in the Google Cloud console, and nothing in this repository can do them:

  1. Add the scope to the OAuth consent screen. https://www.googleapis.com/auth/calendar.events — and enable the Google Calendar API for the project, under APIs & Services → Library.

  2. Submit the app for verification. Calendar's events scope is sensitive: it needs Google's review, but not the third-party security assessment that a restricted scope needs. Gmail's scopes are restricted, which is why Gmail waits and this does not. Until the app is verified, only the test users listed on the consent screen can grant the permission — everybody else is stopped by Google with a warning, or refused outright once the app has more than a hundred users.

Nothing else is needed: no webhook, no DNS record, no key pasted anywhere.

This page is still written partly for the people building Kicklace, so parts of it are about work that is not yours to do. It is here because what it describes is real; it is not listed on the documentation index until it has been rewritten.