storeshot 0.1.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.
Files changed (151) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/CONTRIBUTING.md +75 -0
  3. package/LICENSE +21 -0
  4. package/README.md +142 -0
  5. package/SECURITY.md +25 -0
  6. package/THIRD_PARTY_LICENSES.txt +668 -0
  7. package/THIRD_PARTY_NOTICES.md +93 -0
  8. package/dist/cli.js +1458 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/ui/artwork/tabler/LICENSE +21 -0
  11. package/dist/ui/artwork/tabler/README.md +23 -0
  12. package/dist/ui/artwork/tabler/filled/grid-pattern.svg +13 -0
  13. package/dist/ui/artwork/tabler/filled/laurel-wreath-1.svg +13 -0
  14. package/dist/ui/artwork/tabler/filled/laurel-wreath-2.svg +13 -0
  15. package/dist/ui/artwork/tabler/filled/laurel-wreath-3.svg +13 -0
  16. package/dist/ui/artwork/tabler/filled/laurel-wreath.svg +13 -0
  17. package/dist/ui/artwork/tabler/filled/sparkles.svg +15 -0
  18. package/dist/ui/artwork/tabler/filled/stars.svg +15 -0
  19. package/dist/ui/artwork/tabler/outline/scribble.svg +19 -0
  20. package/dist/ui/artwork/tabler/outline/underline.svg +20 -0
  21. package/dist/ui/assets/AssetsView-D0lbK5rm.js +1 -0
  22. package/dist/ui/assets/SetEditor-BBUlgGT0.js +440 -0
  23. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  24. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  25. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  26. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  27. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  28. package/dist/ui/assets/index-DPDaBFld.js +10 -0
  29. package/dist/ui/assets/index-DfZBqsD3.css +2 -0
  30. package/dist/ui/assets/shared-BiRg4I01.js +1 -0
  31. package/dist/ui/index.html +14 -0
  32. package/dist/ui/licenses/geist-OFL-1.1.txt +93 -0
  33. package/dist/ui/mockup-bundles/frameup-free/LICENSE +21 -0
  34. package/dist/ui/mockup-bundles/frameup-free/README.md +12 -0
  35. package/dist/ui/mockup-bundles/frameup-free/assets/imac-pro.png +0 -0
  36. package/dist/ui/mockup-bundles/frameup-free/assets/imac-retina.png +0 -0
  37. package/dist/ui/mockup-bundles/frameup-free/assets/imac.png +0 -0
  38. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-gold.png +0 -0
  39. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-silver.png +0 -0
  40. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-space-grey.png +0 -0
  41. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-gold.png +0 -0
  42. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-gold.png +0 -0
  43. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-silver.png +0 -0
  44. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-space-grey.png +0 -0
  45. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-silver-landscape.png +0 -0
  46. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-silver-portrait.png +0 -0
  47. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-space-gray-landscape.png +0 -0
  48. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-space-gray-portrait.png +0 -0
  49. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-silver-landscape.png +0 -0
  50. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-silver-portrait.png +0 -0
  51. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-space-gray-landscape.png +0 -0
  52. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-space-gray-portrait.png +0 -0
  53. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-silver.png +0 -0
  54. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-space-grey.png +0 -0
  55. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-black.png +0 -0
  56. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-green.png +0 -0
  57. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-gold.png +0 -0
  58. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-gold.png +0 -0
  59. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-midnight-green.png +0 -0
  60. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-silver.png +0 -0
  61. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-space-grey.png +0 -0
  62. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-midnight-green.png +0 -0
  63. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-silver.png +0 -0
  64. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-space-grey.png +0 -0
  65. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-purple.png +0 -0
  66. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-red.png +0 -0
  67. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-white.png +0 -0
  68. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-yellow.png +0 -0
  69. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-13-pro-max.svg +5 -0
  70. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-13-pro.svg +5 -0
  71. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-max-no-cutout.svg +4 -0
  72. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-max.svg +5 -0
  73. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-no-cutout.svg +4 -0
  74. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro.svg +5 -0
  75. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-max-no-cutout.svg +4 -0
  76. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-max.svg +5 -0
  77. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-no-cutout.svg +4 -0
  78. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro.svg +5 -0
  79. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-max-no-cutout.svg +10 -0
  80. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-max.svg +11 -0
  81. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-no-cutout.svg +4 -0
  82. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro.svg +5 -0
  83. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-max-no-cutout.svg +4 -0
  84. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-max.svg +5 -0
  85. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-no-cutout.svg +4 -0
  86. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro.svg +5 -0
  87. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-blue.png +0 -0
  88. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-green.png +0 -0
  89. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-red.png +0 -0
  90. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-white.png +0 -0
  91. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-yellow.png +0 -0
  92. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-gold.png +0 -0
  93. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-silver.png +0 -0
  94. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-space-gray.png +0 -0
  95. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-gold.png +0 -0
  96. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-gold.png +0 -0
  97. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-rose-gold.png +0 -0
  98. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-silver.png +0 -0
  99. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-space-gray.png +0 -0
  100. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-rose-gold.png +0 -0
  101. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-silver.png +0 -0
  102. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-space-gray.png +0 -0
  103. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-gold.png +0 -0
  104. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-jet-black.png +0 -0
  105. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-matte-black.png +0 -0
  106. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-gold.png +0 -0
  107. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-jet-black.png +0 -0
  108. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-matte-black.png +0 -0
  109. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-rose-gold.png +0 -0
  110. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-silver.png +0 -0
  111. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-rose-gold.png +0 -0
  112. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-silver.png +0 -0
  113. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-gold.png +0 -0
  114. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-gold.png +0 -0
  115. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-silver.png +0 -0
  116. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-space-grey.png +0 -0
  117. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-silver.png +0 -0
  118. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-space-grey.png +0 -0
  119. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-gold.png +0 -0
  120. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-rose-gold.png +0 -0
  121. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-silver.png +0 -0
  122. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-space-gray.png +0 -0
  123. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-x-silver.png +0 -0
  124. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-x-space-grey.png +0 -0
  125. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-blue.png +0 -0
  126. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-coral.png +0 -0
  127. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-red.png +0 -0
  128. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-silver.png +0 -0
  129. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-space-grey.png +0 -0
  130. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-yellow.png +0 -0
  131. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-gold.png +0 -0
  132. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-gold.png +0 -0
  133. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-silver.png +0 -0
  134. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-space-grey.png +0 -0
  135. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-silver.png +0 -0
  136. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-space-grey.png +0 -0
  137. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-gold.png +0 -0
  138. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-silver.png +0 -0
  139. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-space-grey.png +0 -0
  140. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-gold.png +0 -0
  141. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-13-silver.png +0 -0
  142. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-13-space-grey.png +0 -0
  143. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-15-silver.png +0 -0
  144. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-15-space-grey.png +0 -0
  145. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-space-grey.png +0 -0
  146. package/dist/ui/mockup-bundles/frameup-free/assets/pro-display-xdr.png +0 -0
  147. package/dist/ui/mockup-bundles/frameup-free/assets/thunderbolt-display.png +0 -0
  148. package/dist/ui/mockup-bundles/frameup-free/storeshot-mockups.json +2279 -0
  149. package/docs/mockup-bundles.md +104 -0
  150. package/docs/releasing.md +155 -0
  151. package/package.json +85 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Changelog
2
+
3
+ All notable changes to StoreShot will be documented in this file. The format is
4
+ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versioning
5
+ follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.1.0] - 2026-07-16
10
+
11
+ Initial public pre-release of the local-first StoreShot CLI and visual App Store
12
+ screenshot editor.
13
+
14
+ This `0.x` release line is under active development and may contain breaking
15
+ project-format or API changes.
@@ -0,0 +1,75 @@
1
+ # Contributing to StoreShot
2
+
3
+ Thank you for helping improve StoreShot. The project is in active development,
4
+ so small, focused changes with a clear user benefit are easiest to review.
5
+
6
+ ## Before you start
7
+
8
+ - Search existing issues before opening a new one.
9
+ - For a bug, include the StoreShot version, Node.js version, operating system,
10
+ reproduction steps, and the smallest safe example project you can share.
11
+ - For a substantial feature or architecture change, open an issue first so the
12
+ approach and scope can be agreed before implementation.
13
+ - Never attach private screenshots, signing material, tokens, or proprietary
14
+ mockup assets to an issue.
15
+
16
+ ## Development setup
17
+
18
+ StoreShot requires Node.js 22.12 or newer and npm.
19
+
20
+ ```bash
21
+ npm ci
22
+ npm run dev
23
+ ```
24
+
25
+ The development command uses the ignored `playground/` directory. To test a
26
+ different project without opening the browser:
27
+
28
+ ```bash
29
+ npm run storeshot -- dev /tmp/storeshot-project --no-open
30
+ ```
31
+
32
+ ## Project principles
33
+
34
+ - Keep StoreShot local-first and folder-based. Do not introduce accounts, a
35
+ remote backend, or a database without prior agreement.
36
+ - Treat the directory passed to `storeshot dev` as a strict filesystem boundary.
37
+ - Keep Node-only code out of the browser bundle and browser-only code out of the
38
+ CLI runtime.
39
+ - Prefer readable types and direct solutions over compatibility layers or clever
40
+ abstractions. The `0.x` format may evolve when a cleaner design warrants it.
41
+ - Prefer the existing source-owned shadcn/Base UI components for interactive UI.
42
+ - Do not commit `dist/`, `node_modules/`, `playground/` contents, or local
43
+ `mockup-bundles/` and `element-bundles/` archives.
44
+
45
+ ## Licensing new dependencies and assets
46
+
47
+ Every new dependency and redistributed asset must have a license that permits
48
+ its intended use and distribution.
49
+
50
+ - Add package dependencies through npm so `package-lock.json` records their SPDX
51
+ license metadata.
52
+ - Run `npm run licenses` after changing a package whose code or assets are
53
+ included in StoreShot's distributable output.
54
+ - Preserve upstream copyright notices and license files for bundled artwork,
55
+ fonts, and mockups.
56
+ - Record an asset's source URL and exact revision in its local README or manifest.
57
+ - Do not add assets copied from commercial products or websites without explicit
58
+ redistribution permission.
59
+
60
+ Update `THIRD_PARTY_NOTICES.md` when attribution changes.
61
+
62
+ ## Validation and pull requests
63
+
64
+ Run the full gate before opening a pull request:
65
+
66
+ ```bash
67
+ npm run check
68
+ ```
69
+
70
+ For UI changes, also exercise the affected workflow in the browser. Keep commits
71
+ focused, explain user-visible behavior in the pull request, and call out project
72
+ format changes explicitly.
73
+
74
+ By submitting a contribution, you agree that it may be distributed under the
75
+ project's MIT License.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mikko Kutilainen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # StoreShot
2
+
3
+ StoreShot is a local-first, agent-native CLI and visual editor for creating
4
+ App Store screenshots. Run it in a folder, edit screenshot sets in the browser,
5
+ and keep the complete project as ordinary assets and JSON files that humans,
6
+ scripts, and AI coding agents can all inspect and change.
7
+
8
+ > **Pre-release:** StoreShot is currently at `0.1.0`. It is under active
9
+ > development, changes quickly, and does not yet promise backward compatibility.
10
+ > It supports Apple App Store screenshots today; Google Play support is planned.
11
+
12
+ StoreShot is already used in production for the iOS app
13
+ [Lokimaps](https://www.lokimaps.com/).
14
+
15
+ ## Why StoreShot?
16
+
17
+ Many existing screenshot tools were designed as closed, manual design silos.
18
+ Their project data is difficult to inspect, version, automate, or hand to an AI
19
+ agent, which makes routine localization and release work unnecessarily awkward.
20
+
21
+ StoreShot keeps the workflow open and file-based. The visual editor is useful
22
+ for hands-on design, while the same project can be reviewed, generated, or
23
+ updated by an agent through normal filesystem tools. There is no account,
24
+ database, hosted project, or remote backend.
25
+
26
+ ## What it can do
27
+
28
+ - Organize raw screenshots, brand artwork, logos, and reusable image assets.
29
+ - Create ordered screenshot sets for a locale and Apple device family.
30
+ - Arrange text, shapes, images, recolorable artwork, and device mockups on a
31
+ free-form canvas.
32
+ - Use undo/redo, copy/paste, alignment guides, layers, keyboard movement, and
33
+ canvas zoom.
34
+ - Export an entire set as full-resolution PNG files in a ZIP archive.
35
+ - Import portable device-mockup bundles with explicit frame geometry and license
36
+ metadata.
37
+ - Persist everything inside the selected project directory.
38
+
39
+ ## Quick start
40
+
41
+ StoreShot requires Node.js 22.12 or newer.
42
+
43
+ ```bash
44
+ npm install --global storeshot
45
+ mkdir app-store-screenshots
46
+ storeshot dev app-store-screenshots
47
+ ```
48
+
49
+ The command opens a local workspace at `http://127.0.0.1:4173`. To use a
50
+ different port or avoid opening the browser:
51
+
52
+ ```bash
53
+ storeshot dev ./app-store-screenshots --port 4174 --no-open
54
+ ```
55
+
56
+ The default server is bound to the loopback interface. Be deliberate when using
57
+ `--host` to expose it to another interface.
58
+
59
+ ## Project format
60
+
61
+ StoreShot creates a transparent, portable project structure:
62
+
63
+ ```text
64
+ app-store-screenshots/
65
+ ├── storeshot.json
66
+ ├── assets/
67
+ │ ├── screenshots/
68
+ │ ├── brand/
69
+ │ ├── logos/
70
+ │ └── other/
71
+ ├── mockup-bundles/
72
+ │ └── my-device-frames/
73
+ │ ├── storeshot-mockups.json
74
+ │ ├── LICENSE
75
+ │ └── assets/
76
+ └── sets/
77
+ ├── english-iphone-a1b2c3d4.json
78
+ └── finnish-iphone-e5f6g7h8.json
79
+ ```
80
+
81
+ Each set stores its locale, device, output dimensions, ordered screenshots, and
82
+ canvas layers. StoreShot only serves files inside the selected project boundary.
83
+ Project assets and imported bundles remain subject to their own licenses.
84
+
85
+ The editor can load fonts from [Bunny Fonts](https://fonts.bunny.net/) on demand.
86
+ The project itself remains local, but selecting a hosted font requires a network
87
+ request to Bunny Fonts.
88
+
89
+ ## Device mockups
90
+
91
+ The built-in Apple frames come from the MIT-licensed
92
+ [FrameUp Free](https://github.com/amirmun99/FrameUp-Free) project. StoreShot also
93
+ supports project-local bundles and lets users import all or selected frames.
94
+
95
+ See the [mockup bundle format](docs/mockup-bundles.md) for the manifest and
96
+ geometry specification.
97
+
98
+ ## Develop from source
99
+
100
+ From a checkout of this repository or your fork:
101
+
102
+ ```bash
103
+ npm ci
104
+ npm run dev
105
+ ```
106
+
107
+ `npm run dev` starts the CLI in watch mode against the ignored `playground/`
108
+ project and serves the React UI with Vite hot reload.
109
+
110
+ Useful commands:
111
+
112
+ | Command | Purpose |
113
+ | --- | --- |
114
+ | `npm run dev` | Run the development CLI and UI against `playground/` |
115
+ | `npm run storeshot -- dev <dir> --no-open` | Run the unbuilt CLI against another folder |
116
+ | `npm run typecheck` | Type-check the project |
117
+ | `npm run build` | Build the CLI and browser UI |
118
+ | `npm run licenses` | Regenerate bundled dependency license texts |
119
+ | `npm run check` | Run license, type, and production-build validation |
120
+
121
+ The repository also includes `AGENTS.md` and project-local Codex configuration
122
+ for agent-assisted development.
123
+
124
+ Maintainers can follow the [release guide](docs/releasing.md) to publish a new
125
+ version through npm trusted publishing and GitHub Actions.
126
+
127
+ ## Contributing and security
128
+
129
+ StoreShot is early software, and focused issues and pull requests are welcome.
130
+ Read [CONTRIBUTING.md](CONTRIBUTING.md) before making a substantial change. Please
131
+ report vulnerabilities according to [SECURITY.md](SECURITY.md), not in a public
132
+ issue.
133
+
134
+ ## License
135
+
136
+ StoreShot is released under the [MIT License](LICENSE).
137
+
138
+ Third-party packages, fonts, icons, and device frames retain their own licenses.
139
+ See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) and
140
+ [THIRD_PARTY_LICENSES.txt](THIRD_PARTY_LICENSES.txt) for attribution and license
141
+ details. StoreShot is not affiliated with or endorsed by Apple Inc. Apple,
142
+ App Store, iPhone, iPad, Apple Watch, and Mac are trademarks of Apple Inc.
package/SECURITY.md ADDED
@@ -0,0 +1,25 @@
1
+ # Security policy
2
+
3
+ ## Supported versions
4
+
5
+ StoreShot is pre-release software. Security fixes are made against the latest
6
+ `0.x` release and the current default branch; older prereleases are not
7
+ maintained.
8
+
9
+ ## Reporting a vulnerability
10
+
11
+ Please do not report a vulnerability in a public issue. Use the repository's
12
+ private vulnerability reporting feature on GitHub. If private reporting is not
13
+ available, contact the maintainer privately through the contact information on
14
+ their GitHub profile.
15
+
16
+ Include the affected version, impact, reproduction steps, and any suggested
17
+ mitigation. Do not include real user screenshots, credentials, tokens, or other
18
+ sensitive project data. You should receive an acknowledgement within seven days,
19
+ although this volunteer project cannot guarantee a resolution timeline.
20
+
21
+ ## Local server model
22
+
23
+ StoreShot serves a user-selected project directory and binds to `127.0.0.1` by
24
+ default. Exposing the service with `--host` changes its threat model. Only do so
25
+ on a trusted network, and do not place untrusted files in the project directory.