chore: update landing page copy, improve code formatting, and add PyPI publish workflow
This commit is contained in:
@@ -34,6 +34,28 @@ jobs:
|
|||||||
- name: Run Ruff (Lint & Syntax Check)
|
- name: Run Ruff (Lint & Syntax Check)
|
||||||
run: uv run ruff check src
|
run: uv run ruff check src
|
||||||
|
|
||||||
|
publish-pypi:
|
||||||
|
name: Publish to PyPI
|
||||||
|
needs: lint
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v2
|
||||||
|
with:
|
||||||
|
version: "latest"
|
||||||
|
|
||||||
|
- name: Build package
|
||||||
|
run: uv build
|
||||||
|
|
||||||
|
- name: Publish to PyPI
|
||||||
|
run: uv publish --token ${{ secrets.PYPI_TOKEN }}
|
||||||
|
env:
|
||||||
|
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
||||||
|
|
||||||
build-and-push:
|
build-and-push:
|
||||||
name: Build & Push Docker Image
|
name: Build & Push Docker Image
|
||||||
needs: lint
|
needs: lint
|
||||||
|
|||||||
+4
-1
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "strava-mcp-server"
|
name = "strava-mcp-server-hnrx"
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
description = "A Model Context Protocol (MCP) server that exposes the Strava API v3 as tools, resources, and prompts for AI agents."
|
description = "A Model Context Protocol (MCP) server that exposes the Strava API v3 as tools, resources, and prompts for AI agents."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -54,6 +54,9 @@ dev = [
|
|||||||
[tool.hatch.version]
|
[tool.hatch.version]
|
||||||
source = "vcs"
|
source = "vcs"
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = ["src/strava_mcp_server"]
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
asyncio_mode = "auto"
|
asyncio_mode = "auto"
|
||||||
testpaths = ["tests"]
|
testpaths = ["tests"]
|
||||||
|
|||||||
+20
-10
@@ -1,11 +1,13 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Strava MCP Server | Modern Training Data Access</title>
|
<title>Strava MCP Server | Modern Training Data Access</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="bg-gradient"></div>
|
<div class="bg-gradient"></div>
|
||||||
|
|
||||||
@@ -27,9 +29,11 @@
|
|||||||
<header class="hero">
|
<header class="hero">
|
||||||
<img src="assets/hero.png" alt="Futuristic Background" class="hero-img">
|
<img src="assets/hero.png" alt="Futuristic Background" class="hero-img">
|
||||||
<h1 data-i18n="hero-title">Empower your AI with Strava Data.</h1>
|
<h1 data-i18n="hero-title">Empower your AI with Strava Data.</h1>
|
||||||
<p data-i18n="hero-subtitle">A production-ready Model Context Protocol (MCP) server that exposes the Strava API for AI agents and LLMs.</p>
|
<p data-i18n="hero-subtitle">A production-ready Model Context Protocol (MCP) server that exposes the Strava
|
||||||
|
API for AI agents and LLMs.</p>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a href="https://git.hnrx.net/hnrx/strava-mcp-server" class="btn btn-primary" data-i18n="btn-start">Get Started</a>
|
<a href="https://git.hnrx.net/hnrx/strava-mcp-server" class="btn btn-primary" data-i18n="btn-start">Get
|
||||||
|
Started</a>
|
||||||
<a href="#architecture" class="btn btn-secondary" data-i18n="btn-more">Learn More</a>
|
<a href="#architecture" class="btn btn-secondary" data-i18n="btn-more">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -37,13 +41,15 @@
|
|||||||
<section id="features">
|
<section id="features">
|
||||||
<div class="section-title">
|
<div class="section-title">
|
||||||
<h2 data-i18n="features-title">Features</h2>
|
<h2 data-i18n="features-title">Features</h2>
|
||||||
<p data-i18n="features-subtitle">Comprehensive access to your training data through standardized MCP tools.</p>
|
<p data-i18n="features-subtitle">Comprehensive access to your training data through standardized MCP
|
||||||
|
tools.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<span class="card-icon">👤</span>
|
<span class="card-icon">👤</span>
|
||||||
<h3 data-i18n="feat-1-t">Athlete Profiles</h3>
|
<h3 data-i18n="feat-1-t">Athlete Profiles</h3>
|
||||||
<p data-i18n="feat-1-d">Detailed profiles, heart rate zones, and power stats for personalized analysis.</p>
|
<p data-i18n="feat-1-d">Detailed profiles, heart rate zones, and power stats for personalized
|
||||||
|
analysis.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<span class="card-icon">🚴</span>
|
<span class="card-icon">🚴</span>
|
||||||
@@ -69,8 +75,11 @@
|
|||||||
<p data-i18n="arch-p">Optimized for both humans and machines. Every tool delivers two outputs:</p>
|
<p data-i18n="arch-p">Optimized for both humans and machines. Every tool delivers two outputs:</p>
|
||||||
<br>
|
<br>
|
||||||
<ul style="list-style: none; color: var(--text-dim);">
|
<ul style="list-style: none; color: var(--text-dim);">
|
||||||
<li style="margin-bottom: 1rem;"><strong style="color: var(--primary);" data-i18n="arch-user-t">User Content:</strong> <span data-i18n="arch-user-d">Formatted markdown for an aesthetic display in the chat.</span></li>
|
<li style="margin-bottom: 1rem;"><strong style="color: var(--primary);" data-i18n="arch-user-t">User
|
||||||
<li><strong style="color: #fff;" data-i18n="arch-llm-t">Assistant Resource:</strong> <span data-i18n="arch-llm-d">Structured JSON for precise data processing by the LLM.</span></li>
|
Content:</strong> <span data-i18n="arch-user-d">Formatted markdown for an aesthetic display
|
||||||
|
in the chat.</span></li>
|
||||||
|
<li><strong style="color: #fff;" data-i18n="arch-llm-t">Assistant Resource:</strong> <span
|
||||||
|
data-i18n="arch-llm-d">Structured JSON for precise data processing by the LLM.</span></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="code-window">
|
<div class="code-window">
|
||||||
@@ -141,7 +150,7 @@
|
|||||||
"nav-arch": "Architektur",
|
"nav-arch": "Architektur",
|
||||||
"nav-install": "Installation",
|
"nav-install": "Installation",
|
||||||
"nav-repo": "Quellcode",
|
"nav-repo": "Quellcode",
|
||||||
"hero-title": "Stärke deine KI mit Strava Daten.",
|
"hero-title": "Analysiere deine Strava-Daten mit KI-Power.",
|
||||||
"hero-subtitle": "Ein produktionsreifer Model Context Protocol (MCP) Server, der die Strava API für AI Agents und LLMs nutzbar macht.",
|
"hero-subtitle": "Ein produktionsreifer Model Context Protocol (MCP) Server, der die Strava API für AI Agents und LLMs nutzbar macht.",
|
||||||
"btn-start": "Loslegen",
|
"btn-start": "Loslegen",
|
||||||
"btn-more": "Mehr erfahren",
|
"btn-more": "Mehr erfahren",
|
||||||
@@ -168,7 +177,7 @@
|
|||||||
|
|
||||||
function setLanguage(lang) {
|
function setLanguage(lang) {
|
||||||
localStorage.setItem('preferredLang', lang);
|
localStorage.setItem('preferredLang', lang);
|
||||||
|
|
||||||
// Update all text elements
|
// Update all text elements
|
||||||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||||||
const key = el.getAttribute('data-i18n');
|
const key = el.getAttribute('data-i18n');
|
||||||
@@ -184,7 +193,7 @@
|
|||||||
btn.classList.add('active');
|
btn.classList.add('active');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document.documentElement.lang = lang;
|
document.documentElement.lang = lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,4 +202,5 @@
|
|||||||
setLanguage(savedLang);
|
setLanguage(savedLang);
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user