Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
**/.DS_Store
**/.DS_Store
.env.local
**/.next/
**/node_modules/
388 changes: 240 additions & 148 deletions README.md

Large diffs are not rendered by default.

201 changes: 105 additions & 96 deletions kits/embed/chat/README.md
Original file line number Diff line number Diff line change
@@ -1,138 +1,147 @@
# Agent Kit Embedded Chat by Lamatic.ai
<p align="center">
<img src="https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExdmFmdXh4aHB3bXZidmg1dDM1azhtY2xheTl6ZnUzbHdsYXo1OXVvcSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/6hnrR2Vk2PLByiWKbL/giphy.gif"/>
</p>
# 🧠 AI Meeting Intelligence Copilot — Kit README

<p align="center">
<a href="https://agent-kit-embedded-chat.vercel.app" target="_blank">
<img src="https://img.shields.io/badge/Live%20Demo-black?style=for-the-badge" alt="Live Demo" />
</a>
</p>
> Part of the [Lamatic AgentKit](https://github.com/Lamatic/AgentKit) · `kits/embed/chat`

**Agent Kit Embedded Chat** is an AI-powered document chat system built with [Lamatic.ai](https://lamatic.ai). It uses intelligent workflows to index PDFs and webpages, then provides an interactive chat interface where users can ask questions about their documents through a modern Next.js interface.
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vijayshreepathak/AgentKit&root-directory=kits/embed/chat&env=NEXT_PUBLIC_LAMATIC_PROJECT_ID,NEXT_PUBLIC_LAMATIC_FLOW_ID,NEXT_PUBLIC_LAMATIC_API_URL&envDescription=Lamatic%20project%20credentials)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Deploy button targets a personal fork instead of canonical upstream.

This can deploy a divergent codebase from the project’s main repository.

Suggested link fix
-[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vijayshreepathak/AgentKit&root-directory=kits/embed/chat&env=NEXT_PUBLIC_LAMATIC_PROJECT_ID,NEXT_PUBLIC_LAMATIC_FLOW_ID,NEXT_PUBLIC_LAMATIC_API_URL&envDescription=Lamatic%20project%20credentials)
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/Lamatic/AgentKit&root-directory=kits/embed/chat&env=NEXT_PUBLIC_LAMATIC_PROJECT_ID,NEXT_PUBLIC_LAMATIC_FLOW_ID,NEXT_PUBLIC_LAMATIC_API_URL&envDescription=Lamatic%20project%20credentials)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vijayshreepathak/AgentKit&root-directory=kits/embed/chat&env=NEXT_PUBLIC_LAMATIC_PROJECT_ID,NEXT_PUBLIC_LAMATIC_FLOW_ID,NEXT_PUBLIC_LAMATIC_API_URL&envDescription=Lamatic%20project%20credentials)
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/Lamatic/AgentKit&root-directory=kits/embed/chat&env=NEXT_PUBLIC_LAMATIC_PROJECT_ID,NEXT_PUBLIC_LAMATIC_FLOW_ID,NEXT_PUBLIC_LAMATIC_API_URL&envDescription=Lamatic%20project%20credentials)


[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/Lamatic/AgentKit&root-directory=kits/embed/chat&env=EMBEDDED_CHATBOT_PDF_INDEXATION,EMBEDDED_CHATBOT_WEBSITES_INDEXATION,EMBEDDED_CHATBOT_RESOURCE_DELETION,EMBEDDED_CHATBOT_CHATBOT,LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY&envDescription=Your%20Lamatic%20Config%Embedded%20Chat%20keys%20and%20Blob%20token%20are%20required.&envLink=https://lamatic.ai/templates/agentkits/embed/agent-kit-embed-chat)
An AI-powered Next.js app that converts raw meeting transcripts into structured insights (summary, action items, risks, next steps, follow-up email) and delivers them to Slack — all through a Lamatic chat widget embedded in the UI.

---

## 🗂️ Kit Structure

## Lamatic Setup (Pre and Post)

Before running this project, you must build and deploy the flow in Lamatic, then wire its config into this codebase.
```
kits/embed/chat/
├── app/
│ ├── page.js # Landing page — Server Component
│ ├── layout.js # Root layout (Geist font + Vercel Analytics)
│ ├── globals.css # Tailwind v4 theme + CSS variables
│ └── Screenshots/ # Demo screenshots
│ ├── 1.png
│ ├── fromLamatic-Running.png
│ ├── FromwebPage-With Followup mail-Running.png
│ └── Slack_integrated-Summarizer.png
├── components/
│ ├── LamaticChat.js # Widget lifecycle — mounts root div + script
│ ├── HeroActions.jsx # Interactive hero buttons (Client Component)
│ ├── TranscriptPlayground.jsx # Textarea + Analyze button
│ └── ui/ # shadcn/ui primitives
├── flows/
│ └── embedded-chatbot-chatbot/ # Exported Lamatic flow JSON
├── .env.local # ← create this (see below)
└── package.json
```
Comment on lines +13 to +33
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add code fence languages to satisfy markdownlint (MD040).

Both structural blocks are unlabeled fenced code sections.

Suggested lint fix
-```
+```text
 kits/embed/chat/
 ...
-```
+```

-```
+```text
 page.js (Server Component)
 ...
-```
+```

Also applies to: 118-134

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


Pre: Build in Lamatic
1. Sign in or sign up at https://lamatic.ai
2. Create a project (if you don’t have one yet)
3. Click “+ New Flow” and select "Templates"
4. Select the 'Embed Chat' agent kit
5. Configure providers/tools/inputs as prompted
6. Deploy the kit in Lamatic and obtain your .env keys
7. Copy the keys from your studio
---

Post: Wire into this repo
1. Create a .env file and set the keys
2. Install and run locally:
- npm install
- npm run dev
3. Deploy (Vercel recommended):
- Import your repo, set the project’s Root Directory (if applicable)
- Add env vars in Vercel (same as your .env)
- Deploy and test your live URL
## 🚀 Local Setup

Notes
- Coming soon: single-click export and “Connect Git” in Lamatic to push config directly to your repo.
### Prerequisites

---
- Node.js 18+
- A [Lamatic account](https://lamatic.ai) with your meeting intelligence flow deployed
- A Slack incoming webhook URL (configured in your Lamatic flow)

## 🔑 Setup
## Required Keys and Config
### 1. Install dependencies

You’ll need two things to run this project locally:

1. **.env Keys** → get it from your [Lamatic account](https://lamatic.ai) post kit deployment.
2. Vercel Blob Token – Required for resume file storage. Each deployment needs its own Blob token. You can generate it from your Vercel project after the first deploy (see instructions below).
```bash
cd kits/embed/chat
npm install
```

### 2. Create `.env.local`

| Item | Purpose | Where to Get It |
| ----------------- | -------------------------------------------- | ----------------------------------------------- |
| .env Key | Authentication for Lamatic AI APIs and Orchestration | [lamatic.ai](https://lamatic.ai) |
| Blob Read/Write Token | Resume file storage | [Vercel Blob Quickstart](https://vercel.com/docs/storage/vercel-blob/quickstart) |
```env
NEXT_PUBLIC_LAMATIC_PROJECT_ID=your_project_id
NEXT_PUBLIC_LAMATIC_FLOW_ID=your_flow_id
NEXT_PUBLIC_LAMATIC_API_URL=https://your-project.lamatic.dev
```

### 1. Environment Variables
All three values are available in **Lamatic Studio → Project Settings → Embed Widget**.

Create `.env.local` with:
### 3. Run

```bash
# Lamatic
EMBEDDED_CHATBOT_PDF_INDEXATION = "EMBEDDED_CHATBOT_PDF_INDEXATION Flow ID"
EMBEDDED_CHATBOT_WEBSITES_INDEXATION = "EMBEDDED_CHATBOT_WEBSITES_INDEXATION Flow ID"
EMBEDDED_CHATBOT_RESOURCE_DELETION = "EMBEDDED_CHATBOT_RESOURCE_DELETION Flow ID"
EMBEDDED_CHATBOT_CHATBOT = "EMBEDDED_CHATBOT_CHATBOT Flow ID"
LAMATIC_API_URL = "LAMATIC_API_URL"
LAMATIC_PROJECT_ID = "LAMATIC_PROJECT_ID"
LAMATIC_API_KEY = "LAMATIC_API_KEY"

# Vercel Blob (configured on Vercel)
BLOB_READ_WRITE_TOKEN=your_blob_token
npm run dev
# Open http://localhost:3000
```

### 2. Install & Run
---

## ☁️ Deploy to Vercel

```bash
npm install
npm run dev
# Open http://localhost:3000
# Option A — Vercel CLI
vercel --root kits/embed/chat

# Option B — click the button at the top of this file
```

### 3. Deploy Instructions (Vercel)
Add the same three `NEXT_PUBLIC_*` env vars in the Vercel dashboard.

Click the “Deploy with Vercel” button.
After deploying, add your Vercel production URL to the **Allowed Domains** list in your Lamatic Chat Trigger node, then redeploy the flow.

Fill in .env Keys from lamatic (required).
---

After deployment, generate your own Blob token:
## 🔧 Lamatic Flow Configuration

```bash
vercel storage blob token create
```
### Required nodes (in order)

| # | Node | Purpose |
|---|---|---|
| 1 | Chat Trigger | Receives widget messages; whitelist your domain here |
| 2 | Generate Text | LLM call — extracts summary, action items, risks, next steps, email |
| 3 | Generate JSON | Structures the LLM output for Slack formatting |
| 4a | Slack API | Sends formatted card to your Slack channel |
| 4b | Chat Response | Streams the result back to the widget UI |

### Domain whitelisting (important)

In the **Chat Trigger** node config, add `*` for development or your exact domain for production. Without this, the widget returns 400 on every message.

Add/Replace it in Vercel Dashboard → Environment Variables → BLOB_READ_WRITE_TOKEN and redeploy.
---

## 📂 Repo Structure
## 🖼️ Screenshots

```
/actions
└── orchestrate.ts # Lamatic workflow orchestration
/app
├── page.tsx # Main upload/indexation UI
├── chat
│ └── page.tsx # Chat interface with documents
└── api
├── index # PDF indexation endpoint
├── index-webpages # Webpage indexation endpoint
├── delete # PDF deletion endpoint
├── delete-resource # Resource deletion endpoint
└── check-workflow-status # Async workflow polling
/lib
└── lamatic-client.ts # Lamatic SDK client
/public
└── images
├── lamatic-logo.png # Lamatic branding
└── *.png # Data source icons
/flows
└── ... # Lamatic Flows
/package.json # Dependencies & scripts
```
| Web App | Lamatic Studio |
|---|---|
| ![Web](app/Screenshots/FromwebPage-With%20Followup%20mail-Running.png) | ![Studio](app/Screenshots/fromLamatic-Running.png) |

| Slack Output | Landing Page |
|---|---|
| ![Slack](app/Screenshots/Slack_integrated-Summarizer.png) | ![Landing](app/Screenshots/1.png) |

---

## 🤝 Contributing
## 🔑 How the widget integration works

```
page.js (Server Component)
└── <LamaticChat /> (Client Component)
│ On mount (useEffect):
├── Creates <div id="lamatic-chat-root"
│ data-api-url="..."
│ data-flow-id="..."
│ data-project-id="..."
│ /> and appends to document.body
└── Injects <script type="module"
src="https://widget.lamatic.ai/chat-v2?projectId=...">
The widget's React app mounts into #lamatic-chat-root,
fetches chatConfig, creates an IndexedDB session, and
is ready to send messages.
```

We welcome contributions! Open an issue or PR in this repo.
**Why bootstrap on mount (not on button click)?**
The widget needs ~500 ms to fetch `chatConfig` and create a session. Bootstrapping immediately on page load means the widget is fully ready before the user clicks "Open Copilot", preventing the "unexpected error" on the first message send.

---

## 📜 License

MIT License – see [LICENSE](./LICENSE).
MIT — see [LICENSE](../../LICENSE).

---

*Built by [Vijayshree Vaibhav](https://github.com/vijayshreepathak) for the Lamatic AgentKit Challenge.*
20 changes: 16 additions & 4 deletions kits/embed/chat/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
--card-foreground: oklch(0.15 0.02 270);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.15 0.02 270);
/* Updated primary to purple for buttons and accents */
--primary: oklch(0.55 0.18 270);
--primary-foreground: oklch(0.98 0.01 270);
--secondary: oklch(0.96 0.01 270);
Expand All @@ -24,7 +23,6 @@
--border: oklch(0.92 0.01 270);
--input: oklch(0.92 0.01 270);
--ring: oklch(0.55 0.18 270);
/* Updated chart colors to purple/blue theme */
--chart-1: oklch(0.55 0.18 270);
--chart-2: oklch(0.6 0.15 240);
--chart-3: oklch(0.65 0.12 210);
Expand All @@ -48,7 +46,6 @@
--card-foreground: oklch(0.95 0.01 270);
--popover: oklch(0.12 0.02 270);
--popover-foreground: oklch(0.95 0.01 270);
/* Updated dark mode primary to brighter purple */
--primary: oklch(0.65 0.2 270);
--primary-foreground: oklch(0.08 0.02 270);
--secondary: oklch(0.18 0.02 270);
Expand All @@ -62,7 +59,6 @@
--border: oklch(0.18 0.02 270);
--input: oklch(0.18 0.02 270);
--ring: oklch(0.65 0.2 270);
/* Updated dark mode chart colors */
--chart-1: oklch(0.65 0.2 270);
--chart-2: oklch(0.7 0.18 240);
--chart-3: oklch(0.75 0.15 210);
Expand Down Expand Up @@ -122,8 +118,24 @@
@layer base {
* {
@apply border-border outline-ring/50;
box-sizing: border-box;
}
Comment on lines 119 to 122
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix Stylelint violations in base rules.

The added declarations trigger declaration-empty-line-before and will keep style checks red.

Proposed lint-safe patch
  * {
    `@apply` border-border outline-ring/50;
+
    box-sizing: border-box;
  }

  body {
    `@apply` bg-background text-foreground;
+
    margin: 0;
  }

Also applies to: 128-131

🧰 Tools
🪛 Stylelint (17.4.0)

[error] 121-121: Expected empty line before declaration (declaration-empty-line-before)

(declaration-empty-line-before)


html {
scroll-behavior: smooth;
}

body {
@apply bg-background text-foreground;
margin: 0;
}

a {
color: inherit;
text-decoration: none;
}

button {
font: inherit;
}
}
3 changes: 3 additions & 0 deletions kits/embed/meeting-intelligence/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
NEXT_PUBLIC_LAMATIC_PROJECT_ID=your_project_id_here
NEXT_PUBLIC_LAMATIC_FLOW_ID=your_flow_id_here
NEXT_PUBLIC_LAMATIC_API_URL=https://your-project.lamatic.dev
3 changes: 3 additions & 0 deletions kits/embed/meeting-intelligence/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.env.local
.next/
node_modules/
Loading