Skip to content
Back to skills

App It Static

ASecurity

Turn a finished or buildable web app into a macOS Dock-launchable .app that serves built output instead of a dev server. Use when the user asks for app-it-static, a finished site/app launcher, a lightweight Dock app, or a dist/build/out bundle clickable from the Dock. Builds once, serves a snapshot via static-server.py or file://, and routes live projects to app-it. macOS only.

  • 217 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added June 7, 2026
developmentpythongoswiftbashangular

Works with

  • cli

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned June 7, 2026

npx -y skills add Christian-Katzmann/app-it --skill app-it-static --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of App It Static?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for App It Static
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/christian-katzmann-app-it-static/badge)](https://www.skillsdirectory.com/skills/christian-katzmann-app-it-static)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: app-it-static
description: >-
  Turn a finished or buildable web app into a macOS Dock-launchable .app that
  serves built output instead of a dev server. Use when the user asks for
  app-it-static, a finished site/app launcher, a lightweight Dock app, or a
  dist/build/out bundle clickable from the Dock. Builds once, serves a snapshot
  via static-server.py or file://, and routes live projects to app-it. macOS
  only.
---

# app-it-static - Make a finished build launchable from the Dock

`app-it-static` is the no-dev-server companion to `app-it`: it builds once,
serves the finished output, installs beside live apps in `~/Applications/App It/`,
and keeps the native Swift WebKit window and Dock identity.

## Non-Negotiables

1. Run `templates/inspect-static.sh` first and read the output before editing.
2. Confirm before the first project build. It can write files and take time.
3. Never run `npm run dev`. If the app needs a live dev server, route to
   `app-it` and say why.
4. Serve a snapshot and say so. Source changes need `desktop:rebuild`.
5. Default to `serve_mode: "server"`. Use `file` only after proving the build is
   file:// safe.
6. Copy shipped templates and customize through `scripts/app-it.config.json`.
   Do not re-derive launcher patterns.
7. Verify the built output, app bundle, install path, runtime port, server
   response, quit cleanup, and human-only GUI limits.

## Reference Map

Open only the files needed by the inspection result:

- `references/project-inspection.md` - static-servable tests, build/output
  detection, package managers, monorepos, names, bundle IDs, and tools.
- `references/serve-modes.md` - server vs file decisions and the file:// safety
  checklist.
- `references/generated-files.md` - template roster, shared-template rules,
  allowed target-project files, config JSON, and package scripts.
- `references/verification.md` - smoke tests, app-bundle checks, runtime checks,
  cleanup, and human/deferred buckets.
- `references/report-template.md` - exact final report format plus decision
  history.
- `references/anti-patterns.md` - traps that cause broken static launchers.

## Templates

Templates live next to this file in `templates/`. Copy them into the target
project; do not rewrite them. See `references/generated-files.md` for the full
roster.

Shared templates are byte-identical to `app-it` and guarded by repo validation:
`wrapper.swift`, `native-run-stub.c`, `desktop-icons.sh`,
`desktop-icons-preview.sh`, `desktop-install.sh`, `info-plist-template.xml`, and
`placeholder-icon-gen.sh`. If launcher internals change, edit the `app-it` copy
and re-sync this plugin so marketplace installs stay self-contained.

## Workflow

### 1. Inspect

Run:

```bash
/path/to/plugins/app-it-static/skills/app-it-static/templates/inspect-static.sh
```

Use disk truth: `package.json`, config files, built output, and actual scripts.
Read `references/project-inspection.md` before deciding whether the app is
static-servable, which build command/output dir to use, or whether a monorepo
contains multiple apps.

### 2. Decide

For each user-facing app:

```text
Static build or hand-written index.html exists?
  no  -> route to app-it
  yes -> needs http origin, routing fallback, fetch(), or service worker?
           yes -> server mode (default)
           no  -> file mode candidate
```

When unsure, choose server mode. It costs a tiny Python process and is the safe
default for framework builds.

### 3. Build

Confirm with the user, run the project build once, then copy templates into the
target project and write `scripts/app-it.config.json`. `desktop:build` assembles
the `.app`; it must not run the project build. `desktop:rebuild` is the refresh
path that reruns the build command.

Read `references/generated-files.md` before editing package scripts, generated
docs, config JSON, icons, or install paths.

### 4. Verify

Verification is mandatory. Read `references/verification.md` and run the checks
that apply: built `index.html`, Mach-O `Contents/MacOS/run`, executable
`run.sh`, Mach-O wrapper, plist placeholders gone, `.icns`, installed-path
open, server response, and Cmd+Q cleanup for server mode.

Never claim GUI-only checks passed unless a display actually proves them. Put
window render and Dock icon identity in the human bucket when needed.

### 5. Report

Use `references/report-template.md` for both the chat reply and
`docs/desktop-launcher.app-it-static-report.md`. Include snapshot limitations,
refresh command, verification results, known limits, and decision history.

Stage files only when the local convention or user request asks for it. Do not
commit unless asked.

## Quick Defaults

- Install destination: `~/Applications/App It/`.
- Bundle ID prefix: `com.user.<slug>`.
- Serve mode: `server`, unless file:// safety is proven.
- Vite/CRA/Astro/SvelteKit static/Next export/Angular/Nuxt generate: usually
  server mode.
- Hand-written `index.html` with relative assets and no routing/fetch/service
  worker: file mode candidate.
- Missing `swiftc` or `python3`: stop and say `xcode-select --install`.

## Stop Signs

Stop and explain clearly when the app only works through a live dev server, the
build fails before launcher work, the output dir lacks `index.html`, required
tooling is missing, or the environment cannot verify a claim the report would
need.

Files in this skill

  • SKILL.md5.2 KB
  • references/anti-patterns.md641 B
  • references/generated-files.md1.8 KB
  • references/project-inspection.md2.5 KB
  • references/report-template.md1.6 KB
  • references/serve-modes.md1.1 KB
  • references/verification.md1.4 KB
  • templates/app-it.config.example.json1.9 KB
  • templates/desktop-build.sh9.8 KB
  • templates/desktop-icons-preview.sh28.4 KB
  • templates/desktop-icons.sh4.6 KB
  • templates/desktop-install.sh5.8 KB
  • templates/desktop-launcher.md.template3.4 KB
  • templates/desktop-quit.sh7.8 KB
  • templates/desktop-rebuild.sh1.6 KB
  • templates/info-plist-template.xml875 B
  • templates/inspect-static.sh7.9 KB
  • templates/native-run-stub.c2.2 KB
  • templates/placeholder-icon-gen.sh10 KB
  • templates/run-template-static-file.sh2.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…