Project Planning / Scheduling SaaS
GanttChart
Persian-first scheduling with Jalali calendars, RTL timeline geometry, dependencies, baselines, and critical path.
Overview
GanttChart is a Persian project scheduling experience where dates, RTL rendering, and timeline geometry must agree. It treats the Jalali calendar as a first-class model rather than a formatting layer over a Gregorian timeline.
The product has expanded from a focused scheduler into a broader web experience with project organization, templates, import and export tools, and subscription infrastructure.
Origin and motivation
The product began with a practical local need: create project schedules using Persian and Jalali dates natively, without visible alignment drift between headers, bars, and interactions.
The problem
In an RTL chart, a task bar, a month header, a dependency connector, and a drag operation must agree about the same date-to-coordinate mapping. Fixed assumed month widths and separate origin calculations create cumulative offsets.
Jalali months may contain 29, 30, or 31 days, and quarter groups align to Jalali months. A Gregorian-only geometry model cannot silently serve this experience.
Who it is for
Persian-speaking project managers, planning teams, and organizations that need a native Jalali scheduling experience.
Vision and objectives
A scheduling product where calendar semantics, visual geometry, and interaction behavior share one canonical contract.
Key capabilities
- Jalali calendar, Persian digits, and RTL timeline rendering
- Tasks, subtasks, milestones, and finish-to-start, start-to-start, finish-to-finish, and start-to-finish dependencies
- Zoom levels from day to quarter, templates, and project organization
- Baselines and baseline comparison in supported flows
- Critical path as a premium capability
- CSV, XLSX, and MSP-XML import and export
- Web and Android delivery
Engineering and architecture
The timeline refactor introduced a shared geometry module with one timeline origin at the first period boundary and one uniform pixel-per-calendar-day scale per zoom. Columns use the actual inclusive duration of each Jalali period.
Date-to-position and position-to-date are inverse operations. Task bounds, columns, grid alignment, drag, and resize share the same origin and scale. In RTL, the origin is measured from the right edge.
Difficult problems and solutions
One coordinate contract
A production bug cluster revealed that independently calculating headers, task bars, and drag positions caused visible alignment drift. The refactor reduced a UI defect family to one mathematical model.
Calendar-aware geometry
Variable Jalali month lengths and quarter alignment require deriving column widths from actual day counts, not assumed 30-day months.
Evidence boundaries
Release reports record 18 geometry unit tests, browser checks across day, week, month, and quarter zooms, and selected full-stack API assertions. They do not certify every browser, device, or scheduling case.
Current status
GanttChart is in production. The 13 October release report records a frontend-only deployment, smoke checks, rollback preparation, 18 of 18 browser assertions per browser, and 21 of 21 full-stack API assertions for selected workflows.
The earlier README claim of Microsoft Project compatibility is not repeated as a verified capability. MPP import remains heuristic, and resource, cost, collaboration, and payment features have known gaps.
Discuss GanttChart
If this work is relevant to your organization, start with the problem and the context.