> ## 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.

# Projects in the client portal

> How a project becomes visible to a client contact, what a deliverable card shows, and how approving a deliverable and uploading a file work in the portal.

Projects are what a client sees first. When a contact signs in, the portal opens on their project list – every project of their client company that is shared with them.

Access follows the project's client automatically. Move a project to a different client and the access moves with it.

## How a project becomes visible

A portal contact sees a project when both are true:

1. They are a portal contact of the client company, and
2. A share exists between them and the project.

Shares are created two ways.

### Automatically, from the project's client

This is the normal path and it runs in both directions.

| When this happens                            | What happens to portal access                                                |
| -------------------------------------------- | ---------------------------------------------------------------------------- |
| You create a project for a client            | Every portal contact of that client gets access                              |
| You assign an existing project to a client   | Every portal contact of that client gets access                              |
| You move a project to a **different** client | The old client's contacts **lose** access, the new client's contacts gain it |
| You clear the project's client               | Every contact of the old client loses access                                 |
| A contact accepts a portal invite            | They get access to every current project of their client                     |

<Warning>
  Moving a project between clients changes who can see it. The old client's contacts lose it at the same moment, so nothing leaks – but check the new client's contact list before you move a project, because they will see it immediately.
</Warning>

### By hand, per contact

On the client record's **Portal access** panel, each contact has a checkbox for each of that client's projects. Untick one to take a single project away from a single contact.

<Note>
  Archiving a project does **not** remove portal access. An archived project a contact is shared on stays in their list. Untick it if you want it gone.
</Note>

## What the portal project list shows

The list is the portal home page. Its heading reads **Shared with you**, above the eyebrow **Your projects**.

Each project is a card, not a table row. A card shows exactly three things:

| Element      | What it is                                                                                                           |
| ------------ | -------------------------------------------------------------------------------------------------------------------- |
| Project name | Large, at the top of the card                                                                                        |
| Status badge | **Draft**, **Planned**, **Active**, **On hold**, **Waiting on client**, **Completed**, **Cancelled** or **Archived** |
| Subtitle     | The fixed line `View deliverables, comments and approvals`                                                           |

There is no search box, no filter, no sort control and no pagination on the portal project list.

When nothing is shared yet, the client sees **Nothing shared yet** with the text `Your group hasn't shared any projects with you. You'll see them here once they do.`

## What the portal project page shows

Clicking a card opens the project. At the top is a back link, **All projects**, then the project name and its status badge.

Below that is one card per client-visible deliverable. Each deliverable card shows:

<Steps>
  <Step title="The deliverable title">
    The task title, exactly as you wrote it.
  </Step>

  <Step title="A status badge">
    Only three values reach a client – **To do**, **In progress** or **Completed**. Your internal sections are collapsed into these before they leave your workspace.
  </Step>

  <Step title="A due date, if one is set">
    Shown as `Due 14 Mar 2026`. Nothing renders if there is no due date.
  </Step>

  <Step title="An approval button">
    **Approve deliverable**, or the word **Approved** with a tick once it has been approved.
  </Step>

  <Step title="A comment thread">
    Every client-visible comment on that deliverable, plus a box to add one.
  </Step>

  <Step title="An attachments row">
    An **Attachments** label and an **Upload file** button.
  </Step>
</Steps>

A project with nothing to show reads **No deliverables yet** with the text `There's nothing to review on this project right now. Check back soon.`

## Approving a deliverable

A client can sign off on a deliverable in one click.

<Steps>
  <Step title="Click Approve deliverable">
    The button sits on the deliverable card.
  </Step>

  <Step title="Confirm">
    A dialog opens: **Approve deliverable?** with the text `Your group will be notified and this approval is recorded. This can't be undone from your side.` The buttons are **Cancel** and **Approve deliverable**.
  </Step>

  <Step title="Done">
    A toast confirms `Approval recorded. Your group has been notified.` The button is replaced by **Approved** with a tick.
  </Step>
</Steps>

<Warning>
  There is no undo in the portal. A client cannot un-approve a deliverable themselves.
</Warning>

Approving is safe to repeat – clicking twice does not record two approvals.

## Uploading a file

The **Upload file** button takes one file at a time. While it uploads, the button reads **Uploading…** and is disabled. On success a toast confirms `Uploaded brief.pdf.`

<Note>
  The **Attachments** row lets a client upload, but it does not list files that were uploaded before. A client cannot browse, download or delete attachments in the portal.
</Note>

There is no drag-and-drop in the portal, and no multi-file selection.

## Example

Northwind Studio moves the **Brand Refresh** project from Fenwick Legal to Bluebird Coffee, because Bluebird acquired the brand work.

The moment Priya Raman saves the change:

* Fenwick Legal's portal contacts lose access to Brand Refresh.
* Ruth Castillo, Bluebird Coffee's contact, gains it.

Ruth signs in and now sees three cards – **Website Redesign**, **Monthly Retainer** and **Brand Refresh**. She opens Website Redesign and sees a deliverable "Homepage wireframes", marked **In progress**, due 14 March. She approves it, and Northwind is notified.

## Permissions

| Action                                 | Capability       | Roles that hold it by default |
| -------------------------------------- | ---------------- | ----------------------------- |
| Assign a project to a client           | `project.manage` | Owner, Admin, Project Manager |
| Tick or untick a project for a contact | `project.manage` | Owner, Admin, Project Manager |
| See the Portal access panel            | `client.manage`  | Owner, Admin, Project Manager |

Sharing needs the Client portal app to be on. Unsharing does not – you can always take access away, even with the portal switched off.

Every grant and revoke is written to your audit history.

## Common questions

<AccordionGroup>
  <Accordion title="Can I share a project with a contact of a different client?">
    The client record's checkboxes only list that client's own projects, so this is not something you do from the portal panel. Access is designed to follow the project's client.
  </Accordion>

  <Accordion title="Does every task show up as a deliverable?">
    No. Only tasks marked client-visible appear. Everything else stays internal.
  </Accordion>

  <Accordion title="Can a client change a deliverable's status?">
    No. The portal is read-only apart from approving, commenting and uploading.
  </Accordion>

  <Accordion title="Why does a client see a project we finished?">
    Archiving hides a project from your team's lists but does not revoke portal access. Untick it on the client's **Portal access** panel.
  </Accordion>

  <Accordion title="Can a client sort or filter their projects?">
    No. The portal project list has no controls at all – it is a plain list of cards.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                  | Cause                                                    | Fix                                                                          |
| ---------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------- |
| A contact sees no projects               | The client has no projects, or every project is unticked | Assign a project to the client, or tick one                                  |
| A contact sees a project they should not | The project belongs to their client                      | Move the project to the right client, or untick it for that contact          |
| A former client still sees work          | The project was never moved off them                     | Change the project's client, which revokes the old contacts in the same step |
| A deliverable is missing                 | The task is not marked client-visible                    | Mark it client-visible on the task                                           |

## Related guides

<CardGroup cols={2}>
  <Card title="What clients can see" icon="eye" href="/portal/what-clients-can-see">
    The full field-by-field list.
  </Card>

  <Card title="Portal comments" icon="message-square" href="/portal/portal-comments">
    Client-visible comments and how notifications are grouped.
  </Card>

  <Card title="Invite a client contact" icon="user-plus" href="/portal/invite-a-client-contact">
    Give a client a login.
  </Card>

  <Card title="Client projects" icon="folder" href="/clients/client-projects">
    Projects on a client record.
  </Card>

  <Card title="Project visibility" icon="users" href="/projects/project-visibility">
    Who on your team sees a project.
  </Card>

  <Card title="Remove portal access" icon="user-minus" href="/portal/remove-portal-access">
    Take access away cleanly.
  </Card>
</CardGroup>
