skills/edge-stack/SKILL.md
Modern edge-native web stack: Hono + htmx + UnoCSS + Cloudflare D1. Use when: building server-rendered apps with interactivity, rapid prototyping, CRUD apps, landing pages, marketplaces. Zero cold start, global edge deployment, $0/month on CF free tier. TypeScript alternative to Rust/Axum + htmx stack.
npx skillsauth add timequity/vibe-coder edge-stackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Ultra-fast edge-native web development: Hono + htmx + UnoCSS + D1
| Layer | Tool | Why | |-------|------|-----| | Framework | Hono | Ultra-fast, TypeScript, JSX support | | Interactivity | htmx | Server-rendered, 14kb, no build step | | Styling | UnoCSS | Tailwind-compatible, instant builds | | Database | Cloudflare D1 | SQLite on edge, free tier | | Deploy | CF Workers/Pages | Global edge, zero cold start |
# Create project
pnpm create hono@latest my-app
# Select: cloudflare-workers
cd my-app
pnpm add htmx.org
name = "my-app"
compatibility_date = "2024-01-01"
main = "src/index.ts"
[[d1_databases]]
binding = "DB"
database_name = "my-db"
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
import { Hono } from 'hono'
import { html } from 'hono/html'
type Bindings = { DB: D1Database }
const app = new Hono<{ Bindings: Bindings }>()
// Layout with htmx
const Layout = ({ children }: { children: any }) => html`
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/[email protected]"></script>
<script src="https://cdn.jsdelivr.net/npm/@unocss/runtime"></script>
</head>
<body class="bg-gray-100 p-4">
${children}
</body>
</html>
`
// Page with htmx interactivity
app.get('/', (c) => {
return c.html(
<Layout>
<h1 class="text-2xl font-bold mb-4">My App</h1>
<button
hx-get="/api/items"
hx-target="#items"
class="px-4 py-2 bg-blue-500 text-white rounded"
>
Load Items
</button>
<div id="items"></div>
</Layout>
)
})
// API returns HTML fragment
app.get('/api/items', async (c) => {
const { results } = await c.env.DB
.prepare('SELECT * FROM items')
.all()
return c.html(
<ul class="mt-4 space-y-2">
{results.map((item: any) => (
<li class="p-2 bg-white rounded">{item.name}</li>
))}
</ul>
)
})
export default app
# Development
pnpm dev
# Create D1 database
wrangler d1 create my-db
# Run migration
wrangler d1 execute my-db --file=./schema.sql
# Deploy
wrangler deploy
Good for:
Not ideal for:
development
Hidden quality gate that runs before showing "Done!" to user - ensures all tests pass, build succeeds, and requirements met before claiming completion
data-ai
Use when about to claim work is complete or fixed - requires running verification commands and confirming output before making any success claims
tools
Generate UI components from natural language descriptions. Use when: user asks for a page, component, or UI element. Triggers: "create page", "add component", "show form", "make button", "страница", "компонент", "форма".
content-media
10 ready-to-use themes with colors and fonts for consistent styling. Use when: applying visual themes to pages, components, or design systems. Triggers: "theme", "color palette", "color scheme", "fonts", "branding", "visual identity", "design system colors".