构建 LandlordOS:使用 Next.js 16 的现代物业管理系统

发布: (2026年1月14日 GMT+8 09:08)
5 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

我最近推出了 LandlordOS,这是一款面向小型至中型房东(5–50 套租赁单元)的物业管理系统。在与多位房东交流后,我发现了一个共同的痛点:他们被困在两个极端之间:

  • 企业软件 – 每月 200 美元以上,功能他们根本用不到。
  • Google 表格 – 笨拙且容易出错。

LandlordOS 的目标是居于中间:足够简单,适合日常使用;又足够强大,能够支撑真实的业务运营。

技术栈

  • Next.js 16 与 App Router(服务器端渲染)
  • TypeScript 实现端到端的类型安全
  • PostgreSQL (Neon) 提供可靠的数据存储
  • Drizzle ORM 用于类型安全的数据库查询
  • NextAuth.js v5 用于身份验证
  • Vercel 用于部署和 Edge Runtime

核心功能

  • 物业管理
    • 跟踪多个物业的详细信息
    • 管理物业内的单元
    • 监控入住状态和可用性
  • 租户管理
    • 存储租户联系信息
    • 将租户关联到具体单元
  • 租约管理
    • 跟踪租约的起止日期
  • 付款
    • 记录付款(金额、日期、方式)
    • 查看每位租户的付款历史
    • 跟踪未付余额
  • 维修请求
    • 提交并跟踪问题
    • 优先级:低 / 中 / 高 / 紧急
    • 状态跟踪:待处理 / 进行中 / 已完成 / 已取消

安全

安全是首要任务。已实施的措施包括:

export function validateCsrfToken(token: string, cookieToken: string): boolean {
  // implementation...
}

认证端点的速率限制

await authLimiter.check(5, identifier); // 5 requests per 15 minutes

XSS 与 SQL 注入防护

// Example of parameterized query with Drizzle ORM
const result = await db
  .select()
  .from(payments)
  .where(eq(payments.id, sanitizedId));

公共路由绕过

if (isPublicRoute) {
  // Skip authentication and DB calls in Edge Runtime
  return NextResponse.next();
}

测试

全面的测试确保了质量:

  • 31 个单元/集成测试,覆盖:
    • 用户认证(注册、登录、密码验证)
    • 房产、租户和单元管理
    • 支付记录
    • 维修请求
    • 安全(XSS、SQL 注入)
      结果: 100 % 通过率
  • 8 个端到端测试 在线上站点进行,覆盖:
    • 页面加载验证
    • 用户注册流程
    • 登录功能
    • 导航
    • 核心功能测试
    • Stripe 结账集成
      结果: 100 % 通过率

Deployment Journey

Initially tried Cloudflare Pages and Netlify, but the Next.js App Router with Server Components isn’t compatible with static deployments. Vercel natively supports the required features, so the project was deployed there.

环境变量

变量用途
DATABASE_URLNeon PostgreSQL 连接字符串
NEXTAUTH_SECRET会话加密密钥
NEXTAUTH_URL认证回调 URL
STRIPE_SECRET_KEYStripe 支付处理
NEXT_PUBLIC_GA_MEASUREMENT_IDGoogle Analytics 测量 ID

中间件注意事项

中间件运行在 Edge Runtime 中,而该环境缺少许多 Node.js API。最初,中间件对 所有 路由(包括公共路由)都调用了 auth(),导致崩溃,因为数据库驱动无法在 Edge 环境中运行。解决办法是为公共路由添加提前返回(参见上文的 “Public Route Bypass” 代码片段)。

TypeScript Benefits

  • 在开发过程中捕获了大量错误。
  • 为所有内容添加类型的前期成本立刻得到了回报。
  • 强制实现 100 % 的测试通过率,迫使对边缘情况进行仔细处理。

未来改进

  • 租约/协议的文档上传
  • 通过电子邮件自动发送租金提醒
  • 财务报告与分析
  • 移动应用(React Native)
  • 多语言支持

实时演示

探索该应用:

征求反馈

我很想听取以下群体的意见:

  • 在实际场景中使用它的物业经理
  • 对架构感兴趣的开发者
  • 任何构建类似 SaaS 产品的人

您会为物业管理系统添加哪些功能?

Back to Blog

相关文章

阅读更多 »