Deployment

Richfolio runs as a GitHub Actions cron job — no server needed. Fork the repo, add secrets, and it runs automatically every morning.


Fork the Repo

If you haven’t already, fork richfolio to your own GitHub account. GitHub Actions workflows only run on your own repositories — forking gives you automated scheduling for daily briefs, intraday alerts, and weekly reports.


Enable Workflows

GitHub disables Actions on newly forked repos by default. Go to your fork → Actions tab → click “I understand my workflows, go ahead and enable them”.


Add Secrets & Variables

In your forked repo: SettingsSecrets and variablesActions. This is the deployment-side checklist of what goes where — for how to obtain each API key, see API Keys.

Item Tab Notes
RESEND_API_KEY Secrets Required
NEWS_API_KEY Secrets Optional
GEMINI_API_KEY Secrets Optional — AI provider (Google Gemini)
ANTHROPIC_API_KEY Secrets Optional — AI provider (Anthropic Claude). Set with Gemini for multi-AI mode
TELEGRAM_BOT_TOKEN Secrets Optional
TELEGRAM_CHAT_ID Secrets Optional
RECIPIENT_EMAIL Variables Required — visible for easy editing
CONFIG_JSON Variables Required — your portfolio JSON (format)
CLAUDE_MODEL Variables Optional — override Claude model (default: claude-sonnet-4-6)
AI_DETAILED_PROVIDER Variables Optional — force gemini or claude for STRONG BUY analysis page
TIME_ZONE Variables Optional — IANA timezone for date/time formatting in emails (e.g. Australia/Sydney, America/New_York, Europe/London). Default: UTC. Workflow maps it to Node’s native TZ env var

Why CONFIG_JSON is a variable, not a secret: Variables stay readable in the GitHub UI, so you can edit your holdings directly without re-pasting the whole JSON every time. The trade-off is that anyone with read access to the repo can see your allocations — fine for a private fork, something to consider if you ever go public.


Schedule

The workflow runs automatically:

  • Daily — every day at 10pm UTC (8am AEST)
  • Intraday — weekdays at 10am, 12pm, 2pm, 4pm AEST (alerts only when signals strengthen)
  • Weekly — every Sunday at 10pm UTC (Monday 8am AEST)

You can also trigger manually: repo → ActionsPortfolio MonitorRun workflow → choose daily, intraday, or weekly mode.

Changing the schedule or timezone
The default schedule is set for AEST (UTC+10). To change it, edit `.github/workflows/portfolio-monitor.yml` in your fork. The file contains three cron entries — one for each mode: ```yaml schedule: - cron: "0 22 * * *" # Daily at 10pm UTC (8am AEST) - cron: "0 0,2,4,6 * * 1-5" # Intraday checks (weekdays) - cron: "0 22 * * 0" # Weekly on Sunday 10pm UTC ``` GitHub Actions cron is **always in UTC**. To get your desired local time, convert to UTC first: | Your Local Time | UTC Cron | |-----------------|----------| | 8am AEST (UTC+10) | `0 22 * * *` (previous day) | | 8am EST (UTC-5) | `0 13 * * *` | | 8am PST (UTC-8) | `0 16 * * *` | | 8am GMT (UTC+0) | `0 8 * * *` | | 8am IST (UTC+5:30) | `0 2 * * *` (closest match) | | 9am JST (UTC+9) | `0 0 * * *` | | 8am CET (UTC+1) | `0 7 * * *` | **Tip:** Search "UTC time converter" to find the right cron value for your timezone. Only change the hour (`22` in `0 22 * * *`) — the rest controls minute, day, month, and weekday.

Updating Your Portfolio

When your holdings change, update the CONFIG_JSON variable on GitHub (Settings → Secrets and variables → Actions → Variables tab). The next scheduled run will use the updated data.


Pulling Upstream Updates

To get new features from the original repo:

git remote add upstream https://github.com/furic/richfolio.git
git fetch upstream
git merge upstream/main
git push origin main

Or use GitHub’s Sync fork button on your fork’s main page.


Richfolio — free, open-source portfolio monitoring. · Privacy Policy

This site uses Just the Docs, a documentation theme for Jekyll.