Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
```
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