精选项目personal
服务市场平台
独立架构、独立构建的马来西亚双边服务市场,Go 后端、Flutter 移动端、Next.js 前端,PostGIS 地理匹配,完整托管支付引擎。
projects.detail.detailContext
角色
创始人 & 独立工程师(自由职业)
时间线
January 2026 - Invalid Date
类别
personal
90+ API 端点
30+ 移动屏幕
三语支持
完整托管支付引擎
概述
SolveMY 是马来西亚版 Kaodim, 业主发布任务,经认证的服务商报价竞单,付款托管至完工后释放。从零构建一切:Go 1.24 整洁架构后端含 90+ REST API 端点,Flutter 3.41 移动应用含 30+ 屏幕支持三语,Next.js 14 网页端面向业主、服务商和管理员。PostGIS 处理地理范围匹配,iPay88 处理马来西亚本地支付(Touch 'n Go、DuitNow、FPX、银行卡),双重记账分类账追踪每笔资金状态变更,实时聊天屏蔽联系信息确保平台内交易。
我构建了什么
- 架构 Go 1.24 整洁架构后端(领域/服务/仓储/处理器分层),90+ REST API 端点覆盖 15 个服务域,19 个测试文件含 Mock 覆盖
- 设计 13 张 PostgreSQL 16 表结合 PostGIS, 空间自动同步触发器将经纬度列与 PostGIS geometry 列保持同步,支持任务发布和服务商位置的真实范围查询
- 构建完整的托管支付与双重记账分类账系统:预订时锁定付款,业主确认完工后释放,8 种分类账记录类型追踪每笔资金流转前后余额
- 集成 iPay88(马来西亚支付网关),实现 SHA256 HMAC 签名生成、响应 "RECEIVEOK" 的 webhook 处理器,支持 Touch 'n Go (523)、DuitNow (538)、FPX 及银行卡
- 开发 Flutter 3.41 移动应用,7 个功能模块共 30+ 屏幕(认证、任务、服务、预订、聊天、支付、个人中心),Riverpod 状态管理,GoRouter 导航,三语 i18n
- 构建 Next.js 14 网页端(业主/服务商/管理员仪表板),基于角色的路由,Zod 表单校验,TanStack Query 服务端状态
- 设计双模认证:Clerk JWT JWKS 验证与 webhook 用户同步(迁移 000007 将 clerk_id 设为可空),带原生 bcrypt 密码认证兜底
- 实现实时消息中联系信息屏蔽,含联系方式的消息被标记并替换为 [消息已屏蔽:含联系信息],强制平台内交易
- 集成测试期间捕获生产级契约错误:Dart 的 DateTime.toIso8601String() 不含时区后缀,Go 的 RFC3339 解析需要 Z 后缀,通过 toUtc().toIso8601String() 修复
- 使用多阶段构建生成最小化 Docker 镜像(FROM scratch 运行时),静态链接二进制,内嵌 CA 证书和时区数据
主要成就
- +90+ REST API 端点、13 张 PostgreSQL 表、30+ Flutter 屏幕、20+ Next.js 页面,全部独立完成
- +PostGIS 空间触发器在每次插入/更新时自动同步经纬度到 geometry 列,支持原生范围查询
- +托管支付 + 分类账架构:资金正确性由数据库层保证,而非仅依赖应用层
- +通过真实集成测试在上线前捕获 Dart 与 Go 之间的静默 DateTime RFC3339 契约错误
- +FROM scratch Docker 运行时,最小攻击面,无 shell,无包管理器,内嵌证书
- +多语言在 Schema 层实现,所有内容实体含 title_en/title_ms/title_zh 列,而非仅在应用层处理
使用的技术
Go 1.24PostgreSQL 16PostGIS 3.4pgx v5Redis 7MinIOFlutter 3.41Dart 3.11Riverpod 2.4GoRouter 13Dio 5 + RetrofitNext.js 14React 18TypeScript 5.3TanStack Query v5NextAuth 4Tailwind CSSRadix UIiPay88Firebase Cloud MessagingDockerGitHub Actions
标签
服务市场GoFlutterNext.jsPostGIS金融科技马来西亚自由职业