create-html-app
Skill1.5k starsChanged 9 days agoMITView on GitHub
Create or update a Hubble HTML App: a folder-local .html file
1 other project uses a version of this.
Trending
Steady talk.thin dataabout the whole repository
Who's talking about bholmesdev/hubble.md
- @bholmes.dev“If you want to try it, go to hubble.md ⬇️ And if you want to contribute (there's still a lot missing!), …”Bluesky · Jun 23, 2026 · 11 likes
- @bholmes.dev“And yes, I'm aware I worked on this (and related projects) without shipping them. So... no more. This is …”Bluesky · Feb 23, 2026 · 9 likes
- @bholmes.dev“Open source and ready to try yourself! github.com/bholmesdev/hubble.md ⭐”Bluesky · Feb 26, 2026 · 4 likes
- @bholmes.dev“Not quite ready to release this bad boy, but if you're wondering about the markdown editor... I just added …”Bluesky · Mar 31, 2026 · 3 likes
- bholmesdev/hubble-skills“Document supported review comment shapes”GitHub · Oct 21, 2026
The biggest 5 of 7 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 7
Talked about on Bluesky and GitHub (7 times).
On Bluesky · 4
- Jun 23, 2026If you want to try it, go to hubble.md ⬇️ And if you want to contribute (there's still a lot missing!), it's all open source… — @bholmes.dev11 likes and reposts
- Feb 23, 2026And yes, I'm aware I worked on this (and related projects) without shipping them. So... no more. This is fully open source and ready for… — @bholmes.dev9 likes and reposts
- Feb 26, 2026Open source and ready to try yourself! github.com/bholmesdev/hubble.md ⭐ — @bholmes.dev4 likes and reposts
- Mar 31, 2026Not quite ready to release this bad boy, but if you're wondering about the markdown editor... I just added folder support with a sidebar.… — @bholmes.dev3 likes and reposts
On GitHub · 3
- Oct 21, 2026Document supported review comment shapes — bholmesdev/hubble-skills0 reactions · 1 comment
- Sep 14, 2026chore: sync external skills — UNRULYEON/skills0 reactions
- Jul 6, 2026[Package Request]: Hubble.md — microsoft/winget-pkgs0 reactions
Other versions1 project uses a version of this.
Word for word · 1
- bholmesdev/hubble-skills★ 7100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository26 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- .agents/skills/vercel-react-best-practices/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- changelogSkill
- code-commentsSkill
- create-prSkill
- doneSkill
- edit-diagramSkill
- embed-html-appSkill
- grill-with-docsSkill
- handoffSkill
- implementationSkill
- merge-riskSkill
- releaseSkill
- review-cycleSkill
- review-markdown-commentsSkill
- simplifySkill
- taste-reviewSkill
- test-desktop-appSkill
- to-issuesSkill
- triageSkill
- vercel-react-best-practicesSkill
- write-product-specSkill
- write-tech-specSkill
- writing-testsSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Use Alpine and Tailwind by default.
- Distinctive: line 139
Use Hubble tokens through Tailwind classes so the app feels native:
- Very specific: line 147
Keep spacing compact: gap-2, gap-3, p-2, p-3, px-3, py-2.
- Distinctive: line 149
Avoid one-off palettes, oversized cards, hero layouts, and decorative gradients unless the user asks for a themed visual.
- Distinctive: line 153
Read only the patterns you need:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Create HTML App
A Hubble HTML App is a folder-local .html file Hubble runs as a self-contained interactive UI. Opening it shows the app in the main content panel. Build any interactive experience — a tool, dashboard, or app — as a single .html file in the Folder.
To embed an HTML App inline inside a Markdown File, see create-embed.
Runtime
Hubble provides the app runtime. Write plain HTML that assumes these globals are already available:
hubbleAlpine- Tailwind browser v4
- Hubble theme tokens
Use Alpine and Tailwind by default. Do not add dependency <script> tags or set up package files, lockfiles, or node_modules.
HTML Apps run in a sandboxed iframe. Hubble allows:
allow-scripts: Alpine, Tailwind browser, and the Hubble runtime can execute.allow-forms: native HTML form semantics work when paired with Alpine handlers such as@submit.prevent.
Hubble does not allow:
allow-same-origin: apps keep an opaque origin and cannot use app-origin storage, cookies, or same-origin access.allow-top-navigation: apps cannot navigate the desktop app frame.allow-popups/allow-popups-to-escape-sandbox: apps cannot open unsandboxed popup windows.allow-downloads: apps cannot start downloads directly.allow-modals: apps cannot use modal browser dialogs.
Files API
Apps reach Workspace files through hubble.files, an async broker rather than direct filesystem access. All paths are Workspace-relative and point to Markdown files.
await hubble.files.list("todos/*.md")
// → [{ name, path, modified_at, size }], sorted by path
await hubble.files.read("notes/today.md")
// → { path, body, properties }
await hubble.files.open("notes/today.md")
// → { path }, navigates the editor to the file
await hubble.files.create({ path, body, properties, open })
// → { path, body, properties }
await hubble.files.update(path, { body, properties })
// → { path, body, properties }, patch
await hubble.files.remove("notes/today.md")
// → { path }Methods throw on failure; each has a safe* variant. See Files API for shapes, patch semantics, and error handling.
Template
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Folder files</title>
</head>
<body class="m-0 bg-background p-3 font-sans text-foreground">
<main
class="grid gap-3 rounded-md border border-border bg-card p-3 text-card-foreground"
x-data="{
files: [],
error: '',
async init() {
try {
this.files = await hubble.files.list('**/*.md')
} catch (error) {
this.error = error.message || 'Could not load files'
}
},
}"
>
<header class="flex items-center justify-between gap-3">
<h1 class="m-0 text-base font-semibold">Folder files</h1>
<span class="text-sm text-muted-foreground" x-text="`${files.length} files`"></span>
</header>
<p class="m-0 text-sm text-muted-foreground" x-show="!error && files.length === 0">
Loading files...
</p>
<p class="m-0 text-sm text-destructive" x-show="error" x-text="error"></p>
<ul class="m-0 grid list-none gap-2 p-0" x-show="!error && files.length > 0">
<template x-for="file in files" :key="file.path">
<li class="rounded-sm border border-border bg-background px-3 py-2">
<span class="text-sm font-medium" x-text="file.path"></span>
</li>
</template>
</ul>
</main>
</body>
</html>Structuring Logic
Inline x-data is fine for simple state (a flag, a counter, a current tab). For anything more, like async loaders, multiple methods, or computed logic, register an Alpine.data() component in a <script> and reference it by name.
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('fileList', () => ({
files: [],
error: '',
async init() {
try {
this.files = await hubble.files.list('**/*.md')
} catch (error) {
this.error = error.message || 'Could not load files'
}
},
}))
})
</script>
<main x-data="fileList">…</main>Why this beats large inline expressions:
- Alpine parses
x-dataas a single expression. Multi-line bodies with arrow functions, object methods, or</>/&get HTML-escaped or mis-parsed, surfacing as silent "Alpine Expression Error" failures. - Logic lives in real JavaScript with syntax highlighting and normal quoting, not inside an attribute string.
- Components are reusable and testable, and keep markup readable.
Register components inside alpine:init so they exist before Alpine scans the DOM.
Native Feel
Use Hubble tokens through Tailwind classes so the app feels native:
- Surfaces:
bg-background,bg-card,bg-popover - Text:
text-foreground,text-muted-foreground,text-card-foreground - Borders/rings:
border-border,border-input,ring-ring,focus-visible:ring-ring - Actions:
bg-primary text-primary-foreground,bg-secondary text-secondary-foreground - States:
hover:bg-accent,bg-selected text-selected-foreground
Keep spacing compact: gap-2, gap-3, p-2, p-3, px-3, py-2. Use rounded-sm or rounded-md for controls.
Avoid one-off palettes, oversized cards, hero layouts, and decorative gradients unless the user asks for a themed visual.
References
Read only the patterns you need:
- Files API
- Buttons
- Radio selects
- Tabs
- Forms
- Lists and empty states
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

