# Carriage：历时 18 个月交付的旅行者互助应用

Company: Upwork
Service: 应用开发
Period: 2022-12 - 2024-06
Tech: React Native, NestJS, GraphQL, MongoDB, TypeScript, Node.js, Expo, Socket.IO
Web: https://webanion.com
Canonical: https://webanion.com/zh/portfolio/carriage-traveler-help-app-delivered-over-18-months

在一个语言不通的地方落地，帮助就在四周，却无从触及。Carriage 让它触手可及：打开你的定位点，就能看到附近与你语言相通、愿意提供帮助的人；向其中一位发出邀约，对方接受后，你们就可以发消息、通话或当面见面。项目由一名开发者独立完成，涵盖 React Native 应用和 NestJS GraphQL 后端，从一个空白的导航框架开始，逐个里程碑交付，依次实现社交登录、个人资料、按范围发现、邀约流程和即时消息。在同一份持续合约下，一年半内共有十一个里程碑通过验收，最终收尾于 1.8.0 版本。

## 完整故事

旅行者最糟糕的时刻，一位能伸出援手的陌生人，以及一个逐个验收里程碑、一步步打造出来的产品。

### 没有人听得懂你的那一刻

<p>每个旅行者都经历过这样的时刻：在车站、药店或警察局的柜台前，没有人会说你的语言，而你迫切需要让别人明白你的意思。翻译应用能帮你翻译一句话，却帮不了你应对一个处境。你真正需要的，是附近一个会说你的语言、并且愿意帮忙的人。</p><p>Carriage 正是为这样的时刻而打造的，也是为了许许多多乐于帮助陌生人的人，他们只是不知道身边就有这样一位陌生人。</p>

### 先看语言，再定谁能找到你

<p>每个个人资料都从语言开始，写明会说哪些语言、水平如何，从只会几个词到流利自如；然后是兴趣爱好，以及对谁可以看到自己的明确选择：年龄范围、性别和资料类型。这一套设置决定了谁能找到谁，让旅行者按真正需要的语言得到匹配，任何人也都不会出现在自己没有选择的人面前。</p>

### 地图上的定位点，愿意帮忙的人

<p>打开你的定位点，地图就会显示你设定范围内与你语言相通、此刻有空的人，洛杉矶方圆十英里一目了然。点一下定位点，就能看到对方是谁、多大年纪、会说哪些语言，以及一段简短的自我介绍，然后决定是向对方发出邀约，还是继续看看。在帮助者接受之前，不会再分享任何信息；接受之后，双方就可以发消息、进行语音或视频通话，情况需要时还可以线下见面。</p><p>这感觉不像在翻一本通讯录，更像是在人群中与对的人对上了眼神。</p>

### 只在你愿意时才被看到

<p>能否被找到由你自己选择，而不是默认开启。帮助者的定位点在他们亲自打开之前一直是关闭的；筛选条件限定谁会出现、同时显示多少个定位点；家和工作地点可以排除在外，到了那里定位点会自动关闭。对帮助者来说，这就是花几分钟献出一点善意与整天随叫随到之间的区别，也正因如此，人们才愿意加入。</p>

### 从一个定位点到一场对话

<p>向陌生人发出邀约本是个小小的请求，Carriage 让它始终保持这样。帮助者一旦接受，双方就进入一个私密聊天，旅行者可以用自己的语言说明情况，帮助者则可以回复路线指引、要找的名字或可以等候的地点。之前的每一段对话都保留在收件箱里，所以旅行者下次落地时，已经认识的帮助者只需轻点一下就能联系上。</p><p>对创始人来说，正是在这一刻，产品不再只是一张地图，而变成了一段关系，这也是人们会再次打开这款应用的原因。</p>

### 当打字太慢时

<p>有些情况等不及回复。药剂师正在问问题，火车马上要开，一位官员要你立刻回答。旅行者可以在聊天页顶部直接给帮助者打语音电话，或者切换到视频，把镜头对准指示牌、表格或柜台，让帮助者看清情况并替他们开口。通话通过 Twilio 实现，与聊天共用同一个 NestJS 后端，双方无需交换电话号码就能在应用内通话，而帮到什么程度，由帮助者自己决定。</p>

### 增长与收入，内置于产品之中

<p>一款消费类应用既需要用户，也需要养活自己的办法。每位会员都有一个推荐码和一个可分享应用链接的二维码，朋友通过它加入就能获得奖励，让网络依靠已有的成员不断壮大。免费试用结束后，Carriage Pro 可解锁更多定位点、数据分析、Pro 徽章和无广告的应用，为创始人从最能从中受益的用户那里带来一条收入来源。</p>

### 十八个月，十一个已验收的里程碑

<p>创始人需要的是一位一年半之后仍在持续交付的合作伙伴。Carriage 由一名开发者完成，涵盖 React Native 应用以及 NestJS、GraphQL 和 MongoDB 后端，共分十一个里程碑，每一个都事先书面规划，交付时附有截图和一段操作演示视频，并以一份由客户留存的结算文件完成验收。</p>

### 平淡的地基，是有意为之

<p>第一个里程碑刻意做得毫不起眼：只有应用的导航和结构，配上空白页面，没有任何演示功能。之后的一切都建立在这个地基之上，而不是在仓促的开局上修修补补；范围变更都公开协商，而不是默默吞下。</p><p>对创始人来说，这意味着一个十八个月里持续成长、从未重写的产品，一份始终清晰可见的预算，以及每一个决定的记录。对旅行者来说，这意味着一款在他们最需要的时刻真正派上用场的应用。</p>
