No description
  • Svelte 64.6%
  • TypeScript 25.5%
  • mdsvex 4%
  • CSS 4%
  • JavaScript 1.5%
  • Other 0.4%
Find a file
EduarD3V 2e9a6434ab
All checks were successful
Deploy to Cloudflare Pages / deploy (push) Successful in 2m28s
Update src/routes/+layout.svelte
2026-06-03 22:17:29 +02:00
.forgejo/workflows Removed daily build 2026-05-27 20:04:45 +02:00
.vscode Initial Commit 2026-05-27 01:00:00 +02:00
messages Implement tutorials system and dynamic sitemap 2026-05-31 22:23:11 +02:00
project.inlang Implement internationalization support and expand language options. Added new translation files for French, Portuguese, and Chinese, and refactored existing components to use Paraglide-JS for dynamic, multi-language UI text across the entire application. 2026-05-29 18:10:16 +02:00
src Update src/routes/+layout.svelte 2026-06-03 22:17:29 +02:00
static Implement tutorials system and dynamic sitemap 2026-05-31 22:23:11 +02:00
.env.example Integrate Mixpanel analytics with a new cookie consent component. Added a dedicated analytics utility, updated environment configurations, and implemented a user-facing consent banner in the root layout to manage tracking permissions and ensure privacy compliance. 2026-05-29 18:15:05 +02:00
.gitignore Update .gitignore to exclude the agents directory and claude_plan folder. These changes ensure that local agent configurations and planning files are not tracked by version control, maintaining a clean repository state and preventing sensitive or temporary local data from being committed. 2026-05-29 17:07:35 +02:00
.npmrc Initial Commit 2026-05-27 01:00:00 +02:00
.prettierignore Initial Commit 2026-05-27 01:00:00 +02:00
.prettierrc Initial Commit 2026-05-27 01:00:00 +02:00
bun.lock Remove Mixpanel npm dependency and switch to a direct script injection. Deleted the analytics utility file, updated the cookie consent component to remove local initialization logic, and added the Mixpanel snippet directly to the root layout for more efficient loading. 2026-05-29 18:27:25 +02:00
eslint.config.js Initial Commit 2026-05-27 01:00:00 +02:00
package.json Remove Mixpanel npm dependency and switch to a direct script injection. Deleted the analytics utility file, updated the cookie consent component to remove local initialization logic, and added the Mixpanel snippet directly to the root layout for more efficient loading. 2026-05-29 18:27:25 +02:00
README.md chore: improve SEO and documentation 2026-05-31 20:25:19 +02:00
svelte.config.js Implement tutorials system and dynamic sitemap 2026-05-31 22:23:11 +02:00
tsconfig.json Initial Commit 2026-05-27 01:00:00 +02:00
vite.config.ts Initial Commit 2026-05-27 01:00:00 +02:00

LLM Council

A SvelteKit 5 static SPA that orchestrates AI persona-driven deliberations. Assemble a council of AI archetypes, pose a question, and watch them debate, review, and synthesize a response.

Live at council.eduard3v.com

Quick start

bun install
bun run dev

Open http://localhost:5173, configure an AI provider + API key under Config, pick your council members, and ask away.

Features

  • 12 personas — archetypes with distinct cognitive lenses, voices, and inter-persona conflicts (The Pragmatist, The Builder, The Visionary, The Contrarian, The Skeptic, The Scholar, The Poet, The Alchemist, The Judge, The Caretaker, The Trickster, The Anarchist)
  • Multi-provider — OpenAI, Anthropic, Google, OpenRouter, or any OpenAI-compatible endpoint
  • Streaming responses — real-time speech, review, and synthesis via Vercel AI SDK
  • History — past sessions saved to localStorage
  • Themes — 18 color themes (parchment, slate, midnight, moss, 6 light mono, 6 dark mono)
  • i18n — English and Spanish (Paraglide / inlang)
  • Fully client-side — API keys stay in localStorage, no server needed

Commands

Command Purpose
bun install Install dependencies
bun run dev Start Vite dev server
bun run build Build static site to build/
bun run preview Preview production build
bun run check Typecheck (svelte-check)
bun run lint Prettier + ESLint
bun run format Prettier --write

Run bun run prepare or bun run dev once after cloning to generate .svelte-kit/ types.

Stack

  • Framework: Svelte 5 (runes), SvelteKit 2, @sveltejs/adapter-static
  • Language: TypeScript (strict)
  • CSS: Tailwind CSS v4 (@import, @theme), plugins @tailwindcss/forms + @tailwindcss/typography
  • AI: Vercel AI SDK v6 (ai, @ai-sdk/openai, @ai-sdk/anthropic, @ai-sdk/google, @ai-sdk/openai-compatible)
  • i18n: Paraglide / inlang (en, es)
  • Icons: @tabler/icons-svelte
  • Markdown: marked + dompurify (client-side), mdsvex (.svx/.md routes)
  • Toasts: @zerodevx/svelte-toast

Architecture

The app is a single-page application with client-side routing via a custom page state machine in CouncilShell.svelte:

Page Component Route key
Home HomePage.svelte (default)
Session SessionPage.svelte session
Member catalog CatalogPage.svelte catalog
Provider config ConfigPage.svelte config
Theme picker ThemePage.svelte theme
Language LangPage.svelte lang
History HistoryPage.svelte history
Links LinksPage.svelte links

AI provider abstraction lives in src/lib/ai/council.ts — supports 5 provider types via the AI SDK. Personas are defined in src/lib/data/personas.ts (see GUIDE.md in the same directory for prompt methodology).

Deployment

Deployed to Cloudflare Pages via Forgejo CI. The .forgejo/workflows/deploy.yml workflow:

  • Installs dependencies (bun install --no-cache)
  • Builds (bun run build)
  • Deploys (bunx wrangler pages deploy build --project-name llm-council)

Requires CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID secrets.

Repositories