Open-source starter for a social scheduler on TryPost Connect: sign up, isolate each client in a workspace, connect networks, and publish.
You keep the product UI. Connect runs OAuth, tokens, storage, and the networks. One Connect API key serves every workspace.
- Next.js 16 (App Router) + TypeScript only (
.ts/.tsx) - shadcn/ui
- Supabase (auth, password reset, workspaces)
- Prisma + PostgreSQL fallback for single-user local demo
- TryPost Connect REST
- Playwright
cp .env.example .envTRYPOST_CONNECT_API_KEY=
TRYPOST_CONNECT_BASE_URL=https://connect.trypost.it/api
APP_URL=http://localhost:3000
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
DATABASE_URL=postgresql://postgres@127.0.0.1:5432/connect_demo
Keep the Connect key on the server. Do not commit .env.
- Create a Supabase project.
- Paste the project URL and publishable key into
.env. - Run
supabase/schema.sqlin the SQL editor. - In Authentication → URL configuration, add
http://localhost:3000/auth/callback. - Install and run:
npm install
npm run devEach signup creates a workspace (one client). They connect their own social accounts. Tokens stay on Connect; this app only stores the workspace link, name, and avatar.
Create the local database, migrate, and run:
createdb connect_demo
npm install
npx prisma migrate dev
npm run devAuth — email/password, sign up, forgot password, update password.
Accounts (/) — starts Connect accounts in a popup. LinkedIn is one button: Connect shows profile and pages, then the user picks. Identities are scoped to the current workspace.
Posts (/posts) — uploads with presign + PUT, creates a draft, then publishes with PUT /posts/{id} { "status": "publishing" }. Extra fields appear when required: TikTok privacy_level, Pinterest board_id, Discord channel_id.
npx playwright install chromium
npm run test:e2eBilling, teams/invites, webhooks (Connect refuses localhost), scheduling, per-network caption overrides, metrics.