Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
de0d94a
feat(docs): add Gantt chart section to sidebar navigation
MichaelUray May 15, 2026
e845aa7
docs(tracker): add Gantt overview page
MichaelUray May 15, 2026
0720671
docs(tracker): add Gantt dependencies page
MichaelUray May 15, 2026
b0c4a0f
docs(tracker): add Gantt cascade scheduling page
MichaelUray May 15, 2026
afc893d
docs(tracker): add Gantt critical path page
MichaelUray May 15, 2026
c64d6a2
docs(tracker): add Gantt working days page
MichaelUray May 15, 2026
2786006
docs(tracker): add Gantt filtering and grouping page
MichaelUray May 15, 2026
1529e24
docs(tracker): add Gantt saved views page
MichaelUray May 15, 2026
ae8d0c3
docs(tracker): add Gantt bulk operations page
MichaelUray May 15, 2026
1616166
docs(tracker): add Gantt auto vs manual scheduling page
MichaelUray May 15, 2026
8985221
docs(tracker): add Gantt keyboard shortcuts page
MichaelUray May 15, 2026
6acb5ff
docs(tracker): add Gantt export page
MichaelUray May 15, 2026
8c8ea66
docs(tracker): add Gantt mobile and tablet page
MichaelUray May 15, 2026
24e3eb1
docs(team-planner): point to new Gantt chart for project-level visual…
MichaelUray May 15, 2026
80fa2c4
fix(gantt): replace duplicate placeholder screenshots with real captures
MichaelUray May 15, 2026
f9b0ad8
docs(task-tracking): document new issue/project scheduling fields
MichaelUray May 15, 2026
9f556ac
docs(tracker/gantt): align lag wording with cascade scheduler
MichaelUray May 15, 2026
749f975
docs(sidebar): nest Gantt chart under Task tracking
MichaelUray May 15, 2026
b98f7d5
docs(tracker/gantt): document Plan-2 filter+search redesign
MichaelUray May 18, 2026
7548680
docs(tracker/gantt): refresh screenshots from plan2-fix12 deployment
MichaelUray May 18, 2026
0941531
docs(tracker/gantt): re-shoot screenshots from plan2-fix13 with left-…
MichaelUray May 18, 2026
2ad6cdd
docs(tracker/gantt): refresh mobile + view-switcher screenshots from …
MichaelUray May 18, 2026
b6a8f09
docs(tracker/gantt): bar coloring + overlays + refreshed screenshots …
MichaelUray May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,27 @@ export default defineConfig({
label: "Scheduling action items",
link: "/task-tracking/scheduling-action-items/",
},
{
label: "Gantt chart",
collapsed: true,
items: [
{ label: "Overview", link: "/tracker/gantt/" },
{ label: "Bar coloring and overlays", link: "/tracker/gantt/bar-coloring/" },
{ label: "Dependencies", link: "/tracker/gantt/dependencies/" },
{ label: "Cascade scheduling", link: "/tracker/gantt/cascade/" },
{ label: "Critical path", link: "/tracker/gantt/critical-path/" },
{ label: "Working days", link: "/tracker/gantt/working-days/" },
{ label: "Filtering and grouping", link: "/tracker/gantt/filter-group/" },
{ label: "Advanced search", link: "/tracker/gantt/advanced-search/" },
{ label: "No search results", link: "/tracker/gantt/empty-state/" },
{ label: "Saved views", link: "/tracker/gantt/saved-views/" },
{ label: "Bulk operations", link: "/tracker/gantt/bulk-operations/" },
{ label: "Auto vs manual scheduling", link: "/tracker/gantt/auto-manual/" },
{ label: "Keyboard shortcuts", link: "/tracker/gantt/shortcuts/" },
{ label: "Exporting", link: "/tracker/gantt/export/" },
{ label: "Mobile and tablet", link: "/tracker/gantt/mobile/" },
],
},
],
},
{
Expand Down
Binary file added src/assets/gantt/auto-manual-toggle-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/bulk-selected-bars-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/cascade-before-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/color-by-assignee-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/color-by-component-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/color-by-milestone-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/color-by-priority-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/color-by-status-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/colors-popup-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/dependencies-editor-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/dependencies-fs-arrow-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/edit-component-swatch-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/export-fullscreen-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/export-hamburger-menu-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/filter-bar-active-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/group-by-component-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/group-by-priority-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/mobile-drawer-closed-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/mobile-drawer-open-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/mobile-pinch-zoom-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/mobile-tablet-view-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/gantt/overview-default-light.png
Binary file added src/assets/gantt/overview-with-data-light.png
Binary file added src/assets/gantt/saved-views-hamburger-light.png
Binary file added src/assets/gantt/saved-views-load-menu-light.png
Binary file added src/assets/gantt/shortcuts-help-popup-light.png
6 changes: 6 additions & 0 deletions src/content/docs/task-tracking/creating-issues.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ When creating or editing an issue, you can configure the following settings:

**Due date**: Select a due date for this issue. This is also optional.

**Start date**: Select a planned start date. Combined with the due date, this defines the issue's timeline on the [Gantt chart](/tracker/gantt/). Optional.

**Deadline**: A hard deadline that is tracked separately from the planned due date. The Gantt chart paints a marker at the deadline so you can see at a glance whether the planned schedule still respects it. Optional.

**Scheduling mode**: Choose between automatic (the default — the issue follows cascade re-scheduling from its predecessors) and manual (the issue is pinned to its current dates and cascade leaves it untouched). See [auto vs manual scheduling](/tracker/gantt/auto-manual/) for details.

**Set parent issue**: Make this issue the sub-issue of an existing issue. If the issue already has a parent, simply click the unset icon next to the parent issue to detach it.

**Attach**: Attach a file, image or other media to this issue.
Expand Down
2 changes: 2 additions & 0 deletions src/content/docs/task-tracking/creating-projects.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,5 @@ When creating or editing a project, you can configure the following settings:
**Members**: Select all members for this Project.

**Auto join**: Toggle whether you'd like new members to be automatically added to this project.

**Working days configuration**: Optionally define a weekday mask (which days count as working days) and a list of holidays. Projects without a working-days configuration fall back to a seven-day-a-week calendar. When the configuration is set, the [Gantt chart](/tracker/gantt/) cascade scheduler skips non-working days, the critical-path computation uses working-day arithmetic, and weekends/holidays are painted as a tint on the chart. See [working days](/tracker/gantt/working-days/) for details.
12 changes: 12 additions & 0 deletions src/content/docs/task-tracking/related-issues.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@ Open the dropdown menu on any issue detail page and select `Relations`, then cho

> **Note:** The current implementation does not actually prevent a blocked issue from being marked as complete before the blocking issue, but future versions of Huly will include a more complete development of this feature. In the meantime, you can use this feature as a visual indicator of dependencies between issues. Just like any other issue property, blocking can also be used when sorting issues in your tracker (see below).

## Typed scheduling dependencies

In addition to the simple "blocked by" marker above, issues can have typed scheduling dependencies that drive the [Gantt chart](/tracker/gantt/) cascade scheduler. Each dependency carries a kind and an optional lag (in working days):

- **FS (Finish-to-Start)** — successor starts after the predecessor finishes. Default. *"Build can start after design is done."*
- **SS (Start-to-Start)** — successor starts when the predecessor starts. *"QA can start as soon as development starts."*
- **FF (Finish-to-Finish)** — successor finishes when the predecessor finishes. *"Documentation should be done by the time the feature ships."*
- **SF (Start-to-Finish)** — successor finishes when the predecessor starts. *Rare, used for handover constraints.*
- **Lag** — number of working days between the linked anchors. Positive lag adds a gap, negative lag overlaps. *"FS +2d" means a two-working-day pause between predecessor end and successor start.*

Add a typed dependency from the issue side panel: open the **Dependencies** section, pick a predecessor, then click the dependency kind chip to open the visual editor (a 2×2 grid that shows the four kinds graphically) and adjust lag. See [dependencies](/tracker/gantt/dependencies/) for the full picker.

## Viewing related and blocked issues

In your tracker, you can filter issues by their related or blocking status by opening the `Filter` menu and selecting either "Related to" or "Blocked by". This will display only the issues that are related to or blocked by the selected issue. For example, below I've filtered all issues in the tracker by those related to an issue for checking color contrast:
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/team-resources/team-planner.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ Just like action items, if the visibility is set to "Only visible to you", the e

## Visualizing workload and capacity

Huly does not currently offer a Gantt Chart feature or other visualization of workload and capacity. The team planner does provide a way to see how many hours each team member has scheduled for the day, which can be used in combination with time tracking and due dates to understand project allocations and capacity planning.
For project-level scheduling and timeline visualization, see the [Gantt chart](/tracker/gantt/) view in the tracker. The team planner complements that by showing how many hours each team member has scheduled for the day, which can be used in combination with time tracking and due dates to understand project allocations and capacity planning.

If you're interested in finding out more about how you can work with Huly's current implementation to manage your specific workflows, you can chat with other users in our [Slack Community](https://huly.link/slack) to ask questions and exchange ideas.
58 changes: 58 additions & 0 deletions src/content/docs/tracker/gantt/advanced-search.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
title: Advanced Search
description: Prefix operators, search scopes, and match highlighting for the Tracker search bar.
---

import { Image } from 'astro:assets';
import customizeViewPlan2Toggles from '../../../../assets/gantt/customize-view-plan2-toggles-light.png';

## Overview

The Tracker search bar in every Issue viewlet (List, Kanban, Gantt) supports more than plain substring search. You can target specific fields via short prefix operators, decide whether bare terms search the title only or also the description and comments, and toggle visual highlighting of matched substrings.

## Prefix operators

Type `field:value` to restrict the search to a specific field. The Tracker recognises three friendly shorthands:

| Prefix | Routes to | Example |
|---|---|---|
| `title:foo` | issue title (`searchTitle`) | `title:loader` |
| `id:foo` | issue identifier (`identifier`) | `id:HULY-` |
| `comments:foo` | issue comments (`comments.message`) | `comments:fixed` |

Power users can also type the underlying Elasticsearch field names directly — `searchTitle:`, `identifier:`, `description.plain:`, `comments.message:`, `fulltextSummary:` and `searchShortTitle:` all pass through verbatim.

Anything else with a colon (URLs, times of day, `POC: design review`, `C++ developer`) is treated as plain text. The search bar is smart enough not to confuse a stray `:` for a field-targeted query, so the search engine never sees a malformed clause.

## Search scope

The **Customize View** popover (cog icon, next to the viewlet selector) carries a **Search in…** dropdown that decides how bare-text searches (no prefix) are interpreted:

- **Only Title** — bare terms are constrained to issue titles. Fastest, lowest noise.
- **Title + Description** — also matches the issue body.
- **Title + Description + Comments** (default) — also matches comment messages and the fulltext summary.

Switching the scope re-runs the current search immediately — you don't need to retype.

<Image src={customizeViewPlan2Toggles} alt="Customize View popover showing the toggles for Quick filter, Search in, and Highlight search matches" inferSize quality='max' />

The same popover also exposes two more search-related toggles:

- **Quick filter: All / Active / Backlog** — show or hide the All/Active/Backlog mode selector on the toolbar. Hide it if your team only uses chip filters.
- **Highlight search matches** — visually highlight the matched substring inside issue identifiers (in the sidebar) and issue titles. Turn off if you find the highlight distracting.

## Clearing the search

The search input has a **×** button on the right end (visible when there is text). Clicking it clears the input and re-runs the now-empty query, restoring the full result set. The **Escape** key inside the focused input does the same.

## Empty results

When a search returns zero issues, the Tracker shows a dedicated empty-state card explaining the situation and offering two actions ("Suche ohne Filter" / "In allen Projekten suchen"). See [No search results](./empty-state) for details.

## Tips

- Prefix-targeted searches always win over the scope dropdown. If you type `title:foo`, the **Search in…** setting is ignored — your prefix is explicit.
- Combining multiple prefix-targeted clauses works: `title:loader id:HULY-` matches issues that have "loader" in the title **and** an identifier starting with HULY-.
- The Lucene-style boolean operators (`AND`, `OR`, `NOT`) are accepted in prefix-targeted clauses.
- Special characters work transparently — `title:C++`, `comments:foo/bar`, `title:POC:123`, `title:list[0]` and similar inputs are auto-escaped so the Elasticsearch query_string parser reads them as literal text. Wildcards (`*`, `?`) and hyphens stay un-escaped because they are intentional syntax.
- Quoted phrases (`title:"release notes"`) are passed through as phrase literals, even when they contain whitespace or otherwise reserved characters.
52 changes: 52 additions & 0 deletions src/content/docs/tracker/gantt/auto-manual.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
title: Auto vs Manual Scheduling
description: Control whether an issue participates in cascade scheduling or is pinned to its current dates.
---

import { Image } from 'astro:assets';
import ganttSchedulingToggleLight from '../../../../assets/gantt/auto-manual-toggle-light.png';

## Overview

Every issue in Huly's Gantt chart has a **scheduling mode**: **Auto** or **Manual**. In Auto mode, the issue participates in cascade scheduling and will be shifted when a predecessor is dragged. In Manual mode, the issue is pinned to its current dates and acts as a hard constraint — the cascade stops at it.

## Auto Mode (Default)

- The issue can be shifted by cascade when a predecessor's dates change.
- The issue is not pinned; its dates are considered flexible.
- No visual indicator in the bar.

## Manual Mode

- The issue is pinned to its current `startDate` and `dueDate`.
- Cascade shifts stop at this issue — successors of a manual issue are not affected when predecessors are dragged.
- A **pin icon** is shown inside the bar as a visual indicator.

A small pin icon appears inside the bar near its left edge when the issue is in Manual mode. The pin is not shown for Auto-mode issues, so its presence makes manually-pinned bars immediately distinguishable in the timeline.

## How to Switch Scheduling Mode

**From the issue editor:**
1. Open an issue by clicking it in the Gantt sidebar or double-clicking the bar.
2. Find the **Scheduling** field in the issue detail panel.
3. Toggle between **Auto** and **Manual**.

<Image src={ganttSchedulingToggleLight} alt="Issue editor panel showing the Scheduling toggle set to Manual" inferSize quality='max' />

**From the bar context menu:**
1. Right-click a bar in the Gantt chart.
2. Select **Pin (Manual mode)** or **Unpin (Auto mode)**.

## When to Use Manual Mode

- **Milestone issues** — milestones have fixed dates and should not drift with cascade.
- **External dependencies** — issues blocked by an external delivery date (e.g., a vendor's deadline).
- **Fixed-date deliverables** — contractual commitments where the date cannot change.
- **Review / sign-off gates** — tasks that must happen on a specific calendar date regardless of upstream delays.

## Tips

- Use Manual mode sparingly — if too many issues are pinned, cascade scheduling loses its value.
- Manual mode does not prevent you from manually dragging the bar — you can still reposition it by hand.
- When a cascade hits a Manual issue, Huly shows a warning in the confirm dialog: "X issues could not be shifted due to Manual constraints."
- You can bulk-set multiple issues to Manual mode by selecting them and using the right-click context menu.
Loading