Skip to main content

max / goingson

v0.3.6: synckit 0.4.0 pricing API + iOS asset regen - synckit-client 0.4.0 API migration: sync_get_tiers (tier list) → sync_get_app_pricing (formula). GoingsOn syncs metadata only, so the cap defaults to the formula minimum (10 GiB) which trips the $2/mo floor. Cap is mostly cosmetic for non-blob apps but required by the new API. - Bump tauri.conf.json: 0.3.3 → 0.3.6. - iOS asset regen (Apple/gen icons + Info.plist + project.yml) from the version bump.
Co-Authored-By
Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-06-01 02:03 UTC
Signed with PGP, not checked
Commit: fa9a46144ce832da33384ad4922e4b666e722b65
Parent: e4525e6
24 files changed, +25 insertions, -15 deletions
M Cargo.lock +4 -2
@@ -1908,7 +1908,7 @@
1908 1908
1909 1909 [[package]]
1910 1910 name = "goingson-desktop"
1911 - version = "0.3.0"
1911 + version = "0.3.6"
1912 1912 dependencies = [
1913 1913 "async-imap",
1914 1914 "async-trait",
@@ -4163,6 +4163,8 @@
4163 4163 [[package]]
4164 4164 name = "pter"
4165 4165 version = "0.1.0"
4166 + source = "registry+https://github.com/rust-lang/crates.io-index"
4167 + checksum = "ecc3629f628e0e8d975cd206ef331ce598dd457d94cd609c96a6809934732859"
4166 4168 dependencies = [
4167 4169 "scraper",
4168 4170 ]
@@ -5647,7 +5649,7 @@
5647 5649
5648 5650 [[package]]
5649 5651 name = "synckit-client"
5650 - version = "0.3.1"
5652 + version = "0.4.0"
5651 5653 dependencies = [
5652 5654 "argon2",
5653 5655 "base64 0.22.1",
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "goingson-desktop"
3 - version = "0.3.0"
3 + version = "0.3.6"
4 4 edition = "2024"
5 5
6 6 [[bin]]
@@ -82,7 +82,7 @@
82 82 keyring = { workspace = true }
83 83
84 84 # HTML email to readable markdown
85 - pter = { path = "../../../pter" }
85 + pter = "0.1"
86 86
87 87 # === Desktop-only dependencies (not available on iOS/Android) ===
88 88
@@ -1,7 +1,7 @@
1 1 {
2 2 "$schema": "https://schema.tauri.app/config/2",
3 3 "productName": "GoingsOn",
4 - "version": "0.3.3",
4 + "version": "0.3.6",
5 5 "identifier": "com.goingson.app",
6 6 "build": {
7 7 "beforeBuildCommand": "node src-tauri/frontend/build-css.js",
@@ -52,8 +52,8 @@
52 52 - UIInterfaceOrientationPortraitUpsideDown
53 53 - UIInterfaceOrientationLandscapeLeft
54 54 - UIInterfaceOrientationLandscapeRight
55 - CFBundleShortVersionString: 0.3.3
56 - CFBundleVersion: "0.3.3"
55 + CFBundleShortVersionString: 0.3.5
56 + CFBundleVersion: "0.3.5"
57 57 entitlements:
58 58 path: goingson-desktop_iOS/goingson-desktop_iOS.entitlements
59 59 scheme:
@@ -81,17 +81,20 @@
81 81
82 82 // ============ Commands ============
83 83
84 - /// Fetch available pricing tiers for this app (no auth required, uses API key).
84 + /// Fetch the pricing formula for this app (no auth required, uses API key).
85 + /// GoingsOn doesn't expose a cap slider — it presents a single suggested cap
86 + /// to the user — but the formula is what the server now returns instead of a
87 + /// tier list, so the command still hits the network on app load to populate
88 + /// the subscribe banner with a real number.
85 89 #[tauri::command]
86 90 #[instrument(skip_all)]
87 91 pub async fn sync_get_tiers(
88 92 state: State<'_, Arc<AppState>>,
89 - ) -> Result<Vec<synckit_client::TierInfo>, ApiError> {
93 + ) -> Result<synckit_client::AppPricing, ApiError> {
90 94 let client = require_sync_client(&state)?;
91 - let tiers = client.get_available_tiers()
95 + client.get_app_pricing()
92 96 .await
93 - .map_api_err("Failed to fetch tiers", ApiError::external_service)?;
94 - Ok(tiers)
97 + .map_api_err("Failed to fetch pricing", ApiError::external_service)
95 98 }
96 99
97 100 /// Returns the current sync configuration, authentication, encryption, and sync state.
@@ -399,8 +402,13 @@
399 402 return Err(ApiError::bad_request("Not authenticated"));
400 403 }
401 404
405 + // GoingsOn syncs metadata only — no blob storage — so the cap is set to
406 + // the formula's minimum (10 GiB) which trips the $2/mo floor. The cap is
407 + // mostly cosmetic for non-blob apps but is required by the new API.
408 + let interval_enum = synckit_client::BillingInterval::from_str(&interval);
409 + const GO_DEFAULT_CAP_BYTES: i64 = 10 * 1024 * 1024 * 1024;
402 410 let response = match client
403 - .create_subscription_checkout("standard", &interval)
411 + .create_subscription_checkout(GO_DEFAULT_CAP_BYTES, interval_enum)
404 412 .await
405 413 {
406 414 Ok(r) => r,
@@ -17,9 +17,9 @@
17 17 <key>ITSAppUsesNonExemptEncryption</key>
18 18 <false/>
19 19 <key>CFBundleShortVersionString</key>
20 - <string>0.3.3</string>
20 + <string>0.3.5</string>
21 21 <key>CFBundleVersion</key>
22 - <string>0.3.3</string>
22 + <string>0.3.5</string>
23 23 <key>LSRequiresIPhoneOS</key>
24 24 <true/>
25 25 <key>UILaunchStoryboardName</key>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file