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

# Work Log

> A weekly view of your team's pull requests and code reviews.

export const CtaGetStarted = ({label = "Ready to make delivery flow again?"}) => <div style={{
  display: "flex",
  justifyContent: "space-between",
  alignItems: "center",
  marginTop: 80,
  background: "#1a1b1e",
  color: "#fff",
  borderRadius: 8,
  border: "1px solid #69db7c",
  padding: "10px"
}}>
    <div style={{
  display: "flex",
  justifyContent: "space-between",
  alignItems: "center",
  gap: 12,
  fontWeight: 500
}}>
      <img src="https://mintlify.s3-us-west-1.amazonaws.com/sweetrdev/logo.svg" height={24} width={24} style={{
  margin: 0
}} />
      <div>{label}</div>
    </div>
    <a href="https://github.com/apps/sweetr-dev/installations/new" rel="nofollow" className="not-prose" style={{
  padding: "8px 16px",
  background: "#69db7c",
  color: "#000",
  borderRadius: 4,
  fontSize: 14
}}>
      Try now
    </a>
  </div>;

export const ColorBadge = ({size, label, color, marginBottom = 10}) => <div style={{
  display: "flex",
  gap: 10,
  marginBottom,
  alignItems: "center"
}}>
    <div style={{
  width: 24,
  height: 24,
  border: `1px solid ${color}`,
  borderRadius: 4
}}></div>
    <div>{label}</div>
  </div>;

export const PrBadge = ({type, color}) => <div style={{
  display: "flex",
  gap: 10,
  marginTop: 10
}}>
    <div style={{
  background: "#25262b",
  border: "1px solid #373a40",
  borderRadius: "4px",
  width: 28,
  height: 28,
  display: "flex",
  alignItems: "center",
  justifyContent: "center",
  color
}}>
      {type === "merged-no-review" && <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-square-rounded-x">
          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
          <path d="M10 10l4 4m0 -4l-4 4" />
          <path d="M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z" />
        </svg>}
      {type === "reviewed" && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-eye-check">
          <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"></path>
          <path d="M11.102 17.957c-3.204 -.307 -5.904 -2.294 -8.102 -5.957c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6a19.5 19.5 0 0 1 -.663 1.032"></path>
          <path d="M15 19l2 2l4 -4"></path>
        </svg>}
      {type === "approved" && <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-square-rounded-check">
          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
          <path d="M9 12l2 2l4 -4" />
          <path d="M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z" />
        </svg>}
      {type === "open" && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-git-pull-request">
          <path d="M6 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M6 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M18 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M6 8l0 8"></path>
          <path d="M11 6h5a2 2 0 0 1 2 2v8"></path>
          <path d="M14 9l-3 -3l3 -3"></path>
        </svg>}
      {type === "stuck-merge" && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-git-merge">
          <path d="M7 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M7 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M17 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path>
          <path d="M7 8l0 8"></path>
          <path d="M7 8a4 4 0 0 0 4 4h4"></path>
        </svg>}
      {type === "no-review" && <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-eye-x">
          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
          <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
          <path d="M13.048 17.942a9.298 9.298 0 0 1 -1.048 .058c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6a17.986 17.986 0 0 1 -1.362 1.975" />
          <path d="M22 22l-5 -5" />
          <path d="M17 22l5 -5" />
        </svg>}
      {type === "stuck-review" && <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-eye-x">
          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
          <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
          <path d="M13.048 17.942a9.298 9.298 0 0 1 -1.048 .058c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6a17.986 17.986 0 0 1 -1.362 1.975" />
          <path d="M22 22l-5 -5" />
          <path d="M17 22l5 -5" />
        </svg>}
      {type === "first-to-review" && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-eye-star">
          <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"></path>
          <path d="M9.608 17.682c-2.558 -.71 -4.76 -2.603 -6.608 -5.682c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"></path>
          <path d="M17.8 20.817l-2.172 1.138a.392 .392 0 0 1 -.568 -.41l.415 -2.411l-1.757 -1.707a.389 .389 0 0 1 .217 -.665l2.428 -.352l1.086 -2.193a.392 .392 0 0 1 .702 0l1.086 2.193l2.428 .352a.39 .39 0 0 1 .217 .665l-1.757 1.707l.414 2.41a.39 .39 0 0 1 -.567 .411l-2.172 -1.138z"></path>
        </svg>}
    </div>
    <div>
      {type === "merged-no-review" && "Merged without review"}
      {type === "reviewed" && "Reviewed"}
      {type === "approved" && "Approved"}
      {type === "stuck-merge" && "Stuck on merge"}
      {type === "stuck-review" && "Stuck on review"}
      {type === "open" && "Open"}
      {type === "no-review" && "Not reviewed"}
      {type === "first-to-review" && "First to review"}.
    </div>
  </div>;

## Demo

<Frame>
  <img src="https://mintcdn.com/sweetrdev/eFb8git0HDRlFHI6/images/work-log.png?fit=max&auto=format&n=eFb8git0HDRlFHI6&q=85&s=d69aaf732d9387ecaed73d031a3f9b28" width="1360" height="768" data-path="images/work-log.png" />
</Frame>

## How it works

A weekly view of your team's pull requests and code reviews. Each icon represents a PR or review, and grows in size with the change. Spot where work flows, where it piles up, and where it's stuck.

Contributions from each team member are organized by day and grouped into three categories:

* **Opened PRs** (green hexagons)
* **Merged PRs** (purple hexagons)
* **Code reviews** (speech bubble icons)

The size of each icon varies based on the PR size, giving a clear indication of the effort involved. Hovering over an icon provides additional details, including the PR title, repository name, number of comments, and size.

### Use it to

#### For leaders

* **Spot workload imbalance:** Quickly see if work is spread evenly or if someone is consistently overloaded.
* **Prepare for 1:1s:** Walk into conversations with concrete context on what happened that week, not just gut feelings.
* **Recognize effort, not just volume:** Fewer, larger icons mean someone tackled a big piece of work. Not every week needs a wall of dots.
* **Check in early:** A quiet week can mean someone is blocked. Use it as a signal to offer support, not to judge.

#### For individual contributors

* **Build your brag document:** Use the Work Log to highlight contributions during 1:1s or performance reviews.
* **Support promotion cases:** Provide concrete evidence of high-impact work and consistency over time.
* **Document growth:** See your progress over time and identify areas where you've improved or taken on more complex tasks.

### Bad practices

It's very important to know how this data should not be used. The Work Log is **not intended to measure individual productivity.** It only reflects activity related to PRs and code reviews. It doesn't account for essential work outside of code contributions, like planning, meetings, research, or documentation.

Use it as a tool to improve collaboration, provide feedback, and recognize effort, not as a singular performance metric.

<CtaGetStarted />
