一键导入
digitize-pounce-scoresheet
Digitize scanned Pounce card game scoresheets into structured YAML format for Hugo static site integration with automated analysis
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Digitize scanned Pounce card game scoresheets into structured YAML format for Hugo static site integration with automated analysis
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Interact with the Fizzy kanban tool via its REST API. Use this skill whenever the user wants to read or modify anything in Fizzy — listing boards, finding or creating cards, moving cards between columns, closing cards, adding comments, checking activity, managing tags, or any other Fizzy operation. Trigger on requests like "show me my Fizzy boards", "create a card for X", "what's in the backlog?", "move card
Interact with a self-hosted Gitea instance via its REST API. Use this skill whenever the user wants to do anything with Gitea — creating or updating pull requests, checking PR status, listing branches, reading commit history, merging PRs, adding PR comments, or reading/writing wiki pages. Trigger on requests like "update the PR description", "what PRs are open?", "merge the PR", "what branches exist?", "add a comment to the PR", "what's the latest commit on main?", "add a wiki page for X", "what does the wiki say about Y", "update the wiki", or any time the user mentions a PR number, a repo wiki, or asks about repo state on Gitea.
Interact with a self-hosted Grist instance via its REST API. Use this skill whenever the user wants to read or modify data in Grist — listing orgs/workspaces/docs, finding tables and columns, querying or filtering records, adding/updating/deleting rows, running read-only SQL against a doc, or managing table schema. Trigger on requests like "what's in my Grist doc", "add a row to the Inventory table", "update the status column for record 12", "run a query against my budget doc", "what tables are in this workspace", or any mention of Grist docs, tables, or records.
Override Claude Code's built-in WebSearch tool to route web searches through a self-hosted SearXNG instance via curl instead
Add a new LXC guest to the homelab across both terraform and ansible repos
Create, increment (bump), and read counters using the Bumpkit API at bumpkit.tphummel.workers.dev. Use when you need a persistent named counter that can be incremented and queried by ID.
| name | digitize-pounce-scoresheet |
| description | Digitize scanned Pounce card game scoresheets into structured YAML format for Hugo static site integration with automated analysis |
This skill converts scanned Pounce scoresheet images into structured YAML data for use in a Hugo static site with automated score analysis.
Input: One or more scanned scoresheet images Output: Hugo markdown file with YAML frontmatter containing session data and inline shortcode for analysis
Pounce is a multi-player competitive solitaire card game where:
Scoresheets typically contain:
Use the Read tool to view scanned scoresheet images. Carefully examine:
Identify:
pile: Number of cards in pounce pile (default: 13)bonus: Points awarded to winner (default: 5)For each hand (individual game):
YYYY-MM-DDTHH:MM:SS-HHMM (ISO 8601 with timezone)name: Player name (lowercase)score: Raw score for the hand (integer, can be negative)win: true (only include for winning player)The winner of each hand is:
win: trueCreate a Hugo markdown file with:
---
title: "YYYY Event Name Pounce"
date: YYYY-MM-DDTHH:MM:SS-HH:MM
draft: false
toc: false
tags:
- pounce
- cards
data:
sessions:
- session: "YYYY-MM-DD"
ruleset:
pile: 13
bonus: 5
hands:
- ts: "YYYY-MM-DDTHH:MM:SS-HHMM"
players:
- name: "player1"
score: 10
- name: "player2"
score: 15
win: true
- name: "player3"
score: -5
- ts: "YYYY-MM-DDTHH:MM:SS-HHMM"
players:
- name: "player1"
score: 8
win: true
- name: "player2"
score: -2
- name: "player3"
score: 3
---
{{< pounce.inline >}}
{{ $sessions := .Page.Params.data.sessions }}
<p>Sessions: {{ len $sessions }}</p>
<table>
<tr>
<th>#</th>
<th>Start</th>
<th>End</th>
<th>Hands</th>
<th>Players</th>
<th>Player-Hands</th>
<th>Rules</th>
</tr>
{{ range $i, $session := sort $sessions "session" }}
{{ $distinctPlayers := dict }}
{{ $handPlayerCount := 0 }}
{{ $startTs := time "2199-01-01T16:35:00-0700" }}
{{ $endTs := time "1899-01-01T16:35:00-0700" }}
{{ range $hand := $session.hands }}
{{ $handPlayerCount = add $handPlayerCount (len $hand.players) }}
{{ $handTs := time $hand.ts }}
{{ if lt $handTs $startTs }}
{{ $startTs = $handTs }}
{{ end }}
{{ if gt $handTs $endTs }}
{{ $endTs = $handTs }}
{{ end }}
{{ range $handPlayer := $hand.players }}
{{ $distinctPlayers = merge $distinctPlayers (dict $handPlayer.name true) }}
{{ end }}
{{ end }}
<tr>
<td>{{ add $i 1 }}</td>
<td>{{ $startTs | time.Format "01/02 15:04" }}</td>
<td>{{ $endTs | time.Format "01/02 15:04" }}</td>
<td>{{ len $session.hands }}</td>
<td>{{ len $distinctPlayers }}</td>
<td>{{ $handPlayerCount }}</td>
<td>{{ $session.ruleset.pile }}+{{ $session.ruleset.bonus }}</td>
</tr>
{{ end }}
</table>
{{ $allHands := slice }}
{{ range $session := $sessions }}
{{ range $hand := $session.hands }}
{{ $hand = merge $hand (dict "ruleset" $session.ruleset) }}
{{ $allHands = $allHands | append $hand }}
{{ end }}
{{ end }}
<p>Hands: {{ len $allHands }}</p>
{{ $perPlayer := dict "handCount" 0 "winCount" 0 "scoreSum" 0 }}
{{ $scoreboardByPlayer := dict }}
{{ range $hand := $allHands }}
{{ $ruleset := $hand.ruleset }}
{{ range $handPlayer := $hand.players }}
{{ if not (isset $scoreboardByPlayer $handPlayer.name) }}
{{ $scoreboardByPlayer = merge $scoreboardByPlayer (dict $handPlayer.name $perPlayer)}}
{{ end }}
{{ $before := index $scoreboardByPlayer $handPlayer.name }}
{{ $handPlayerScore := add $handPlayer.score (cond ($handPlayer.win | default false) $ruleset.bonus 0) }}
{{ $after := merge $before (dict "handCount" (add (index $before "handCount") 1) "winCount" (add (index $before "winCount") (cond ($handPlayer.win | default false) 1 0)) "scoreSum" (add (index $before "scoreSum") $handPlayerScore) ) }}
{{ $scoreboardByPlayer = merge $scoreboardByPlayer (dict $handPlayer.name $after) }}
{{ end }}
{{ end }}
<table>
<tr>
<th>Rank</th>
<th>Name</th>
<th>Score Avg ↓</th>
<th>Wins</th>
</tr>
{{ $sortable := slice }}
{{ range $name, $stats := $scoreboardByPlayer }}
{{ $scoreAvg := div $stats.scoreSum (float $stats.handCount) }}
{{ $winAvg := div $stats.winCount (float $stats.handCount) }}
{{ $row := merge $stats (dict "name" $name "scoreAvg" $scoreAvg "winAvg" $winAvg) }}
{{ $sortable = append $sortable (slice $row)}}
{{ end }}
{{ range $i, $row := sort $sortable "scoreAvg" "desc" }}
<tr>
<td>{{ add $i 1 }}</td>
<td>{{ .name | title }}</td>
<td>
{{ lang.FormatNumber 3 .scoreAvg }} ({{ .scoreSum }} / {{ .handCount }})
</td>
<td>
{{ .winCount }}
</td>
</tr>
{{ end }}
</table>
{{< /pounce.inline >}}
User provides: thanksgiving-2022-pounce-scoresheet.jpg
Processing:
Output: Create 2022-thanksgiving-pounce.md with complete YAML frontmatter and shortcode
Before finalizing output:
win: trueIf scoresheet contains games from different dates/events:
sessions arrayIf times are not recorded:
Common notations on scoresheets:
Normalize names to lowercase:
The included shortcode calculates:
(sum of all hand scores + win bonuses) / total hands playedThe shortcode automatically:
YYYY-event-name-pounce.md (lowercase, hyphenated)draft: false for published contentpounce and cards tags for categorization