TikTok Shop Video Generator
바이럴 틱톡 영상을 클릭 한 번에 광고로 전환해 틱톡샵 판매자·제휴자가 촬영·편집 없이 무료로 체험할 수 있습니다
AI 기반 소셜 리드 엔진으로, 링크인바이오 형태의 설정 없이 대화형 캡처 페이지를 제공해 소셜 트래픽을 실제 파이프라인으로 전환합니다
The AI-powered social lead engine disguised as a link-in-bio. Zero-setup conversational capture pages that turn social traffic into a real pipeline.
마케팅TypeScript · AstroGitHub @robsonperassoli온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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