Skip to main content
Get GTM Feedback up and running in minutes with our one-click Vercel deployment. This guide will walk you through deploying the web app, configuring essential services, and submitting your first feedback.
This quickstart focuses on the web app (apps/www). The Slack integration is optional and can be added later.

Prerequisites

Before you begin, you’ll need:

Deploy to Vercel

Click the deploy button below to clone the repository and deploy to Vercel: Deploy with Vercel This will automatically provision:
  • Neon Postgres database
  • Upstash KV for Redis caching
  • Upstash Vector for semantic search
1

Configure environment variables

During deployment, you’ll be prompted to set the following environment variables:

Required variables

# Neon Postgres connection string (auto-provisioned)
DATABASE_URL=postgres://user:pass@host/db

Optional variables

# Slack integration (optional - for notifications)
SLACK_APP_VERIFICATION=your-shared-secret
SLACK_BOT_TOKEN=xoxb-...
SLACK_DIGEST_CHANNEL_ID=C...
SLACK_GTM_FEEDBACK_CHANNEL_ID=C...

# Cron jobs (optional - for scheduled tasks)
CRON_SECRET=your-cron-secret

# External API verification (optional)
EXTERNAL_API_VERIFICATION=your-api-secret

# App URL (optional - auto-detected on Vercel)
NEXT_PUBLIC_APP_URL=https://your-domain.vercel.app

# System user ID (optional - used for automated actions)
SYSTEM_USER_ID=00000000-0000-0000-0000-000000000001
The Vercel deployment automatically provisions Neon Postgres, Upstash KV, and Upstash Vector. You only need to provide Google OAuth and OpenAI credentials.
2

Set up Google OAuth

To enable authentication, create a Google OAuth application:
  1. Go to Google Cloud Console
  2. Create a new project or select an existing one
  3. Navigate to “Credentials” and click “Create Credentials” > “OAuth client ID”
  4. Select “Web application” as the application type
  5. Add your authorized redirect URI:
    https://your-deployment-url.vercel.app/api/auth/callback/google
    
  6. Copy the Client ID and Client Secret to your environment variables
Make sure to update the redirect URI with your actual Vercel deployment URL after the initial deployment.
3

Run database migrations

After deployment, you need to push the database schema:
# Clone your repository
git clone https://github.com/your-username/gtm-feedback.git
cd gtm-feedback

# Install dependencies
pnpm install

# Create .env file in packages/database
echo "DATABASE_URL=your-neon-postgres-url" > packages/database/.env

# Push schema to database
pnpm db:push
4

Seed demo data (optional)

To get started quickly, you can seed the database with realistic demo data:
# Seed demo data and generate embeddings
pnpm db:seed
This will create:
  • 5 internal users (including a system user)
  • 8 product areas for a B2B analytics SaaS
  • 10 customer accounts with varied ARR and segments
  • ~30 opportunities across those accounts
  • 15 feature requests spanning different product areas
  • ~75 customer feedback entries linked to requests and accounts
The seed script automatically generates vector embeddings for feature requests if OPENAI_API_KEY and Upstash Vector credentials are configured.

First login

Once deployment is complete:
  1. Visit your Vercel deployment URL
  2. Click “Sign in with Google”
  3. Authorize with your Google account
  4. You’ll be redirected to the feedback dashboard
The first user to sign in becomes an admin by default. Make sure to sign in with your own account first.

Submit your first feedback

Now that you’re logged in, let’s submit your first piece of feedback:
1

Navigate to the feedback form

Click the “New Feedback” button in the top right corner of the dashboard.
2

Fill in the details

Provide the following information:
  • Title: A brief description of the feedback
  • Description: Detailed explanation of the customer request
  • Account: Select or create a customer account
  • Opportunity: (Optional) Link to a sales opportunity
  • Product Area: Select the relevant product area
  • Severity: Choose the impact level (low, medium, high)
3

Submit and watch the AI work

After submitting, the system will:
  1. Generate a vector embedding of your feedback
  2. Search for semantically similar feature requests
  3. Use an AI agent to evaluate match quality
  4. Either:
    • Automatically add to an existing request (high confidence)
    • Ask for human approval (medium confidence)
    • Create a new feature request (low confidence)
If you enabled the Slack integration, you’ll receive notifications in Slack for approval workflows.

Understanding the workflow

Here’s what happens behind the scenes when feedback is submitted:

Next steps

Configure Slack integration

Set up the Slack app to capture feedback from emoji reactions and enable approval workflows

Customize product areas

Define your own product areas to match your organization’s structure

Manage accounts

Import your customer accounts and opportunities for ARR-weighted prioritization

View insights

Explore AI-generated insights reports for each product area

Local development

If you prefer to develop locally instead of deploying to Vercel:
1

Clone the repository

git clone https://github.com/vercel-labs/oss-gtm-feedback.git
cd oss-gtm-feedback
2

Install dependencies

pnpm install
This project requires pnpm 10+ and Node.js 20+. Other package managers are not supported.
3

Set up environment variables

Create .env files for the apps:
# Web app environment
cp apps/www/.env.example apps/www/.env

# Database environment
cp packages/database/.env.example packages/database/.env
Edit the files and add your credentials (see the environment variables section above).
4

Push database schema and seed data

# Push schema to database
pnpm db:push

# Seed demo data (optional)
pnpm db:seed
5

Start the development server

pnpm dev
The web app will be available at http://localhost:3000.

Troubleshooting

If you see database connection errors:
  1. Verify your DATABASE_URL is correct in both apps/www/.env and packages/database/.env
  2. Make sure your database is accessible from Vercel (check IP allowlist if using Neon)
  3. Run pnpm db:push to ensure the schema is up to date
If Google OAuth isn’t working:
  1. Verify the redirect URI in Google Cloud Console matches your deployment URL exactly
  2. Make sure AUTH_SECRET is set (generate with openssl rand -base64 32)
  3. Check that both AUTH_GOOGLE_CLIENT_ID and AUTH_GOOGLE_SECRET are set correctly
If semantic matching or insights aren’t working:
  1. Verify your OPENAI_API_KEY is valid and has credits
  2. Make sure Upstash Vector is configured with UPSTASH_VECTOR_REST_URL and UPSTASH_VECTOR_REST_TOKEN
  3. Run pnpm db:seed to generate embeddings for demo data
If the build fails:
  1. Make sure you’re using Node.js 20+ and pnpm 10+
  2. Clear the build cache: pnpm clean (if available) or rm -rf .next node_modules
  3. Reinstall dependencies: pnpm install
  4. Check for TypeScript errors: pnpm typecheck
For more help, check the Contributing guide or open an issue on GitHub.

Build docs developers (and LLMs) love