Docs updates
This commit is contained in:
21
PRIVACY.md
21
PRIVACY.md
@@ -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
|
|
||||||
38
README.md
38
README.md
@@ -2,43 +2,11 @@
|
|||||||
|
|
||||||
_Formerly OpenClimb_
|
_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:
|
Documentation can be found at [https://ascently.atri.dad](https://ascently.atri.dad)!
|
||||||
|
|
||||||
1. Download the latest APK from the Releases page
|
|
||||||
2. [<img src="https://github.com/ImranR98/Obtainium/blob/main/assets/graphics/badge_obtainium.png?raw=true" alt="Obtainium" height="41">](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.
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
- `navigation/`: Navigation graph and routes using Jetpack Navigation.
|
||||||
- `service/`: Background service for tracking climbing sessions.
|
- `service/`: Background service for tracking climbing sessions.
|
||||||
- `utils/`: Helpers for things like date formatting and image handling.
|
- `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.
|
|
||||||
@@ -12,7 +12,7 @@ export default defineConfig({
|
|||||||
starlight({
|
starlight({
|
||||||
title: "Ascently",
|
title: "Ascently",
|
||||||
description:
|
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: {
|
logo: {
|
||||||
light: "./src/assets/logo.svg",
|
light: "./src/assets/logo.svg",
|
||||||
dark: "./src/assets/logo-dark.svg",
|
dark: "./src/assets/logo-dark.svg",
|
||||||
@@ -20,8 +20,8 @@ export default defineConfig({
|
|||||||
favicon: "/favicon.png",
|
favicon: "/favicon.png",
|
||||||
social: [
|
social: [
|
||||||
{
|
{
|
||||||
icon: "github",
|
icon: "seti:git",
|
||||||
label: "GitHub",
|
label: "Gitea",
|
||||||
href: "https://git.atri.dad/atridad/Ascently",
|
href: "https://git.atri.dad/atridad/Ascently",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -46,6 +46,10 @@ export default defineConfig({
|
|||||||
label: "Reference",
|
label: "Reference",
|
||||||
autogenerate: { directory: "reference" },
|
autogenerate: { directory: "reference" },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: "Privacy",
|
||||||
|
link: "/privacy/",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
customCss: ["./src/styles/custom.css"],
|
customCss: ["./src/styles/custom.css"],
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/node": "^9.5.0",
|
"@astrojs/node": "^9.5.0",
|
||||||
"@astrojs/starlight": "^0.36.0",
|
"@astrojs/starlight": "^0.36.0",
|
||||||
"astro": "^5.14.4",
|
"astro": "^5.14.5",
|
||||||
"sharp": "^0.34.4"
|
"sharp": "^0.34.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
48
docs/pnpm-lock.yaml
generated
48
docs/pnpm-lock.yaml
generated
@@ -10,13 +10,13 @@ importers:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@astrojs/node':
|
'@astrojs/node':
|
||||||
specifier: ^9.5.0
|
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':
|
'@astrojs/starlight':
|
||||||
specifier: ^0.36.0
|
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:
|
astro:
|
||||||
specifier: ^5.14.4
|
specifier: ^5.14.5
|
||||||
version: 5.14.4(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)
|
version: 5.14.5(@types/node@24.7.2)(rollup@4.52.4)(typescript@5.9.3)
|
||||||
sharp:
|
sharp:
|
||||||
specifier: ^0.34.4
|
specifier: ^0.34.4
|
||||||
version: 0.34.4
|
version: 0.34.4
|
||||||
@@ -669,8 +669,8 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
|
astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
|
||||||
|
|
||||||
astro@5.14.4:
|
astro@5.14.5:
|
||||||
resolution: {integrity: sha512-yqgMAO2Whi9GmZkByyiPcG7CiiPr0Me0iBSorMa6M0g+wQk/ewnIqUyr7T/uFCPTQndoKwucnYFTrf0yfb0urw==}
|
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'}
|
engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
@@ -1753,8 +1753,8 @@ packages:
|
|||||||
vfile@6.0.3:
|
vfile@6.0.3:
|
||||||
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
||||||
|
|
||||||
vite@6.3.6:
|
vite@6.3.7:
|
||||||
resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==}
|
resolution: {integrity: sha512-mQYaKepA0NGMBsz8Xktt3tJUG5ELE2iT7IJ+ssXI6nxVdE2sFc/d/6w/JByqMLvWg8hNKHpPgzjgOkrhpKFnrA==}
|
||||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -1884,12 +1884,12 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- 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:
|
dependencies:
|
||||||
'@astrojs/markdown-remark': 6.3.8
|
'@astrojs/markdown-remark': 6.3.8
|
||||||
'@mdx-js/mdx': 3.1.1
|
'@mdx-js/mdx': 3.1.1
|
||||||
acorn: 8.15.0
|
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
|
es-module-lexer: 1.7.0
|
||||||
estree-util-visit: 2.0.0
|
estree-util-visit: 2.0.0
|
||||||
hast-util-to-html: 9.0.5
|
hast-util-to-html: 9.0.5
|
||||||
@@ -1903,10 +1903,10 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- 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:
|
dependencies:
|
||||||
'@astrojs/internal-helpers': 0.7.4
|
'@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
|
send: 1.2.0
|
||||||
server-destroy: 1.0.1
|
server-destroy: 1.0.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -1922,17 +1922,17 @@ snapshots:
|
|||||||
stream-replace-string: 2.0.0
|
stream-replace-string: 2.0.0
|
||||||
zod: 3.25.76
|
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:
|
dependencies:
|
||||||
'@astrojs/markdown-remark': 6.3.8
|
'@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
|
'@astrojs/sitemap': 3.6.0
|
||||||
'@pagefind/default-ui': 1.4.0
|
'@pagefind/default-ui': 1.4.0
|
||||||
'@types/hast': 3.0.4
|
'@types/hast': 3.0.4
|
||||||
'@types/js-yaml': 4.0.9
|
'@types/js-yaml': 4.0.9
|
||||||
'@types/mdast': 4.0.4
|
'@types/mdast': 4.0.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)
|
||||||
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))
|
||||||
bcp-47: 2.1.0
|
bcp-47: 2.1.0
|
||||||
hast-util-from-html: 2.0.3
|
hast-util-from-html: 2.0.3
|
||||||
hast-util-select: 6.0.4
|
hast-util-select: 6.0.4
|
||||||
@@ -2428,12 +2428,12 @@ snapshots:
|
|||||||
|
|
||||||
astring@1.9.0: {}
|
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:
|
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
|
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:
|
dependencies:
|
||||||
'@astrojs/compiler': 2.13.0
|
'@astrojs/compiler': 2.13.0
|
||||||
'@astrojs/internal-helpers': 0.7.4
|
'@astrojs/internal-helpers': 0.7.4
|
||||||
@@ -2489,8 +2489,8 @@ snapshots:
|
|||||||
unist-util-visit: 5.0.0
|
unist-util-visit: 5.0.0
|
||||||
unstorage: 1.17.1
|
unstorage: 1.17.1
|
||||||
vfile: 6.0.3
|
vfile: 6.0.3
|
||||||
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.6(@types/node@24.7.2))
|
vitefu: 1.1.1(vite@6.3.7(@types/node@24.7.2))
|
||||||
xxhash-wasm: 1.1.0
|
xxhash-wasm: 1.1.0
|
||||||
yargs-parser: 21.1.1
|
yargs-parser: 21.1.1
|
||||||
yocto-spinner: 0.2.3
|
yocto-spinner: 0.2.3
|
||||||
@@ -4116,7 +4116,7 @@ snapshots:
|
|||||||
'@types/unist': 3.0.3
|
'@types/unist': 3.0.3
|
||||||
vfile-message: 4.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:
|
dependencies:
|
||||||
esbuild: 0.25.10
|
esbuild: 0.25.10
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
@@ -4128,9 +4128,9 @@ snapshots:
|
|||||||
'@types/node': 24.7.2
|
'@types/node': 24.7.2
|
||||||
fsevents: 2.3.3
|
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:
|
optionalDependencies:
|
||||||
vite: 6.3.6(@types/node@24.7.2)
|
vite: 6.3.7(@types/node@24.7.2)
|
||||||
|
|
||||||
web-namespaces@2.0.1: {}
|
web-namespaces@2.0.1: {}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ title: Download
|
|||||||
description: Get Ascently on your Android or iOS device
|
description: Get Ascently on your Android or iOS device
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Android
|
## Android
|
||||||
|
|
||||||
### Option 1: Direct APK Download
|
### Option 1: Direct APK Download
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
title: Ascently
|
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
|
template: splash
|
||||||
hero:
|
hero:
|
||||||
tagline: Track your climbing sessions, routes, and progress
|
tagline: Track your climbing sessions, routes, and progress.
|
||||||
image:
|
image:
|
||||||
file: ../../assets/logo-highres.svg
|
file: ../../assets/logo-highres.svg
|
||||||
alt: "Ascently app icon"
|
alt: "Ascently app icon"
|
||||||
@@ -23,7 +23,7 @@ import { Card, CardGrid } from '@astrojs/starlight/components';
|
|||||||
|
|
||||||
_Formerly OpenClimb_
|
_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.
|
||||||
|
|
||||||
<CardGrid stagger>
|
<CardGrid stagger>
|
||||||
<Card title="Offline-First" icon="laptop">
|
<Card title="Offline-First" icon="laptop">
|
||||||
@@ -35,7 +35,7 @@ Ascently is a **FOSS (Free and Open Source Software)** app designed to help clim
|
|||||||
<Card title="Health Integration" icon="heart">
|
<Card title="Health Integration" icon="heart">
|
||||||
Integrates with Apple Health and Health Connect to track your fitness data.
|
Integrates with Apple Health and Health Connect to track your fitness data.
|
||||||
</Card>
|
</Card>
|
||||||
<Card title="Optional Sync" icon="setting">
|
<Card title="Optional Sync" icon="cloud-download">
|
||||||
Run your own lightweight sync server to keep data synchronized across devices.
|
Run your own lightweight sync server to keep data synchronized across devices.
|
||||||
</Card>
|
</Card>
|
||||||
</CardGrid>
|
</CardGrid>
|
||||||
|
|||||||
43
docs/src/content/docs/privacy.md
Normal file
43
docs/src/content/docs/privacy.md
Normal file
@@ -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
|
||||||
@@ -18,5 +18,3 @@ This is a standard Xcode project. The main app code is in the `Ascently/` direct
|
|||||||
|
|
||||||
- `ClimbingActivityWidget/`: A home screen widget.
|
- `ClimbingActivityWidget/`: A home screen widget.
|
||||||
- `SessionStatusLive/`: A Live Activity for the lock screen.
|
- `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.
|
|
||||||
|
|||||||
@@ -2,10 +2,6 @@
|
|||||||
|
|
||||||
A simple Go server for self-hosting your Ascently sync data.
|
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
|
## Getting Started
|
||||||
|
|
||||||
1. Create a `.env` file in this directory:
|
1. Create a `.env` file in this directory:
|
||||||
@@ -27,7 +23,7 @@ This server is dead simple. It uses a single `ascently.json` file for your data
|
|||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
The API is minimal, just enough for the app to work. All endpoints require an `Authorization: Bearer <your-auth-token>` header.
|
All endpoints require an `Authorization: Bearer <your-auth-token>` header.
|
||||||
|
|
||||||
- `GET /sync`: Download `ascently.json`.
|
- `GET /sync`: Download `ascently.json`.
|
||||||
- `POST /sync`: Upload `ascently.json`.
|
- `POST /sync`: Upload `ascently.json`.
|
||||||
|
|||||||
Reference in New Issue
Block a user