내 SaaS 스타터를 오픈소스화했어요 — 제가 하지 않은 부분
발행: (2026년 4월 26일 AM 06:22 GMT+9)
4 분 소요
원문: Dev.to
Source: Dev.to
무료로 제공되는 내용
npm create orb@latest my-app
- API – 적절한 DDD 레이어링(경계 컨텍스트, 리포지토리, UnitOfWork, EventBus)을 갖춘 Hono API. DDD가 트렌드라서가 아니라 SaaS가 장난감 단계에서 벗어날 때 자연스럽게 떠오르는 구조이기 때문입니다.
- 멀티‑테넌트 워크스페이스 – 멤버와 워크스페이스‑스코프 PBAC 시스템을 갖춘 기본 원시 객체. 워크스페이스 + 팀 두 단계 권한이 내장되어 있으며, 서버에서는
requirePermission()미들웨어, 클라이언트에서는useCan()훅을 사용합니다. - 인증 –
better-auth(매직 링크, OAuth, 비밀번호 + 이메일 인증) 기반. - 프론트엔드 선택 – TanStack Start 또는 Next.js App Router 중 하나를 선택할 수 있습니다. CLI가 선택하지 않은 쪽을 삭제합니다. 두 옵션 모두 UI 라이브러리와 WebSocket 클라이언트를 공유하며, 페이지별 코드는 의도적으로 중복되어 각 프레임워크에 맞는 관용적인 형태를 유지합니다.
- 데이터베이스 – Prisma를 이용한 PostgreSQL.
- 실시간 – WebSocket.
- 개발 유틸리티 – 개발용 인‑메모리 레이트 리미터.
- UI 라이브러리 – Base UI + Tailwind v4 기반의 55개 컴포넌트 내부 라이브러리(예: coss.com).
- 로그인 및 온보딩 – 워크스페이스 생성을 위한 아름다운 로그인 페이지와 온보딩 흐름.
이 모든 것은 실제 SaaS 골격으로 바로 배포할 수 있습니다. 소스 코드는 MIT 라이선스로 GitHub에 공개되어 있습니다.
유료 기능
다음 기능들은 무료 스타터에 포함되지 않습니다:
- 팀 – 워크스페이스 내부에 중첩된 팀으로, 자체 역할과 권한을 가집니다.
- 청구 –
BillingProvider포트를 통해 연결되는 Stripe, Polar, Dodo 어댑터. - 감사 로그 – 전역(관리자) 및 테넌트‑스코프 원장으로, 커밋 후 프로젝터에 의해 물리화됩니다.
- 업로드 –
FileStorage포트를 통해 연결되는UploadThing어댑터. - 트랜잭션 이메일 –
Mailer포트를 통해 연결되는Resend어댑터. - 백그라운드 작업 – Graphile Worker 또는 QStash 중 선택 가능.
- 원격 레이트 리미팅 – Upstash 또는 Unkey 어댑터.
- 대체 ORM – Prisma 대신 사용할 수 있는 Drizzle(동일한 리포지토리 인터페이스와 UnitOfWork 제공).
- 대기자 명단 모드 – 클로즈드 베타 출시용.
이 컴포넌트들은 모두 내가 채택한 DDD 접근 방식에 맞춘 설계 결정을 기반으로 합니다.
저는 Cal.com에서 일하고 있습니다—기술 관련 문의가 있으면 언제든지 연락 주세요.