- uses: ramazankara/pocketstack@v1
with:
compose-file: compose.yaml
A preview for every Compose PR.
Add one GitHub Action. PocketStack checks each service, packages browser-compatible stacks, and deploys a static Cloudflare Pages preview.
Browser-compatible only. Unsupported containers block deployment and stay explicit.
Compatibility report
Compatible ships.
Everything else explains itself.
PocketStack never treats an arbitrary container as browser-ready. Every service receives an adapter, a warning, or a blocking reason before anything deploys.
Ready to deploy
Deployment blocked
Proof, not promises
Three apps. Three browser-native stacks.
Each example starts as Docker Compose, passes the same compatibility gate, and becomes a static preview.
01 / Commerce
Pocket Supply storefront
Searchable catalog, fixture-backed API data, cart state, and a complete checkout interaction.
02 / Collaboration
Northstar sprint board
Create, filter, and move issues across a working planning board backed by browser-native Postgres.
03 / Analytics
Clearview analytics
Interactive date ranges, SVG charts, tooltips, and a sortable performance table from static files.
One workflow file
Add it once. Every eligible PR gets a URL.
Keep your existing Compose file. The Action checks out the pull request, reports compatibility, and deploys only generated static files.
name: PocketStack Preview
on:
pull_request:
types: [opened, synchronize, reopened, closed]
permissions:
contents: read
pull-requests: write
jobs:
preview:
runs-on: ubuntu-latest
steps:
- uses: ramazankara/pocketstack@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
compose-file: compose.yaml
cloudflare-project: my-app-previews
cloudflare-account-id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
Fork pull requests stay secret-safe
The Action reports compatibility but skips deployment and comments when repository secrets are unavailable.
Some adapters require host headers
Frontend and WASI previews need COOP/COEP. Cloudflare Pages receives the generated _headers file.