TikTok Shop Video Generator
只需一次点击,即可将任何病毒式 TikTok 视频转换为您自家产品的广告。适用于 TikTok Shop 卖家和联盟伙伴——无需拍摄、无需剪辑。免费试用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Conversational lead capture for social creators and businesses.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Monorepo for the inbound.click platform: marketing site, Hono API, SPA dashboard, SSR bio renderer, and shared UI.
| App | Path | Port | Role |
|---|---|---|---|
| Website | apps/website | 4321 | Astro marketing site (inbound.click, Fly.io) |
| API | apps/api | 8787 | Hono + Drizzle + SQLite |
| Dashboard | apps/dashboard | 3000 | Vite SPA |
| Bio | apps/bio | 3001 | TanStack Start SSR (s.uper.bio/<username>) |
@inbound/shared — Zod schemas, themes, UUIDv7 helper@inbound/ui — shared UserPage and bio primitives@inbound/config — shared TypeScript configsInstall mise and enable its shell hook. Then:
mise trust
mise install
cp .env.example .env.local
pnpm install
pnpm db:generate
pnpm db:migrate
pnpm db:seed
pnpm dev
Fill secrets in .env.local (gitignored). Mise loads that file into the shell. If you already have a root .env, mv .env .env.local.
Config lives in apps/api (tinybird.config.json). Local Tinybird runs in Docker via the Tinybird CLI (tb). Install it if needed, then:
pnpm tb:start
tb token copy "admin [email protected]"
Put the copied token in both:
.env.local — used by the API at runtimeapps/api/.env.local — used by the Tinybird CLI (next to tinybird.config.json)TINYBIRD_URL=http://localhost:7181
TINYBIRD_TOKEN=<token from above>
Sync datasources and pipes (watch mode):
pnpm tinybird:dev
Then run the apps as usual with pnpm dev.
Production: set TINYBIRD_URL / TINYBIRD_TOKEN on the Railway api service. Pipes deploy during that service's build (pnpm --filter @inbound/api release = tinybird deploy && tsup). SQLite migrations run in a one-shot process at start (node dist/migrate.js && node dist/index.js) because the volume is only mounted at runtime. Do not use a Railway pre-deploy command.
Railway api commands:
pnpm install --frozen-lockfile && pnpm --filter @inbound/api releasepnpm --filter @inbound/api start:prodUsed for avatar/background uploads via S3-compatible presigned URLs. Fill the B2_* vars from .env.example — create a public bucket, an application key scoped to it, and keep B2_ENDPOINT / B2_REGION / B2_PUBLIC_URL on the same region.
The dashboard uploads from the browser, so apply CORS on the bucket (CLI required — upload rules aren’t fully available in the web UI):
# brew install b2-tools
b2 account authorize
b2 bucket update --cors-rules '[
{
"corsRuleName": "dashboardUpload",
"allowedOrigins": ["http://localhost:3000"],
"allowedHeaders": ["*"],
"allowedOperations": ["s3_put", "s3_get", "s3_head"],
"exposeHeaders": ["ETag"],
"maxAgeSeconds": 3600
}
]' <bucket-name> allPublic
For staging/production, add the dashboard origin(s) to allowedOrigins.
For Stripe webhooks (ngrok required — localhost can’t be a Stripe endpoint):
pnpm dev:webhooks
Webhook URL: https://factual-worm-mostly.ngrok-free.app/webhooks/stripe
In the Stripe Dashboard → Developers → Webhooks endpoint, select these events (the API mirrors customers and subscriptions from them):
customer.createdcustomer.updatedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedOr tunnel alone while pnpm dev is already up:
pnpm stripe:tunnel
/public/* — profiles, links, form sessions/auth/* — WorkOS login/callback/logout/webhooks/stripe, /webhooks/workos (provider callbacks)/me, /profiles, /links, /forms, /threads, /uploads, /billing, /analytics, /support, /team, /invitations, /system, etc. (no version prefix)/internal/cron/* — bearer CRON_SECRET (see Production notes)Railway layout (project Inbound Platform): api (Hono + SQLite volume at /data, 1 replica), dashboard (Vite SPA), bio (TanStack Start SSR), cron (curl → API every 5m). Object uploads stay on Backblaze B2 (B2_*); do not use a Railway bucket for media. The marketing site is not on Railway — it stays on Fly.io (inbound-website, https://inbound.click). Deploy from the repo root with pnpm deploy:website (fly deploy . --config apps/website/fly.toml --dockerfile apps/website/Dockerfile).
RAILPACK_NODE_VERSION=24.SQLITE_PATH=/data/inbound.sqlite on the API service. Relative SQLITE_PATH / MIGRATIONS_PATH resolve against process.cwd() (apps/api under pnpm --filter).pnpm --filter @inbound/api build emits ESM to apps/api/dist/ via tsup (local/turbo). Railway build is pnpm --filter @inbound/api release (tinybird deploy && tsup). Start is pnpm --filter @inbound/api start:prod (node dist/migrate.js && node dist/index.js). Local dev still uses tsx. Leave Railway pre-deploy empty — volumes are not mounted there.pnpm --filter @inbound/dashboard build → static apps/dashboard/dist; production start is serve -s dist (SPA fallback).https://s.uper.bio/<username>pnpm --filter @inbound/website build → static apps/website/dist, served by nginx on Fly.io. Always deploy from the repo root (pnpm deploy:website); do not cd apps/website && fly deploy.NODE_ENV=development): the API process runs an in-process interval (every 60s) that calls the same close logic — no manual curl needed.POST /internal/cron/auto-close-threads). The API does not schedule itself; until a scheduler calls it, idle sessions stay open.CRON_SECRET on the API service (required in every environment — local .env.local included; see .env.example).*/5 * * * * (UTC; Railway minimum is 5 minutes).curl -fsS -X POST -H "Authorization: Bearer $CRON_SECRET" "$API_URL/internal/cron/auto-close-threads"CRON_SECRETAPI_URL