Skip to content
This repository has been archived by the owner on Jan 30, 2024. It is now read-only.

PostHog/squeak

Repository files navigation

image

Build a community around your product with Squeak! by PostHog.

Squeak! is a toolkit for fostering a community in-house. It helps make discussions, resources, and solutions more accessible to the right people.

Learn more at squeak.posthog.com and star us to follow along.

Want to try it without installing? There's a cloud version of Squeak! too.

Toolkit

Squeak! tools are built for React-based static sites, but many products work with existing docs, knowledge bases, or websites.

Product Description Progress
Q&A.js Add threaded discussions to any page of your docs or website Beta
Discussion Warehouse A repository to manage shared knowledge threads from Slack, Q&A.js, and other sources Beta
Import Slack Threads Liberate product-related discussions from Slack and make them discoverable by search engines Alpha
Auth 2.0 OAuth, social logins Summer 2022
Dynamic Open Graph Images A custom social media graphic for every webpage across your docs or website Summer 2022
Community Profiles Bios, badges, activity feed, leaderboards, lists/directories Summer 2022
Knowledge Repository Lightweight, optimized content platform for docs, articles, guides, blogs Summer 2022
Knowledge Search Searchable interface for Discussions, Knowledge Fall 2022
Page Builder MDX + Storybook mashup w/ collections, lists, menus Fall 2022
Dynamic Pages Personalized content for each visitor by IP, UTM codes, or CRM Winter 2022
Marketplace Allow community to make money from services for the platform Spring 2023

Docs

Visit the wiki for guides on:

  1. Embeddable widget (JavaScript, React)
  2. Admin portal
  3. Integrations
  4. Self-hosting
  5. API
  6. Local development

Links

About

Squeak! was created by PostHog out of a need to better support our own customers and move conversations out of our Slack community. Squeak! is open source under MIT.

Prisma

We use Prisma as our ORM. Prisma works by interpreting a schema file defined in prisma/schema.prisma and using a generated client. Prisma generates a strongly-typed client based on the schema file. The client is generated at runtime and not checked into version control. See the prisma docs about this. This means that the prisma client needs to be generated as part of any deployment process. As noted in the prisma docs, the prisma generate command is run as a postinstall hook when the prisma library is installed.

On deployment, the database needs to be migrated by running: npx prisma migrate deploy. See below for useful docs on production migrations:

Sentry

We use Sentry to capture errors, and we need to upload source maps to sentry and create a release in sentry. Currently this happens while building the docker image. Sentry automatically hooks into the yarn build process and uploads source maps and creates a release. This requires having a SENTRY_AUTH_TOKEN environment variable set to be picked up by the sentry-cli.

We handle this currently during docker builds via Github Actions. We pass in the SENTRY_AUTH_TOKEN as an build-arg to Docker from a github secret. See .github/docker-release.yml for that configuration.

Superjson

This project uses superjson to automatically handle serialization issues, primarily with BigInt, which we use for certain IDs.