打开网易新闻 查看精彩图片

0美元月租能撑起一个交易平台?蒙特利尔一个叫Branche QC的项目正在这么做。不是演示Demo,是真有装修师傅在上面买线索、真有人用信用卡结账。

作者把完整技术栈摊在了桌上:Next.js 16(一个基于React的全栈框架)、Supabase(开源数据库+实时服务)、Stripe(支付处理)。三件套全用免费档,账单确实是零。

业务模型比技术更狠

业务模型比技术更狠

这个模式抄的是Thumbtack和HomeAdvisor,但只服务魁北克本地。业主填需求,装修师傅花钱买线索。一条线索最多卖3份,第3人付款后系统自动锁单。取消订单就释放名额,重新上架。

并发控制是这里的命门。作者贴了一段简化代码:先查已购数量,≥3直接返回409冲突。没有Redis,没有消息队列,纯靠Supabase的行级锁硬扛。他承认这是"careful concurrent-access handling"——翻译过来就是:便宜方案需要你在代码里多操心。

定价策略也很有意思。不卖会员,按单抽成。师傅们不需要预付年费,成交一单付一单。这种设计降低了冷启动门槛,但也意味着平台必须持续保证线索质量,否则师傅买一次就跑路。

打开网易新闻 查看精彩图片

双语和实时,两个隐形坑

双语和实时,两个隐形坑

魁北克法律规定必须支持法语。作者用了Next.js的Server Component处理generateMetadata做SEO,Client Component里塞了个useLang()钩子切语言。一个页面两套逻辑,但好歹不用维护两套代码库。

更隐蔽的是实时访客统计。他用Supabase的Presence通道做了个小功能:后台看板显示当前在线人数。代码就几行,订阅presence事件,数Object.keys(state).length。零额外基础设施,但文档里不会告诉你:生产环境得自己处理断线重连。

作者原话:「Supabase Realtime is underrated for this kind of thing.」

Stripe的坑在细节里

Stripe的坑在细节里

支付走Stripe,但webhook配置藏了雷。测试模式和生产模式的签名密钥不同,用API创建webhook时密钥会返在响应体里,Dashboard创建则不会。作者踩了一遍才写进笔记:「Key gotcha: webhooks are mode-specific.」

打开网易新闻 查看精彩图片

防欺诈用了最土的办法:内存里存个Map,装修师傅注册限3次/分钟,业主提交需求限5次/分钟。没有Redis,重启就丢数据,但他觉得当前量级够用了。

社交证明也玩得很细。做了个SocialProofToast组件,轮播最近成交。真没数据的时候,就随机显示"某地区某师傅刚入驻"——规则是绝不编数字,但可以把真实信息重新排列组合。

Next.js 16的breaking change

Next.js 16的breaking change

从14升级到16,动态路由的参数变成了Promise。以前直接解构props.params.id,现在必须await。作者说"caught me off guard"——一个资深开发者都被偷袭,文档的迁移指南显然不够醒目。

这个改动影响所有动态路由页面。如果你用TypeScript,类型定义也得跟着改。Next.js团队想推异步参数统一处理,但代价是社区里的教程和Stack Overflow答案批量过时。

项目现在跑在brancheqc.ca,作者没披露具体流水数字,但强调"real contractors, real leads, real Stripe payments"。开源社区有人问他免费档能撑多久,回复是:「等账单来了再优化,现在先验证需求。」

这种心态大概是独立开发者最诚实的生存策略——用现成工具搭出60分产品,把省下的时间花在找客户上。技术债?那是成功之后才配担心的事。

如果你也在用Next.js 16,动态路由的参数你await了吗?