AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證The marketing site for NebulaKit — a cosmic-grade SvelteKit starter template powered by Cloudflare's full stack. Built on the template itself.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A cosmic-grade SvelteKit starter template powered by Cloudflare's full stack
NebulaKit is a production-ready SvelteKit template with everything you need to build modern web applications. It comes with Cloudflare Workers integration (D1, KV, R2, Queues, Turnstile), a complete theme system, command palette, LLM chat UI, full authentication, and drag-and-drop that works with a mouse, a finger or a keyboard—all built in from day one.
This repository is the site at nebulakit.starspace.group. It was derived from NebulaKit and is no longer a template — see AGENTS.md §5.檢視完整 README ↗A cosmic-grade SvelteKit starter template powered by Cloudflare's full stack
NebulaKit is a production-ready SvelteKit template with everything you need to build modern web applications. It comes with Cloudflare Workers integration (D1, KV, R2, Queues, Turnstile), a complete theme system, command palette, LLM chat UI, full authentication, and drag-and-drop that works with a mouse, a finger or a keyboard—all built in from day one.
This repository is the site at nebulakit.starspace.group. It was derived from NebulaKit and is no longer a template — see AGENTS.md §5.
.well-known discovery, Markdown content negotiation, and WebMCP tools — all working out of the boxClick the "Use this template" button above to create your own repository, or "Open in a codespace" to start coding instantly in the cloud.
Recommended: Bun (faster installs and scripts in this repo).
# Install dependencies
bun install
# Start development server
bun run dev
# Build for production
bun run build
# Deploy to Cloudflare Pages
bun run deploy
Prefer npm instead? Use the equivalent commands:
npm install
npm run dev
npm run build
npm run deploy
Visit http://localhost:4278 to see your app!
Share your local dev server with the outside world — no account needed for the free mode:
# Free public URL via trycloudflare.com (zero config, zero account)
bun run tunnel
# or: npm run tunnel
# Run dev server + tunnel together in one command
bun run dev:tunnel
The tunnel URL (e.g. https://random-words.trycloudflare.com) is printed to the console as soon as the tunnel is up.
Custom domain (e.g. myapp.yourdomain.com):
http://localhost:4278vite.config.ts → server.allowedHosts (e.g. '.yourdomain.com')TUNNEL_TOKEN=<your-token> bun run tunnel
Prerequisite:
cloudflaredmust be installed.
- macOS:
brew install cloudflared- Linux: https://pkg.cloudflare.com/index.html
- Windows: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
What's pre-wired for tunnel use (in vite.config.ts):
allowedHosts includes trycloudflare.com — no Vite 403 rejections on free tunnelsVITE_HMR=true to re-enable for purely local devstaleDepsFix plugin strips stale ?v= hashes so Vite never returns 504s on first load through a tunneloptimizeDeps.include pre-bundles Svelte at startup so the first tunneled page load doesn't trigger a slow on-demand optimizationThe tunnel script lives at scripts/tunnel.js and respects a PORT env var if you change the dev port.
Svelte 5, SvelteKit 2.70, Vite 8, Vitest 4, @sveltejs/adapter-cloudflare 7 and
Node 24 or newer (the same stack as the NebulaKit template, so template code
copies across). The 220 components are still written in Svelte 4 syntax, which
Svelte 5 compiles in legacy mode; there is no need to rewrite them to runes.
Testing notes for the new stack:
createEventDispatcher event in a test with the mount events
option (render(C, { props, events: { change: fn } })), and update props
with rerender. component.$on and component.$set no longer exist.Set-Cookie from Response. Route-handler tests that read
it import tests/helpers/server-response.ts first.NebulaKit follows Test-Driven Development with 90%+ code coverage requirements:
# Run all tests
npm run test
# Run tests in watch mode
npm run test:watch
# Check coverage (must be ≥90%)
npm run test:coverage
# Run E2E tests
npm run test:e2e
# Run all tests (unit + E2E)
npm run test:all
Important: All features and bug fixes require tests written FIRST. See CONTRIBUTING.md for details.
/documentation route in sync with shipped featuresNebulaKit/
├── src/
│ ├── lib/
│ │ ├── components/ # Reusable UI components
│ │ ├── stores/ # Svelte stores (theme, etc.)
│ │ ├── server/ # Server-side utilities
│ │ └── utils/ # Helper functions
│ ├── routes/ # SvelteKit routes
│ │ ├── auth/ # Authentication pages
│ │ ├── chat/ # LLM chat interface
│ │ └── demo/ # Feature demonstrations
│ ├── app.css # Global styles & theme
│ └── app.html # HTML template
├── static/ # Static assets
└── wrangler.toml # Cloudflare configuration
NebulaKit includes a comprehensive theme system with:
/* All colors use CSS variables - never hardcode! */
.button {
background-color: var(--color-primary);
color: var(--color-background);
border-radius: var(--radius-md);
padding: var(--spacing-sm) var(--spacing-md);
}
Validate theme contrast:
npm run validate:contrast
See the Theme System Guide for complete documentation.
Every public page of the template and of this site scores 100 in all four
Lighthouse categories. The home page shows the table and links a full report per
page; the reports are served from static/lighthouse/.
Regenerate them with both apps built and served — this site on 8810 and the template on 8820:
bun run lighthouse
The script audits each page three times and publishes the median run, writes one
HTML report per page, and writes the score table to
src/lib/lighthouse-results.json, which the home page renders. It exits non-zero
if any page drops below 100, so the numbers on the page cannot be edited into
being true. Point it at production instead with
--site <origin> --template <origin>.
The auth routes are not audited. robots.txt disallows /auth/, and Lighthouse
scores a crawl block as an SEO failure — correct for a login form, so the
conflict is left alone rather than scored around.
Built-in auth pages with support for:
Easily extend with @auth/sveltekit for more providers.
The included chat interface is ready to connect to your LLM API:
// In /routes/chat/+page.svelte
async function sendMessage() {
const response = await fetch('/api/chat', {
method: 'POST',
body: JSON.stringify({ message: input })
});
// Handle response
}
const result = await platform.env.DB.prepare('SELECT * FROM users WHERE email = ?')
.bind(email)
.first();
await platform.env.KV.put('key', 'value');
const value = await platform.env.KV.get('key');
await platform.env.BUCKET.put('file.jpg', fileData);
const file = await platform.env.BUCKET.get('file.jpg');
await platform.env.QUEUE.send({ data: 'message' });
<WidgetBoard> gives you a columned board of draggable widgets:
<WidgetBoard bind:widgets {columns} on:change={(e) => save(e.detail.widgets)} />
reorder()), so orders can never collideThe two actions behind it, use:draggable and use:dropzone, work on any
markup, so a sortable list or a nav reorder needs no board at all.
Reference: docs/WIDGET_BOARD.md
NebulaKit is mobile-first with:
MIT License - feel free to use this template for any project!
We welcome contributions! Please read our Contributing Guide first.
Key requirements:
See .github/copilot-instructions.md for detailed development guidelines.
If you find NebulaKit useful, please consider giving it a star on GitHub!