wyattowalsh docs
Getting StartedFork & Repurpose

Fork & Repurpose

How to fork this repo and make it your own GitHub profile README in under 10 minutes.

This repo is designed to be forked. Every personal detail lives in config.yaml — change that file and you have your own profile README with generative art, word clouds, SVG cards, and automated updates.

Quick start

1. Fork and clone
# Fork via GitHub UI, then:
git clone https://github.com/YOUR_USERNAME/YOUR_USERNAME.git
cd YOUR_USERNAME
2. Install
uv sync --all-groups
3. Generate your config
uv run readme config generate-default --path config.yaml
4. Edit config.yaml with your details
# Open config.yaml in your editor and replace all placeholder values
5. Generate everything
uv run readme generate banner --config-path config.yaml
uv run readme generate qr --config-path config.yaml
uv run readme generate readme --config-path config.yaml

What to change in config.yaml

The generated config.yaml contains every setting. Here are the fields you must customize:

config.yaml
banner_settings:
  title: "Your Name"           # Your name or handle
  subtitle: "Your Tagline"     # What you do

Contact / QR code

config.yaml
v_card_data:
  displayname: "Your Name"
  n_givenname: "First"
  n_familyname: "Last"
  email_internet: "you@example.com"
  tel_work_voice: ""           # Optional — leave empty to omit
  url_work:
    - url: "https://yoursite.com"
    - url: "https://linkedin.com/in/you"
    - url: "https://github.com/you"
config.yaml
readme_sections_settings:
  social_links:
    - url: "https://yoursite.com"
      platform: website
      label: "yoursite.com"
    - url: "https://linkedin.com/in/you"
      platform: linkedin
      label: LinkedIn
    - url: "https://github.com/you"
      platform: github
      label: GitHub
  featured_repos:
    - full_name: "you/your-best-project"
    - full_name: "you/another-project"
  blog_feed_url: "https://yoursite.com/feed.xml"  # Or "" to disable

No blog?

Set blog_feed_url to an empty string and the blog section will be skipped entirely.

GitHub workflow setup

The CI workflow at .github/workflows/profile-updater.yml runs on a schedule to regenerate your README and metrics assets.

For the canonical wyattowalsh/wyattowalsh repo, configure the full metrics secret set so the rich cards regenerate instead of degrading to fallback sections or preserving the previous asset. Forks can start with the built-in token and add the richer secrets later.

SecretRequiredPurpose
GITHUB_TOKENYes (automatic)Built-in token — no setup needed
METRICS_TOKENCanonical repo: yes / forks: recommendedClassic GitHub PAT for repository-aware metrics (read:user, repo, read:org; add gist if you want gist-aware surfaces later)
SPOTIFY_CLIENT_IDCanonical repo: optional / forks: optionalSpotify OAuth client ID for the repo-owned metrics-music.svg supplemental card
SPOTIFY_CLIENT_SECRETCanonical repo: optional / forks: optionalSpotify OAuth client secret for the repo-owned metrics-music.svg supplemental card
SPOTIFY_REFRESH_TOKENCanonical repo: optional / forks: optionalSpotify OAuth refresh token for the repo-owned metrics-music.svg supplemental card. Mint it locally with uv run readme auth spotify-refresh-token, then store it as a repo secret.
X_API_KEYCanonical repo: optional / forks: optionalX API key for the repo-owned metrics-posts.svg supplemental card via OAuth 1.0a user-context
X_API_KEY_SECRETCanonical repo: optional / forks: optionalX API key secret for the repo-owned metrics-posts.svg supplemental card
X_ACCESS_TOKENCanonical repo: optional / forks: optionalX access token for the repo-owned metrics-posts.svg supplemental card
X_ACCESS_TOKEN_SECRETCanonical repo: optional / forks: optionalX access token secret for the repo-owned metrics-posts.svg supplemental card
WAKATIME_API_KEYOptionalWakaTime coding stats

The workflow uses github.repository_owner dynamically, so no username edits are needed in the workflow file itself.

Metrics safety net

The metrics job now backs up the current SVGs, validates every render, rejects placeholder/error payloads, and restores the last valid asset before committing. That recovery path is a safety net—not the intended steady state for the canonical repo.

Blog feed URL

If you have a blog, update the feed URL in the workflow file at .github/workflows/profile-updater.yml (search for feed_list). This is the one place outside config.yaml where a URL is hardcoded.

GitHub community files

These files under .github/ reference the original author's contact info. Update them for your fork:

FileWhat to change
CONTRIBUTING.mdRepository URL, contact email
SECURITY.mdVulnerability report email
CODE_OF_CONDUCT.mdEnforcement contact email
FUNDING.ymlYour GitHub Sponsors username (or delete)
ISSUE_TEMPLATE/config.ymlDocumentation URLs

What you get for free

Everything below works automatically once config.yaml is set up:

  • SVG banner with Lorenz attractor animation
  • QR code with embedded vCard
  • Word clouds from your starred repos (topics + languages)
  • Featured project cards with live star counts and descriptions
  • Blog post cards from your RSS feed
  • Contact/social cards with platform icons
  • Living artworks — 4 generative art pieces driven by your GitHub activity
  • Metaheuristic word cloud animation — 25 optimization algorithms
  • Automated daily updates via GitHub Actions

Customization levels

LevelEffortWhat you get
Just fork5 minChange config.yaml, push, done
Customize art30 minTweak colors/parameters in scripts/art/
Add generatorsHoursWrite new SvgWordCloudEngine subclasses or art scripts
New card typesHoursExtend scripts/readme_svg.py with new card renderers

Repo structure at a glance

├── config.yaml              # ← All your personal config lives here
├── README.md                # Generated output — don't edit by hand
├── scripts/
│   ├── word_clouds/         # Word cloud subpackage (5 renderers + 25 solvers)
│   ├── art/                 # Generative art (ink garden, topography, cosmic, spiral)
│   ├── readme_sections.py   # README assembly
│   ├── readme_svg.py        # SVG card renderers
│   ├── banner.py            # Lorenz attractor banner
│   └── qr.py                # Artistic QR code
├── .github/
│   ├── workflows/           # CI/CD automation
│   └── assets/              # Generated images and data
└── docs/                    # This documentation site (Fumadocs)