Collect anonymous feedback from external stakeholders (clients, partners, freelancers, vendors) with verified one-per-person access.
- Admin generates invite links — each email gets a unique, one-time URL
- Person clicks their link — the system validates the token and shows a Google Form
- They submit feedback — responses go directly to Google Forms (trusted third party)
- Token is burned — the same link can't be used twice
- Admin views responses — pulled from Google Forms API, displayed anonymously
- Google Forms = trust. People trust Google more than a company-hosted form
- Token gateway = verification. Only invited people can access the form
- Separation = anonymity. Token data and response data never touch each other
- One-time links = deduplication. Each person submits exactly once
In your Vercel project → Storage → Add → Postgres. Environment variables are auto-configured.
Create your feedback form at forms.google.com. Get the published form ID from the share link.
- Go to Google Cloud Console
- Create or select a project
- Enable Google Forms API
- Create a Service Account → download the JSON key
- Share your Google Form with the service account email (Viewer access)
ADMIN_PASSWORD=your-secure-password
GOOGLE_FORM_ID=your-published-form-id
GOOGLE_SERVICE_ACCOUNT_JSON={"type":"service_account",...}
NEXT_PUBLIC_URL=https://your-app.vercel.app
- Next.js 15 (App Router)
- Vercel Postgres (Neon) for token storage
- Google Forms API for form hosting + response reading
- TypeScript
bun install
cp .env.example .env.local
# Fill in your env vars
bun devMIT