-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.saneprocess
More file actions
351 lines (335 loc) · 20.3 KB
/
Copy path.saneprocess
File metadata and controls
351 lines (335 loc) · 20.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# SaneProcess compliance manifest
name: SaneSales
type: macos_app
scheme: SaneSales
project: SaneSales.xcodeproj
bundle_id: com.sanesales.app
build:
xcodegen: true
tests:
ui_dir: SaneSalesUITests
ui_target: SaneSalesIOSUITests
ui_scheme: SaneSalesIOS
ui_destination: "platform=iOS Simulator,name=iPhone 17 Pro"
release:
team_id: M78L6FXD48
signing_identity: "Developer ID Application"
dist_host: dist.sanesales.com
site_host: sanesales.com
r2_bucket: sanebar-downloads
use_sparkle: true
min_system_version: "14.0"
reviewed_auto_reconcile_stashes:
- stash_sha: "a7ab976932f554047102fb6fff853886fdeb5a99"
subject: "On main: auto-reconcile-20260508-215519-stephans-mac-mini"
decision: recovered
reason: "Reviewed 2026-05-09. HEAD already contains the shared SaneUI menu/context-menu, settings routing, and application-mover work; remaining delta is local SaneUI path wiring plus research/handoff notes, which should not ship in the release tree."
- stash_sha: "2747effb6c1e44e1ada21af92f6e6e9a7adb4aff"
subject: "On main: auto-reconcile-20260505-215526-stephans-mac-mini"
decision: deferred
reason: "Reviewed 2026-05-09. Product Hunt/demo-video capture script plus research note only; not release-facing for the current app or live docs."
- stash_sha: "54a5de3b51c984b056da02359199c000a5bb0381"
subject: "On main: auto-reconcile-20260425-215520-stephans-mac-mini"
decision: recovered
reason: "Reviewed 2026-05-09. The privacy and website-CTA telemetry disclosures are already present in HEAD/live docs; this stash is an older wording pass plus handoff notes."
- stash_sha: "031a87067e82f6dab2060dba0ceb988ae043a1b7"
subject: "On main: auto-reconcile-20260424-215517-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09. Single-page website comparison-table wording/layout tweaks were overtaken by later docs/index revisions that shipped after this stash."
- stash_sha: "76c6e1801981abe8796a364f1cb8fd4e5108be24"
subject: "On main: auto-reconcile-20260424-153452-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09. The customer-facing outcome shipped through later code: current HEAD and changelog already cover custom-range/chart-readability/watch-snapshot work; remaining delta is alternate demo/screenshot/test scaffolding."
- stash_sha: "e704b6b4780f7a0260c3e60d34591110fd91f049"
subject: "On main: auto-reconcile-20260424-055517-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09. Older website hero/meta/support refinements still point at the 1.3.0 launch state and were replaced by current 1.3.5 site copy and download wiring."
- stash_sha: "142cb47efabf776c16637730223f7d97916f3f48"
subject: "On main: auto-reconcile-20260423-215519-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09. Watch/demo/docs screenshot pass predates the later shipped Apple Watch snapshot refresh and current site state; remaining DEBUG/demo capture tweaks are not release-facing."
- stash_sha: "2d162add43226e7b3c133f0e4397d3a3e6960ba7"
subject: "On main: auto-reconcile-20260422-215521-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09. Custom-range, no-orders, and history-upsell work already shipped via later implementation; current HEAD has shared Dashboard/Orders ranges, unlock CTA price labels, UI coverage, and matching changelog notes."
- stash_sha: "32234575c5eaea6a9d11f8704a518242d3392738"
subject: "On main: auto-reconcile-20260417-055518-stephans-mac-mini"
decision: deferred
reason: "Reviewed 2026-05-09. App Store screenshot capture/metadata tooling only. Potentially useful for a future screenshot lane revisit, but not a current direct-release blocker for v1.3.5."
- stash_sha: "9d93f29e3f315260dbbc2314edb0515bed924320"
subject: "On main: auto-reconcile-20260416-215512-stephans-mac-mini"
decision: superseded
reason: "Reviewed 2026-05-09; refreshed 2026-06-16. This hardcoded an older macOS/direct price into strings, but current HEAD uses the newer displayPriceLabel/fallback-price path at the active public price, so nothing here is missing from shipped runtime behavior."
- stash_sha: "fe143c282dac344de909cc5c6accaa6c69dd52b5"
subject: "On main: auto-reconcile-20260416-055517-stephans-mac-mini"
decision: recovered
reason: "Reviewed 2026-05-09. The download-page work is already in HEAD; only a stale research note still differs, so nothing customer-facing is missing from v1.3.5."
- stash_sha: "32267657fd4c9f99f6ed59cdbcb984b623745f79"
subject: "On main: auto-reconcile-20260415-055522-stephans-mac-mini"
decision: recovered
reason: "Reviewed 2026-05-09; refreshed 2026-06-16. The current pricing rollout already landed in HEAD/live docs and iOS unlock CTAs; remaining delta is an older intermediate docs/project state."
- stash_sha: "1ae75fcd61190e0f4f60c42b1b9a8885de48c077"
subject: "On main: auto-reconcile-20260508-215529-stephans-macbook-air"
decision: recovered
reason: "Reviewed 2026-05-09. App/menu/settings/UI/test work is represented in the current tree. The stash's local ../../infra/SaneUI package wiring is intentionally not applied; current remote SaneUI pin is the intended release-facing dependency path."
- stash_sha: "9fbf79297248cdfea0fbea565827f9ec39b10542"
subject: "On main: auto-reconcile-20260505-215537-stephans-macbook-air"
decision: deferred
reason: "Reviewed 2026-05-09. Research/demo-script drift is not release-facing."
- stash_sha: "c3c5404d9882f50ae43effa0d1655a567e7f5e62"
subject: "On main: auto-reconcile-20260501-215526-stephans-macbook-air"
decision: deferred
reason: "Reviewed 2026-05-09. Analytics instrumentation is not required for this release."
- stash_sha: "0dc7bb0e1f05dc1bec296d2fe34e4fb7c16b867b"
subject: "On main: auto-reconcile-20260430-215529-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "e5a6ba4b3c29229d2a775484a86bcb659bac40ec"
subject: "On main: auto-reconcile-20260429-215525-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Dashboard/date-range work is already represented or superseded by the current tree."
- stash_sha: "f514a854495a1983c5c95f0246e4ec3ba45a8252"
subject: "On main: auto-reconcile-20260425-215529-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "86e13bbf1957b07a6b8cd802262c7ae303df68fe"
subject: "On main: auto-reconcile-20260424-153503-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "ac24f1bab67b4d6a2fa2e3ff754b48342375cf93"
subject: "On main: auto-reconcile-20260423-215529-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "eae3c9a785935f58b7b64cbdef6763b12ad151a9"
subject: "On main: auto-reconcile-20260422-215530-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Dashboard/date-range work is already represented or superseded by the current tree."
- stash_sha: "d5f03f60a419fec48dbe1ef6f966eef28a41a31e"
subject: "On main: auto-reconcile-20260418-055526-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "4e600b543326640f36bc2406e3afc7bef167c468"
subject: "On main: auto-reconcile-20260413-152145-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "3f222956bc4275c8e602b3834dd1fceafc86d67e"
subject: "On main: auto-reconcile-20260411-055525-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
- stash_sha: "8799f28bf2ddee98fd4dc11030c367f2d514ea2c"
subject: "On main: auto-reconcile-20260410-215527-stephans-macbook-air"
decision: superseded
reason: "Reviewed 2026-05-09. Docs/site/admin drift only, not runtime release work."
export:
options_plist: ExportOptions-DevID.plist
profiles:
- "com.sanesales.app:SaneSales Developer ID"
- "com.sanesales.app.widgets:SaneSales Widgets Developer ID"
archive_extra_args:
- "-allowProvisioningUpdates"
dmg:
volume_icon: Resources/DMGIcon.icns
file_icon: Resources/DMGIcon.icns
window_size: "800 400"
app_icon_pos: "200 185"
drop_pos: "600 185"
commands:
verify: ./scripts/SaneMaster.rb verify
test_mode: ./scripts/SaneMaster.rb tm
lint: ./scripts/SaneMaster.rb lint
clean: ./scripts/SaneMaster.rb clean
launch: ./scripts/SaneMaster.rb launch
logs: ./scripts/SaneMaster.rb logs
docs:
- CLAUDE.md
- README.md
- DEVELOPMENT.md
- ARCHITECTURE.md
- SESSION_HANDOFF.md
mcps:
- apple-docs
- context7
- github
- xcode
appstore:
enabled: true
app_id: "6759010976"
product_id: "com.sanesales.app.pro.unlock.v2"
iap_price_usd: "9.99"
scheme: SaneSales-AppStore
configuration: Release-AppStore
platforms: [macos, ios]
ios_scheme: SaneSalesIOS
category: public.app-category.finance
age_rating: "4+"
copyright: "2026 SaneApps"
content_rights_declaration: DOES_NOT_USE_THIRD_PARTY_CONTENT
export_compliance:
uses_non_exempt_encryption: false
exemption_reason: "SaneSales does not use non-exempt encryption. It relies on Apple platform security and direct local network requests to the user's configured sales providers."
privacy_policy_url: "https://sanesales.com/privacy"
support_url: "https://sanesales.com/support"
marketing_url: "https://sanesales.com"
metadata:
macos:
subtitle: "Private Revenue Tracker"
promotional_text: "Track Lemon Squeezy, Gumroad, and Stripe in one private native app. Try demo data first, then unlock Pro for live sales."
description: >-
Track Lemon Squeezy, Gumroad, and Stripe revenue in one private native app for indie sellers.
SaneSales is built for makers who sell from more than one storefront and just want to know what sold today without opening three dashboards or copying numbers into a spreadsheet.
Start with built-in demo data, then unlock Pro to connect your own provider accounts. SaneSales talks directly to each provider from your device, so SaneApps never receives your sales data, customer list, products, orders, revenue, or API keys.
On Mac, SaneSales gives you a fast desktop dashboard, menu bar revenue, widgets, order search, product breakdowns, refund-aware totals, custom date ranges, and CSV export.
Demo includes:
• Built-in sample dashboard
• Sample orders and product catalog
• Built-in demo mode
Pro unlocks:
• Live sales tracking
• iCloud Keychain provider sync across your Apple devices
• Custom date ranges
• Full order history
• CSV export
• Desktop widgets and menu bar totals
• Multiple providers at once
keywords: "lemon squeezy,gumroad,stripe,revenue,orders,sales,refunds,merchant,menu bar"
whats_new: "Critical security update."
marketing_url: "https://sanesales.com"
ios:
subtitle: "Private Revenue Tracker"
promotional_text: "Track Lemon Squeezy, Gumroad, and Stripe in one private native app. Try demo data first, then unlock Pro for live sales."
description: >-
Track Lemon Squeezy, Gumroad, and Stripe revenue on iPhone, iPad, and Apple Watch in one private native app for indie sellers.
SaneSales is built for makers who sell from more than one storefront and just want to know what sold today without opening three dashboards or copying numbers into a spreadsheet.
Start with built-in demo data, then unlock Pro to connect your own provider accounts. SaneSales talks directly to each provider from your device, so SaneApps never receives your sales data, customer list, products, orders, revenue, or API keys.
On iPhone, iPad, and Apple Watch, SaneSales gives you a quick revenue dashboard, widgets, order search, product breakdowns, refund-aware totals, custom date ranges, and CSV export.
Demo includes:
• Built-in sample dashboard
• Sample orders and product catalog
• Built-in demo mode
Pro unlocks:
• Live sales tracking
• iCloud Keychain provider sync across your Apple devices
• Custom date ranges
• Full order history
• CSV export
• Multiple providers at once
• Shared Pro access across your Apple devices
keywords: "lemon squeezy,gumroad,stripe,revenue,orders,sales,refunds,widgets,watch"
whats_new: "Critical security update."
marketing_url: "https://sanesales.com"
review_notes: "SaneSales is a freemium, read-only App Store app for merchants with existing LemonSqueezy, Gumroad, or Stripe accounts. Basic is free in the App Store build and includes built-in demo mode, so App Review does not need an account, API key, or payment. Live provider connections require Pro. SaneSales Pro is the only paid app unlock and is sold as a one-time StoreKit In-App Purchase through the Unlock Pro button in onboarding or Settings > License. There is no website license flow, no license key flow, no account signup, and no external checkout flow in the App Store build."
review_notes_by_platform:
macos: >-
Basic is free in the App Store build and includes built-in demo mode. No account required. No API key required. No payment is required for the reviewer path. Live provider connections require Pro. The Pro unlock path is StoreKit only: use Unlock Pro from onboarding or Settings > License. There is no website license flow, no license key flow, and no external checkout flow in the App Store build.
Fastest review path:
1. Launch SaneSales.
2. On the final onboarding screen, click “Try Demo Data”.
3. Review the dashboard, orders, products, and recent snapshot using the fictional local demo data.
4. To review the optional Pro unlock, click “Unlock Pro” on the welcome screen before choosing demo mode or connecting a provider.
5. If onboarding has already been dismissed, open Settings and select the License tab.
Demo includes:
- Fictional dashboard snapshot.
- Fictional orders and product catalog.
- Built-in demo mode.
Pro adds:
- Live sales tracking.
- Custom date ranges.
- Full order history.
- CSV export.
- Multiple providers at once.
- Desktop widgets and menu bar totals.
Business model:
- Users are merchants and creators with existing merchant accounts on LemonSqueezy, Gumroad, or Stripe.
- Those external merchant accounts are purchased outside the app with LemonSqueezy, Gumroad, or Stripe.
- SaneSales only reads the user's own sales data: orders, products, refunds, and revenue analytics from those optional existing accounts.
- Built-in demo dashboard access is included with the free app download. Live tracking requires Pro.
- The only paid app unlock in the App Store build is SaneSales Pro, a one-time non-consumable StoreKit In-App Purchase.
- Non-IAP app unlocks: none.
- No paid digital content exists in the app beyond the optional Pro unlock.
- No non-IAP app unlocks exist. Connecting a provider does not unlock paid app features.
- No account signup is required. No fee to create an account inside SaneSales exists because SaneSales has no account system.
- This is not an enterprise service.
- There are no license keys and no external checkout links intended for the App Store build.
- Connecting LemonSqueezy, Gumroad, or Stripe is optional and requires the StoreKit Pro unlock for live tracking.
ios: >-
Basic is free in the App Store build and includes built-in demo mode. No account required. No API key required. No payment is required for the reviewer path. Live provider connections require Pro. The Pro unlock path is StoreKit only: use Unlock Pro from onboarding or Settings > License. There is no website license flow, no license key flow, and no external checkout flow in the App Store build.
Fastest review path:
1. Launch SaneSales on iPhone or iPad.
2. On the onboarding screen, tap “Try Demo Data”. If onboarding has already been dismissed, go to Settings > Data > Enable Demo Mode.
3. Review the dashboard, orders, products, and provider filters using the fictional local demo data.
4. To review the optional Pro unlock, tap “Unlock Pro” on the setup screen, or open the Settings tab and use the License section.
Apple Watch companion:
- Basic shows an unlock prompt on Apple Watch. Unlock Pro on iPhone to sync live Watch data.
Demo includes:
- Fictional dashboard snapshot.
- Fictional orders and product catalog.
- Built-in demo mode.
Pro adds:
- Live sales tracking.
- Custom date ranges.
- Full order history.
- CSV export.
- Multiple providers at once.
- Shared Pro access across your Apple devices.
Business model:
- Users are merchants and creators with existing merchant accounts on LemonSqueezy, Gumroad, or Stripe.
- Those external merchant accounts are purchased outside the app with LemonSqueezy, Gumroad, or Stripe.
- SaneSales only reads the user's own sales data: orders, products, refunds, and revenue analytics from those optional existing accounts.
- Built-in demo dashboard access is included with the free app download. Live tracking requires Pro.
- The only paid app unlock in the App Store build is SaneSales Pro, a one-time non-consumable StoreKit In-App Purchase.
- Non-IAP app unlocks: none.
- No paid digital content exists in the app beyond the optional Pro unlock.
- No non-IAP app unlocks exist. Connecting a provider does not unlock paid app features.
- No account signup is required. No fee to create an account inside SaneSales exists because SaneSales has no account system.
- This is not an enterprise service.
- There are no license keys and no external checkout links intended for the App Store build.
- Connecting LemonSqueezy, Gumroad, or Stripe is optional and requires the StoreKit Pro unlock for live tracking.
iap:
display_name: "SaneSales Pro Unlock"
price_usd: 9.99
description: "Unlock Pro analytics with one purchase."
review_note: "SaneSales Pro Unlock is a one-time non-consumable StoreKit purchase. It unlocks custom date ranges, full order history, CSV export, multiple providers, menu bar quick glance on macOS, and widgets where supported. No external checkout links or license keys are used in the App Store build."
accessibility_declarations:
publish: true
families:
iphone:
supports_dark_interface: true
supports_sufficient_contrast: true
supports_larger_text: true
supports_voiceover: true
supports_voice_control: true
supports_differentiate_without_color_alone: true
supports_reduced_motion: true
supports_captions: false
supports_audio_descriptions: false
ipad:
supports_dark_interface: true
supports_sufficient_contrast: true
supports_larger_text: true
supports_voiceover: true
supports_voice_control: true
supports_differentiate_without_color_alone: true
supports_reduced_motion: true
supports_captions: false
supports_audio_descriptions: false
mac:
supports_dark_interface: true
mac:
supports_dark_interface: true
iphone:
supports_dark_interface: true
ipad:
supports_dark_interface: true
screenshots:
macos: Screenshots/appstore-*-dark-mac.png
ios: Screenshots/appstore-*-dark-6.7.png
ipad: Screenshots/appstore-*-dark-ipad.png
watch: Screenshots/appstore-*-dark-watch.png
strip_frameworks:
- Sparkle.framework
contact:
name: "Stephan Joseph"
phone: "+17277589785"
email: "hi@saneapps.com"
website: true
website_domain: sanesales.com