Set up Fitto

About 15 minutes. You'll set a few secrets with the GitHub CLI from your own terminal. Never paste secrets into chats, issues or commits. The full guide, with every option, is SETUP.md.

1. Profile

Copy profile.example.yaml to profile.yaml (git-ignored), fill in your skills, locations, salary floor, dealbreakers and CV text, then store it as a secret:

gh secret set FITTO_PROFILE < profile.yaml

2. State key

This encrypts everything Fitto remembers. Keep a copy in your password manager.

pnpm fitto keygen | gh secret set FITTO_STATE_KEY

3. Email

Set FITTO_EMAIL_TO, then either SMTP (for example a Gmail app password) or a Resend key:

gh secret set FITTO_EMAIL_TO
gh secret set SMTP_HOST --body smtp.gmail.com
gh secret set SMTP_PORT --body 465
gh secret set SMTP_USER
gh secret set SMTP_PASS          # Gmail app password
# or
gh secret set RESEND_API_KEY

4. Your encrypted job list on this site

Pick a long passphrase you can type or keep in a password manager (at least 12 characters; a generated one is best). The workflow encrypts your matches with it, and only the ciphertext is published.

pnpm fitto keygen | gh secret set FITTO_SITE_PASSPHRASE   # or type your own when prompted

Then open My jobs and enter the same passphrase. Tick "Remember on this device" only on devices you trust. Changing the passphrase takes effect on the next run.

5. Send jobs to The Next Chapter (optional)

Fitto never sends anything on its own. On My jobs, tick the jobs you want and press Send selected to The Next Chapter. You'll be asked to confirm the count once. Pick a route under Settings:

RouteWhat you needHow it works
GitHub Action (default) gh secret set TNC_API_TOKEN in the repo, plus a fine-grained GitHub token pasted into the site The site starts one fitto-tnc run with the opaque ids you selected. The workflow submits the jobs one by one and records Sent, Accepted or Failed. The site shows the result after it refreshes.
Direct API Your The Next Chapter token pasted into the site Your browser posts each job URL straight to The Next Chapter. This currently doesn't work, because The Next Chapter doesn't allow browser requests (CORS) yet. The site detects this and offers a one-click switch to the GitHub Action route.

Create the fine-grained GitHub token

  1. Open github.com/settings/personal-access-tokens/new.
  2. Name it "Fitto site" and give it a short expiry (for example 90 days).
  3. Under Repository access, choose Only select repositories → adamsdenniskariuki/fitto.
  4. Under Repository permissions, set Actions: Read and write and leave everything else at "No access". (Metadata: Read-only is added automatically.)
  5. Generate it, then paste it into My jobs → Settings. It is stored in this browser only and sent only to api.github.com.

With that permission, the token can start or cancel workflow runs in the fitto repository and nothing else. Workflow inputs on a public repository are public, so the site sends only opaque job ids, never URLs or titles. Revoke the token at any time from the same settings page.

6. Run it

gh workflow run fitto.yml                   # daily run now (otherwise every morning)
gh workflow run fitto.yml -f dry_run=true   # dry run: nothing is sent or saved