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

# Vue

> 了解如何建立 InsForge 專案並使用 AI 建構 Vue 應用程式

了解如何建立 InsForge 專案，並使用 Cursor 等 AI 工具建構 Vue 應用程式。

## 1. 建立 InsForge 專案

在 [insforge.dev](https://insforge.dev) 建立一個新的 InsForge 專案。

## 2. 連接 InsForge

分為兩部分：

* **CLI 連結** — 請參閱 [快速入門](/quickstart)，執行 `npx @insforge/cli link --project-id <your-project-id>`，讓代理程式能夠讀取你的專案 ID 與金鑰。
* **MCP 設定** — 請參閱 [MCP 設定](/mcp-setup) 以取得各編輯器（Cursor、Claude Code、Windsurf、Codex、VS Code）的設定方式。

兩者都設定完成後，代理程式就能從你的編輯器讀取結構（schema）、執行查詢並部署程式碼。

## 3. 用一個提示詞建構你的應用程式

在 Cursor 或你的 AI 助理中，使用以下提示詞：

```
Create a new Vue app with TypeScript and Vite.
Add Tailwind CSS 3.4 for styling.
Install the InsForge SDK and set up the client configuration.

In my InsForge database, create a sports table with id and name columns.
Add sample data: basketball, soccer, and tennis. Make it publicly readable.

Create a component that fetches and displays all sports from the database.
```

你的 AI 將產生完整的應用程式，包含資料庫設定與 UI。不需要手動撰寫程式碼——AI 會為你建立一切。

## 4. AI 產生的內容

你的 AI 助理會自動建立如下的檔案。你不需要手動修改它們。

**InsForge 用戶端** 位於 `src/lib/insforge.ts`：

```typescript src/lib/insforge.ts theme={null}
import { createClient } from '@insforge/sdk';

export const insforge = createClient({
  baseUrl: 'https://your-project.us-east.insforge.app',
  anonKey: 'your-anon-key'
});
```

**Sports 元件** 位於 `src/components/Sports.vue`：

```vue src/components/Sports.vue theme={null}
<template>
  <div class="container mx-auto px-4 py-8">
    <h1 class="text-3xl font-bold text-gray-800 mb-6">Sports</h1>

    <div v-if="loading" class="text-center py-8">
      <p class="text-gray-600">Loading sports...</p>
    </div>

    <div v-else-if="error" class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-4">
      <p>Error: {{ error }}</p>
    </div>

    <div v-else-if="sports && sports.length > 0" class="grid grid-cols-1 md:grid-cols-3 gap-4">
      <div
        v-for="sport in sports"
        :key="sport.id"
        class="bg-white rounded-lg shadow-md p-6 hover:shadow-lg transition-shadow"
      >
        <h2 class="text-xl font-semibold text-gray-800 capitalize">{{ sport.name }}</h2>
        <p class="text-sm text-gray-500 mt-2">ID: {{ sport.id }}</p>
      </div>
    </div>

    <div v-else class="text-center py-8">
      <p class="text-gray-600">No sports found.</p>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { insforge } from '../lib/insforge';

interface Sport {
  id: string;
  name: string;
  created_at?: string;
}

const sports = ref<Sport[]>([]);
const loading = ref(true);
const error = ref<string | null>(null);

const fetchSports = async () => {
  try {
    loading.value = true;
    error.value = null;

    const { data, error: fetchError } = await insforge.database
      .from('sports')
      .select();

    if (fetchError) {
      error.value = fetchError.message || 'Failed to fetch sports';
      return;
    }

    sports.value = data || [];
  } catch (err) {
    error.value = err instanceof Error ? err.message : 'An unexpected error occurred';
  } finally {
    loading.value = false;
  }
};

onMounted(() => {
  fetchSports();
});
</script>
```

## 5. 啟動應用程式

執行開發伺服器，在瀏覽器中開啟 [http://localhost:5173](http://localhost:5173)，你應該會看到運動項目清單。

```bash theme={null}
npm run dev
```

## 下一步：用更多提示詞擴充你的應用程式

試試以下提示詞，為你的應用程式新增更多功能：

```
Add a form to create new sports and save them to the database.
Include validation and error handling.
```

```
Add user authentication with sign up and login pages.
Only allow authenticated users to add new sports.
```

```
Add a favorites feature where users can mark their favorite sports.
Store favorites in a user_favorites table with user_id and sport_id.
```

```
Add images to each sport using InsForge Storage.
Allow users to upload sport images and display them in the grid.
```

```
Add an AI chat feature that can answer questions about sports.
Use InsForge AI with streaming responses.
```
