You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(Fri Sep 12 275760) which is more than sufficient.
84
+
-**RRULE:** The time's recurrence rule as defined in [the iCalendar
85
+
RFC](https://tools.ietf.org/html/rfc5545). This is used server-side by
86
+
[`rrule`](https://www.npmjs.com/package/rrule) to calculate individual
87
+
meeting instances that are then sent to the client. It is manipulated
88
+
client-side when users select a recurrence rule or choose to add an
89
+
exception to a recurring meeting.
90
+
91
+
Upon creation, Tutorbook sends an email to all of the `people` in the new
92
+
meeting's match with the meeting time, venue, and everyone's contact info.
102
93
103
94
## Design Specifications
104
95
105
96
Summarized here are descriptions of common data flow patterns and design specs.
106
97
These are some of the front-end design guidelines that TB follows in order to
107
98
maintain consistency and display predictable behavior.
108
99
100
+
### Recurring Meetings
101
+
102
+
Recurring events are always a struggle to implement. There are [many](https://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application)[resources](https://github.com/bmoeskau/Extensible/blob/master/recurrence-overview.md)[available](https://medium.com/@ScullWM/design-and-manage-recurring-events-fb43676e711a)
103
+
that are meant to make implementing such recurrence rules easier.
104
+
105
+
TB's entire recurrence stack is quite simple:
106
+
107
+
1. Meetings specify complex `RRULE` recur rules with support for event
108
+
exceptions and everything else supported by [`rrule`](https://www.npmjs.com/package/rrule).
109
+
2. At index time, the last possible end date is stored in our Algolia index to
110
+
[make querying data more efficient](https://github.com/bmoeskau/Extensible/blob/master/recurrence-overview.md#storage-and-retrieval).
111
+
3. When a meeting range is requested, our API parses the recur rules for
112
+
meetings within the requested range (i.e. both the start date and recur end
113
+
date are within the requested date range) and sends the client individual
114
+
meeting instances.
115
+
4. When availability is requested, our API again parses the recur rules for
116
+
meetings within the requested availability range and excludes the resulting
117
+
individual meeting instances from the user's weekly availability.
118
+
119
+
Editing and updating recurring meetings is intuitive:
120
+
121
+
- When a user updates a single event instance (choosing not to update all
122
+
recurring events), an exception is added to the recurring event's `RRULE` and
123
+
a new regular (i.e non-recurring) meeting is created.
124
+
- When a user deletes a single event instance (choosing not to delete all
125
+
recurring events), an exception is added to the recurring event's `RRULE`.
126
+
109
127
### Analytics
110
128
111
129
TB uses [Segment](https://segment.com) to collect analytics from both the client
0 commit comments