{"id":49103516,"url":"https://github.com/peyton/sunclub","last_synced_at":"2026-04-23T12:01:08.727Z","repository":{"id":350183841,"uuid":"1157485655","full_name":"peyton/sunclub","owner":"peyton","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-20T16:06:31.000Z","size":531862,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-21T00:34:23.070Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peyton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-13T21:52:22.000Z","updated_at":"2026-04-20T02:50:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/peyton/sunclub","commit_stats":null,"previous_names":["peyton/sunclub"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/peyton/sunclub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peyton%2Fsunclub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peyton%2Fsunclub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peyton%2Fsunclub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peyton%2Fsunclub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peyton","download_url":"https://codeload.github.com/peyton/sunclub/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peyton%2Fsunclub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32179387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T11:42:27.955Z","status":"ssl_error","status_checked_at":"2026-04-23T11:42:18.877Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-21T00:20:19.864Z","updated_at":"2026-04-23T12:01:08.721Z","avatar_url":"https://github.com/peyton.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sunclub\n\n## Source Availability and License\n\nSunclub is source-available, not open source. Copyright (c) 2026 Peyton\nRandolph. All rights reserved.\n\nThis repository is available under the unmodified [PolyForm Strict License\n1.0.0](LICENSE). The license does not permit source redistribution, binary\nredistribution, sublicensing, public fork distribution, App Store or other\nmarketplace publication, or modified or derivative works. Commercial use is not\nlicensed. No trademark rights are granted. See [NOTICE](NOTICE) for the\nownership notice.\n\nRepository layout:\n\n- App: [app/README.md](app/README.md)\n- Docs: [docs/](docs/)\n- App automation: [docs/app-automation.md](docs/app-automation.md)\n- TestFlight flow: [docs/testflight-release.md](docs/testflight-release.md)\n\nThe iOS app lives in [app/](app). Product and design notes live in [docs/](docs).\nTooling is pinned in [mise.toml](mise.toml).\n\nCommon setup from the repo root:\n\n- `just bootstrap`\n- `just icons`\n- `just generate`\n- `just build`\n- `just run`\n- `just web-serve`\n- `just web-check`\n- `just web-fmt`\n- `just web-build`\n- `just web-package VERSION=test`\n- `just web-release-tag 1.2.3`\n- `just cloudflare-status`\n- `just cloudflare-pages-setup`\n- `just cloudflare-pages-status`\n- `just cloudflare-email-setup`\n- `just cloudflare-email-status`\n- `just cloudflare-check`\n- `just cloudkit-save-token`\n- `just cloudkit-doctor`\n- `just cloudkit-ensure-container`\n- `just cloudkit-export-schema`\n- `just cloudkit-validate-schema`\n- `just cloudkit-import-schema`\n- `just cloudkit-reset-dev`\n- `just clean-build`\n- `just clean-generated`\n- `just clean`\n- `just lint`\n- `just fmt`\n- `just test`\n- `just test-unit`\n- `just test-ui`\n- `just test-python`\n- `just ci-lint`\n- `just ci-python`\n- `just ci-build`\n- `just appstore-env`\n- `just appstore-validate`\n- `just appstore-validate-strict`\n- `just appstore-review-package`\n- `just appstore-screenshots`\n- `just appstore-archive`\n- `just appstore-submit-dry-run`\n- `just appstore-submit-review`\n- `just appstore-send-review`\n- `just release-tag 1.2.3`\n- `just ci`\n\n`just bootstrap` installs repo-local tooling into `.mise/`, syncs the Python environment into `.venv/`, prepares repo-local caches under `.cache/`, and primes Tuist's local Xcode cache service from `app/` on local machines.\n\nSunclub stays local-first, but the app now ships with default-on iCloud sync for revision history plus local backup export/import. Local imports stay recoverable on-device and do not change iCloud until the user explicitly publishes the imported batches from `Recovery \u0026 Changes`.\n\nAutomation is a first-class release surface. Shortcuts, Control Center, widgets, custom URL actions, and x-callback-url routes are documented in [docs/app-automation.md](docs/app-automation.md), and users can manage automation writes from Settings -\u003e Automation.\n\nThe static public web presence lives in [web/](web). Local preview uses `just web-serve`; `just web-build` copies the checked site into `.build/web/`; `just web-package VERSION=test` writes a release tarball and checksum under `.build/releases/`.\n\nCloudflare Pages and Email Routing setup is tracked in [infra/cloudflare/](infra/cloudflare/) and documented in [docs/cloudflare-deployment-execplan.md](docs/cloudflare-deployment-execplan.md). Web deployment and rollback are documented in [docs/web-release.md](docs/web-release.md). Local status commands are safe without credentials; setup commands require `CLOUDFLARE_API_TOKEN`, and email setup also requires `SUNCLUB_FORWARD_TO`. GitHub web deployment requires GitHub Actions secrets `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID`.\n\nCloudKit setup is documented in [docs/cloudkit-setup.md](docs/cloudkit-setup.md). `just cloudkit-doctor` validates that the saved token is a management token for the configured team, checks whether a signed build actually carries the expected CloudKit entitlements, and retries `cktool` schema access. `just cloudkit-ensure-container` runs the same validation and opens the relevant Apple setup pages if the container or App ID configuration is still missing.\n\nRelease automation and the dev/prod flavor split are documented in [docs/testflight-release.md](docs/testflight-release.md). In short: local `just build` / `just run` use the `SunclubDev` flavor, `just appstore-archive` uses the production `Sunclub` flavor, and pushing a `vX.Y.Z` tag through `just release-tag` triggers the TestFlight workflow. App Review submission is documented in [docs/app-store-submission.md](docs/app-store-submission.md), uses `just appstore-env` for local sensitive values, and is guarded by strict metadata plus a redacted checkpoint phrase. Web releases are separate: pushing `web/vX.Y.Z` through `just web-release-tag` creates a web GitHub Release and does not trigger the iOS release workflow.\n\n`just clean-build` removes repo-local build artifacts and the generated workspace, `just clean-generated` additionally removes repo-local caches and environments such as `.venv`, `.mise`, `.cache`, `.config`, `.state`, and `__pycache__`, and `just clean` runs the full cleanup chain.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeyton%2Fsunclub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeyton%2Fsunclub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeyton%2Fsunclub/lists"}