Skej.
c. 2013–2015
A different way to move through time.
Finding a good time to meet means reconciling different lives: existing commitments, daily routines, distance, and the information people prefer to keep private. Skej brought those considerations into one system, combining a tactile interface for exploring time with software agents that negotiated time and place on each participant’s behalf.
Time is a corkscrew.
Hours turn, days recur, and every cycle carries us forward. Skej gave that relationship a physical form. Turning the clock advanced the calendar; moving through dates carried the clock with it. A continuous gesture connected the familiar rhythm of a clock face to the unfolding sequence of days.
That interaction grew into Sky, a lightweight UI library built around connected objects. Gestures could propagate from one control to another, with springs preserving continuity as movement settled. The geometry expressed how time worked, and the controls moved together because they described the same thing.
Agents that negotiate.
Each participant had an Erlang agent with its own calendar state, location model, and record of pending arrangements. Agents evaluated candidate meetings using costs for conflicting commitments, geographic distance, and inconvenient hours. A time and a place were considered together: an empty hour could still be a poor choice if it required someone to be across town.
Agents exchanged candidate costs and proposals, recalculating their evaluations as new options arrived. Combined costs ranked the alternatives, while participants retained control over proposals and confirmation. The negotiation shared evaluations of possible meetings, keeping the underlying calendars and location histories separate. People could coordinate without opening their calendars to one another.
Learning the rhythms of a day.
Choosing a place required a model of where someone was likely to be. Skej learned from observed locations and scheduled events, looking for patterns in the hour, weekday, and month, as well as the relationship to appointments before and after a proposed meeting.
The prediction engine combined evidence from those patterns, weighting it by the number of observations and their uncertainty. Consistent routines carried more weight than scattered evidence. Predictions fed directly into the negotiation, allowing a proposed meeting to be evaluated in the context of the rest of someone’s day.
From negotiation to a meeting.
The backend connected agent messages, persistent state, calendar synchronization, and email invitations. Recurring events and time zones were handled within the calendar machinery. Agents could hibernate when idle and resume with their stored state; connected clients received updates as arrangements changed.
The product joined that infrastructure to the clock, calendar, and proposal interface. A meeting could move from agents evaluating alternatives in the background to a person’s inbox, then into the calendar where the commitment belonged.