Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Pages

# Publishes the project site to GitHub Pages: the landing page (site/index.html) at the root
# and the guides (docs/*.md, CHANGELOG.md) under /docs/, built by site/build.sh with MkDocs.
# Needs Settings → Pages → Source: GitHub Actions.

on:
push:
branches: [main]
paths:
- site/**
- docs/**
- CHANGELOG.md
- .github/workflows/pages.yml
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 10
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v7

- uses: actions/setup-python@v7
with:
python-version: "3.13"
cache: pip
cache-dependency-path: site/requirements.txt

- name: Build the site
run: |
pip install -r site/requirements.txt
./site/build.sh

- uses: actions/configure-pages@v6

- uses: actions/upload-pages-artifact@v5
with:
path: build/site

- id: deployment
uses: actions/deploy-pages@v5
8 changes: 8 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ adb logcat -s MeshAnd MeshAnd/SDK
- **CI:** `.github/workflows/ci.yml` runs tests, lint and a debug build on pushes to `main` and on PRs.
- **Release notes:** `CHANGELOG.md`, one `## <version>` section per release, written for app users. The release workflow publishes that section (plus a download line and a compare link) as the GitHub Release text, and fails if it's missing. **Add the section before tagging.**
- **Releases:** `.github/workflows/release.yml` runs on a `v*` tag. It requires the tag to equal `versionName`, signs using the secrets `MESHAND_KEYSTORE_BASE64` and `MESHAND_KEYSTORE_PASSWORD`, and publishes `MeshAnd-<version>.apk` to GitHub Releases.
- **Website:** the project site at https://meshand.app/, published by `.github/workflows/pages.yml` on pushes to `main` that touch `site/`, `docs/` or `CHANGELOG.md`, or by hand (Run workflow). The repo's Settings → Pages → Source must be **GitHub Actions**.
- Domain: `meshand.app`, registered and DNS-hosted on Cloudflare (account "P13 Private", 2026-10-22). Apex `A`/`AAAA` records point to GitHub Pages (`185.199.108–111.153`, `2606:50c0:8000–8003::153`) and `www` is a `CNAME` to `mategogiberidze.github.io`, all **DNS only** (not proxied), so GitHub issues the HTTPS certificate. The custom domain is set in Settings → Pages; with Actions deploys there is no `CNAME` file.
- `/` is `site/index.html`, one hand-written static page. `/docs/` holds the guides: `site/build.sh` copies `docs/*.md`, `CHANGELOG.md` (as `changelog.md`) and `site/guides/` (overview page, logo, CSS) into `build/site-docs/` and renders them with MkDocs Material (`site/mkdocs.yml`, versions pinned in `site/requirements.txt`, `--strict`). The `.md` files stay the only source; don't copy guide text into `site/`.
- Material for MkDocs is in maintenance mode and incompatible with MkDocs 2.0, so keep `mkdocs` pinned below 2.0.
- Preview: `pip install -r site/requirements.txt && ./site/build.sh`, then `python3 -m http.server -d build/site`.
- A link between guides on GitHub (`../CHANGELOG.md`) is rewritten by `build.sh`; a new kind of cross-folder link needs the same, or `--strict` fails.
- The download button asks the GitHub API for `releases/latest`, so it needs no change per release.
- Features not yet in a release carry a "Next version" badge on the landing page (currently Chat and Phone GPS). **When releasing, remove those badges and the note below the feature list.** Keep the text in step with `README.md` and `CHANGELOG.md`.

## Architecture (`app/src/main/java/com/meshand/app/`)
- `MeshAndApp.kt`: the `Application` class. Owns `AppGraph` (settings, client, repository, OsmAnd bridge) for the whole process, wired by hand.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
![Android 7+](https://img.shields.io/badge/Android-7%2B-3DDC84?logo=android&logoColor=white)

**[Download the APK](https://github.com/mategogiberidze/MeshAnd/releases/latest)** ·
[Website](https://meshand.app/) ·
[Set up your radios](docs/radio-setup.md) ·
[What's new](CHANGELOG.md) ·
[Ask a question](https://github.com/mategogiberidze/MeshAnd/discussions) ·
Expand Down
22 changes: 22 additions & 0 deletions site/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Builds the GitHub Pages site into build/site:
# / the landing page (site/index.html)
# /docs/ the guides: docs/*.md and CHANGELOG.md rendered by MkDocs Material (site/mkdocs.yml)
# Needs the packages in site/requirements.txt. Used by .github/workflows/pages.yml.
set -euo pipefail
cd "$(dirname "$0")/.."

rm -rf build/site build/site-docs
mkdir -p build/site build/site-docs

# The guides' sources: our overview page and assets, the docs, and the changelog.
cp -R site/guides/. build/site-docs/
cp docs/*.md build/site-docs/
cp CHANGELOG.md build/site-docs/changelog.md
# On GitHub, docs/ links to the changelog one folder up; on the site it sits next to them.
sed -i.bak 's#](\.\./CHANGELOG\.md)#](changelog.md)#g' build/site-docs/*.md
rm build/site-docs/*.bak

# mkdocs is pinned below 2.0 in requirements.txt, so Material's MkDocs 2.0 warning doesn't apply.
NO_MKDOCS_2_WARNING=true mkdocs build --strict --config-file site/mkdocs.yml --site-dir "$PWD/build/site/docs"
cp site/index.html build/site/
33 changes: 33 additions & 0 deletions site/guides/assets/extra.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* MeshAnd colours (the Summit logo's pine and ember) on top of Material. */
:root, [data-md-color-scheme="default"] {
--md-primary-fg-color: #1F5A47;
--md-primary-fg-color--light: #2E7A61;
--md-primary-fg-color--dark: #143A2E;
--md-primary-bg-color: #FFFFFF;
--md-accent-fg-color: #D9643A;
--md-typeset-a-color: #1F5A47;
--md-default-bg-color: #F6F7F4;
--md-footer-bg-color: #1F5A47;
--md-footer-bg-color--dark: #143A2E;
}
[data-md-color-scheme="slate"] {
--md-primary-fg-color: #133A2E;
--md-primary-fg-color--light: #1F5A47;
--md-primary-fg-color--dark: #0B2E23;
--md-primary-bg-color: #F2F4F3;
--md-accent-fg-color: #F28A62;
--md-typeset-a-color: #8ED1B5;
--md-default-bg-color: #0E1412;
--md-default-fg-color--lightest: #27332E;
--md-code-bg-color: #151D1A;
--md-footer-bg-color: #133A2E;
--md-footer-bg-color--dark: #0B2E23;
}

.md-header__button.md-logo img { height: 1.6rem; border-radius: .35rem; }
.md-typeset h1, .md-typeset h2 { font-weight: 800; letter-spacing: -.02em; }
.md-typeset h1 { color: var(--md-default-fg-color); }

/* Overview page cards */
.md-typeset .grid.cards > ul > li { border-radius: .8rem; }
.md-typeset .grid.cards > ul > li:hover { border-color: var(--md-typeset-a-color); }
1 change: 1 addition & 0 deletions site/guides/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions site/guides/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# MeshAnd guides

MeshAnd connects to your Meshtastic radio over Bluetooth and shows everyone in your mesh on the
OsmAnd map. These guides help you set up the radios, see what changed in each version, and build
the app yourself. New here? Start on the [MeshAnd website](https://meshand.app/)
for what the app does and how to install it.

<div class="grid cards" markdown>

- :material-radio-handheld: **[Radio setup](radio-setup.md)**

---

Channel, role and position settings for a moving team. Read this before your first trip:
the defaults send a position only about once an hour.

- :material-new-box: **[What's new](changelog.md)**

---

What changed in each version, including what's coming in the next one.

- :material-code-tags: **[Developing](development.md)**

---

Building MeshAnd yourself, how the code is organised, logs and the release process.

- :material-download: **[Download](https://github.com/mategogiberidze/MeshAnd/releases/latest)**

---

The latest release as a ready-to-install APK, on GitHub.

</div>

Questions or trip reports? Join the
[Discussions](https://github.com/mategogiberidze/MeshAnd/discussions). Something broken?
[Open an issue](https://github.com/mategogiberidze/MeshAnd/issues/new/choose).
Loading
Loading