Web deployment
Deploying Privatefolio on the web involves hosting the build output of the @privatefolio/frontend package.
Once you setup the project and its prerequisites, you can build the frontend.
yarn build# output dir: packages/frontend/buildDeploy
Section titled “Deploy”with serve
Section titled “with serve”npx serve -p 8080 -C packages/frontend/buildwith Cloudflare Pages
Section titled “with Cloudflare Pages”yarn wrangler pages deploy packages/frontend/build --project-name=privatefolioOfficial deployment
Section titled “Official deployment”We are currently deploying to Cloudflare Pages through a GitHub Actions workflow. This deployment system provides continuous deployment for all branches and pull requests, with Discord notifications for deployment status updates.
Production deployment URL: https://privatefolio.app
Preview deployments URLs: https://<deployment-id>.privatefolio-com.pages.dev
See latest deployments at:
github.com/privatefolio/privatefolio/deployments
Workflow file
Section titled “Workflow file”name: Publish web app
on: push: branches: ["*"] pull_request: branches: ["*"]
workflow_dispatch: # Allows you to run this workflow manually from the Actions tab
permissions: contents: read deployments: write
jobs: build-and-deploy: if: (!startsWith(github.ref_name, 'dependabot/')) && (github.head_ref == '' || !startsWith(github.head_ref, 'dependabot/')) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4
- name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22.x
- name: Cache yarn downloads id: cache uses: actions/cache@v4 with: path: ~/.cache/yarn/v6 key: yarn-cache-${{ runner.os }}-${{ hashFiles('./yarn.lock') }} restore-keys: yarn-cache-${{ runner.os }}-
- name: Cache node_modules (root) uses: actions/cache@v4 with: path: ./node_modules key: deps-root-${{ runner.os }}-${{ hashFiles('./yarn.lock') }} restore-keys: deps-root-${{ runner.os }}-
- name: Cache node_modules (packages) uses: actions/cache@v4 with: path: ./packages/**/node_modules key: deps-packages-${{ runner.os }}-${{ hashFiles('./yarn.lock') }} restore-keys: deps-packages-${{ runner.os }}-
- name: Setup Bun uses: oven-sh/setup-bun@v2
- name: Install dependencies run: yarn install --frozen-lockfile
- name: Build run: yarn build
- name: Publish to Cloudflare Pages id: publish uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: 16ff1fe0e50ed7ac57810a024341b0a3 command: pages deploy packages/frontend/build --project-name=privatefolio gitHubToken: ${{ secrets.GITHUB_TOKEN }}
- name: Notify Discord on success if: success() uses: sarisia/actions-status-discord@v1 with: webhook: ${{ secrets.DISCORD_DEPLOYMENTS_WEBHOOK }} status: "Success" title: "Publish web app" description: | **Branch**: `${{ github.ref_name }}` **Commit**: `${{ github.sha }}` color: 0x00FF00
- name: Notify Discord on failure if: failure() uses: sarisia/actions-status-discord@v1 with: webhook: ${{ secrets.DISCORD_DEPLOYMENTS_WEBHOOK }} status: "Failure" title: "Publish web app" description: | **Branch**: `${{ github.ref_name }}` **Commit**: `${{ github.sha }}` color: 0xFF0000