# Event planning board from a spreadsheet

> Turn an event plan in a spreadsheet into a Gantt chart by track and a timeline of key dates.

Source: https://mockflow.com/developers/examples/api/event-schedule

An events team plans a conference in a spreadsheet: venue, speakers, marketing and logistics, each with tasks, owners and dates. This example turns that plan into a board everyone can read at a glance: a Gantt chart with one column per track, and a timeline of the key dates to share with the venue, speakers and sponsors.

[**Download the code**](/developers/assets/examples/mockflow-event-schedule.zip) (Node.js 18 or later, no packages)

## What it creates

- A **Key dates** section with a [timeline](/developers/reference/item-types/timeline) of milestones, such as "Venue signed" and "Tickets on sale".
- A **Plan** section with a [Gantt chart](/developers/reference/item-types/gantt) shown by week: one column per track, each task with its start and end date, owner and progress.

## How it works

1. Read `plan.csv` (`track,task,start,end,owner,progress`) and `milestones.csv` (`date,title,description`).
2. Build the Gantt data: one column per track, one card per task.
3. Build the timeline data with `labelType` set to `date`, so events sit on real dates.
4. [Create the board](/developers/reference/boards/create-board) and draw both sections and both items in one [batch](/developers/reference/items/batch-items).

## Run the example

Create an API key in the [developer console](/developers/console/) with the scopes `user:read` and `boards:write`, then:

```bash
cp .env.example .env        # paste your key into .env
node event-schedule.js "Product Summit 2027"
```

## The key code

```javascript
const gantt = {
  settings: { boardTitle: `${eventName}: plan`, viewMode: 'week', theme: 'light', showWeekends: false },
  columns: tracks.map((track, i) => ({
    id: `col_${i + 1}`,
    title: track,
    color: COLORS[i % COLORS.length],
    cards: plan.filter((r) => r.track === track).map((r, j) => ({
      id: `task_${i + 1}_${j + 1}`,
      title: r.task,
      description: '',
      startDate: r.start,
      endDate: r.end,
      dueDate: r.end,
      progress: Number(r.progress) || 0,
      assignees: r.owner ? [r.owner] : [],
      labels: [],
      comments: [],
    })),
  })),
};
```

## Adapt it

- **Teachers:** a course plan by unit, with assessment dates on the timeline.
- **Product launches:** workstreams for engineering, marketing and support, with the launch milestones.
- **Recruiting:** a hiring plan by role, with interview rounds and start dates.

## What you need

An API key with `user:read` and `boards:write`. Every plan.
