Skip to content

Gist-based personalization config #3

@danielbodnar

Description

@danielbodnar

Summary

Allow users to personalize their profiles.sh profile by creating a profiles-sh.json gist.

Details

Users create a public gist named profiles-sh.json with preferences:

{
  "featured_repos": ["repo-a", "repo-b"],
  "featured_topics": ["rust", "nushell"],
  "hidden_categories": ["tinkerer"],
  "theme": "dark",
  "tagline_overrides": {
    "systems": "I write kernels for fun."
  }
}

The app fetches and applies this config on profile load:

  1. On profile request, check if user has a profiles-sh.json gist via GitHub API
  2. Cache the gist content in KV with a 1-hour TTL
  3. Apply overrides to the generated profile (featured repos sort to top, hidden categories are removed, custom taglines replace defaults)
  4. Store merged config in the customizations D1 table

Acceptance Criteria

  • Fetch gist by convention name profiles-sh.json
  • Cache gist content in KV (1h TTL)
  • Apply featured_repos — pin repos to top of projects section
  • Apply featured_topics — boost topic scores in domain scoring
  • Apply hidden_categories — remove personas from display
  • Apply tagline_overrides — replace persona taglines
  • Graceful fallback if no gist exists (no error, use defaults)
  • Store resolved config in customizations table

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions