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

# Chat

export const LoopVideo = ({src, poster, variant, autoPreload}) => (variant === 'tall' || variant === 'classic') && typeof autoPreload === 'boolean' ? <div onMouseEnter={e => {
  const replay = e.currentTarget.querySelector('[data-replay]');
  if (replay) replay.style.opacity = '1';
}} onMouseLeave={e => {
  const replay = e.currentTarget.querySelector('[data-replay]');
  if (replay) replay.style.opacity = '0';
}} style={{
  position: 'relative',
  margin: '18px 0 6px',
  aspectRatio: variant === 'tall' ? '3 / 4' : '4 / 3',
  borderRadius: '14px',
  border: '1px solid #ecdfcd',
  overflow: 'hidden',
  background: '#FFFBF2'
}}>
    <video ref={el => {
  if (!el || el.dataset.lazyInit) return;
  el.dataset.lazyInit = '1';
  el.muted = true;
  const box = el.parentElement;
  const loading = box && box.querySelector('[data-loading]');
  const hideLoading = () => {
    if (loading && el.readyState >= 2) loading.style.opacity = '0';
  };
  el.addEventListener('loadeddata', hideLoading);
  el.addEventListener('playing', hideLoading);
  const startPlay = () => {
    el.play().catch(() => {});
  };
  if (autoPreload || typeof IntersectionObserver === 'undefined') {
    startPlay();
    return;
  }
  const io = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (entry.isIntersecting) startPlay(); else el.pause();
    });
  }, {
    rootMargin: '150px'
  });
  io.observe(el);
}} muted loop playsInline preload={autoPreload ? 'auto' : 'none'} poster={poster} onClick={e => {
  const el = e.currentTarget;
  const pill = el.parentElement && el.parentElement.querySelector('[data-pill]');
  const show = (text, autoHide) => {
    if (!pill) return;
    pill.textContent = text;
    clearTimeout(pill._t);
    pill.style.opacity = '1';
    if (autoHide) {
      pill._t = setTimeout(() => {
        pill.style.opacity = '0';
      }, 900);
    }
  };
  if (el.paused) {
    el.play().catch(() => {});
    show('Unpaused', true);
  } else {
    el.pause();
    show('Paused', false);
  }
}} style={{
  position: 'absolute',
  inset: 0,
  width: '100%',
  height: '100%',
  margin: 0,
  objectFit: 'cover',
  display: 'block',
  cursor: 'pointer'
}}>
      <source src={src} type="video/mp4" />
    </video>
    <div data-loading style={{
  position: 'absolute',
  inset: 0,
  display: 'flex',
  alignItems: 'center',
  justifyContent: 'center',
  opacity: 1,
  transition: 'opacity 0.3s ease',
  pointerEvents: 'none',
  backgroundColor: '#FFFBF2',
  backgroundImage: 'url(/images/video-background.jpeg)',
  backgroundSize: 'auto 100%',
  backgroundPosition: 'center',
  backgroundRepeat: 'no-repeat',
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
  fontSize: '11px',
  fontWeight: 600,
  letterSpacing: '0.08em',
  textTransform: 'uppercase',
  color: '#8a7f70'
}}>
      Video is loading…
    </div>
    <button data-replay type="button" aria-label="Replay from the start" onClick={e => {
  e.stopPropagation();
  const box = e.currentTarget.parentElement;
  const video = box && box.querySelector('video');
  const pill = box && box.querySelector('[data-pill]');
  if (pill) pill.style.opacity = '0';
  if (video) {
    video.currentTime = 0;
    video.play().catch(() => {});
  }
}} style={{
  position: 'absolute',
  top: '10px',
  left: '10px',
  display: 'flex',
  alignItems: 'center',
  justifyContent: 'center',
  width: '32px',
  height: '32px',
  padding: 0,
  opacity: 0,
  transition: 'opacity 0.25s ease',
  color: '#ffffff',
  background: 'rgba(19, 22, 27, 0.72)',
  backdropFilter: 'blur(4px)',
  border: 'none',
  borderRadius: '999px',
  cursor: 'pointer'
}}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <path d="M3 12a9 9 0 1 0 3-6.7L3 8" />
        <path d="M3 3v5h5" />
      </svg>
    </button>
    <div data-pill style={{
  position: 'absolute',
  top: '10px',
  right: '10px',
  opacity: 0,
  transition: 'opacity 0.25s ease',
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
  fontSize: '11px',
  fontWeight: 600,
  letterSpacing: '0.06em',
  textTransform: 'uppercase',
  color: '#ffffff',
  background: 'rgba(19, 22, 27, 0.72)',
  backdropFilter: 'blur(4px)',
  borderRadius: '999px',
  padding: '4px 10px',
  pointerEvents: 'none'
}}>
      Paused
    </div>
  </div> : <div style={{
  margin: '18px 0 6px',
  padding: '12px 16px',
  borderRadius: '10px',
  border: '2px solid #d33',
  background: '#ffe5e5',
  color: '#990000',
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
  fontSize: '13px',
  lineHeight: 1.5
}}>
      {'<LoopVideo>'} needs <strong>variant</strong> (<strong>"tall"</strong> = 3:4 or <strong>"classic"</strong> = 4:3)
      and <strong>autoPreload</strong> ({'{true}'} or {'{false}'}).
    </div>;

Your personal AI assistant that already knows everything you've saved. Ask a question, brainstorm an idea, or just chat - and the right cards surface on their own, no searching required.

The best part: you can make Chat your everyday assistant, a replacement for ChatGPT, Gemini, or Claude - without ever framing your question around what you saved. Your knowledge isn't a separate place you go to search; it's automatically folded into the assistant's context whenever it's relevant, quietly shaping how it answers and how relevant those answers are to you.

Ask *"what can I fit into five days in Tokyo?"* and it can weave in the activities you clipped from TikTok two years ago - without you mentioning them at all.

### Ask your first question

Ask anything you'd ask the chat assistant you already use - and if you've saved something relevant, it's taken into account in the answer. It works the same everywhere.

<Tabs>
  <Tab title="iPhone & iPad">
    <LoopVideo src="/videos/chat-ios.mp4" variant="tall" autoPreload={true} />
  </Tab>

  <Tab title="Mac">
    <LoopVideo src="/videos/chat-mac.mp4" variant="classic" autoPreload={false} />
  </Tab>

  <Tab title="Web">
    <LoopVideo src="/videos/chat-web.mp4" variant="classic" autoPreload={false} />
  </Tab>
</Tabs>

## Like ChatGPT, but it knows your cards

Chat is powered by AI models from Anthropic - the same ones behind the [Claude](https://www.anthropic.com/claude) assistant. The difference is that Chat in Edicek automatically has access to every card you've saved - articles, notes, videos, tweets, and the **WHY** behind why you saved them.

When a card is relevant, Chat reads the whole card - your **WHY** note, the title and description, the page you saved, even the transcript of a video - so its answer is grounded in what you actually kept, not just a link or a title.

## Memory on, memory off

By default, every message can use your saved cards. The memory toggle in the message box - **With memory** / **Without memory** - controls that for a single message.

* **With memory** - Chat looks through your saved cards and uses the relevant ones in its answer.
* **Without memory** - Chat skips the card search and answers from its general knowledge only, just like a standalone assistant. Replies come back a little faster since there's nothing to look up, but you also miss any valuable context from your own cards - so reach for it when you want a purely general answer.

The toggle is per-message, not per-chat - you decide before every message you send, whether you're starting a fresh conversation or already deep in one. Each message starts with memory on, so you're always one tap away from your own knowledge.

Here's where to find the toggle and switch it on each platform.

<Tabs>
  <Tab title="iPhone & iPad">
    <LoopVideo src="/videos/chat-memory-ios.mp4" variant="tall" autoPreload={false} />
  </Tab>

  <Tab title="Mac">
    <LoopVideo src="/videos/chat-memory-mac.mp4" variant="classic" autoPreload={false} />
  </Tab>

  <Tab title="Web">
    <LoopVideo src="/videos/chat-memory-web.mp4" variant="classic" autoPreload={false} />
  </Tab>
</Tabs>

## Managing your chats

Start a new conversation any time from the welcome screen - just type your question and Chat opens a fresh conversation for it. Each chat keeps its context across messages, so you can ask follow-ups and change direction naturally.

Your past chats are grouped by time - Today, Yesterday, This week, and so on - so your history stays easy to scan, and each chat gets an automatic title from your first message.

## Chat actions

From any chat's menu you can:

<AccordionGroup>
  <Accordion title="Rename">
    Replace the automatic title with one of your own. Your custom title sticks - Edicek won't overwrite it later.
  </Accordion>

  <Accordion title="Delete">
    Remove the conversation for good, after a quick confirm. There's no undo.
  </Accordion>
</AccordionGroup>

### Opening the menu

The menu is one tap or click away on every platform - here's where to find it.

<Tabs>
  <Tab title="iPhone & iPad">
    <LoopVideo src="/videos/chat-menu-ios.mp4" variant="tall" autoPreload={false} />
  </Tab>

  <Tab title="Mac">
    <LoopVideo src="/videos/chat-menu-mac.mp4" variant="classic" autoPreload={false} />
  </Tab>

  <Tab title="Web">
    <LoopVideo src="/videos/chat-menu-web.mp4" variant="classic" autoPreload={false} />
  </Tab>
</Tabs>

## Tips

* **Add a note when you save** - The **WHY** you write on a card is what makes Chat's answers about it genuinely useful later. A few words of context go a long way.
* **One topic per conversation** - For the best results, start a new chat for each topic or question. Don't hesitate to create many short, single-purpose conversations - it helps Chat focus and give you more relevant answers from your cards.
* **Ask naturally** - Talk to Chat like you would a friend. You don't need perfect queries or formal language, just say what you're looking for.
* **Ask across languages** - Ask in English about content you saved in Czech, or the other way around. Chat matches meaning across languages, so it can still surface the right cards.

## Next steps

<Columns cols={2}>
  <Card title="Search" icon="magnifying-glass" href="/core-features/search">
    Get cards back instead of answers.
  </Card>

  <Card title="Cards" icon="layer-group" href="/core-features/cards">
    What each kind of card captures.
  </Card>
</Columns>
