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

# Manager guide

> Run daily loyalty operations, maintain rewards and outlets, and support the team within your permissions.

export const GuidePractice = ({questions}) => {
  const [step, setStep] = useState(0);
  const [answer, setAnswer] = useState(null);
  const question = questions[step];
  const correct = answer === question.correct;
  return <section className="kardy-guide kardy-guide-practice" aria-label="Practice a real situation">
      <div className="kardy-guide-heading">
        <div>
          <span className="kardy-guide-kicker">TRY IT SAFELY</span>
          <h3>What would you do?</h3>
        </div>
        <span className="kardy-guide-count">
          {step + 1} / {questions.length}
        </span>
      </div>
      <p className="kardy-guide-question">{question.prompt}</p>
      <div className="kardy-guide-answers" role="group" aria-label="Choose an answer">
        {question.options.map((option, index) => <button key={`${step}-${index}`} type="button" aria-pressed={answer === index} onClick={() => setAnswer(index)}>
            <span aria-hidden="true">{String.fromCharCode(65 + index)}</span>
            {option}
          </button>)}
      </div>
      <div role="status" aria-live="polite">
        {answer !== null && <div className="kardy-guide-feedback" data-correct={correct}>
            <strong>{correct ? "That’s right." : "Not quite."}</strong>
            <p>{question.explanation}</p>
          </div>}
      </div>
      <div className="kardy-guide-footer">
        <small>Practice only. No stamps, claims or account changes.</small>
        <button type="button" className="kardy-guide-next" disabled={answer === null} onClick={() => {
    setStep((step + 1) % questions.length);
    setAnswer(null);
  }}>
          {step === questions.length - 1 ? "Practise again" : "Next situation"}
          <span aria-hidden="true"> →</span>
        </button>
      </div>
    </section>;
};

export const GuideChecklist = ({guide, title, items}) => {
  const [checked, setChecked] = useState([]);
  const [storage, setStorage] = useState("Progress stays in this browser only.");
  useEffect(() => {
    try {
      const value = JSON.parse(localStorage.getItem(`kardy-guide-v1:${guide}`) || "[]");
      setChecked(Array.isArray(value) ? [...new Set(value.filter(i => Number.isInteger(i) && i >= 0 && i < items.length))] : []);
    } catch {
      setStorage("Browser storage is unavailable. Progress lasts until you leave this page.");
    }
  }, [guide, items.length]);
  const save = next => {
    setChecked(next);
    try {
      localStorage.setItem(`kardy-guide-v1:${guide}`, JSON.stringify(next));
    } catch {
      setStorage("Browser storage is unavailable. Progress lasts until you leave this page.");
    }
  };
  return <section className="kardy-guide" aria-label={title}>
      <div className="kardy-guide-heading">
        <div>
          <span className="kardy-guide-kicker">YOUR CHECKLIST</span>
          <h3>{title}</h3>
        </div>
        <span className="kardy-guide-count" role="status">
          {checked.length} / {items.length}
        </span>
      </div>
      <progress aria-label={`${title} progress`} max={items.length} value={checked.length} />
      <div className="kardy-guide-tasks">
        {items.map((item, index) => <button type="button" key={item} className="kardy-guide-task t-check" role="checkbox" aria-checked={checked.includes(index)} onClick={() => save(checked.includes(index) ? checked.filter(i => i !== index) : [...checked, index])}>
            <span className="kardy-guide-box" aria-hidden="true">
              <svg viewBox="0 0 10.1668 10.1668">
                <path ref={path => {
    if (path) path.style.setProperty("--check-len", String(Math.ceil(path.getTotalLength())));
  }} d="M1 5.52L3.92 9.17L9.17 1" />
              </svg>
            </span>
            <span>{item}</span>
          </button>)}
      </div>
      <div className="kardy-guide-footer">
        <small>
          {checked.length === items.length ? "Checklist complete. This is a personal reminder, not a system readiness check." : storage}
        </small>
        <button type="button" className="kardy-guide-reset" onClick={() => save([])} disabled={!checked.length}>
          Reset checklist
        </button>
      </div>
    </section>;
};

Managers can run the counter flow and manage permitted rewards, outlets, and
card designs. Your role applies to the selected organisation, not every brand
on your account.

## Start the day

<GuideChecklist
  guide="manager"
  title="Your daily programme review"
  items={[
"I selected the correct organisation with my own account.",
"I reviewed Overview, Members and Rewards.",
"I checked active outlets, reward wording, stamp costs and claim restrictions.",
"The team knows the counter flow and qualifying purchase rules.",
]}
/>

## Review activity

Use Overview's **Filter** for store/date totals and the graph's **Date range**
for complete-day trends. In Members, review rewards ready and power customers
within the loaded list. **View all activities** in a member's history opens
their filtered audit history.

Open [Activities](/features/activities) to search scans, stamps and claims, or
[Live view](/features/live-view) for the latest ten recorded events beside the
store globe. Checks happen every 15 seconds while visible, not continuously;
pins represent stores, not customers.

## Keep rewards accurate

Open **Rewards → Customise rewards** to review permitted reward changes. Check
the name, stamp goal, and **Redeem at** outlet selection before saving.

Before saving a change, check [reward behaviour and performance](/features/rewards),
especially the effect of deleting a reward. Coordinate any changed promise with
the Owner and the people serving customers.

## Maintain outlets and customer touchpoints

Use **Locations** to review permitted outlet changes. Confirm that redemption
restrictions still point to active outlets. Use **Branding** for permitted card-design
changes and to preview the customer experience.

* [Manage outlets](/features/outlets)
* [Print and display a QR sign](/guides/qr-signs)
* [Understand joining and signup attribution](/customer-journey/join)

Some configuration forms remain Owner-only. If a setting is unavailable, ask the
Owner to make the change; do not switch to their login.

## Prepare member updates

Managers can open **Broadcasts** to compose, save, and review organisation drafts.
Saving a draft does not send it. Delivery requires completed setup and remains
disabled until enabled; only eligible, opted-in members can receive marketing.
Follow the [broadcast guide](/features/broadcasts) before queueing anything.

## Practise a programme decision

<GuidePractice
  questions={[
{
  prompt: "You remove the last reward. What happens to customers?",
  options: [
    "Unlocked claims are kept",
    "Earning and redemption stop",
    "A default reward is created automatically",
  ],
  correct: 1,
  explanation:
    "No rewards remain: earning and redemption stop, deleted rewards cannot be claimed, and past redemption history is preserved.",
},
{
  prompt: "A reward should be claimable at Orchard only. What do you save?",
  options: [
    "Leave every outlet unchecked",
    "Select Orchard in Redeem at",
    "Tell Staff without changing the reward",
  ],
  correct: 1,
  explanation:
    "Select Orchard in Redeem at. Leaving all outlets unchecked allows every active outlet, so it does not restrict claims to Orchard.",
},
{
  prompt: "A Staff member needs Manager access. Can you change their role?",
  options: [
    "Yes, any Manager can promote Staff",
    "Ask the Owner to change the role",
    "Share your own login",
  ],
  correct: 1,
  explanation:
    "Team role changes are Owner-only. Everyone should use their own account; never share credentials.",
},
]}
/>

## What needs the Owner?

Only the Owner manages invitations, teammate removal, Manager/Staff role changes,
ownership transfer, and billing. Report access problems to the Owner and operational
errors to [Support](/help), sharing the outlet, time, and error without customer secrets.

See [Accounts & access](/accounts/overview) for the full role comparison and
[feature availability](/availability) for dev and rollout limits.
