SlateCourt 羽毛球场馆与约球应用
面向悉尼羽毛球的移动优先 PWA —— 54 个场馆目录、汇总自场馆公开预订页面的实时场地空位、支持费用分摊的打球账本,以及好友与小组社交层。个人非商业演示项目,以邀请制在我自己的球友圈软启动。

找到场地,记住打得好的那些。 打完把账分清。
大多数场馆没有预订 API,所以 Slate 从不假装能替你订场 —— 它展示真实的空位,把你引导到场馆完成预订,然后把这场球本身变成产品:谁来了、花了多少、谁付了钱、用了什么装备。双语(中/英)、可安装到主屏,并由个人邀请码把关注册。
- 技术栈
- Next.js 16
- TypeScript
- FastAPI
- Python
- PostgreSQL
- Redis
- Better-Auth
- Cloudflare Workers
- Docker
- 分类
- Full-stack
为什么做这个
为真实圈子做的真实产品仅限个人使用
演示 · 仅限邀请SlateCourt 是为我自己的球友圈构建的个人非商业演示项目 —— 注册必须使用邀请码。空位功能只读取场馆自己公开发布、无需登录的预订页面,读取频率低且带缓存,每条结果都链接回场馆自己的预订网站。不转载、不出售任何场馆数据,本项目与任何场馆或订场平台均无关联。
一览
数据一览- 场馆
- 54
- 实时空位场馆
- 16
- API 端点
- 91
- 数据库迁移
- 26
- 通知类型
- 11
- 语言
- 2
全栈维度
七个维度- FE
前端 PWA 与界面
- Next.js 16
- TypeScript
- TanStack Query v5
- openapi-fetch 类型
- Tailwind + shadcn/ui
- PWA · 离线
- BE
后端 类型化 API
- FastAPI
- Python 3.14
- SQLAlchemy 2.0 async
- Pydantic v2
- 91 个端点
- DB
数据 持久化与缓存
- PostgreSQL 18
- Alembic · 26 次迁移
- Redis 7
- UUIDv7 + 审计列
- ID
认证 邀请制
- Better-Auth
- 通行密钥 + 魔法链接
- 邮箱 + 密码
- FastAPI 校验 JWT
- LV
实时空位 抓取管线
- Cloudflare Worker
- 2 个平台适配器
- APScheduler 冷热分层
- Redis 时段网格
- QA
测试 质量关卡
- pytest · 84 个文件
- mypy + ruff
- Playwright E2E
- Alembic 漂移检查
- OPS
DevOps 把一切发布出去的那一层
- Docker
- Dokploy
- Traefik
- Postgres 18
- Redis 7
GitHub Actions- ruff
- mypy
- pytest
- typecheck
- build
- deploy
线上实况
桌面端 · 移动端

实时空位如何工作
抓取管线大多数场馆没有公开 API,但它们的公开预订页面会渲染按日期参数化的 HTML,任何访客都能直接打开。新增场馆只是加一条配置,不用写代码。
取舍
站得住的决策打球账本,而不是订场引擎
Next.js + FastAPI 双应用 Monorepo
前端 Better-Auth,后端校验 JWT
经 Cloudflare Worker 读取公开页面
想了解完整细节?
很乐意聊聊这个项目背后的架构、决策与取舍。


