Skip to main content

AI Reference

This document is a complete reference for generating event schedules that can be imported into the Apportunity: Event Planner app for Confluence and Jira.

Use this document as context when asking an AI assistant (Claude, Gemini, ChatGPT, etc.) to generate a schedule:

Here is the reference: [link to this page]. Create an Event Planner schedule for [your task].


App Overview​

Event Planner is available as two separate Atlassian Marketplace products:

  • Apportunity: Event Planner for Confluence β€” a calendar macro on any Confluence page.
  • Apportunity: Event Planner for Jira β€” a calendar on a Jira work item panel or Dashboard gadget.

Both apps use the same schedule format described below. Instead of clicking through the calendar to add events one at a time, you can describe an event β€” a training day, an onboarding plan, a multi-day retreat, a release schedule β€” to an AI assistant and get back a single JSON object that recreates the whole thing at once.

info

JSON import is rolling out across Event Planner. If you don't see an Import option in your version of the app yet, contact the support portal β€” or hand the generated JSON to whoever administers your Event Planner instance.

How It Works​

  1. Ask your AI assistant to generate a schedule using the reference in this document.
  2. The AI returns a single JSON object β€” a schedule template β€” describing every event, relative to a "Day 0".
  3. Import that JSON into Event Planner and choose a real start date. The app maps dayNumber: 0 to that date, dayNumber: 1 to the day after, and so on, and creates one calendar event per entry.

This relative-day design means the same generated schedule can be reused for any future date β€” a "2-day onboarding" template works whether you start it next Monday or three months from now.


Schedule Format​

A schedule template is a single JSON object with this shape:

interface EventsTemplate {
id: string;
title: string;
description: string;
category: string;
events: TemplateEvent[];
dayHeaders?: TemplateDayHeader[];
options?: Partial<ViewOptions>;
}

interface TemplateEvent {
dayNumber: number;
timeStart: string; // "HH:mm", 24-hour
timeEnd: string; // "HH:mm", 24-hour
title: string;
description: string;
isAllDay?: boolean; // default: false
backgroundColor: string; // any valid CSS color
}

interface TemplateDayHeader {
dayNumber: number;
text: string;
}

interface ViewOptions {
businessHoursStart: string; // "HH:mm"
businessHoursEnd: string; // "HH:mm"
slotDuration: string; // "HH:mm:ss"
isShowWeekends: boolean;
startOfTheWeek: string; // "0" = Sunday, "1" = Monday, ...
}

Top-level fields​

FieldTypeRequiredNotes
idstringYesUnique, kebab-case slug, e.g. "team-building-retreat".
titlestringYesName of the schedule, shown when selecting it for import.
descriptionstringYesOne or two sentences summarizing the plan.
categorystringYesFree-text label, e.g. "training", "onboarding", "team-building". Used as a display tag only β€” it does not affect import.
eventsTemplateEvent[]YesOne entry per calendar event. See below.
dayHeadersTemplateDayHeader[]NoOne label per day, shown above the calendar on multi-day schedules. Recommended whenever a schedule spans more than one day.
optionsPartial<ViewOptions>NoCalendar display preferences applied on import. Omit fields you don't need to set.

events[] fields​

FieldTypeRequiredNotes
dayNumbernumberYes0-based day offset from the import start date. 0 is the first day of the schedule.
timeStartstringYes24-hour HH:mm, e.g. "09:30". No date component β€” the day comes from dayNumber.
timeEndstringYesSame format as timeStart. Must be later than timeStart on the same day β€” see Rules below.
titlestringYesShown on the calendar tile. Keep it short.
descriptionstringYesShown when the event is opened. Can be longer free text, or "" if not needed.
isAllDaybooleanNoDefaults to false. timeStart/timeEnd are still required even when true β€” they're used to order and size the event on the calendar.
backgroundColorstringYesAny valid CSS color (hex recommended). See Choosing Colors.

dayHeaders[] fields​

FieldTypeRequiredNotes
dayNumbernumberYesSame 0-based offset used in events[].
textstringYesShort label shown above that day, e.g. "Day 1: Foundations".

options fields​

All fields are optional β€” only include the ones you want to override.

FieldTypeDefaultNotes
businessHoursStartstring (HH:mm)"09:00"Start of the highlighted business-hours band. Set to roughly match the schedule's earliest event.
businessHoursEndstring (HH:mm)"17:00"End of the highlighted business-hours band. Set to roughly match the schedule's latest event.
slotDurationstring (HH:mm:ss)"00:30:00"Calendar grid resolution. Use "00:15:00" for tightly packed agendas, "00:30:00" or "01:00:00" for sparser ones.
isShowWeekendsbooleantrueSet to false for work-week-only schedules.
startOfTheWeekstring"0""0" = Sunday, "1" = Monday. Rarely needs to be set.

Choosing Colors​

backgroundColor accepts any valid CSS color. Pick a small, consistent palette and reuse it to group similar event types (breaks, sessions, meals) β€” don't assign every event a unique color.

Suggested palette:

ColorHexGood for
Gray#6B778CBreaks, meals, logistics
Blue#4C9AFFCore sessions, main agenda items
Green#36B37EWorkshops, hands-on activities
Purple#998DD9Discussions, reflection, planning
Orange#FFAB00Optional/social events
Red#FF5630Critical or time-sensitive items

Examples​

Example 1: Single-day schedule​

{
"id": "sprint-retro-half-day",
"title": "Sprint Retrospective Half-Day",
"description": "A focused half-day session to review the sprint, celebrate wins, and plan improvements for the next cycle.",
"category": "team-building",
"options": {
"businessHoursStart": "09:00",
"businessHoursEnd": "13:00",
"slotDuration": "00:30:00"
},
"events": [
{
"dayNumber": 0,
"timeStart": "09:00",
"timeEnd": "09:15",
"title": "Welcome & Coffee",
"description": "Informal start while everyone settles in.",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 0,
"timeStart": "09:15",
"timeEnd": "10:30",
"title": "Sprint Review",
"description": "Walk through completed work and demo key deliverables.",
"backgroundColor": "#4C9AFF"
},
{
"dayNumber": 0,
"timeStart": "10:30",
"timeEnd": "10:45",
"title": "Break",
"description": "",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 0,
"timeStart": "10:45",
"timeEnd": "12:15",
"title": "Retrospective Discussion",
"description": "What went well, what didn't, and what to change next sprint.",
"backgroundColor": "#36B37E"
},
{
"dayNumber": 0,
"timeStart": "12:15",
"timeEnd": "13:00",
"title": "Action Planning",
"description": "Agree on concrete improvements to carry into the next sprint.",
"backgroundColor": "#998DD9"
}
]
}

Example 2: Multi-day schedule with day headers​

{
"id": "new-manager-bootcamp",
"title": "New Manager Bootcamp",
"description": "A 2-day program to prepare newly promoted managers for their first leadership role, covering communication, delegation, and feedback.",
"category": "training",
"options": {
"businessHoursStart": "09:00",
"businessHoursEnd": "17:00",
"slotDuration": "00:30:00"
},
"dayHeaders": [
{ "dayNumber": 0, "text": "Day 1: Communication & Delegation" },
{ "dayNumber": 1, "text": "Day 2: Feedback & Performance" }
],
"events": [
{
"dayNumber": 0,
"timeStart": "09:00",
"timeEnd": "09:30",
"title": "Welcome & Introductions",
"description": "",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 0,
"timeStart": "09:30",
"timeEnd": "12:00",
"title": "Effective Communication for New Managers",
"description": "Active listening, setting expectations, and running productive 1:1s.",
"backgroundColor": "#4C9AFF"
},
{
"dayNumber": 0,
"timeStart": "12:00",
"timeEnd": "13:00",
"title": "Lunch",
"description": "",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 0,
"timeStart": "13:00",
"timeEnd": "17:00",
"title": "Delegation Workshop",
"description": "Practice delegating tasks using a structured handoff framework.",
"backgroundColor": "#36B37E"
},
{
"dayNumber": 1,
"timeStart": "09:00",
"timeEnd": "09:30",
"title": "Day 2 Kickoff",
"description": "Recap of Day 1 takeaways.",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 1,
"timeStart": "09:30",
"timeEnd": "12:00",
"title": "Giving and Receiving Feedback",
"description": "Frameworks for constructive feedback conversations.",
"backgroundColor": "#4C9AFF"
},
{
"dayNumber": 1,
"timeStart": "12:00",
"timeEnd": "13:00",
"title": "Lunch",
"description": "",
"backgroundColor": "#6B778C"
},
{
"dayNumber": 1,
"timeStart": "13:00",
"timeEnd": "16:00",
"title": "Performance Conversations Role-Play",
"description": "Practice handling common performance review scenarios.",
"backgroundColor": "#36B37E"
},
{
"dayNumber": 1,
"timeStart": "16:00",
"timeEnd": "17:00",
"title": "Closing & Personal Action Plan",
"description": "Each participant commits to three concrete changes for their first 30 days.",
"backgroundColor": "#998DD9"
}
]
}

Rules for Generating Good Schedules​

  1. Output a single JSON object only, wrapped in a ```json code block. No comments, no trailing commas β€” standard JSON only.
  2. dayNumber is relative, not an absolute date. Never compute or include actual calendar dates β€” the import step anchors dayNumber: 0 to whatever start date the user picks.
  3. One event cannot span multiple days. Each event lives entirely within a single dayNumber. For a multi-day item (e.g. a 3-day conference pass), either create one event per day, or use a single dayHeaders entry per day and short events underneath instead.
  4. Don't cross midnight within one event. An event with timeStart: "22:00" and timeEnd: "00:30" on the same dayNumber is invalid β€” the end time would be interpreted as earlier than the start time on the same day. Split it into two events on consecutive dayNumbers instead.
  5. timeEnd must be after timeStart. Back-to-back events should share a boundary time (one event's timeEnd equals the next event's timeStart) rather than overlapping.
  6. Always add dayHeaders for schedules spanning more than one day. One header per dayNumber, with a short descriptive label.
  7. Keep options minimal. Only set businessHoursStart, businessHoursEnd, and slotDuration to roughly match the schedule's actual time range and density. Leave other fields out entirely rather than guessing values for them.
  8. Reuse a small color palette. Group similar event types (breaks, core sessions, workshops) under the same color rather than assigning a unique color to every event β€” see Choosing Colors.
  9. Keep title short and description informative. Titles render on small calendar tiles; put the detail in description.
  10. Validate before returning. Check every event has both timeStart and timeEnd, every dayNumber referenced in events makes sense relative to any dayHeaders, and the JSON parses cleanly.

See Also​