# D-Tours：AI驱动的攀岩公路旅行伴侣系统

> 一个为攀岩公路旅行设计的AI伴侣系统，整合实时位置追踪、智能行程推荐、内容管理和主动式通知，打造三位一体的旅行体验。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-11T05:15:59.000Z
- 最近活动: 2026-06-11T05:24:39.765Z
- 热度: 161.9
- 关键词: AI旅行助手, 攀岩, 实时位置, Astro, Supabase, 主动推荐, 消息通知, CMS, 位置感知
- 页面链接: https://www.zingnex.cn/forum/thread/d-tours-ai
- Canonical: https://www.zingnex.cn/forum/thread/d-tours-ai
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者：** dapinitial
- **来源平台：** GitHub
- **原始标题：** d-tours
- **原始链接：** https://github.com/dapinitial/d-tours
- **项目主页：** https://spacelabforever.com
- **发布时间：** 2026-06-11

---

## 项目背景与创意来源

攀岩是一项高度依赖信息的运动——岩场的路线难度、路况、天气、甚至是"beta"（攀爬技巧提示）都可能决定一次攀爬的成败。传统的攀岩指南通常是静态的印刷品，无法实时更新，也无法根据旅行者的实际位置和行程动态推荐。

D-Tours项目诞生于一次从奥斯汀到斯阔米什的史诗级攀岩公路旅行。开发者希望创造一个"副驾驶"式的AI伴侣，不仅能够提供静态信息，还能根据实时位置主动推荐沿途的攀岩目标，记录旅程点滴，并在关键时刻发送提醒。

这个项目的独特之处在于它不仅仅是一个网站或一个应用，而是一个由三个互补表面组成的完整系统：面向访客的精美展示网站、主动推送的AI消息伴侣、以及方便管理的CMS后台。

---

## 三位一体系统架构

### 访客网站：精美的编辑化展示

访客网站采用Astro框架构建，设计理念深受Montoya和Manifesto等精品网站影响，强调视觉叙事和沉浸感：

- **实时地图集成**：通过Garmin MapShare KML订阅获取旅行者的实时位置
- **路线时间轴**：展示从奥斯汀到斯阔米什的完整行程，支持灵活调整
- **攀岩目标库**：所有岩场和目标都带有经纬度坐标，支持按距离排序
- **日志与画廊**：旅行日志和照片展示
- **打印行程单**：可将完整行程导出为PDF，方便离线查阅

### Shotgun：AI消息伴侣

Shotgun是系统的智能核心，一个始终在线的AI助手，通过多种渠道与旅行者保持联系：

- **主动位置感知**：系统知道旅行者当前位置，能够计算到各个攀岩目标的距离和预估驾驶时间
- **智能推荐**：当旅行者接近某个优质攀岩区域时，自动发送该区域的详细信息
- **多渠道通知**：支持邮件、短信、卫星通讯设备（inReach）等多种通知方式
- **自然语言交互**：旅行者可以通过自然语言与Shotgun对话，查询信息或调整计划

### CMS后台：统一管理中枢

CMS采用与访客网站相同的技术栈，支持从手机或笔记本管理整个系统：

- **内容编辑器**：发布日志、更新攀岩目标、上传照片
- **Shotgun控制面板**：发送摘要、触发D-Tours扫描、检查MapShare位置
- **统计仪表板**：查看访问量、互动数据等关键指标

---

## 核心技术实现

### 技术栈选择

项目采用现代Web技术栈，兼顾开发效率和运行性能：

- **Astro 5**：静态站点生成与SSR结合，快速构建高性能页面
- **Supabase**：PostgreSQL数据库、认证、存储一站式解决方案
- **Leaflet**：开源地图库，展示实时位置和攀岩目标
- **Nodemailer**：邮件发送，支持运营商邮件转短信网关
- **Overpass API / OpenStreetMap**：免费获取地理数据

### 实时位置追踪与邻近计算

系统的核心功能之一是实时位置感知和智能推荐：

**位置获取模块**（`src/lib/proximity.ts`）：
- 解析Garmin MapShare KML订阅源，获取GPS坐标
- 提供模拟位置作为降级方案，确保系统始终可用
- 实现Haversine公式计算球面距离
- 估算驾驶时间（直线距离 × 1.35 ÷ 45mph）

**邻近查询API**（`/api/nearby`）：
- 接收当前经纬度作为参数
- 计算所有攀岩目标与当前位置的距离
- 标记在指定驾驶时间范围内的目标
- 按距离排序返回结果

### 主动式Watcher系统

这是Shotgun智能推荐的核心机制：

**API端点**（`POST /api/watch`）：
- 读取实时位置，查找指定驾驶时间范围内的攀岩目标
- 检查目标是否已被提醒过（通过`alerted_at`时间戳去重）
- 向旅行者发送包含目标详情的邮件通知
- 更新`alerted_at`防止重复打扰

**定时触发**：
- 使用Supabase的pg_cron和pg_net实现云端定时任务
- 每30分钟自动执行一次检查
- 无需常驻服务器，完全基于云函数

### 数据架构与权限设计

系统采用Supabase作为数据层，设计了清晰的权限模型：

- **开放点赞**：所有访客都可以为内容点赞，无需登录
- **评论权限**：评论功能仅限授权用户（crew成员）
- **RLS策略**：行级安全策略确保数据访问控制
- **服务角色**：CMS使用服务角色密钥进行写操作

---

## 创新功能与用户体验

### 零成本消息通知

项目巧妙利用运营商的邮件转短信网关实现免费短信通知，避免了Twilio等服务的费用。虽然AT&T在2025年6月停止了该服务，但系统仍保留邮件通知作为主要渠道，并支持inReach卫星通讯设备作为野外备用方案。

### 离线友好的设计

考虑到攀岩旅行经常深入偏远地区，系统特别注重离线可用性：

- **PDF行程单**：可打印的完整行程文档
- **MapShare集成**：Garmin卫星设备的实时位置是野外唯一可靠的实时数据源
- **降级策略**：当GPS数据不可用时，系统优雅降级，不会发送错误提醒

### AI内容生成

系统利用Claude Max（通过Claude Code在本地iMac运行）实现智能内容生成：

- **每日摘要**：自动生成前一天的行程摘要
- **D-Tours扫描**：基于OpenStreetMap数据扫描沿途潜在攀岩点
- **智能回复**：处理自然语言查询，提供个性化建议

---

## 部署与运维

### 本地开发

```bash
cd ~/Sites/d-tours
nvm use  # Node 20+
npm install
npm run dev  # → http://localhost:4321
```

### 生产部署

- **构建**：`npm run build`生成生产包
- **运行**：`node ./dist/server/entry.mjs`启动服务
- **环境变量**：在DigitalOcean App Platform等平台配置Supabase、SMTP、MapShare等密钥
- **域名绑定**：将自定义域名指向应用

### 定时任务配置

在本地iMac上配置cron任务：

```bash
# 每日摘要（早上6点）
0 6 * * * cd ~/Sites/d-tours && npm run digest

# D-Tours扫描
cd ~/Sites/d-tours && npm run dtours

# MapShare位置检查
cd ~/Sites/d-tours && npm run mapshare
```

---

## 项目特色与借鉴价值

1. **多表面架构设计**：访客网站、AI伴侣、CMS三个表面各司其职又紧密协作
2. **位置感知智能**：基于实时位置的主动推荐，而非被动查询
3. **零成本消息方案**：巧妙利用邮件转短信网关降低运营成本
4. **离线优先思维**：考虑到目标用户（攀岩者）的特殊使用场景
5. **AI与人工结合**：AI负责信息整理和推荐，人类保留最终决策权

---

## 总结与启示

D-Tours项目展示了一个高度个性化的AI应用应该如何设计。它不是试图用一个通用AI助手解决所有问题，而是深入理解特定场景（攀岩公路旅行）的核心需求，构建针对性的功能。

这个项目的成功关键在于：

1. **深度场景理解**：开发者本身就是目标用户，深刻理解攀岩旅行的痛点
2. **技术选型务实**：选择成熟稳定的技术，而非追逐最新潮流
3. **成本控制意识**：通过巧妙设计实现零成本消息通知
4. **人机协作理念**：AI负责信息收集和初步筛选，人类做最终决策

对于希望构建垂直领域AI应用的开发者来说，D-Tours提供了一个优秀的参考范例——技术服务于场景，而非相反。
