> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Comments in the client portal

> How client comments work on a deliverable, why internal notes stay hidden, and how TimeTracker groups a burst of client messages into one email.

A client comments on a deliverable, not on a project or an invoice. Every deliverable card in the portal carries its own thread.

Only comments marked client-visible appear there. Your internal notes on the same task stay internal.

## Where comments appear

| Surface                            | Has a comment thread |
| ---------------------------------- | -------------------- |
| A deliverable (task) in the portal | Yes                  |
| The portal project page as a whole | No                   |
| An invoice                         | No                   |
| The portal home page               | No                   |

One thread per deliverable, shown below the deliverable's details and above the attachments row.

## What a comment shows

Each comment displays:

* The author's avatar – their photo, or up to two letters of their initials
* An author line in the shape `Priya Raman · 3 Mar 2026`
* The comment body

A client's own comments show **You** instead of their name.

<Note>
  Only the date is shown, never the time of day. Comments are listed oldest first.
</Note>

## Internal notes stay internal

This is the rule that makes the thread safe to use:

<Warning>
  A comment reaches the portal only if it is explicitly marked client-visible. An internal note on the same task is never sent to the client's browser – it is filtered out on the server, not hidden with styling.
</Warning>

You can therefore keep a working conversation with your team and a client conversation on the same task, without two places to look.

## Who gets named

| Situation                                     | What the client sees                   |
| --------------------------------------------- | -------------------------------------- |
| A staff member wrote a client-visible comment | Their name and photo                   |
| A staff member only wrote internal notes      | Nothing – they are never named         |
| An author cannot be resolved                  | The collective label **Project group** |
| Any author's email                            | Never shown                            |

Naming a colleague is a choice you make when you post a client-visible comment. Nobody is exposed by working on the task.

## How a client posts a comment

<Steps>
  <Step title="Open the deliverable">
    From the portal home, click a project, then find the deliverable.
  </Step>

  <Step title="Write the comment">
    Type in the box below the thread. Its placeholder reads `Write a comment…`.
  </Step>

  <Step title="Post it">
    Click **Post comment**. The button stays disabled until there is something to post.
  </Step>
</Steps>

An empty comment is refused with `Write something before posting.` A failure shows `Couldn't post your comment. Please try again.`

A client can never post an internal comment. The portal fixes the visibility to client-visible and stamps the author, so neither can be faked.

An empty thread reads **No comments yet** with the text `Start the conversation – post a comment below.`

## Mentions

An `@handle` inside a client-visible comment renders as the person's name and face.

Only handles in comments the client is already allowed to read are resolved. An unresolved handle appears exactly as it was typed.

<Note>
  The portal has no mention picker. A client can type an `@handle`, but there is no autocomplete for them. Mentions are mainly something your team writes and the client reads.
</Note>

## How your team is notified

Clients often send three short messages in a row. TimeTracker groups them so your inbox does not.

| Behaviour                       | What it means for you                                                                                      |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| One email per burst             | A run of quick messages arrives as a single email, not one per message                                     |
| A short settle pause            | The system waits about five minutes so a burst can finish arriving                                         |
| A floor between emails          | At most one email roughly every 30 minutes per thread, so a chatty client caps out near two emails an hour |
| Everything since the last email | Each email carries every message since the previous one                                                    |
| Up to 8 messages per email      | Older ones ride along as context                                                                           |
| Nothing is silently dropped     | Beyond 8, the email reports how many more there were                                                       |
| Replies alone send nothing      | A window containing only your own team's replies produces no email                                         |
| Never about your own message    | A client is never emailed about a comment they wrote themselves                                            |

<Note>
  A deleted comment drops out of a pending email too. The thread is re-read at the moment the email is built, so a comment removed in the meantime never goes out.
</Note>

If the Client portal app is switched off between a comment being posted and the email being sent, that email is suppressed.

Approving a **scope change** also notifies your owners and admins. Approving a plain deliverable does not raise that separate event.

## Example

Ruth Castillo opens **Website Redesign** at Northwind Studio and finds the deliverable "Homepage wireframes".

She posts three comments in two minutes:

1. "The hero image feels too dark."
2. "Also can we try the logo left-aligned?"
3. "Sorry – and the CTA should say Order now."

Priya Raman gets **one** email covering all three, about five minutes later. Priya replies in the portal thread. Ruth sees Priya's name and photo on the reply. Ruth is not emailed about her own three messages.

## Permissions

| Action                                 | Capability                         | Roles                                             |
| -------------------------------------- | ---------------------------------- | ------------------------------------------------- |
| Post a client-visible comment as staff | `task.edit`                        | Owner, Admin, Project Manager, Member, Contractor |
| Post a comment as a portal contact     | None – it comes with portal access | Client                                            |
| Give a contact portal access           | `client.manage`                    | Owner, Admin, Project Manager                     |

## Common questions

<AccordionGroup>
  <Accordion title="Can a client see our internal comments?">
    No. Internal comments are filtered out on the server using an exact match on visibility, so a comment with no visibility set can never read as client-visible either.
  </Accordion>

  <Accordion title="Can a client edit or delete their comment?">
    There is no edit or delete control in the portal comment thread.
  </Accordion>

  <Accordion title="Can a client attach a file to a comment?">
    Not to the comment itself. The deliverable card has a separate **Upload file** button.
  </Accordion>

  <Accordion title="Why did I get one email for five client messages?">
    That is the grouping working as designed. A burst of messages becomes one email so a conversation does not flood your inbox.
  </Accordion>

  <Accordion title="Can a client comment on an invoice?">
    No. There is no comment thread on an invoice in the portal.
  </Accordion>

  <Accordion title="Does a client see comment timestamps?">
    They see the date, not the time.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                              | Cause                                                                            | Fix                                           |
| ------------------------------------ | -------------------------------------------------------------------------------- | --------------------------------------------- |
| A client cannot see your reply       | The comment was posted as internal                                               | Post it as a client-visible comment           |
| A client's comment did not email you | You were the only one who replied in that window, or the email is still settling | Wait a few minutes, or open the thread        |
| No emails at all from a thread       | The Client portal app was switched off                                           | Turn it back on in **Settings → Apps**        |
| A mention shows as raw text          | The handle could not be resolved for that reader                                 | Use the person's name in the sentence as well |

## Related guides

<CardGroup cols={2}>
  <Card title="Portal projects" icon="folder" href="/portal/portal-projects">
    Deliverables, approvals and uploads.
  </Card>

  <Card title="What clients can see" icon="eye" href="/portal/what-clients-can-see">
    What is stripped from a comment before it is sent.
  </Card>

  <Card title="Comments and mentions" icon="at-sign" href="/tasks/comments-and-mentions">
    How comments work for your team.
  </Card>

  <Card title="Email notifications" icon="mail" href="/notifications/email-notifications">
    How TimeTracker emails your team.
  </Card>

  <Card title="Client portal overview" icon="door-open" href="/portal/overview">
    The portal end to end.
  </Card>

  <Card title="Portal permissions" icon="lock" href="/portal/portal-permissions">
    Who can manage portal access.
  </Card>
</CardGroup>
