Added docs
This commit is contained in:
21
docs/.gitignore
vendored
Normal file
21
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# build output
|
||||||
|
dist/
|
||||||
|
# generated types
|
||||||
|
.astro/
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
||||||
4
docs/.vscode/extensions.json
vendored
Normal file
4
docs/.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["astro-build.astro-vscode"],
|
||||||
|
"unwantedRecommendations": []
|
||||||
|
}
|
||||||
11
docs/.vscode/launch.json
vendored
Normal file
11
docs/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"command": "./node_modules/.bin/astro dev",
|
||||||
|
"name": "Development server",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "node-terminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
12
docs/README.md
Normal file
12
docs/README.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Ascently Documentation
|
||||||
|
|
||||||
|
Documentation site for Ascently.
|
||||||
|
|
||||||
|
This was built with [Astro Starlight](https://starlight.astro.build/).
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
```bash
|
||||||
|
cd Ascently/docs
|
||||||
|
pnpm install
|
||||||
|
pnpm run dev
|
||||||
|
```
|
||||||
50
docs/astro.config.mjs
Normal file
50
docs/astro.config.mjs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// @ts-check
|
||||||
|
import { defineConfig } from "astro/config";
|
||||||
|
import starlight from "@astrojs/starlight";
|
||||||
|
|
||||||
|
// https://astro.build/config
|
||||||
|
export default defineConfig({
|
||||||
|
site: "https://docs.ascently.app",
|
||||||
|
integrations: [
|
||||||
|
starlight({
|
||||||
|
title: "Ascently",
|
||||||
|
description:
|
||||||
|
"A FOSS climbing tracking app with offline-first design and optional sync server",
|
||||||
|
logo: {
|
||||||
|
light: "./src/assets/logo.svg",
|
||||||
|
dark: "./src/assets/logo-dark.svg",
|
||||||
|
},
|
||||||
|
favicon: "/favicon.svg",
|
||||||
|
social: [
|
||||||
|
{
|
||||||
|
icon: "github",
|
||||||
|
label: "GitHub",
|
||||||
|
href: "https://git.atri.dad/atridad/Ascently",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "email",
|
||||||
|
label: "Contact",
|
||||||
|
href: "mailto:me@atri.dad",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sidebar: [
|
||||||
|
{
|
||||||
|
label: "Download",
|
||||||
|
link: "/download/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Self-Hosted Sync",
|
||||||
|
items: [
|
||||||
|
{ label: "Overview", slug: "sync/overview" },
|
||||||
|
{ label: "Quick Start", slug: "sync/quick-start" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Reference",
|
||||||
|
autogenerate: { directory: "reference" },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
customCss: ["./src/styles/custom.css"],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
32
docs/package.json
Normal file
32
docs/package.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "ascently-docs",
|
||||||
|
"type": "module",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Documentation site for Ascently - FOSS climbing tracking app",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.atri.dad/atridad/Ascently.git",
|
||||||
|
"directory": "docs"
|
||||||
|
},
|
||||||
|
"author": "atridad <me@atri.dad>",
|
||||||
|
"license": "MIT",
|
||||||
|
"keywords": [
|
||||||
|
"climbing",
|
||||||
|
"tracking",
|
||||||
|
"documentation",
|
||||||
|
"astro",
|
||||||
|
"starlight"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/starlight": "^0.36.0",
|
||||||
|
"astro": "^5.14.4",
|
||||||
|
"sharp": "^0.34.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
4028
docs/pnpm-lock.yaml
generated
Normal file
4028
docs/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/public/favicon.png
Normal file
BIN
docs/public/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
1
docs/public/favicon.svg
Normal file
1
docs/public/favicon.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill-rule="evenodd" d="M81 36 64 0 47 36l-1 2-9-10a6 6 0 0 0-9 9l10 10h-2L0 64l36 17h2L28 91a6 6 0 1 0 9 9l9-10 1 2 17 36 17-36v-2l9 10a6 6 0 1 0 9-9l-9-9 2-1 36-17-36-17-2-1 9-9a6 6 0 1 0-9-9l-9 10v-2Zm-17 2-2 5c-4 8-11 15-19 19l-5 2 5 2c8 4 15 11 19 19l2 5 2-5c4-8 11-15 19-19l5-2-5-2c-8-4-15-11-19-19l-2-5Z" clip-rule="evenodd"/><path d="M118 19a6 6 0 0 0-9-9l-3 3a6 6 0 1 0 9 9l3-3Zm-96 4c-2 2-6 2-9 0l-3-3a6 6 0 1 1 9-9l3 3c3 2 3 6 0 9Zm0 82c-2-2-6-2-9 0l-3 3a6 6 0 1 0 9 9l3-3c3-2 3-6 0-9Zm96 4a6 6 0 0 1-9 9l-3-3a6 6 0 1 1 9-9l3 3Z"/><style>path{fill:#000}@media (prefers-color-scheme:dark){path{fill:#fff}}</style></svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
BIN
docs/src/assets/houston.webp
Normal file
BIN
docs/src/assets/houston.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
15
docs/src/assets/logo-dark.svg
Normal file
15
docs/src/assets/logo-dark.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<!-- Left mountain (amber/yellow) -->
|
||||||
|
<polygon points="6,24 12,8 18,24"
|
||||||
|
fill="#FFC107"
|
||||||
|
stroke="#FFFFFF"
|
||||||
|
stroke-width="1"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
|
||||||
|
<!-- Right mountain (red) -->
|
||||||
|
<polygon points="14,24 22,4 30,24"
|
||||||
|
fill="#F44336"
|
||||||
|
stroke="#FFFFFF"
|
||||||
|
stroke-width="1"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 475 B |
15
docs/src/assets/logo-highres.svg
Normal file
15
docs/src/assets/logo-highres.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<!-- Left mountain (amber/yellow) -->
|
||||||
|
<polygon points="48,192 96,64 144,192"
|
||||||
|
fill="#FFC107"
|
||||||
|
stroke="#1C1C1C"
|
||||||
|
stroke-width="4"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
|
||||||
|
<!-- Right mountain (red) -->
|
||||||
|
<polygon points="112,192 176,32 240,192"
|
||||||
|
fill="#F44336"
|
||||||
|
stroke="#1C1C1C"
|
||||||
|
stroke-width="4"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 490 B |
15
docs/src/assets/logo.svg
Normal file
15
docs/src/assets/logo.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<!-- Left mountain (amber/yellow) -->
|
||||||
|
<polygon points="6,24 12,8 18,24"
|
||||||
|
fill="#FFC107"
|
||||||
|
stroke="#1C1C1C"
|
||||||
|
stroke-width="1"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
|
||||||
|
<!-- Right mountain (red) -->
|
||||||
|
<polygon points="14,24 22,4 30,24"
|
||||||
|
fill="#F44336"
|
||||||
|
stroke="#1C1C1C"
|
||||||
|
stroke-width="1"
|
||||||
|
stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 475 B |
7
docs/src/content.config.ts
Normal file
7
docs/src/content.config.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { defineCollection } from 'astro:content';
|
||||||
|
import { docsLoader } from '@astrojs/starlight/loaders';
|
||||||
|
import { docsSchema } from '@astrojs/starlight/schema';
|
||||||
|
|
||||||
|
export const collections = {
|
||||||
|
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||||
|
};
|
||||||
28
docs/src/content/docs/download.md
Normal file
28
docs/src/content/docs/download.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
title: Download
|
||||||
|
description: Get Ascently on your Android or iOS device
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Android
|
||||||
|
|
||||||
|
### Option 1: Direct APK Download
|
||||||
|
Download the latest APK from the [Releases page](https://git.atri.dad/atridad/Ascently/releases).
|
||||||
|
|
||||||
|
### Option 2: Obtainium
|
||||||
|
Use Obtainium for automatic updates:
|
||||||
|
|
||||||
|
[<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)
|
||||||
|
|
||||||
|
## iOS
|
||||||
|
|
||||||
|
### TestFlight Beta
|
||||||
|
Join the TestFlight beta: [https://testflight.apple.com/join/E2DYRGH8](https://testflight.apple.com/join/E2DYRGH8)
|
||||||
|
|
||||||
|
### App Store
|
||||||
|
App Store release coming soon.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- **Android 12+** or **iOS 17+**
|
||||||
62
docs/src/content/docs/index.mdx
Normal file
62
docs/src/content/docs/index.mdx
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
title: Ascently
|
||||||
|
description: A FOSS climbing tracking app with offline-first design and optional sync server
|
||||||
|
template: splash
|
||||||
|
hero:
|
||||||
|
tagline: Track your climbing sessions, routes, and progress
|
||||||
|
image:
|
||||||
|
file: ../../assets/logo-highres.svg
|
||||||
|
alt: "Ascently app icon"
|
||||||
|
actions:
|
||||||
|
- text: Download
|
||||||
|
link: /download/
|
||||||
|
icon: right-arrow
|
||||||
|
- text: Docs
|
||||||
|
link: /sync/overview/
|
||||||
|
icon: right-arrow
|
||||||
|
variant: minimal
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
## About Ascently
|
||||||
|
|
||||||
|
_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.
|
||||||
|
|
||||||
|
<CardGrid stagger>
|
||||||
|
<Card title="Offline-First" icon="laptop">
|
||||||
|
Your data stays on your device. No internet connection required to track your climbing sessions.
|
||||||
|
</Card>
|
||||||
|
<Card title="Cross-Platform" icon="rocket">
|
||||||
|
Built using Jetpack Compose with Material You support on Android and SwiftUI on iOS.
|
||||||
|
</Card>
|
||||||
|
<Card title="Health Integration" icon="heart">
|
||||||
|
Integrates with Apple Health and Health Connect to track your fitness data.
|
||||||
|
</Card>
|
||||||
|
<Card title="Optional Sync" icon="setting">
|
||||||
|
Run your own lightweight sync server to keep data synchronized across devices.
|
||||||
|
</Card>
|
||||||
|
</CardGrid>
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- **Android:** Version 12+
|
||||||
|
- **iOS:** Version 17+
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
**Android:**
|
||||||
|
- Download the latest APK from the [Releases page](https://git.atri.dad/atridad/Ascently/releases)
|
||||||
|
- Use [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 automatic updates
|
||||||
|
|
||||||
|
**iOS:**
|
||||||
|
- Join the [TestFlight Beta](https://testflight.apple.com/join/E2DYRGH8)
|
||||||
|
- App Store release coming soon
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Built with ❤️ by Atridad Lahiji*
|
||||||
|
|
||||||
|
*Contact: me@atri.dad*
|
||||||
51
docs/src/content/docs/reference/example.md
Normal file
51
docs/src/content/docs/reference/example.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
title: Sync Server API
|
||||||
|
description: API endpoints for the Ascently sync server
|
||||||
|
---
|
||||||
|
|
||||||
|
The sync server provides a minimal REST API for data synchronization.
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
All endpoints require an `Authorization: Bearer <your-auth-token>` header.
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
### Data Sync
|
||||||
|
|
||||||
|
**GET /sync**
|
||||||
|
- Download `ascently.json` file
|
||||||
|
- Returns: JSON data file or 404 if no data exists
|
||||||
|
|
||||||
|
**POST /sync**
|
||||||
|
- Upload `ascently.json` file
|
||||||
|
- Body: JSON data
|
||||||
|
- Returns: Success confirmation
|
||||||
|
|
||||||
|
### Images
|
||||||
|
|
||||||
|
**GET /images/{imageName}**
|
||||||
|
- Download an image file
|
||||||
|
- Returns: Image file or 404 if not found
|
||||||
|
|
||||||
|
**POST /images/{imageName}**
|
||||||
|
- Upload an image file
|
||||||
|
- Body: Image data
|
||||||
|
- Returns: Success confirmation
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download data
|
||||||
|
curl -H "Authorization: Bearer your-token" \
|
||||||
|
http://localhost:8080/sync
|
||||||
|
|
||||||
|
# Upload data
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: Bearer your-token" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d @ascently.json \
|
||||||
|
http://localhost:8080/sync
|
||||||
|
```
|
||||||
|
|
||||||
|
See `main.go` in the sync directory for implementation details.
|
||||||
34
docs/src/content/docs/sync/overview.md
Normal file
34
docs/src/content/docs/sync/overview.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
title: Self-Hosted Sync Overview
|
||||||
|
description: Learn about Ascently's optional sync server for cross-device data synchronization
|
||||||
|
---
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
The API is minimal, just enough for the app to work. All endpoints require an `Authorization: Bearer <your-auth-token>` header.
|
||||||
|
|
||||||
|
- `GET /sync`: Download `ascently.json`
|
||||||
|
- `POST /sync`: Upload `ascently.json`
|
||||||
|
- `GET /images/{imageName}`: Download an image
|
||||||
|
- `POST /images/{imageName}`: Upload an image
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
The easiest way to get started is with the [Quick Start guide](/sync/quick-start/) using Docker Compose.
|
||||||
|
|
||||||
|
You'll need:
|
||||||
|
- Docker and Docker Compose
|
||||||
|
- A secure authentication token
|
||||||
|
- A place to store your data
|
||||||
|
|
||||||
|
The server will be available at `http://localhost:8080` by default. Configure your clients with your server URL and auth token to start syncing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*For technical details, check out `main.go` in the sync directory.*
|
||||||
65
docs/src/content/docs/sync/quick-start.md
Normal file
65
docs/src/content/docs/sync/quick-start.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
title: Quick Start
|
||||||
|
description: Get your Ascently sync server running with Docker Compose
|
||||||
|
---
|
||||||
|
|
||||||
|
Get your Ascently sync server up and running using Docker Compose.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Docker and Docker Compose installed
|
||||||
|
- A server or computer to host the sync service
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Create a `.env` file with your configuration:
|
||||||
|
|
||||||
|
```env
|
||||||
|
IMAGE=git.atri.dad/atridad/ascently-sync:latest
|
||||||
|
APP_PORT=8080
|
||||||
|
AUTH_TOKEN=your-super-secret-token
|
||||||
|
DATA_FILE=/data/ascently.json
|
||||||
|
IMAGES_DIR=/data/images
|
||||||
|
ROOT_DIR=./ascently-data
|
||||||
|
```
|
||||||
|
|
||||||
|
Set `AUTH_TOKEN` to a long, random string. `ROOT_DIR` is where the server will store its data on your machine.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Configure your Ascently apps with:
|
||||||
|
- **Server URL**: `http://your-server-ip:8080` (or your domain)
|
||||||
|
- **Auth Token**: The token from your `.env` file
|
||||||
|
|
||||||
|
Enable sync and perform your first sync to start synchronizing data across devices.
|
||||||
|
|
||||||
|
## Generating a Secure Token
|
||||||
|
|
||||||
|
Generate a secure authentication token:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On Linux/macOS
|
||||||
|
openssl rand -base64 32
|
||||||
|
```
|
||||||
|
|
||||||
|
Keep this token secure and don't share it publicly.
|
||||||
|
|
||||||
|
## Accessing Remotely
|
||||||
|
|
||||||
|
For remote access, you'll need to:
|
||||||
|
- Set up port forwarding on your router (port 8080)
|
||||||
|
- Use your public IP address or set up a domain name
|
||||||
|
- Consider using HTTPS with a reverse proxy for security
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*The sync server is designed to be simple and lightweight. Your data stays under your control.*
|
||||||
60
docs/src/styles/custom.css
Normal file
60
docs/src/styles/custom.css
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/* Ascently Documentation Styles */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--sl-color-accent: hsl(45, 100%, 50%);
|
||||||
|
--sl-color-accent-low: hsl(45, 100%, 96%);
|
||||||
|
--sl-color-accent-high: hsl(45, 100%, 30%);
|
||||||
|
--climbing-amber: hsl(45, 100%, 50%);
|
||||||
|
--climbing-red: hsl(4, 90%, 58%);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] {
|
||||||
|
--sl-color-accent: hsl(45, 100%, 60%);
|
||||||
|
--sl-color-accent-low: hsl(45, 100%, 10%);
|
||||||
|
--sl-color-accent-high: hsl(45, 100%, 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 {
|
||||||
|
color: var(--climbing-amber);
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar nav a[aria-current="page"] {
|
||||||
|
background: var(--sl-color-accent-low);
|
||||||
|
border-left: 3px solid var(--sl-color-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-button {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
|
background: var(--sl-color-accent);
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: background 0.2s ease;
|
||||||
|
margin: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-button:hover {
|
||||||
|
background: var(--sl-color-accent-high);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.hero h1 {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-button {
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 0.25rem 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .feature-callout {
|
||||||
|
background: var(--sl-color-gray-6);
|
||||||
|
}
|
||||||
5
docs/tsconfig.json
Normal file
5
docs/tsconfig.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"include": [".astro/types.d.ts", "**/*"],
|
||||||
|
"exclude": ["dist"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user