On PostQueen Cloud there is nothing to build: install the PostQueen extension from the Chrome Web Store and connect Skool as its channel page shows. This page is for a self-hosted PostQueen.
Before you start
How it works
- The Chrome build writes your domain and its subdomains into the extension twice: into the manifest’s
externally_connectablelist, which decides which pages can reach the extension at all, and into the extension’s own check of every message’s origin. It also grants the extension access to your backend address, which the daily refresh needs. A build for any domain other thanlocalhostdoes not answer pages onlocalhost. - When someone picks Skool in Add Channel, PostQueen shows a Browser Extension Notice. After I understand, continue, the page asks the extension with the ID in
EXTENSION_IDfor theclient_idandauth_tokencookies of skool.com, and PostQueen stores them encrypted. - From then on the extension sends fresh cookies to your backend once a day, whenever Chrome is running, so the connection stays alive.
Build the extension
1
Get the source
Clone the app repository and install the workspace at its root. The extension has no dependencies of its own, so the root install is what it builds with:
2
Build it for your domain
Build at the repository root, passing your instance’s two addresses:The build goes to
apps/extension/dist, and the same files zipped to apps/extension/extension.zip. Its manifest.json lists https://postqueen.example.com/* and https://*.postqueen.example.com/* under externally_connectable, and https://postqueen.example.com/* under host_permissions. Nothing in the source needs editing.Both addresses have to be absolute URLs, the same values your instance runs with. Without them, or with a relative backend such as /api, the build stops with an error instead of packing an extension that cannot reach your instance.3
Load it into Chrome
Open
chrome://extensions, turn on Developer mode, choose Load unpacked and pick the apps/extension/dist folder.4
Copy the extension ID
Chrome shows the ID under the extension’s name, a string of 32 letters. An unpacked extension’s ID comes from the folder it was loaded from: loading the same folder again keeps it, and loading a copy from another folder or another computer gives a new one.
Set the variables
Add the ID to your environment:EXTENSION_ID is one value for the whole instance, so every browser that connects Skool needs the build with that ID:
Recreate the app container so it reads the new values. A plain
docker restart or
docker compose restart keeps the old container and its old environment.
In the folder that holds docker-compose.yaml, recreate only the postqueen service:
docker compose down for a settings change: on
a host that runs other Compose services in the same project, it stops them too. On Kubernetes, see
Kubernetes with Helm.
Then open Channels, choose Add Channel, then Skool, and continue past the notice. The account appears in the Channels list.
For local development, pnpm run dev at the repository root also builds the extension, in watch mode, from the repository’s .env. That build uses the key in apps/extension/manifest.dev.json, which pins its ID to gclbjdbkakfndpofanknmccecjlmleah, and it is meant for PostQueen running on localhost.
Troubleshooting
Extension Not Found
Extension Not Found
The window says “The PostQueen browser extension is not installed. You need to install it before connecting this channel.” Either
EXTENSION_ID is empty on the instance, or no enabled extension in this browser trusts the page: the build is not loaded, it is turned off, it was built for another domain, or PostQueen is open over plain http on an address other than localhost.PostQueen browser extension is not installed or not reachable.
PostQueen browser extension is not installed or not reachable.
The page can reach an extension but not this one.
EXTENSION_ID is not the ID Chrome shows for the loaded build, or the build’s origin check refused the page because it was built with another FRONTEND_URL or PostQueen runs on a port other than 443. Fix the ID or rebuild, then recreate the container.Failed to communicate with the browser extension.
Failed to communicate with the browser extension.
The extension stopped answering mid-connect. Reload it on
chrome://extensions, reload PostQueen and try again.The Skool channel disconnects after a while
The Skool channel disconnects after a while
The daily cookie refresh only runs while Chrome is open with the extension, and the extension can only reach the backend address it was built with. Keep Chrome running, rebuild if
NEXT_PUBLIC_BACKEND_URL changed, and reconnect the channel.