Open-Source Cold Email & Warmup Platform
Warmbly 是開源的冷郵件平台:溫暖您的收件箱、發送活動、並對每個回覆進行分流。可在我們的雲端運行或自行託管整個系統。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗GoCollab is a full-stack marketplace that connects brands with User-Generated Content (UGC) creators. Brands discover, brief, and pay creators in one place; creators manage their portfolio, packages, and orders from a dedicated dashboard.
GoCollab solves the friction in UGC production:
/{displayName}), showcase a video portfolio, set tiered packages and add-ons, and manage the full order lifecycle from a single dashboard./{displayName} pages with portfolio reels, packages, ratings, and a Book CTA/docs (non-production)/client)| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router, React Server Components) |
| Language | TypeScript |
| Styling | Tailwind CSS v4 |
| State / Data | TanStack React Query v5, Redux Toolkit |
| Forms | React Hook Form + Zod |
| Payments | Razorpay SDK |
| Real-time | Socket.IO client |
| UI primitives | Radix UI, Ark UI, Vaul, Embla Carousel |
| Charts | Chart.js + react-chartjs-2 |
| Animations | Framer Motion |
| Icons | Lucide React |
| Notifications | Sonner |
/server)| Layer | Technology |
|---|---|
| Framework | NestJS (Express adapter) |
| Language | TypeScript |
| Database | PostgreSQL via Prisma ORM |
| Auth | JWT (access + refresh tokens), HTTP-only cookies |
| Payments | Razorpay |
| Storage | AWS S3 (creator media, deliverables) |
| AWS SES | |
| Real-time | Socket.IO (NestJS gateway) |
| Validation | class-validator + class-transformer |
| Docs | Swagger / OpenAPI |
| Security | Helmet, CORS, rate limiting |
UGC-PLATFORM/
├── client/ # Next.js 15 frontend
│ ├── app/ # App Router pages
│ │ ├── [displayName]/ # Public creator profile (shareable)
│ │ ├── brand/ # Brand dashboard
│ │ ├── creator/ # Creator dashboard
│ │ ├── admin/ # Admin panel
│ │ └── (main)/ # Marketing / landing pages
│ ├── features/ # Feature-sliced modules
│ │ ├── auth/ # Auth hooks, API calls
│ │ ├── creators/ # Creator listing, profile, browse
│ │ ├── creator-portfolio/ # Portfolio upload & display
│ │ ├── orders/ # Order management
│ │ ├── briefs/ # Creative brief flow
│ │ ├── payments/ # Razorpay checkout hooks
│ │ └── chats/ # Real-time order chat
│ ├── components/ # Shared UI components
│ │ ├── landing/ # Marketing landing sections
│ │ └── ui/ # Primitive UI components
│ └── providers/ # React context providers (Auth, Query, Theme)
│
└── server/ # NestJS backend
└── src/
├── auth/ # JWT auth, guards, strategies
├── creator-profile/ # Creator profile CRUD + search
├── creator-portfolio/ # Portfolio video management
├── brand-profile/ # Brand profile management
├── orders/ # Order lifecycle
├── briefs/ # Brief creation & management
├── razorpay/ # Payment processing + webhooks
├── order-chat/ # Per-order real-time chat
├── chats/ # General messaging
├── creator-reviews/ # Brand reviews of creators
├── storage/ # AWS S3 file uploads
├── mail/ # AWS SES email service
├── agency/ # Agency workspace management
├── jobs/ # Background/scheduled jobs
├── realtime/ # Socket.IO gateway
└── webhooks/ # Razorpay + SES webhook handlers
server/.env)DATABASE_URL=postgresql://user:password@localhost:5432/ugcplatform
JWT_SECRET=your_jwt_secret
JWT_REFRESH_SECRET=your_refresh_secret
PORT=4000
CORS_ORIGIN=http://localhost:3000
# AWS
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
AWS_S3_BUCKET=
# AWS SES
[email protected]
# Razorpay
RAZORPAY_KEY_ID=
RAZORPAY_KEY_SECRET=
RAZORPAY_WEBHOOK_SECRET=
# Non-refundable reward credit for buyers. The two rewards are configured
# independently — either can be switched on, off or re-priced without touching
# the other — and all four are read at runtime: change them and restart, no
# deploy needed. The signup reward covers BOTH brand and agency registration:
# one switch, one amount, no agency-specific variable.
ORDER_COMPLETION_CREDIT_ENABLED=false # 'true' rewards a completed order
ORDER_COMPLETION_CREDIT_PAISE=5000 # 5000 paise = ₹50
SIGNUP_WELCOME_CREDIT_ENABLED=false # 'true' rewards a new brand or agency
SIGNUP_WELCOME_CREDIT_PAISE=10000 # 10000 paise = ₹100
SWAGGER_ENABLED=true
NODE_ENV=development
client/.env.local)NEXT_PUBLIC_API_URL=http://localhost:4000/api
NEXT_PUBLIC_RAZORPAY_KEY_ID=your_razorpay_key_id
cd server
npm install
npx prisma migrate dev # run migrations
npx prisma generate # generate Prisma client
npm run start:dev # starts on port 4000
API docs available at http://localhost:4000/docs
cd client
npm install
npm run dev # starts on port 3000
Open http://localhost:3000
Browser
│
▼
Next.js 15 (App Router)
├── Server Components → fetch data at build/request time (ISR + SSR)
├── Client Components → interactive UI, React Query for client-side data
└── API Routes → minimal (auth redirect helpers)
│
▼ HTTP / WebSocket
NestJS API (REST)
├── JWT Auth (HTTP-only refresh cookie + Bearer access token)
├── Prisma ORM → PostgreSQL
├── S3 for media storage
├── SES for transactional email
├── Razorpay for payments + escrow
└── Socket.IO for real-time order chat
Key architectural decisions:
export const revalidate = 3600), giving near-static performance with fresh dataGET /creator-profile/:id) use OptionalJwtAuthGuard, which silently populates req.user when a valid token is present and allows unauthenticated access otherwisefeatures/ module with co-located API calls, hooks, types, and components/{displayName} or /brand/creators/brand/briefs/create?orderId=…/creator/orders/[orderId]/register, chooses Creator, then completes the profile wizard/{displayName} after admin approvalWhen running locally with SWAGGER_ENABLED=true, interactive API docs are available at:
http://localhost:4000/docs
All endpoints are prefixed with /api. Authentication uses JWT Bearer tokens for most routes; public creator browsing and profile endpoints allow unauthenticated access.
development — never push directly to mainfeat/…, fix/…, chore/…development; main is the production branchnpx tsc --noEmit in client/ before pushing to catch type errors