A project timeline data generator that produces sequential phases, milestones, and dates as clean JSON. It is built for testing Gantt chart renderers, project management tools, and PM app demos with realistic but disposable data.
How it works
You set a start date, a phase count, and an average phase length. The generator chains phases back to back: each one begins the day the previous ends, with its duration varied around your average so the schedule looks organic. Within each phase it places two to three milestones at random day offsets, then sorts them chronologically so they always sit between the phase’s start and end.
Status is computed live against today’s date. A phase that has already finished is marked completed at 100%, the phase containing today is in progress with a percentage based on elapsed time, and later phases are not started at 0%. Everything is seeded, so identical inputs reproduce identical output; Regenerate advances the seed.
The JSON schema
Each phase object in the output follows a predictable schema that maps directly onto most Gantt and project-management data models:
{
"id": "P2",
"name": "Requirements & Planning",
"start": "2026-06-20",
"end": "2026-07-03",
"status": "in_progress",
"progress": 42,
"milestones": [
{ "name": "Spec finalised", "date": "2026-06-28" },
{ "name": "Stakeholder sign-off", "date": "2026-07-01" }
]
}
The status field takes one of three values: completed, in_progress, or not_started. The progress field is an integer from 0 to 100. These conventions are consistent with what most Gantt chart libraries (react-gantt-chart, dhtmlxGantt, frappe-gantt) expect without transformation.
The top-level object wraps the phases array with metadata:
{
"projectName": "Q3 Platform Upgrade",
"startDate": "2026-06-20",
"totalDays": 84,
"phases": [ ... ]
}
Practical uses for developers and designers
Testing a Gantt renderer. The status field changes based on today’s date, so you can set a start date in the past to generate a timeline where some phases are completed, one is in progress, and future ones are not started — which is exactly the mixed state that exposes rendering bugs in timeline components.
Prototyping a PM tool. Feed the JSON into a mock API response to demonstrate drag-and-drop phase editing, milestone markers, and progress bars with data that looks like a real project rather than test placeholders.
Design reviews. The readable list view lets non-technical stakeholders understand the structure without looking at JSON, making it useful as input for a design critique where the data represents a client’s hypothetical project.
Fixture files. Copy the JSON into a fixture file in your test suite. Because the same settings always produce the same output (until you click Regenerate), the fixture is stable across test runs.
Toggle to the readable list to eyeball the schedule, then copy the JSON straight into your test fixtures or seed data.