Skip to content

Commit 8bed888

Browse files
author
bigmacfive
committed
Add launch assets and playbook
1 parent 2f866b5 commit 8bed888

8 files changed

Lines changed: 504 additions & 1 deletion

File tree

README.ko.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ appbun https://chat.openai.com --name "ChatGPT" --dmg
5252

5353
이 한 줄로 프로젝트 생성, 의존성 설치, 앱 빌드, macOS DMG 생성, 설치 창 열기까지 이어집니다.
5454

55+
![appbun terminal demo](https://raw.githubusercontent.com/bigmacfive/appbun/main/docs/assets/terminal-demo.gif)
56+
5557
바로 빌드하지 않고 생성된 프로젝트만 받고 싶다면:
5658

5759
```bash
@@ -160,20 +162,25 @@ bun run build
160162
```bash
161163
bunx playwright install chromium
162164
bun run showcase:capture
165+
bun run demo:gif
163166
```
164167

165168
이 명령은 다음을 갱신합니다.
166169

167170
- `docs/screenshots/*.png`
168171
- `docs/assets/social-card.png`
172+
- `docs/assets/terminal-demo.gif`
169173
- `docs/showcase/manifest.json`
170174

171175
## 릴리즈 점검
172176

173177
```bash
174178
bun run release:check
179+
bun run links:check
175180
```
176181

182+
런치 준비 체크리스트와 게시용 원고는 [docs/launch/README.md](./docs/launch/README.md), [docs/launch/post-copy.md](./docs/launch/post-copy.md)에 정리해뒀습니다.
183+
177184
## 기여
178185

179186
기여 기준은 단순합니다. 생성 앱 품질, 패키징 흐름, 문서를 개선하고, 재현 가능한 테스트나 샘플 scaffold로 증명하면 됩니다.

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ appbun https://chat.openai.com --name "ChatGPT" --dmg
5252

5353
That one command can scaffold the project, install dependencies, build the app, create a DMG on macOS, and open the installer window.
5454

55+
![appbun terminal demo](https://raw.githubusercontent.com/bigmacfive/appbun/main/docs/assets/terminal-demo.gif)
56+
5557
If you want the generated project without building immediately:
5658

5759
```bash
@@ -160,20 +162,25 @@ bun run build
160162
```bash
161163
bunx playwright install chromium
162164
bun run showcase:capture
165+
bun run demo:gif
163166
```
164167

165168
This updates:
166169

167170
- `docs/screenshots/*.png`
168171
- `docs/assets/social-card.png`
172+
- `docs/assets/terminal-demo.gif`
169173
- `docs/showcase/manifest.json`
170174

171175
## Release checks
172176

173177
```bash
174178
bun run release:check
179+
bun run links:check
175180
```
176181

182+
Launch prep notes and post copy live in [docs/launch/README.md](docs/launch/README.md) and [docs/launch/post-copy.md](docs/launch/post-copy.md).
183+
177184
## Contributing
178185

179186
The contribution bar is straightforward: improve the generated app quality, packaging flow, or docs, and prove it with a reproducible test or sample scaffold.

docs/assets/terminal-demo.gif

4.16 MB
Loading

docs/launch/README.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# Launch Playbook
2+
3+
This is the execution checklist for launching `appbun` as an open-source project.
4+
5+
## D-3
6+
7+
### 1. Terminal demo GIF
8+
9+
```bash
10+
bun run demo:gif
11+
```
12+
13+
Expected output:
14+
15+
- `docs/assets/terminal-demo.gif`
16+
17+
### 2. README refresh check
18+
19+
Confirm these assets render correctly in GitHub preview:
20+
21+
- `docs/assets/social-card.png`
22+
- `docs/assets/terminal-demo.gif`
23+
- `docs/screenshots/showcase-grid.png`
24+
25+
## D-2
26+
27+
### 1. Final `npx` verification
28+
29+
```bash
30+
npx appbun@latest https://example.com --name "Example" --out-dir ./tmp/example-final --yes --quiet
31+
```
32+
33+
Check:
34+
35+
- package installs from npm without local workspace leakage
36+
- generated `package.json` exists
37+
- generated `electrobun.config.ts` exists
38+
39+
### 2. Broken link check
40+
41+
```bash
42+
bun run links:check
43+
```
44+
45+
### 3. Manual smoke test
46+
47+
```bash
48+
appbun https://www.youtube.com --name "YouTube" --dmg
49+
```
50+
51+
Confirm:
52+
53+
- metadata resolves
54+
- icon source is valid
55+
- DMG is created
56+
- installer opens
57+
58+
## D-1
59+
60+
### Electrobun Discord introduction
61+
62+
Goal: introduce the project before the launch day spike so the first mention is not a cold link drop.
63+
64+
Post this in the relevant showcase or community channel:
65+
66+
> Built a Pake-style CLI on top of Electrobun called `appbun`.
67+
> It turns a URL into an inspectable desktop app project, pulls site icons, and now has a macOS DMG flow plus showcase assets.
68+
> Repo: https://github.com/bigmacfive/appbun
69+
> I’m still tightening generated app polish and would appreciate feedback on the Electrobun-specific pieces.
70+
71+
## D-Day morning
72+
73+
### GeekNews post
74+
75+
Target time: Korea 10:00 AM
76+
77+
Suggested title:
78+
79+
- `appbun - 한 줄 명령으로 웹페이지를 데스크톱 앱으로 바꾸는 Electrobun 기반 CLI`
80+
81+
Suggested summary:
82+
83+
- Pake처럼 URL 하나로 데스크톱 앱을 만들되, 결과물을 블랙박스로 숨기지 않고 Electrobun 프로젝트로 생성
84+
- 사이트 메타데이터와 favicon, manifest icon을 가져와 앱 아이콘 생성
85+
- macOS에선 일체감 있는 상단바와 DMG 설치 흐름 제공
86+
- Windows, Linux도 빌드 가능한 프로젝트 출력
87+
- 오픈소스이며 기여 환영
88+
89+
## D-Day night
90+
91+
### Show HN post
92+
93+
Target time: Korea 11:00 PM, US Eastern 9:00 AM
94+
95+
Suggested title:
96+
97+
- `Show HN: appbun – turn any webpage into a desktop app with one command`
98+
99+
Opening comment:
100+
101+
> I built `appbun`, a Pake-style CLI for Electrobun.
102+
> It takes a URL, pulls usable site metadata and icons, generates an inspectable desktop app project, and adds a macOS DMG path instead of stopping at a raw wrapper.
103+
>
104+
> I focused on keeping the generated project editable instead of hiding everything behind a black box.
105+
> Recent work included better icon filtering, a more native-feeling macOS shell, interactive safety prompts, and a Playwright-based showcase.
106+
>
107+
> Repo: https://github.com/bigmacfive/appbun
108+
> npm: https://www.npmjs.com/package/appbun
109+
110+
## D+1
111+
112+
### Reddit and X distribution
113+
114+
Use one primary post per platform, then reply with screenshots, GIFs, and examples instead of repeating the same top-level link.
115+
116+
Recommended assets to attach:
117+
118+
- `docs/assets/terminal-demo.gif`
119+
- `docs/screenshots/showcase-grid.png`
120+
- `docs/screenshots/google-maps.png`
121+
- `docs/screenshots/photopea.png`
122+
123+
## D+3
124+
125+
### Fast follow release
126+
127+
Ship a visible improvement quickly after launch.
128+
129+
Good candidates:
130+
131+
- Windows packaging helper
132+
- custom icon override flag
133+
- better generated navigation controls
134+
- domain presets for popular no-login apps
135+
136+
Rule: mention exactly which community feedback got folded into the release.

docs/launch/post-copy.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Post Copy
2+
3+
## Electrobun Discord
4+
5+
Built a Pake-style CLI on top of Electrobun called `appbun`.
6+
7+
It turns a URL into an inspectable desktop app project instead of hiding the output behind a black box. It pulls site metadata and icons, generates a cleaner shell, and adds a DMG flow on macOS.
8+
9+
Repo: https://github.com/bigmacfive/appbun
10+
npm: https://www.npmjs.com/package/appbun
11+
12+
If anyone is building remote web-app wrappers with Electrobun, I’d like feedback on the generated project defaults and packaging flow.
13+
14+
## GeekNews
15+
16+
제목:
17+
18+
`appbun - 한 줄 명령으로 웹페이지를 데스크톱 앱으로 바꾸는 Electrobun 기반 CLI`
19+
20+
본문:
21+
22+
`appbun`은 URL 하나를 받아 Electrobun 기반 데스크톱 앱 프로젝트를 생성하는 CLI입니다.
23+
24+
Pake류 도구처럼 빠르게 웹앱을 앱으로 감쌀 수 있지만, 결과물을 블랙박스로 숨기지 않고 수정 가능한 프로젝트로 출력하는 쪽에 초점을 맞췄습니다.
25+
26+
주요 기능:
27+
28+
- 사이트 메타데이터, favicon, manifest icon 기반 아이콘 생성
29+
- macOS에서 더 일체감 있게 보이는 상단 영역
30+
- DMG 생성 흐름 포함
31+
- Windows, Linux도 빌드 가능한 프로젝트 생성
32+
- interactive safety prompt 지원 (`--yes`로 생략 가능)
33+
34+
오픈소스 저장소:
35+
https://github.com/bigmacfive/appbun
36+
37+
npm:
38+
https://www.npmjs.com/package/appbun
39+
40+
## Show HN
41+
42+
Title:
43+
44+
`Show HN: appbun – turn any webpage into a desktop app with one command`
45+
46+
Body:
47+
48+
I built `appbun`, a Pake-style CLI on top of Electrobun.
49+
50+
You give it a URL and it generates an inspectable desktop app project, pulls site metadata and icons, and gives macOS users a DMG path instead of stopping at a raw wrapper.
51+
52+
I wanted the output to stay editable and hackable rather than hiding everything behind a black box.
53+
54+
Recent polish work:
55+
56+
- stronger icon filtering so broken or tiny assets do not get packaged
57+
- a more native-feeling unified shell on macOS
58+
- interactive confirmation prompts for destructive or heavyweight steps
59+
- a Playwright-driven showcase of public no-login web apps
60+
61+
Repo: https://github.com/bigmacfive/appbun
62+
npm: https://www.npmjs.com/package/appbun
63+
64+
## Reddit
65+
66+
### r/sideproject
67+
68+
Built `appbun`, a CLI that turns a webpage into a desktop app project using Electrobun.
69+
70+
I wanted a Pake-like workflow, but with generated output you can actually inspect and modify. It now pulls icons from site metadata, ships a macOS DMG flow, and includes safety prompts for overwrite/build steps.
71+
72+
Repo: https://github.com/bigmacfive/appbun
73+
74+
### r/opensource
75+
76+
Open-sourced `appbun`, a small CLI that wraps a URL into an Electrobun desktop app project.
77+
78+
It focuses on generated project quality instead of just producing a one-off wrapper. Current work has gone into icon extraction, shell polish, packaging, and launch assets.
79+
80+
Repo: https://github.com/bigmacfive/appbun
81+
npm: https://www.npmjs.com/package/appbun
82+
83+
## X
84+
85+
### Short post
86+
87+
Launched `appbun`.
88+
89+
A Pake-style CLI for Electrobun that turns any webpage into a desktop app project with one command.
90+
91+
- usable icon extraction
92+
- native-feeling macOS shell
93+
- DMG flow
94+
- public no-login showcase
95+
96+
GitHub: https://github.com/bigmacfive/appbun
97+
npm: https://www.npmjs.com/package/appbun
98+
99+
### Longer post
100+
101+
Built `appbun`, a Pake-style CLI on top of Electrobun.
102+
103+
You give it a URL and it generates a desktop app project you can inspect, edit, and ship. I focused on better icon extraction, a more native-feeling macOS shell, interactive safety prompts, and a real launch showcase instead of a thin wrapper demo.
104+
105+
GitHub: https://github.com/bigmacfive/appbun
106+
npm: https://www.npmjs.com/package/appbun

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
"prepack": "bun run build",
2727
"prepublishOnly": "bun run build",
2828
"release:check": "bun run build && npm pack --dry-run",
29-
"showcase:capture": "node scripts/capture-showcase.mjs"
29+
"showcase:capture": "node scripts/capture-showcase.mjs",
30+
"demo:gif": "node scripts/render-terminal-demo.mjs",
31+
"links:check": "node scripts/check-readme-links.mjs"
3032
},
3133
"keywords": [
3234
"electrobun",

scripts/check-readme-links.mjs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { readFile } from 'node:fs/promises';
2+
import { existsSync } from 'node:fs';
3+
import { resolve } from 'node:path';
4+
5+
const files = ['README.md', 'README.ko.md', 'docs/showcase/README.md'];
6+
const failures = [];
7+
8+
for (const file of files) {
9+
const absolute = resolve(process.cwd(), file);
10+
const markdown = await readFile(absolute, 'utf8');
11+
const matches = [...markdown.matchAll(/!?\[([^\]]*)\]\(([^)]+)\)/g)];
12+
for (const match of matches) {
13+
const target = match[2];
14+
if (!target || target.startsWith('#')) {
15+
continue;
16+
}
17+
if (/^https?:\/\//i.test(target)) {
18+
const localMirror = toLocalGitHubRawPath(target);
19+
if (localMirror && existsSync(localMirror)) {
20+
continue;
21+
}
22+
const ok = await checkRemote(target);
23+
if (!ok) failures.push(`${file}: ${target}`);
24+
continue;
25+
}
26+
const local = resolve(process.cwd(), file, '..', target);
27+
if (!existsSync(local)) {
28+
failures.push(`${file}: ${target}`);
29+
}
30+
}
31+
}
32+
33+
if (failures.length > 0) {
34+
console.error('Broken links found:');
35+
for (const failure of failures) {
36+
console.error(`- ${failure}`);
37+
}
38+
process.exit(1);
39+
}
40+
41+
console.log('All checked README links are valid.');
42+
43+
async function checkRemote(url) {
44+
for (const method of ['HEAD', 'GET']) {
45+
try {
46+
const response = await fetch(url, {
47+
method,
48+
redirect: 'follow',
49+
headers: { 'user-agent': 'appbun-link-check/0.5.1' },
50+
});
51+
if (response.ok) return true;
52+
} catch {
53+
// ignore and retry with next method
54+
}
55+
}
56+
return false;
57+
}
58+
59+
function toLocalGitHubRawPath(url) {
60+
const match = url.match(/^https?:\/\/raw\.githubusercontent\.com\/bigmacfive\/appbun\/main\/(.+)$/i);
61+
if (!match?.[1]) {
62+
return undefined;
63+
}
64+
return resolve(process.cwd(), match[1]);
65+
}

0 commit comments

Comments
 (0)