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.
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 (Node.js 18 or later, no packages)
What it creates
A Key dates section with a timeline of milestones, such as "Venue signed" and "Tickets on sale".
A Plan section with a Gantt chart shown by week: one column per track, each task with its start and end date, owner and progress.
How it works
Read
plan.csv(track,task,start,end,owner,progress) andmilestones.csv(date,title,description).Build the Gantt data: one column per track, one card per task.
Build the timeline data with
labelTypeset todate, so events sit on real dates.Create the board and draw both sections and both items in one batch.
Run the example
Create an API key in the developer console with the scopes user:read and boards:write, then:
cp .env.example .env # paste your key into .env
node event-schedule.js "Product Summit 2027"
The key code
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.