create-shibumi 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -4
- package/package.json +2 -2
- package/scripts/ship.lock.json +2 -2
- package/src/adopt.ts +250 -0
- package/src/args.ts +32 -6
- package/src/cli.ts +230 -41
- package/src/templates/blog/agents.md +4 -1
- package/src/templates/blog/bun.lock +1 -0
- package/src/templates/blog/gitignore +2 -0
- package/src/templates/blog/package.json +4 -2
- package/src/templates/blog/public/favicon.svg +1 -0
- package/src/templates/blog/public/style.css +77 -4
- package/src/templates/blog/src/components/BaseHead.astro +4 -0
- package/src/templates/blog/src/content/blog/one-vps-is-plenty.md +7 -5
- package/src/templates/blog/src/content/blog/own-your-source.md +9 -5
- package/src/templates/blog/src/content/blog/writing-for-agents.md +7 -5
- package/src/templates/blog/src/content.config.ts +3 -0
- package/src/templates/blog/src/layouts/Base.astro +12 -1
- package/src/templates/blog/src/pages/index.astro +5 -2
- package/src/templates/blog/src/pages/llms.txt.ts +1 -1
- package/src/templates/blog/src/pages/posts/[id].astro +2 -1
- package/src/templates/blog/src/pages/posts/[id].md.ts +1 -1
- package/src/templates/blog/src/pages/rss.xml.ts +1 -1
- package/src/templates/full-stack/agents.md +1 -0
- package/src/templates/full-stack/package.json +1 -0
- package/src/templates/full-stack/public/favicon.svg +1 -0
- package/src/templates/full-stack/public/style.css +5 -6
- package/src/templates/full-stack/src/app.ts +5 -3
- package/src/templates/ship.ts +551 -153
- package/src/templates/static/agents.md +1 -0
- package/src/templates/{web → static}/bun.lock +1 -21
- package/src/templates/static/gitignore +2 -0
- package/src/templates/static/package.json +6 -2
- package/src/templates/static/public/favicon.svg +1 -0
- package/src/templates/static/public/index.html +11 -3
- package/src/templates/static/public/style.css +66 -20
- package/src/templates/web/.dockerignore +0 -12
- package/src/templates/web/Dockerfile +0 -24
- package/src/templates/web/README.md +0 -10
- package/src/templates/web/agents.md +0 -54
- package/src/templates/web/compose.yaml +0 -17
- package/src/templates/web/gitignore +0 -5
- package/src/templates/web/package.json +0 -34
- package/src/templates/web/public/app.js +0 -11
- package/src/templates/web/public/style.css +0 -150
- package/src/templates/web/public/vendor/alpine-csp-3.16.2.min.js +0 -23
- package/src/templates/web/public/vendor/shibumi.css +0 -422
- package/src/templates/web/src/app.ts +0 -106
- package/src/templates/web/src/env.ts +0 -21
- package/src/templates/web/src/server.ts +0 -23
- package/src/templates/web/test/app.test.ts +0 -145
- package/src/templates/web/tsconfig.json +0 -13
|
@@ -8,6 +8,7 @@ Static site generated by create-shibumi. Plain committed files in `public/`, no
|
|
|
8
8
|
bun dev # preview public/ locally (scripts/preview.ts, dev only)
|
|
9
9
|
bun ship:setup # configure the deploy target (preconfigured: static, public/)
|
|
10
10
|
bun ship # verify public/, build the static image, upload, deploy
|
|
11
|
+
bun ship:webhook # opt in to push-to-deploy; --off reverses it
|
|
11
12
|
```
|
|
12
13
|
|
|
13
14
|
## Routes and templates
|
|
@@ -3,15 +3,9 @@
|
|
|
3
3
|
"configVersion": 1,
|
|
4
4
|
"workspaces": {
|
|
5
5
|
"": {
|
|
6
|
-
"name": "shibumi-
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"hono": "4.13.3",
|
|
9
|
-
"zod": "4.4.3",
|
|
10
|
-
},
|
|
6
|
+
"name": "shibumi-static-site",
|
|
11
7
|
"devDependencies": {
|
|
12
8
|
"@clack/prompts": "1.7.0",
|
|
13
|
-
"@types/bun": "latest",
|
|
14
|
-
"typescript": "5.9.2",
|
|
15
9
|
},
|
|
16
10
|
},
|
|
17
11
|
},
|
|
@@ -20,26 +14,12 @@
|
|
|
20
14
|
|
|
21
15
|
"@clack/prompts": ["@clack/prompts@1.7.0", "", { "dependencies": { "@clack/core": "1.4.3", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A=="],
|
|
22
16
|
|
|
23
|
-
"@types/bun": ["@types/bun@1.4.0", "", { "dependencies": { "bun-types": "1.4.0" } }, "sha512-K+lZULY23vRgK/CfTjFIV+tyifaNdSMlPh9j+6mQ/cLfpOznLyAuzgV/JQysyECpkBQLVMSyvjlr2fBUSA9wFQ=="],
|
|
24
|
-
|
|
25
|
-
"@types/node": ["@types/node@26.2.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg=="],
|
|
26
|
-
|
|
27
|
-
"bun-types": ["bun-types@1.4.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-iIKw23BspnQQYd3prITOBxeUsxBHnwzX6YJfGMuNOZzeNcMmVqzIIVGRm1l69ogaPQmb4wB6BN8mA5bE9YuC5Q=="],
|
|
28
|
-
|
|
29
17
|
"fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="],
|
|
30
18
|
|
|
31
19
|
"fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="],
|
|
32
20
|
|
|
33
21
|
"fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="],
|
|
34
22
|
|
|
35
|
-
"hono": ["hono@4.13.3", "", {}, "sha512-r8AO2mYHoLxSHkgafNeC/BXyb2vWRxD3jem4Ts+ptav8oTG5FIRifAjuJEmZI4bSvvc2ns0GxmIYiZnHqN3mMw=="],
|
|
36
|
-
|
|
37
23
|
"sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
|
|
38
|
-
|
|
39
|
-
"typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
|
|
40
|
-
|
|
41
|
-
"undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
|
|
42
|
-
|
|
43
|
-
"zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
|
|
44
24
|
}
|
|
45
25
|
}
|
|
@@ -6,12 +6,16 @@
|
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "bun scripts/preview.ts",
|
|
8
8
|
"ship": "bun scripts/ship.ts",
|
|
9
|
-
"ship:setup": "bun scripts/ship.ts --setup --static --output-dir public",
|
|
9
|
+
"ship:setup": "bun scripts/ship.ts --setup --static --output-dir public --no-spa",
|
|
10
10
|
"ship:update": "bun scripts/ship.ts --update",
|
|
11
11
|
"ship:status": "bun scripts/ship.ts --status",
|
|
12
|
-
"ship:logs": "bun scripts/ship.ts --logs"
|
|
12
|
+
"ship:logs": "bun scripts/ship.ts --logs",
|
|
13
|
+
"ship:webhook": "bun scripts/ship.ts --webhook"
|
|
13
14
|
},
|
|
14
15
|
"engines": {
|
|
15
16
|
"bun": ">=1.4.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@clack/prompts": "1.7.0"
|
|
16
20
|
}
|
|
17
21
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><style>text{fill:#e95f19;font-family:"Hiragino Sans","Noto Sans JP",sans-serif}@media (prefers-color-scheme:dark){text{fill:#ff8648}}</style><text x="50" y="55" font-size="62" text-anchor="middle" dominant-baseline="central">渋</text></svg>
|
|
@@ -3,14 +3,22 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>It ships · shibumi static</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
|
+
<meta name="generator" content="create-shibumi (shibumistack.dev)" />
|
|
7
9
|
<link rel="stylesheet" href="/style.css" />
|
|
8
10
|
</head>
|
|
9
11
|
<body>
|
|
10
12
|
<main>
|
|
13
|
+
<p class="masthead"><span class="masthead-mark">渋み</span> shibumi static</p>
|
|
11
14
|
<h1>It ships.</h1>
|
|
12
|
-
<p>
|
|
13
|
-
<
|
|
15
|
+
<p class="lede">Every file in <code>public/</code> is a page on your site. You are looking at <code>public/index.html</code>.</p>
|
|
16
|
+
<ol class="steps">
|
|
17
|
+
<li>Edit this file. <code>bun dev</code> shows it locally.</li>
|
|
18
|
+
<li>Connect your server once with <code>bun ship:setup</code>.</li>
|
|
19
|
+
<li>After that, every deploy is <code>git commit</code> and <code>bun ship</code>.</li>
|
|
20
|
+
</ol>
|
|
21
|
+
<p class="aside">Writing with Astro, Jekyll, or Eleventy instead? Run <code>bun ship:setup</code> inside that project; Ship deploys any build folder it can verify.</p>
|
|
14
22
|
</main>
|
|
15
23
|
</body>
|
|
16
24
|
</html>
|
|
@@ -1,36 +1,71 @@
|
|
|
1
|
+
/* Self-contained styles on the shibumi palette. Yours to edit. */
|
|
1
2
|
:root {
|
|
2
3
|
color-scheme: light dark;
|
|
3
|
-
--paper: #f5f0e4;
|
|
4
|
-
--ink: #
|
|
5
|
-
--
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
:
|
|
10
|
-
|
|
11
|
-
--ink: #f5f0e4;
|
|
12
|
-
--accent: #ff8648;
|
|
13
|
-
}
|
|
4
|
+
--paper: light-dark(#f5f0e4, #1b130f);
|
|
5
|
+
--ink: light-dark(#272016, #eee5d7);
|
|
6
|
+
--muted: light-dark(#746b5d, #aaa092);
|
|
7
|
+
--faint: light-dark(rgba(39, 32, 22, 0.055), rgba(238, 229, 215, 0.07));
|
|
8
|
+
--line: light-dark(rgba(39, 32, 22, 0.14), rgba(238, 229, 215, 0.16));
|
|
9
|
+
--accent: light-dark(#e95f19, #ff8648);
|
|
10
|
+
--font-serif: ui-serif, Georgia, "Iowan Old Style", Cambria, serif;
|
|
11
|
+
--font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
body {
|
|
17
15
|
margin: 0;
|
|
18
16
|
background: var(--paper);
|
|
19
17
|
color: var(--ink);
|
|
20
|
-
font-family: system-ui, sans-serif;
|
|
18
|
+
font-family: ui-sans-serif, system-ui, sans-serif;
|
|
21
19
|
font-size: 1.125rem;
|
|
22
|
-
line-height: 1.
|
|
20
|
+
line-height: 1.65;
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
main {
|
|
26
|
-
max-width:
|
|
24
|
+
max-width: 40.625rem;
|
|
27
25
|
margin: 0 auto;
|
|
28
|
-
padding:
|
|
26
|
+
padding: clamp(3rem, 9vh, 6.5rem) 1.5rem 4rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.masthead {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: baseline;
|
|
32
|
+
gap: 0.6rem;
|
|
33
|
+
margin: 0 0 3.5rem;
|
|
34
|
+
padding-bottom: 1rem;
|
|
35
|
+
border-bottom: 1px solid var(--line);
|
|
36
|
+
color: var(--muted);
|
|
37
|
+
font-size: 0.875rem;
|
|
38
|
+
letter-spacing: 0.04em;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.masthead-mark {
|
|
42
|
+
color: var(--accent);
|
|
43
|
+
font-size: 1rem;
|
|
29
44
|
}
|
|
30
45
|
|
|
31
46
|
h1 {
|
|
32
|
-
|
|
33
|
-
font-
|
|
47
|
+
margin: 0 0 0.75rem;
|
|
48
|
+
font-family: var(--font-serif);
|
|
49
|
+
font-size: clamp(2.6rem, 7vw, 3.8rem);
|
|
50
|
+
font-weight: 450;
|
|
51
|
+
letter-spacing: -0.03em;
|
|
52
|
+
line-height: 1.05;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.lede {
|
|
56
|
+
margin: 0 0 3rem;
|
|
57
|
+
max-width: 34rem;
|
|
58
|
+
color: var(--muted);
|
|
59
|
+
font-size: 1.3125rem;
|
|
60
|
+
line-height: 1.55;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
code {
|
|
64
|
+
padding: 0.12em 0.42em;
|
|
65
|
+
border-radius: 0.35rem;
|
|
66
|
+
background: var(--faint);
|
|
67
|
+
font-family: var(--font-mono);
|
|
68
|
+
font-size: 0.85em;
|
|
34
69
|
}
|
|
35
70
|
|
|
36
71
|
a {
|
|
@@ -44,7 +79,18 @@ a:hover {
|
|
|
44
79
|
text-decoration-color: var(--accent);
|
|
45
80
|
}
|
|
46
81
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
82
|
+
.steps {
|
|
83
|
+
margin: 0 0 2.5rem;
|
|
84
|
+
padding-left: 1.4rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.steps li {
|
|
88
|
+
margin-bottom: 0.6rem;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.aside {
|
|
92
|
+
padding-top: 1.5rem;
|
|
93
|
+
border-top: 1px solid var(--line);
|
|
94
|
+
color: var(--muted);
|
|
95
|
+
font-size: 1rem;
|
|
50
96
|
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
FROM oven/bun:1-alpine AS deps
|
|
2
|
-
WORKDIR /app
|
|
3
|
-
COPY package.json bun.lock ./
|
|
4
|
-
RUN bun install --frozen-lockfile --production
|
|
5
|
-
|
|
6
|
-
# Major-pinned: minors and patches flow, a future Bun 2 cannot break deploys.
|
|
7
|
-
FROM oven/bun:1-alpine AS build
|
|
8
|
-
WORKDIR /app
|
|
9
|
-
COPY package.json bun.lock ./
|
|
10
|
-
RUN bun install --frozen-lockfile
|
|
11
|
-
COPY tsconfig.json ./
|
|
12
|
-
COPY src ./src
|
|
13
|
-
RUN bun run build
|
|
14
|
-
|
|
15
|
-
FROM oven/bun:1-alpine
|
|
16
|
-
WORKDIR /app
|
|
17
|
-
COPY --from=build /app/dist ./dist
|
|
18
|
-
COPY public ./public
|
|
19
|
-
COPY package.json ./
|
|
20
|
-
# Production mode: extensions gate security behavior on this. Never unset it.
|
|
21
|
-
ENV NODE_ENV=production
|
|
22
|
-
USER bun
|
|
23
|
-
EXPOSE 3000
|
|
24
|
-
CMD ["bun", "dist/server.js"]
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# Agent Notes
|
|
2
|
-
|
|
3
|
-
Bun web app generated by create-shibumi. Hono routes, Zod validation, Alpine behavior, no framework runtime. All source is owned by this project; edit anything.
|
|
4
|
-
|
|
5
|
-
## Commands
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
bun dev # Ship wrapper starts hot reload on the configured app port
|
|
9
|
-
bun dev:app # plain watch mode on PORT (default 3000)
|
|
10
|
-
bun test # route and security-header tests
|
|
11
|
-
bun run check # TypeScript check
|
|
12
|
-
bun run build # bundle src/server.ts to dist/server.js
|
|
13
|
-
bun ship # build image, upload, deploy via shibumi-server
|
|
14
|
-
bun ship:setup # configure the deploy target
|
|
15
|
-
bun run shibumi add <name> # install an extension (auth, email); --dry-run previews
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Routes and templates
|
|
19
|
-
|
|
20
|
-
- `src/app.ts`: all routes and the HTML page. `src/server.ts`: startup and graceful shutdown. `src/env.ts`: environment schema.
|
|
21
|
-
- Static assets under `public/`, served at `/public/*`.
|
|
22
|
-
- Alpine is the vendored CSP build (`public/vendor/alpine-csp-*.min.js`): register components with `Alpine.data()` in `public/app.js` and reference methods by name in markup; inline expressions do not evaluate.
|
|
23
|
-
|
|
24
|
-
## Trust boundaries and validation
|
|
25
|
-
|
|
26
|
-
- Every environment variable goes through the Zod schema in `src/env.ts`; the app never reads `process.env` elsewhere.
|
|
27
|
-
- Every request input (query, params, body) is validated with Zod at the route before use; `/api/hello` is the pattern.
|
|
28
|
-
- The response header set in `SECURITY_HEADERS` (`src/app.ts`) is asserted verbatim by tests on success, error, API, and static responses; change both together. The CSP allows no inline or eval'd script.
|
|
29
|
-
- Add no unauthenticated mutation endpoints (POST/PUT/PATCH/DELETE); tests fail if a route registers one. Add authentication first.
|
|
30
|
-
|
|
31
|
-
## Database
|
|
32
|
-
|
|
33
|
-
This template has no database. The full-stack template adds Drizzle and SQLite under `/data`.
|
|
34
|
-
|
|
35
|
-
## Files Ship generates
|
|
36
|
-
|
|
37
|
-
`bun ship:setup` writes `shibumi-server.json` (committed) and stores SSH targets in `~/.config/shibumi/config.json` (never committed). `scripts/ship.ts` is owned source, vendored at generation time; update it with `bun ship:update`.
|
|
38
|
-
|
|
39
|
-
## Secrets and runtime config
|
|
40
|
-
|
|
41
|
-
Set production env vars (secrets, per-deploy config) on the server, never in git or the image:
|
|
42
|
-
|
|
43
|
-
```sh
|
|
44
|
-
bun ship:env set KEY=VALUE # one or more
|
|
45
|
-
bun ship:env import .env.production # bulk from a local file
|
|
46
|
-
bun ship:env list # names only
|
|
47
|
-
bun ship:env rm KEY
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Values are stored per-app on the server and injected at deploy; run `bun ship` to apply. Non-secret tunables that belong in git live in `src/config/*.yaml` instead.
|
|
51
|
-
|
|
52
|
-
## Checks required before commit
|
|
53
|
-
|
|
54
|
-
`bun test` and `bun run check` must pass. The Docker image copies only `dist/`, `public/`, and `package.json`; if you add runtime files elsewhere, update the Dockerfile and `.dockerignore` together.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
services:
|
|
2
|
-
app:
|
|
3
|
-
build: .
|
|
4
|
-
ports:
|
|
5
|
-
- "127.0.0.1:${SHIBUMI_PORT:-9001}:3000"
|
|
6
|
-
restart: unless-stopped
|
|
7
|
-
healthcheck:
|
|
8
|
-
test: ["CMD", "wget", "-q", "-T", "5", "-O", "/dev/null", "http://127.0.0.1:3000/healthz"]
|
|
9
|
-
interval: 60s
|
|
10
|
-
timeout: 10s
|
|
11
|
-
retries: 3
|
|
12
|
-
start_period: 10s
|
|
13
|
-
deploy:
|
|
14
|
-
resources:
|
|
15
|
-
limits:
|
|
16
|
-
cpus: "1.0"
|
|
17
|
-
memory: 512M
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "shibumi-web-app",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"type": "module",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "bun scripts/ship.ts --dev",
|
|
8
|
-
"dev:app": "bun --watch src/server.ts",
|
|
9
|
-
"start": "bun dist/server.js",
|
|
10
|
-
"build": "bun build src/server.ts --outdir dist --target bun",
|
|
11
|
-
"test": "bun test",
|
|
12
|
-
"check": "tsc --noEmit",
|
|
13
|
-
"ship": "bun scripts/ship.ts",
|
|
14
|
-
"ship:setup": "bun scripts/ship.ts --setup",
|
|
15
|
-
"ship:update": "bun scripts/ship.ts --update",
|
|
16
|
-
"ship:status": "bun scripts/ship.ts --status",
|
|
17
|
-
"ship:logs": "bun scripts/ship.ts --logs",
|
|
18
|
-
"ship:env": "bun scripts/ship.ts --env",
|
|
19
|
-
"shibumi": "bun scripts/shibumi.ts",
|
|
20
|
-
"shi": "bun scripts/shibumi.ts"
|
|
21
|
-
},
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"hono": "4.13.3",
|
|
24
|
-
"zod": "4.4.3"
|
|
25
|
-
},
|
|
26
|
-
"devDependencies": {
|
|
27
|
-
"@clack/prompts": "1.7.0",
|
|
28
|
-
"@types/bun": "1.4.0",
|
|
29
|
-
"typescript": "5.9.2"
|
|
30
|
-
},
|
|
31
|
-
"engines": {
|
|
32
|
-
"bun": ">=1.4.0"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// Alpine behavior lives here. The vendored build is the CSP-safe variant:
|
|
2
|
-
// register components with Alpine.data() and reference methods by name in
|
|
3
|
-
// markup; inline expressions are not evaluated.
|
|
4
|
-
document.addEventListener("alpine:init", () => {
|
|
5
|
-
Alpine.data("counter", () => ({
|
|
6
|
-
count: 0,
|
|
7
|
-
inc() {
|
|
8
|
-
this.count++;
|
|
9
|
-
},
|
|
10
|
-
}));
|
|
11
|
-
});
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/* App styles on top of the vendored shibumi.css tokens (public/vendor/).
|
|
2
|
-
Edit freely; this file is yours. Tokens: --paper --ink --muted --line
|
|
3
|
-
--accent, type scale --text-xs..--text-2xl, --font-sans/serif/mono. */
|
|
4
|
-
|
|
5
|
-
/* The vendored shibumi.css sets a kozo paper background for the sites; apps
|
|
6
|
-
stay flat, and this override also stops the browser fetching the image. */
|
|
7
|
-
body {
|
|
8
|
-
background-image: none;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.scaffold {
|
|
12
|
-
max-width: 40.625rem;
|
|
13
|
-
margin: 0 auto;
|
|
14
|
-
padding: clamp(3rem, 9vh, 6.5rem) 1.5rem 4rem;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.masthead {
|
|
18
|
-
display: flex;
|
|
19
|
-
align-items: baseline;
|
|
20
|
-
gap: 0.6rem;
|
|
21
|
-
margin: 0 0 3.5rem;
|
|
22
|
-
padding-bottom: 1rem;
|
|
23
|
-
border-bottom: 1px solid var(--line);
|
|
24
|
-
color: var(--muted);
|
|
25
|
-
font-size: var(--text-sm);
|
|
26
|
-
letter-spacing: 0.04em;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.masthead-mark {
|
|
30
|
-
color: var(--accent);
|
|
31
|
-
font-size: var(--text-md);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.scaffold h1 {
|
|
35
|
-
margin: 0 0 0.75rem;
|
|
36
|
-
font-size: clamp(2.6rem, 7vw, 3.8rem);
|
|
37
|
-
font-weight: 450;
|
|
38
|
-
letter-spacing: -0.03em;
|
|
39
|
-
line-height: 1.05;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.lede {
|
|
43
|
-
margin: 0 0 3rem;
|
|
44
|
-
max-width: 34rem;
|
|
45
|
-
color: var(--muted);
|
|
46
|
-
font-size: var(--text-lg);
|
|
47
|
-
line-height: 1.55;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.demo {
|
|
51
|
-
display: flex;
|
|
52
|
-
align-items: center;
|
|
53
|
-
gap: 1rem;
|
|
54
|
-
margin-bottom: 3.25rem;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.demo button {
|
|
58
|
-
font: 500 var(--text-md) var(--font-sans);
|
|
59
|
-
padding: 0.5rem 1.3rem;
|
|
60
|
-
border: 1px solid var(--ink);
|
|
61
|
-
border-radius: 0.35rem;
|
|
62
|
-
background: transparent;
|
|
63
|
-
color: inherit;
|
|
64
|
-
cursor: pointer;
|
|
65
|
-
transition: border-color 160ms ease, color 160ms ease;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.demo button:hover,
|
|
69
|
-
.demo button:focus-visible {
|
|
70
|
-
border-color: var(--accent);
|
|
71
|
-
color: var(--accent);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.demo output {
|
|
75
|
-
min-width: 2ch;
|
|
76
|
-
font-size: var(--text-lg);
|
|
77
|
-
font-variant-numeric: tabular-nums;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.demo-hint {
|
|
81
|
-
color: var(--muted);
|
|
82
|
-
font-size: var(--text-sm);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.endpoints {
|
|
86
|
-
margin: 0;
|
|
87
|
-
padding: 0;
|
|
88
|
-
list-style: none;
|
|
89
|
-
border-top: 1px solid var(--line);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
main .endpoints a {
|
|
93
|
-
display: flex;
|
|
94
|
-
align-items: baseline;
|
|
95
|
-
justify-content: space-between;
|
|
96
|
-
gap: 1.5rem;
|
|
97
|
-
padding: 0.9rem 0.25rem;
|
|
98
|
-
border-bottom: 1px solid var(--line);
|
|
99
|
-
text-decoration: none;
|
|
100
|
-
text-decoration-color: transparent;
|
|
101
|
-
transition: background 160ms ease;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
main .endpoints a:hover,
|
|
105
|
-
main .endpoints a:focus-visible {
|
|
106
|
-
background: var(--faint);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.endpoint-path {
|
|
110
|
-
font-family: var(--font-mono);
|
|
111
|
-
font-size: var(--text-sm);
|
|
112
|
-
}
|
|
113
|
-
/* Inline code as rounded chips on the faint layer. */
|
|
114
|
-
.scaffold code {
|
|
115
|
-
padding: 0.12em 0.42em;
|
|
116
|
-
border-radius: 0.35rem;
|
|
117
|
-
background: var(--faint);
|
|
118
|
-
font-family: var(--font-mono);
|
|
119
|
-
font-size: 0.85em;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
main .endpoints a:hover .endpoint-path {
|
|
124
|
-
color: var(--accent);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.endpoints span {
|
|
128
|
-
color: var(--muted);
|
|
129
|
-
font-size: var(--text-sm);
|
|
130
|
-
text-align: right;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.colophon {
|
|
134
|
-
margin-top: 3.5rem;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.colophon p {
|
|
138
|
-
margin: 0 0 0.5rem;
|
|
139
|
-
color: var(--muted);
|
|
140
|
-
font-size: var(--text-sm);
|
|
141
|
-
line-height: 1.7;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.colophon code {
|
|
145
|
-
color: var(--ink);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
.colophon-links {
|
|
149
|
-
font-size: var(--text-sm);
|
|
150
|
-
}
|