From 7601e7bb03544a218c5a5e6064f81bc8de37338b Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 14 Oct 2025 14:26:56 -0600 Subject: [PATCH] Docs updates --- PRIVACY.md | 21 -------------- README.md | 38 ++---------------------- android/README.md | 2 -- docs/astro.config.mjs | 12 +++++--- docs/package.json | 2 +- docs/pnpm-lock.yaml | 48 +++++++++++++++---------------- docs/src/content/docs/download.md | 4 +-- docs/src/content/docs/index.mdx | 12 ++++---- docs/src/content/docs/privacy.md | 43 +++++++++++++++++++++++++++ ios/README.md | 2 -- sync/README.md | 8 ++---- 11 files changed, 88 insertions(+), 104 deletions(-) delete mode 100644 PRIVACY.md create mode 100644 docs/src/content/docs/privacy.md diff --git a/PRIVACY.md b/PRIVACY.md deleted file mode 100644 index 9333e0a..0000000 --- a/PRIVACY.md +++ /dev/null @@ -1,21 +0,0 @@ -# Privacy Policy - -**Last updated: September 29, 2025** - -This Privacy Policy describes our policies and procedures regarding the collection, use, and disclosure of your information when you use my software. - -## No Data Collection - -I do not collect any personal information, analytics, or data of any kind. This software is designed to be self-hosted or run entirely offline. - -All data generated by or used with this software remains on your local machine or self-hosted environment under your control. I have no access to it. - -## No Tracking or Analytics - -This software does not use cookies, tracking pixels, or any other analytics or tracking mechanisms. Your usage of the software is completely private. - -## Contact Us - -If you have any questions about this Privacy Policy, you can contact me: - -* **By email:** me@atri.dad diff --git a/README.md b/README.md index bdcf278..da132f1 100644 --- a/README.md +++ b/README.md @@ -2,43 +2,11 @@ _Formerly OpenClimb_ -This is a FOSS app meant to help climbers track their sessions, routes/problems, and overall progress. This app is offline-first, with an optional sync server and integrations with Apple Health and Health Connect. Its built using Jetpack Compose with Material You support on Android and SwiftUI on iOS. +Ascently is an **offline-first FOSS** app designed to help climbers track their sessions, routes/problems, and overall progress. There is an optional self-hosted sync server and integrations with Apple Health and Health Connect. There are no analytics or tracking baked into any part of this project. I am committed to maintaining a transparent and open-source solution for climbers, ensuring that you have full control over your data and privacy. -## Download +## Documentation -For Android do one of the following: - -1. Download the latest APK from the Releases page -2. [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22com.atridad.ascently%22%2C%22url%22%3A%22https%3A%2F%2Fgit.atri.dad%2Fatridad%2FAscently%2Freleases%22%2C%22author%22%3A%22git.atri.dad%22%2C%22name%22%3A%22Ascently%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22intermediateLink%5C%22%3A%5B%5D%2C%5C%22customLinkFilterRegex%5C%22%3A%5C%22%5C%22%2C%5C%22filterByLinkText%5C%22%3Afalse%2C%5C%22skipSort%5C%22%3Afalse%2C%5C%22reverseSort%5C%22%3Afalse%2C%5C%22sortByLastLinkSegment%5C%22%3Afalse%2C%5C%22versionExtractWholePage%5C%22%3Afalse%2C%5C%22requestHeader%5C%22%3A%5B%7B%5C%22requestHeader%5C%22%3A%5C%22User-Agent%3A%20Mozilla%2F5.0%20(Linux%3B%20Android%2010%3B%20K)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F114.0.0.0%20Mobile%20Safari%2F537.36%5C%22%7D%5D%2C%5C%22defaultPseudoVersioningMethod%5C%22%3A%5C%22partialAPKHash%5C%22%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Ascently%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%2C%5C%22refreshBeforeDownload%5C%22%3Afalse%7D%22%2C%22overrideSource%22%3Anull%7D) - -For iOS: - -Download from the AppStore (LINK TO BE DETERMINED)! -For development builds, sign up for the TestFlight [here](https://testflight.apple.com/join/E2DYRGH8)! - -## Self-Hosted Sync Server - -You can run your own sync server to keep your data in sync across devices. The server is lightweight and easy to set up using Docker. - -### Quick Start with Docker Compose - -1. Create a `.env` file with your configuration: -``` -IMAGE=git.atri.dad/atridad/ascently-sync:latest -APP_PORT=8080 -AUTH_TOKEN=your-secure-auth-token-here -DATA_FILE=/data/ascently.json -IMAGES_DIR=/data/images -ROOT_DIR=./ascently-data -``` - -2. Use the provided `docker-compose.yml` in the `sync/` directory: -```bash -cd sync/ -docker-compose up -d -``` - -The server will be available at `http://localhost:8080`. Configure your clients with your server URL and auth token to start syncing. +Documentation can be found at [https://ascently.atri.dad](https://ascently.atri.dad)! ## Requirements diff --git a/android/README.md b/android/README.md index e18053f..189d1a1 100644 --- a/android/README.md +++ b/android/README.md @@ -18,5 +18,3 @@ This is a standard Android Gradle project. The main code lives in `app/src/main/ - `navigation/`: Navigation graph and routes using Jetpack Navigation. - `service/`: Background service for tracking climbing sessions. - `utils/`: Helpers for things like date formatting and image handling. - -The app is built to be offline-first. All data is stored locally on your device and works without an internet connection. \ No newline at end of file diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index 5885cbf..e9f949d 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -12,7 +12,7 @@ export default defineConfig({ starlight({ title: "Ascently", description: - "A FOSS climbing tracking app with offline-first design and optional sync server", + "An offline-first FOSS climb tracking app with an optional sync server.", logo: { light: "./src/assets/logo.svg", dark: "./src/assets/logo-dark.svg", @@ -20,8 +20,8 @@ export default defineConfig({ favicon: "/favicon.png", social: [ { - icon: "github", - label: "GitHub", + icon: "seti:git", + label: "Gitea", href: "https://git.atri.dad/atridad/Ascently", }, { @@ -46,6 +46,10 @@ export default defineConfig({ label: "Reference", autogenerate: { directory: "reference" }, }, + { + label: "Privacy", + link: "/privacy/", + }, ], customCss: ["./src/styles/custom.css"], }), @@ -54,4 +58,4 @@ export default defineConfig({ adapter: node({ mode: "standalone", }), -}); \ No newline at end of file +}); diff --git a/docs/package.json b/docs/package.json index 087ad1c..1410c49 100644 --- a/docs/package.json +++ b/docs/package.json @@ -27,7 +27,7 @@ "dependencies": { "@astrojs/node": "^9.5.0", "@astrojs/starlight": "^0.36.0", - "astro": "^5.14.4", + "astro": "^5.14.5", "sharp": "^0.34.4" } } diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 9a58e8b..50e9c0c 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -10,13 +10,13 @@ importers: dependencies: '@astrojs/node': specifier: ^9.5.0 - version: 9.5.0(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) + version: 9.5.0(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) '@astrojs/starlight': specifier: ^0.36.0 - version: 0.36.0(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) + version: 0.36.0(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) astro: - specifier: ^5.14.4 - version: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) + specifier: ^5.14.5 + version: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) sharp: specifier: ^0.34.4 version: 0.34.4 @@ -669,8 +669,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@5.14.4: - resolution: {integrity: sha512-yqgMAO2Whi9GmZkByyiPcG7CiiPr0Me0iBSorMa6M0g+wQk/ewnIqUyr7T/uFCPTQndoKwucnYFTrf0yfb0urw==} + astro@5.14.5: + resolution: {integrity: sha512-EHt7y3+nHYyKzBats1AL3N4Pyrvqyr+zXBC7njUa9Tfe+gsiHlunaw+lXitTT/DDVwO2R/f/qVG7Xc6rl0b2KQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1753,8 +1753,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} + vite@6.3.7: + resolution: {integrity: sha512-mQYaKepA0NGMBsz8Xktt3tJUG5ELE2iT7IJ+ssXI6nxVdE2sFc/d/6w/JByqMLvWg8hNKHpPgzjgOkrhpKFnrA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -1884,12 +1884,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.7(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': + '@astrojs/mdx@4.3.7(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': dependencies: '@astrojs/markdown-remark': 6.3.8 '@mdx-js/mdx': 3.1.1 acorn: 8.15.0 - astro: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) + astro: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -1903,10 +1903,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@9.5.0(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': + '@astrojs/node@9.5.0(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': dependencies: '@astrojs/internal-helpers': 0.7.4 - astro: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) + astro: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) send: 1.2.0 server-destroy: 1.0.1 transitivePeerDependencies: @@ -1922,17 +1922,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight@0.36.0(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': + '@astrojs/starlight@0.36.0(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3))': dependencies: '@astrojs/markdown-remark': 6.3.8 - '@astrojs/mdx': 4.3.7(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) + '@astrojs/mdx': 4.3.7(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) '@astrojs/sitemap': 3.6.0 '@pagefind/default-ui': 1.4.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) - astro-expressive-code: 0.41.3(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) + astro: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) + astro-expressive-code: 0.41.3(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -2428,12 +2428,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.3(astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)): + astro-expressive-code@0.41.3(astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)): dependencies: - astro: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) + astro: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3) rehype-expressive-code: 0.41.3 - astro@5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3): + astro@5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.4 @@ -2489,8 +2489,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.1 vfile: 6.0.3 - vite: 6.3.6(@types/node@24.7.2) - vitefu: 1.1.1(vite@6.3.6(@types/node@24.7.2)) + vite: 6.3.7(@types/node@24.7.2) + vitefu: 1.1.1(vite@6.3.7(@types/node@24.7.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -4116,7 +4116,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.3.6(@types/node@24.7.2): + vite@6.3.7(@types/node@24.7.2): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -4128,9 +4128,9 @@ snapshots: '@types/node': 24.7.2 fsevents: 2.3.3 - vitefu@1.1.1(vite@6.3.6(@types/node@24.7.2)): + vitefu@1.1.1(vite@6.3.7(@types/node@24.7.2)): optionalDependencies: - vite: 6.3.6(@types/node@24.7.2) + vite: 6.3.7(@types/node@24.7.2) web-namespaces@2.0.1: {} diff --git a/docs/src/content/docs/download.md b/docs/src/content/docs/download.md index 5085373..1866e48 100644 --- a/docs/src/content/docs/download.md +++ b/docs/src/content/docs/download.md @@ -3,8 +3,6 @@ title: Download description: Get Ascently on your Android or iOS device --- - - ## Android ### Option 1: Direct APK Download @@ -25,4 +23,4 @@ App Store release coming soon. ## Requirements -- **Android 12+** or **iOS 17+** \ No newline at end of file +- **Android 12+** or **iOS 17+** diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index e8bd611..dc07bce 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -1,9 +1,9 @@ --- title: Ascently -description: A FOSS climbing tracking app with offline-first design and optional sync server +description: An offline-first FOSS climb tracking app with an optional sync server. template: splash hero: - tagline: Track your climbing sessions, routes, and progress + tagline: Track your climbing sessions, routes, and progress. image: file: ../../assets/logo-highres.svg alt: "Ascently app icon" @@ -23,7 +23,7 @@ import { Card, CardGrid } from '@astrojs/starlight/components'; _Formerly OpenClimb_ -Ascently is a **FOSS (Free and Open Source Software)** app designed to help climbers track their sessions, routes/problems, and overall progress. This app is offline-first, with an optional sync server and integrations with Apple Health and Health Connect. +Ascently is an **offline-first FOSS** app designed to help climbers track their sessions, routes/problems, and overall progress. There is an optional self-hosted sync server and integrations with Apple Health and Health Connect. There are no analytics or tracking baked into any part of this project. I am committed to maintaining a transparent and open-source solution for climbers, ensuring that you have full control over your data and privacy. @@ -35,14 +35,14 @@ Ascently is a **FOSS (Free and Open Source Software)** app designed to help clim Integrates with Apple Health and Health Connect to track your fitness data. - + Run your own lightweight sync server to keep data synchronized across devices. ## Requirements -- **Android:** Version 12+ +- **Android:** Version 12+ - **iOS:** Version 17+ ## Download @@ -59,4 +59,4 @@ Ascently is a **FOSS (Free and Open Source Software)** app designed to help clim *Built with ❤️ by Atridad Lahiji* -*Contact: me@atri.dad* \ No newline at end of file +*Contact: me@atri.dad* diff --git a/docs/src/content/docs/privacy.md b/docs/src/content/docs/privacy.md new file mode 100644 index 0000000..5b6c7c4 --- /dev/null +++ b/docs/src/content/docs/privacy.md @@ -0,0 +1,43 @@ +--- +title: Privacy Policy +description: Ascently's Privacy Policy +--- + +**Last updated: September 29, 2025** + +This Privacy Policy describes our policies and procedures regarding the collection, use, and disclosure of your information when you use my software. + +## No Data Collection + +I do not collect any personal information, analytics, or data of any kind. This software is designed to be self-hosted or run entirely offline. + +All data generated by or used with this software remains on your local machine or self-hosted environment under your control. I have no access to it. + +## Optional Sync Server + +You may optionally configure a sync server to synchronize your data across multiple devices. When using a sync server: + +- Your data is transmitted only to the server you specify +- You are responsible for the server's security and privacy practices +- I have no access to or control over your chosen sync server +- All data remains encrypted during transmission + +## Optional Health Data Integration + +You may optionally integrate with Apple Health or Android Health Connect to import health and fitness data. When enabled: + +- Health data is accessed only on your local device +- No health data is transmitted to me, but Apple or Google may receive data according to their respective privacy policies +- You control which health metrics are imported +- You can revoke access at any time through your device's health app settings +- Please refer to Apple's Privacy Policy or Google's Privacy Policy for information about their data practices + +## No Tracking or Analytics + +This software does not use cookies, tracking pixels, or any other analytics or tracking mechanisms. Your usage of the software is completely private. + +## Contact Us + +If you have any questions about this Privacy Policy, you can contact me: + +* **By email:** me@atri.dad diff --git a/ios/README.md b/ios/README.md index 28aca6d..3facd49 100644 --- a/ios/README.md +++ b/ios/README.md @@ -18,5 +18,3 @@ This is a standard Xcode project. The main app code is in the `Ascently/` direct - `ClimbingActivityWidget/`: A home screen widget. - `SessionStatusLive/`: A Live Activity for the lock screen. - -The app is built to be offline-first. All data is stored locally on your device and works without an internet connection. diff --git a/sync/README.md b/sync/README.md index 66e1f39..8b5348d 100644 --- a/sync/README.md +++ b/sync/README.md @@ -2,10 +2,6 @@ A simple Go server for self-hosting your Ascently sync data. -## How It Works - -This server is dead simple. It uses a single `ascently.json` file for your data and a directory for images. The last client to upload wins, overwriting the old data. Authentication is just a static bearer token. - ## Getting Started 1. Create a `.env` file in this directory: @@ -27,11 +23,11 @@ This server is dead simple. It uses a single `ascently.json` file for your data ## API -The API is minimal, just enough for the app to work. All endpoints require an `Authorization: Bearer ` header. +All endpoints require an `Authorization: Bearer ` header. - `GET /sync`: Download `ascently.json`. - `POST /sync`: Upload `ascently.json`. - `GET /images/{imageName}`: Download an image. - `POST /images/{imageName}`: Upload an image. -Check out `main.go` for the full details. \ No newline at end of file +Check out `main.go` for the full details.