Quickstart — Self-hosted

Run Pookie on your own infra. Three paths below — pick one and follow it end to end. About fifteen minutes.

Before you start

You'll need:

  • A Slack workspace where you have permission to install apps.
  • An OpenAI API key (OPENAI_API_KEY). Get one at platform.openai.com/api-keys.
  • A Redis instance — only if you're deploying to Vercel. Railway and Docker bundle their own. Upstash free tier is fine.

Deploy on Vercel

Open the Vercel deploy link.

2. Fill in env vars

The deploy flow automatically provisions an Upstash Redis instance and injects the credentials. Vercel asks for the remaining env vars. Use placeholders for the three SLACK_* values — you'll replace them in step 5. Real values for the rest:

SLACK_CLIENT_ID=placeholder
SLACK_CLIENT_SECRET=placeholder
SLACK_SIGNING_SECRET=placeholder
OPENAI_API_KEY=sk-your-openai-key
IS_SELF_DEPLOYED=true

Click Deploy. Vercel hands you a URL like pookie-yourname.vercel.app. That's your deploy URL.

3. Create your Slack app

Visit https://YOUR-DEPLOY-URL/install in a browser. Pookie detects you're self-hosted and walks you through generating a Slack app manifest with your URLs baked in. Click through to Slack, click Create App.

4. Copy the OAuth credentials

In the Slack app dashboard, go to Basic InformationApp Credentials. Copy these three values:

  • Client IDSLACK_CLIENT_ID
  • Client SecretSLACK_CLIENT_SECRET
  • Signing SecretSLACK_SIGNING_SECRET

5. Replace the placeholder env vars

In your Vercel project, SettingsEnvironment Variables, replace the three SLACK_* placeholders with the real values from step 4.

6. Redeploy

Vercel doesn't auto-redeploy on env-var changes. Deployments tab → latest deployment → three-dot menu → Redeploy.

7. Install Pookie into your Slack workspace

Open https://YOUR-DEPLOY-URL/api/slack/install. Slack walks through workspace selection and scope approval, then redirects back to your deploy.

8. Add Pookie to a channel

/invite @pookie

Pookie posts a hello on join. DMs work without invite.

9. Run /onboarding

/onboarding

Pookie posts an interactive card with one-click MCP server connectors (Linear, GitHub, Sentry, PostHog, etc.). Click the OAuth links to wire each one up.

10. Try your first query

@pookie what did we decide about the Q3 launch?

Pookie replies inline with sources cited. Done.

Vercel-specific gotchas

If Slack manifest creation fails on URL verification, Deployment Protection is the usual culprit. Vercel Dashboard → Project Settings → Deployment ProtectionProtection Bypass for Automation → copy the secret. Edit the manifest in Slack's dashboard → JSON tab → add ?x-vercel-protection-bypass=YOUR_SECRET to the webhook URL → Save.

Deploy on Railway

1. Click the template

One-click Railway template. Provisions Pookie + managed Redis side by side.

2. Fill in env vars

At the deploy form:

  • Set OPENAI_API_KEY to your real value.
  • Leave the three SLACK_* placeholders alone — you'll replace them in step 5.
  • REDIS_URL, BASE_URL, and IS_SELF_DEPLOYED auto-wire from Railway's variable references and the Dockerfile.

Click Deploy. Railway hands back a URL like pookie-production-xxxx.up.railway.app. That's your deploy URL.

3. Create your Slack app

Visit https://YOUR-DEPLOY-URL/install. Pookie detects you're self-hosted and walks you through generating a Slack app manifest. Click through to Slack, click Create App.

4. Copy the OAuth credentials

In the Slack app dashboard: Basic InformationApp Credentials. Copy:

  • Client IDSLACK_CLIENT_ID
  • Client SecretSLACK_CLIENT_SECRET
  • Signing SecretSLACK_SIGNING_SECRET

5. Replace the placeholder env vars

In Railway, click your Pookie service → Variables tab. Replace the three SLACK_* placeholders with the real values from step 4.

6. Redeploy

railway redeploy

Or trigger a redeploy from the Railway dashboard.

7. Install Pookie into your Slack workspace

Open https://YOUR-DEPLOY-URL/api/slack/install. Slack walks through workspace selection and scope approval.

8. Add Pookie to a channel

/invite @pookie

9. Run /onboarding

/onboarding

Click the OAuth links to connect MCP servers.

10. Try your first query

@pookie what did we decide about the Q3 launch?

Deploy on Docker

For Docker on a VPS, Cloud Run, Fly, or any container host.

1. Clone and start

git clone https://github.com/millionco/pookie
cd pookie
OPENAI_API_KEY=sk-... docker compose up

The included docker-compose.yml bundles Redis. The Dockerfile sets IS_SELF_DEPLOYED=true automatically.

2. Expose the deployment publicly

Pookie binds to 0.0.0.0:3000 inside the container. Put it behind HTTPS — the Slack webhook needs to be publicly reachable. On a VPS, that means a reverse proxy (Caddy, nginx, Traefik). On Cloud Run / Fly, the platform handles HTTPS.

3. Set BASE_URL

Add BASE_URL=https://your-pookie.example.com to your env so Pookie knows its own URL. Restart the container:

docker compose up -d --force-recreate

4. Create your Slack app

Visit https://your-pookie.example.com/install. Pookie walks you through generating a Slack app manifest. Click through to Slack, click Create App.

5. Copy the OAuth credentials

In the Slack app dashboard: Basic InformationApp Credentials. Copy:

  • Client IDSLACK_CLIENT_ID
  • Client SecretSLACK_CLIENT_SECRET
  • Signing SecretSLACK_SIGNING_SECRET

6. Set the env vars and restart

Add the three values to your .env (or wherever docker-compose.yml reads from), then:

docker compose up -d --force-recreate

7. Install Pookie into your Slack workspace

Open https://your-pookie.example.com/api/slack/install. Slack walks through workspace selection and scope approval.

8. Add Pookie to a channel

/invite @pookie

9. Run /onboarding

/onboarding

Click the OAuth links to connect MCP servers.

10. Try your first query

@pookie what did we decide about the Q3 launch?

Common issues

SymptomCauseFix
Bot doesn't respond in a channelForgot /invite @pookieInvite it
Bot doesn't respond at allEnv vars not picked up after redeployForce a redeploy
Bot still using placeholder Slack credsInitial deploy values never replacedReplace with real values, redeploy
OAuth fails with invalid_client_idSlack credentials wrong or still placeholderRe-copy from Slack's Basic Information page, redeploy
Logs show invalid_signatureSLACK_SIGNING_SECRET doesn't match the Slack appRe-copy from Slack's Basic Information page, redeploy
AI calls fail with auth errorsNo OpenAI key configuredSet OPENAI_API_KEY
Slack manifest creation fails on URL verification (Vercel)Deployment Protection blocking SlackSee the Vercel-specific gotchas section above

Stuck?

File an issue on GitHub or jump in Discord.