This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

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.

ProductDescriptionProgress
Q&A.jsAdd threaded discussions to any page of your docs or websiteBeta
Discussion WarehouseA repository to manage shared knowledge threads from Slack, Q&A.js, and other sourcesBeta
Import Slack ThreadsLiberate product-related discussions from Slack and make them discoverable by search enginesAlpha
Auth 2.0OAuth, social loginsSummer 2022
Dynamic Open Graph ImagesA custom social media graphic for every webpage across your docs or websiteSummer 2022
Community ProfilesBios, badges, activity feed, leaderboards, lists/directoriesSummer 2022
Knowledge RepositoryLightweight, optimized content platform for docs, articles, guides, blogsSummer 2022
Knowledge SearchSearchable interface for Discussions, KnowledgeFall 2022
Page BuilderMDX + Storybook mashup w/ collections, lists, menusFall 2022
Dynamic PagesPersonalized content for each visitor by IP, UTM codes, or CRMWinter 2022
MarketplaceAllow community to make money from services for the platformSpring 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.

About

A Q&A widget for your docs

Topics

Resources

Code of conduct

Security policy

Stars

184 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages