RCIC App by Investatech

RCIC App manual

An online manual covering every module, kept in sync with the platform.

Up to date as of v1.22.0

Calendar

One bespoke calendar workspace per member. Always-on internal calendar plus up to two linked external calendars (Google and / or Microsoft Outlook). Aggregates bookings, manual events, tenant events, off-days, written consultations, and Let's Coordinate sessions. Drag-to-create, drag-to-reschedule, recurrence, meeting links, and bilingual reminders.

Download PDF

Overview

Calendar is a per-member workspace that brings every time-bound surface of the platform into one bespoke view. Each member gets an always-on internal calendar plus up to two linked external calendars (Google and / or Microsoft Outlook). The unified view aggregates your manual events, client bookings, tenant events, off-days, written consultations, and Let's Coordinate confirmations into month / week / day / agenda layouts. Open to every tenant on every tier as of v1.22.0 (2026-07-01).

Always-on internal calendar. Every member has an internal calendar by default — no OAuth required, no connection step. It is where your manual events live. Manual events on the internal calendar are personal-only; they are never shared with clients or other tenants and never sent as .ics invitations. When you want to invite someone, use the Bookings module (for an appointment) or Personal Invites (for a one-off link).

Up to two linked external calendars. Connect Google Calendar, Microsoft Outlook, or both from /dashboard/profile. Same-provider pairs are explicitly supported — two Google accounts, two Outlook accounts. Linked externals contribute their busy intervals to the booking-availability route automatically, and your primary calendar receives a mirror copy of every manual event you create.

Views and themes

Open /dashboard/calendar from the dashboard sidebar. Switch between month, week, day, and agenda layouts using the view picker in the top toolbar. The side rail toggles control which sources contribute to the rendered view: your linked external calendars (own external), teammate busy blocks (one row per teammate, with stable tints), and per-source layers you can hide independently.

Five visual themes. Pick the theme that suits your light: classic (default), marine, meadow, dusk, or ink (clean dark mode). Theme is per-member — your choice does not affect teammates' views. Change it from the in-view settings popover.

Per-member display timezone. Defaults to your tenant's timezone, but a member who travels (or whose laptop clock is wrong) can override it. The booking-availability route already speaks tenant timezone end-to-end; the Calendar view extends that to per-member rendering. Set it from the in-view settings popover or from /dashboard/profile.

Creating and editing manual events

Click any empty slot in week or day view to start a new event — the modal opens pre-filled with that time. Drag on the grid to create with a live preview of duration. Fill in title, optional description and location, color, transparency (does this event block your busy time?), and a meeting provider. Save — the event lives on your internal calendar and mirrors to your primary external if linked.

Drag-to-move, drag-to-resize. Drag the body of an internal event chip to reschedule it. Cross-day drag works on the week view — the chip rides into the destination column visually during the gesture. Drag the bottom edge to resize. Every drop snaps to 15 minutes.

Read-only sources can't be dragged. Off-days, tenant events, written consultations, Let's Coordinate sessions, your own external calendar entries, and teammate busy blocks display a cursor cue when you try to drag and explain why they can't move. Bookings ARE draggable (move only — duration stays locked by the service).

Picking your primary calendar

Your primary calendar is the one that receives new manual events plus the mirror copies that flow out to external calendars. Set it from /dashboard/profile — every linked calendar row carries a Make this primary button.

The flip is atomic. The platform uses a Postgres function with row locks to demote the old primary and promote the new in a single transaction. Concurrent bookings cannot slip into a window where no calendar is the primary. The change is reflected on every dashboard surface immediately.

Existing events are re-homed. When you change primary, the platform runs a background pass that deletes the old external mirror copy of every manual event and creates a fresh copy on the new primary. This works for cross-provider flips (Google to Microsoft and back) AND for same-provider flips between two accounts of the same provider (two Google accounts, two Outlook accounts). Re-home is best-effort — a failure on one event is logged but does not roll back the flip.

Recurring events

Pick a value other than 'None' in the Repeats dropdown of the event modal — Daily, Weekly, Monthly, Yearly, or Custom RRULE. The series anchors to the wall-clock time you typed in the author's timezone, so a 10 AM Toronto weekly meeting stays at 10 AM Toronto across the fall daylight-savings flip, not 9 AM.

Edit-this / Edit-this-and-following / Edit-all. When you edit or delete a single occurrence, an in-modal scope picker asks you whether to apply the change to just that occurrence, to it and every later occurrence, or to the whole series. Same picker applies to deletes.

Native external mirror. Recurring series mirror natively to the linked external calendar — they are NOT expanded into N individual events on the external side. Google receives a recurrence array with RRULE plus EXDATE lines for exceptions. Microsoft receives a translated PatternedRecurrence Graph object covering FREQ=DAILY/WEEKLY/MONTHLY/YEARLY + INTERVAL + COUNT/UNTIL + WEEKLY BYDAY + relativeMonthly (first / second / third / fourth / last weekday-of-month).

Reminders

Two opt-in reminder toggles per manual event: 1 day before, 30 minutes before. When set, the platform emails the organizer at those windows. Reminders never double-fire — the platform stamps a sent-at column the moment delivery succeeds.

Booking reminders default on. Every confirmed booking fires two emails per booking automatically: an organizer-side platform-internal email and a client-side RCIC App branded email with your tenant as the Reply-To. Both emails are bilingual EN + fr-CA based on the recipient's preferred language. The platform stamps separate sent-at columns for the 24-hour and 30-minute reminders so they fire independently.

Teammate visibility

Turn on a teammate's calendar from the side rail to see when they are busy. Every teammate event renders as a generic 'Busy' block with the title redacted — no leak of personal event detail. Useful for finding common free time when scheduling group meetings or for an Assistant who needs to know when the RCIC is in client appointments without seeing the appointment subject.

Your own external calendars contribute at full detail. Events on your linked Google or Microsoft calendars appear with their original titles. The redaction applies only to OTHER members' calendars, not your own.

Stable per-teammate tints. Each teammate gets a stable color tint that persists across page loads, so you can scan the week view and instantly tell whose busy block is whose.

Security and privacy

External calendar tokens (Google refresh tokens, Microsoft refresh + access tokens) are encrypted at rest under your tenant's data encryption key — the same posture every other OAuth integration on the platform uses. We never store tokens in plaintext.

Reauth-required is non-destructive. When a provider rejects a stored refresh token (account password rotated, app permission revoked, etc.), the calendar row is flagged 'reauth required' — your tokens are NOT destroyed — and the Profile card surfaces a reconnect prompt. Until you reconnect, the calendar's freebusy stops contributing to booking availability and the mirror engine soft-skips. Reconnecting clears the flag automatically.

Manual events are personal-only. They live in your tenant's database under your member id and never leave the tenant. No .ics invitations are minted. The internal calendar API routes refuse cross-tenant access with a 404 (not 403) so probing for resources in other tenants reveals nothing.