Files
asepharyana/docs/superpowers/specs/2026-07-03-profile-readme-design.md
T

8.0 KiB

GitHub Profile README — Ultimate Dynamic Design

Overview

Create a highly dynamic and visually stunning GitHub profile README for asepharyana/asepharyana. The README will auto-update via GitHub Actions, featuring AI-generated activity summaries, contribution visualizations, and comprehensive GitHub metrics.

Architecture

Repository Structure

asepharyana/
├── .github/
│   └── workflows/
│       ├── ai-activity.yml          # LLM-powered activity log (cron: every 6h)
│       └── snake.yml                # Contribution snake SVG (cron: daily)
├── scripts/
│   └── generate-ai-blog.js          # Fetch activity → call LLM → update README
├── assets/
│   └── generated/                   # Auto-generated SVGs (checked into git — referenced by README; seed with .gitkeep)
├── README.md                        # The main profile README
└── docs/
    └── superpowers/specs/
        └── 2026-07-03-profile-readme-design.md

Component Breakdown

Component File Responsibility
README Shell README.md Static layout with marker comments for dynamic content injection
AI Activity scripts/generate-ai-blog.js Fetch 7-day GitHub activity → format → send to LLM → write result
Snake Gen .github/workflows/snake.yml Uses Platane/snk action to render contribution grid as snake
Stats Cards Inline in README SVG cards via github-readme-stats API (queried at view time)

User Configuration

  • GitHub username: asepharyana
  • LinkedIn: https://www.linkedin.com/in/asep-haryana-saputra-2014a5294/
  • Website: https://asepharyana.my.id/
  • AI LLM API: sk-5dd268d88adb496b-818beb-6bc7498e @ https://omniroute.imrnes.team/v1 model text
  • Role: Mahasiswa | AI Enthusiast

README Layout & Section Design

1. Header — Hero Section

  • Custom banner (generated SVG or GitHub banner)
  • Animated typing effect via markdown-compatible approach (JavaScript/CSS not available — use GIF from readme-typing-svg or similar SVG service)
  • Name, tagline, role badges
  • Visitor counter badge

2. Tech Stack Badges

  • Grouped by category: Languages, AI/ML, Tools
  • Shields.io badges with flat design
  • Dark mode compatible

3. GitHub Stats Dashboard

  • 3-column layout using HTML tables/grid in markdown:
    • GitHub Stats card (github-readme-stats)
    • GitHub Streak card (github-readme-streak-stats)
    • Top Languages card (github-readme-stats)
  • GitHub Trophies row below stats (github-profile-trophy)

4. AI Activity Log (Dynamic via Actions)

  • Section markers: <!--AI_ACTIVITY_START--> / <!--AI_ACTIVITY_END-->
  • Replaced every 6 hours by generate-ai-blog.js
  • Content: 2-3 sentences in casual Indonesian with emojis
  • Describes: recent commits, new repos, merged PRs, opened issues
  • Fallback: "Belum ada aktivitas GitHub dalam 7 hari terakhir. Pantau terus! 🚀"

5. Contribution Snake

  • Animated SVG showing contribution grid as a snake eating squares
  • Dark mode variant
  • Generated daily via snake.yml
  • Social links row: LinkedIn, Website, Email (if public)
  • "Visitors" count badge
  • Fun fact section

AI Activity Generator — Detailed Spec

Workflow: .github/workflows/ai-activity.yml

name: AI Activity Log
on:
  schedule:
    - cron: "0 */6 * * *"   # every 6 hours at :00
  push:
    branches: [main]
  workflow_dispatch:         # manual trigger

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Generate AI activity log
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          AI_LLM_API_KEY: ${{ secrets.AI_LLM_API_KEY }}
          AI_LLM_BASE_URL: ${{ secrets.AI_LLM_BASE_URL }}
          AI_LLM_MODEL: ${{ secrets.AI_LLM_MODEL }}
        run: node scripts/generate-ai-blog.js

      - name: Commit README changes
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git add README.md
          git diff --staged --quiet || git commit -m "chore: update AI activity log [skip ci]"
          git push

Script: scripts/generate-ai-blog.js

Input:

  1. GitHub Events API — /users/{username}/events?per_page=100
  2. Filter: only events from last 7 days
  3. Normalize to structured format:
    • PushEvent → {type: "commit", repo, branch, message_preview}
    • CreateEvent → {type: "create", repo, ref_type: "repo"|"branch"}
    • PullRequestEvent → {type: "pr", repo, action: "opened"|"merged"|"closed"}
    • IssuesEvent → {type: "issue", repo, action, title}
    • WatchEvent → {type: "star", repo}
    • ForkEvent → {type: "fork", repo}
  4. Deduplicate: group same repo + same type

LLM Call:

POST {base_url}/chat/completions
Authorization: Bearer {api_key}

{
  "model": "{model}",
  "messages": [
    {
      "role": "user",
      "content": "Buat summary aktivitas GitHub dalam bahasa Indonesia kasual, maksimal 3 kalimat, pakai emoji. Jangan pake format list. Langsung kontennya aja:\n\n{formatted_activity}"
    }
  ],
  "max_tokens": 300,
  "temperature": 0.7
}

Output: Replace content between <!--AI_ACTIVITY_START--> and <!--AI_ACTIVITY_END--> in README.md.

Error Handling:

  • If GitHub API fails (no token, rate limit): skip block, keep previous content
  • If LLM API fails (timeout, bad response, auth error): use fallback text
  • If no activity in 7 days: fallback text
  • If README markers not found: log error, exit 0 (don't fail action)

GitHub Actions — All Workflows

Snake Contribution

name: Generate Snake
on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Platane/snk@v3
        with:
          github_user_name: asepharyana
          outputs: |
            assets/generated/snake.svg?palette=github-dark
            assets/generated/snake-light.svg?palette=github-light
      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: "chore: update contribution snake [skip ci]"

Note: GitHub stats cards (github-readme-stats, github-readme-streak-stats, github-profile-trophy) load dynamically at view time via <img> URLs — no Action needed. They're not committed files.

Error Handling & Resilience

Failure Mode Detection Recovery
LLM API down HTTP error / timeout Keep previous AI log content, log warning
GitHub API rate limited 403/429 response Wait & retry once, then skip
Snake generation fails Action exit code Previous snake SVG stays cached
README edit conflict git push rejected Retry on next cron trigger
No events in 7 days Empty filtered data Write fallback "No recent activity" message
Missing section markers Script can't find delimiters Append section, mark as degraded
API key missing from secrets Empty env var Graceful skip with Action annotation

Commit Strategy

  • All auto-commits use [skip ci] suffix to prevent infinite Action loops
  • Author: github-actions[bot]
  • Human edits to README only via direct push — next Action run won't overwrite marker-delimited sections that have changed since last fetch (we always re-fetch and re-write between markers)
  • The entire <!--AI_ACTIVITY_START-->...</AI_ACTIVITY_END--> block is owned by the script — any human edits inside it will be overwritten on next run

Success Criteria

  • README renders with all sections visible on profile
  • AI Activity section updates autonomously every 6 hours
  • Snake animation appears and animates on profile
  • Stats cards show accurate GitHub data
  • All social links point to correct URLs
  • Dark mode renders correctly (no invisible text/images)
  • All error states produce graceful fallbacks visible to viewers
  • No actions fail silently — failures are logged and non-fatal