ccusage-ui 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +113 -0
- package/README.md +43 -0
- package/package.json +3 -2
- package/public/index.html +20 -3
- package/public/share/bronze.html +2 -2
- package/public/share/card-bronze.html +26 -3
- package/public/share/card-challenger.html +36 -81
- package/public/share/card-diamond.html +26 -3
- package/public/share/card-emerald.html +26 -3
- package/public/share/card-gold.html +26 -3
- package/public/share/card-grandmaster.html +26 -3
- package/public/share/card-iron.html +27 -4
- package/public/share/card-master.html +26 -3
- package/public/share/card-platinum.html +26 -3
- package/public/share/card-silver.html +26 -3
- package/public/share/challenger.html +2 -2
- package/public/share/diamond.html +2 -2
- package/public/share/emerald.html +2 -2
- package/public/share/gold.html +2 -2
- package/public/share/grandmaster.html +2 -2
- package/public/share/icons/bronze.png +0 -0
- package/public/share/icons/challenger.png +0 -0
- package/public/share/icons/diamond.png +0 -0
- package/public/share/icons/emerald.png +0 -0
- package/public/share/icons/gold.png +0 -0
- package/public/share/icons/grandmaster.png +0 -0
- package/public/share/icons/iron.png +0 -0
- package/public/share/icons/master.png +0 -0
- package/public/share/icons/platinum.png +0 -0
- package/public/share/icons/silver.png +0 -0
- package/public/share/images/Gemini_Generated_Image_fj59jyfj59jyfj59.jpeg +0 -0
- package/public/share/images/card-bronze.png +0 -0
- package/public/share/images/card-challenger.png +0 -0
- package/public/share/images/card-diamond.png +0 -0
- package/public/share/images/card-emerald.png +0 -0
- package/public/share/images/card-gold.png +0 -0
- package/public/share/images/card-grandmaster.png +0 -0
- package/public/share/images/card-iron.png +0 -0
- package/public/share/images/card-master.png +0 -0
- package/public/share/images/card-platinum.png +0 -0
- package/public/share/images/card-silver.png +0 -0
- package/public/share/iron.html +2 -2
- package/public/share/master.html +2 -2
- package/public/share/platinum.html +2 -2
- package/public/share/silver.html +2 -2
- package/scripts/capture-card.js +25 -0
- package/scripts/extract-tier-icons.js +185 -0
- package/scripts/generate-cards.js +260 -0
- package/scripts/process-emerald.js +55 -0
- package/public/share/images/bronze.png +0 -0
- package/public/share/images/challenger.png +0 -0
- package/public/share/images/diamond.png +0 -0
- package/public/share/images/emerald.png +0 -0
- package/public/share/images/gold.png +0 -0
- package/public/share/images/grandmaster.png +0 -0
- package/public/share/images/iron.png +0 -0
- package/public/share/images/master.png +0 -0
- package/public/share/images/platinum.png +0 -0
- package/public/share/images/silver.png +0 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
Context information for Claude when working on this project.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
A UI project for visualizing Claude Code usage with a LoL-style tier system.
|
|
8
|
+
|
|
9
|
+
## Tier Card System
|
|
10
|
+
|
|
11
|
+
### Card Generation Script
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Generate all tier card HTML files
|
|
15
|
+
node scripts/generate-cards.js
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Modify the `TIERS` array in [scripts/generate-cards.js](scripts/generate-cards.js) to regenerate all cards at once.
|
|
19
|
+
|
|
20
|
+
### Icon Extraction Script
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Extract individual icons from tier icon image (with transparent background)
|
|
24
|
+
node scripts/extract-tier-icons.js
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- Input: Source image in `public/share/images/` folder (5x2 grid)
|
|
28
|
+
- Output: Individual PNG files in `public/share/icons/`
|
|
29
|
+
- Magenta (#FF00FF) background is removed (chroma key)
|
|
30
|
+
- Erosion algorithm removes masking artifacts
|
|
31
|
+
|
|
32
|
+
### Tier Order (Highest to Lowest)
|
|
33
|
+
|
|
34
|
+
1. **Challenger** - Top 0.001%, 1.5B+ tokens/month
|
|
35
|
+
2. **Grandmaster** - Top 0.01%, 1B+ tokens/month
|
|
36
|
+
3. **Master** - Top 0.1%, 500M+ tokens/month
|
|
37
|
+
4. **Diamond** - Top 1%, 300M+ tokens/month
|
|
38
|
+
5. **Emerald** - Top 5%, 100M+ tokens/month
|
|
39
|
+
6. **Platinum** - Top 10%, 50M+ tokens/month
|
|
40
|
+
7. **Gold** - Top 20%, 30M+ tokens/month
|
|
41
|
+
8. **Silver** - Top 40%, 10M+ tokens/month
|
|
42
|
+
9. **Bronze** - Top 60%, 5M+ tokens/month
|
|
43
|
+
10. **Iron** - Starter, <5M tokens/month
|
|
44
|
+
|
|
45
|
+
### Card Structure
|
|
46
|
+
|
|
47
|
+
- Size: 1200x630px (OG image standard)
|
|
48
|
+
- Right side: 280px big-icon with glow effect
|
|
49
|
+
- Left side: Tier name, description, token usage, ranking
|
|
50
|
+
|
|
51
|
+
### How to Replace Icons
|
|
52
|
+
|
|
53
|
+
Single 5x2 grid image with mixed chroma key backgrounds:
|
|
54
|
+
- **Green (#00FF00)**: Challenger, Grandmaster, Master, Gold, Silver, Bronze, Iron
|
|
55
|
+
- **Magenta (#FF00FF)**: Diamond, Emerald, Platinum (cyan/green-colored icons)
|
|
56
|
+
|
|
57
|
+
#### Gemini Prompt
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Create a 5x2 grid of League of Legends style tier icons.
|
|
61
|
+
Image aspect ratio: 5:2 (e.g., 2500x1000px or similar)
|
|
62
|
+
Each cell should be square and contain one icon, clearly separated with no effects bleeding between cells.
|
|
63
|
+
|
|
64
|
+
IMPORTANT - Background colors per cell (for chroma key extraction):
|
|
65
|
+
- Green (#00FF00): Challenger, Grandmaster, Master, Gold, Silver, Bronze, Iron
|
|
66
|
+
- Magenta (#FF00FF): Diamond, Emerald, Platinum (these have cyan/green colors, so use magenta background)
|
|
67
|
+
|
|
68
|
+
CRITICAL - DO NOT use these colors in the icons themselves:
|
|
69
|
+
- Icons with green background: DO NOT use pure green (#00FF00) or similar bright greens in the icon
|
|
70
|
+
- Icons with magenta background: DO NOT use pure magenta (#FF00FF) or similar magentas in the icon
|
|
71
|
+
- These colors are reserved for background removal (chroma key)
|
|
72
|
+
|
|
73
|
+
Grid layout (left to right):
|
|
74
|
+
- Row 1: Challenger(green bg), Grandmaster(green bg), Master(green bg), Diamond(magenta bg), Emerald(magenta bg)
|
|
75
|
+
- Row 2: Platinum(magenta bg), Gold(green bg), Silver(green bg), Bronze(green bg), Iron(green bg)
|
|
76
|
+
|
|
77
|
+
Icon descriptions (G=green bg, M=magenta bg):
|
|
78
|
+
1. Challenger (G) - Golden winged crown emblem with red gems, most ornate
|
|
79
|
+
2. Grandmaster (G) - Red/orange flaming emblem with golden wings
|
|
80
|
+
3. Master (G) - Crimson red shield emblem with flame accents
|
|
81
|
+
4. Diamond (M) - Cyan/light blue crystalline shield emblem
|
|
82
|
+
5. Emerald (M) - Green gemstone shield emblem with facets
|
|
83
|
+
6. Platinum (M) - Silver-white metallic shield emblem with teal accents
|
|
84
|
+
7. Gold (G) - Golden shield emblem with warm yellow glow
|
|
85
|
+
8. Silver (G) - Silver metallic shield emblem with cool gray tones
|
|
86
|
+
9. Bronze (G) - Bronze/copper shield emblem with warm brown tones
|
|
87
|
+
10. Iron (G) - Dark gray iron shield emblem, simplest design
|
|
88
|
+
|
|
89
|
+
Icon style: metallic shields with gemstones, fantasy game aesthetic, detailed 3D rendering.
|
|
90
|
+
All icons should be shield/emblem shaped for visual consistency (like League of Legends rank badges).
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Steps
|
|
94
|
+
|
|
95
|
+
1. Generate image using the prompt above
|
|
96
|
+
2. Save to `public/share/images/`
|
|
97
|
+
3. Update `inputPath` in `scripts/extract-tier-icons.js`
|
|
98
|
+
4. Run `node scripts/extract-tier-icons.js`
|
|
99
|
+
5. Run `node scripts/generate-cards.js` to regenerate cards
|
|
100
|
+
6. Run `node scripts/capture-card.js` to generate card images
|
|
101
|
+
|
|
102
|
+
## File Structure
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
public/share/
|
|
106
|
+
├── icons/ # Extracted tier icons (PNG, transparent background)
|
|
107
|
+
├── images/ # Source icon images
|
|
108
|
+
└── card-*.html # OG card HTML for each tier
|
|
109
|
+
|
|
110
|
+
scripts/
|
|
111
|
+
├── extract-tier-icons.js # Icon extraction script
|
|
112
|
+
└── generate-cards.js # Card generation script
|
|
113
|
+
```
|
package/README.md
CHANGED
|
@@ -49,6 +49,49 @@ ccusage-ui
|
|
|
49
49
|
[](https://www.threads.net/@dohapark81)
|
|
50
50
|
[](https://www.linkedin.com/in/dohapark81/)
|
|
51
51
|
|
|
52
|
+
## Tier Icons
|
|
53
|
+
|
|
54
|
+
Tier icons were generated using **Gemini (via 나노바나나 프로)** and extracted with chroma key processing.
|
|
55
|
+
|
|
56
|
+
<details>
|
|
57
|
+
<summary>Image Generation Prompt</summary>
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Create a 5x2 grid of League of Legends style tier icons.
|
|
61
|
+
Image aspect ratio: 5:2 (e.g., 2500x1000px or similar)
|
|
62
|
+
Each cell should be square and contain one icon, clearly separated with no effects bleeding between cells.
|
|
63
|
+
|
|
64
|
+
IMPORTANT - Background colors per cell (for chroma key extraction):
|
|
65
|
+
- Green (#00FF00): Challenger, Grandmaster, Master, Gold, Silver, Bronze, Iron
|
|
66
|
+
- Magenta (#FF00FF): Diamond, Emerald, Platinum (these have cyan/green colors, so use magenta background)
|
|
67
|
+
|
|
68
|
+
CRITICAL - DO NOT use these colors in the icons themselves:
|
|
69
|
+
- Icons with green background: DO NOT use pure green (#00FF00) or similar bright greens in the icon
|
|
70
|
+
- Icons with magenta background: DO NOT use pure magenta (#FF00FF) or similar magentas in the icon
|
|
71
|
+
- These colors are reserved for background removal (chroma key)
|
|
72
|
+
|
|
73
|
+
Grid layout (left to right):
|
|
74
|
+
- Row 1: Challenger(green bg), Grandmaster(green bg), Master(green bg), Diamond(magenta bg), Emerald(magenta bg)
|
|
75
|
+
- Row 2: Platinum(magenta bg), Gold(green bg), Silver(green bg), Bronze(green bg), Iron(green bg)
|
|
76
|
+
|
|
77
|
+
Icon descriptions (G=green bg, M=magenta bg):
|
|
78
|
+
1. Challenger (G) - Golden winged crown emblem with red gems
|
|
79
|
+
2. Grandmaster (G) - Red/orange flaming emblem with golden wings
|
|
80
|
+
3. Master (G) - Crimson red shield emblem with flame accents
|
|
81
|
+
4. Diamond (M) - Cyan/light blue crystalline shield emblem
|
|
82
|
+
5. Emerald (M) - Green gemstone shield emblem with facets
|
|
83
|
+
6. Platinum (M) - Silver-white metallic shield emblem with teal accents
|
|
84
|
+
7. Gold (G) - Golden shield emblem with warm yellow glow
|
|
85
|
+
8. Silver (G) - Silver metallic shield emblem with cool gray tones
|
|
86
|
+
9. Bronze (G) - Bronze/copper shield emblem with warm brown tones
|
|
87
|
+
10. Iron (G) - Dark gray iron shield emblem, simplest design
|
|
88
|
+
|
|
89
|
+
Icon style: metallic shields with gemstones, fantasy game aesthetic, detailed 3D rendering.
|
|
90
|
+
All icons should be shield/emblem shaped for visual consistency (like League of Legends rank badges).
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
</details>
|
|
94
|
+
|
|
52
95
|
## License
|
|
53
96
|
|
|
54
97
|
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccusage-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"main": "server.js",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ccusage-ui": "server.js"
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"gh-pages": "^6.3.0",
|
|
38
|
-
"puppeteer": "^24.34.0"
|
|
38
|
+
"puppeteer": "^24.34.0",
|
|
39
|
+
"sharp": "^0.34.5"
|
|
39
40
|
}
|
|
40
41
|
}
|
package/public/index.html
CHANGED
|
@@ -327,6 +327,9 @@
|
|
|
327
327
|
<tbody></tbody>
|
|
328
328
|
</table>
|
|
329
329
|
</div>
|
|
330
|
+
<button id="showMoreBtn" onclick="toggleTableRows()" style="margin-top: 16px; padding: 8px 16px; background: #f5f5f7; border: 1px solid #e5e5e7; border-radius: 8px; cursor: pointer; font-size: 13px; color: #0071e3; width: 100%;">
|
|
331
|
+
Show More (30 days)
|
|
332
|
+
</button>
|
|
330
333
|
</div>
|
|
331
334
|
|
|
332
335
|
<footer style="text-align: center; margin-top: 40px; padding: 30px 20px; color: var(--text-secondary); font-size: 13px; border-top: 1px solid #e5e5e7;">
|
|
@@ -732,12 +735,15 @@
|
|
|
732
735
|
});
|
|
733
736
|
}
|
|
734
737
|
|
|
738
|
+
let showAllDays = false;
|
|
739
|
+
|
|
735
740
|
function renderTable() {
|
|
736
741
|
const tbody = document.querySelector('#dataTable tbody');
|
|
737
742
|
tbody.innerHTML = '';
|
|
738
|
-
// Sort by date descending (newest first)
|
|
739
|
-
const
|
|
740
|
-
|
|
743
|
+
// Sort by date descending (newest first), show 7 or 30 days
|
|
744
|
+
const count = showAllDays ? 30 : 7;
|
|
745
|
+
const recent = [...dailyData].sort((a, b) => b.date.localeCompare(a.date)).slice(0, count);
|
|
746
|
+
|
|
741
747
|
recent.forEach(d => {
|
|
742
748
|
const tr = document.createElement('tr');
|
|
743
749
|
tr.innerHTML = `
|
|
@@ -749,6 +755,17 @@
|
|
|
749
755
|
`;
|
|
750
756
|
tbody.appendChild(tr);
|
|
751
757
|
});
|
|
758
|
+
|
|
759
|
+
// Update button text
|
|
760
|
+
const btn = document.getElementById('showMoreBtn');
|
|
761
|
+
if (btn) {
|
|
762
|
+
btn.textContent = showAllDays ? 'Show Less (7 days)' : 'Show More (30 days)';
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
function toggleTableRows() {
|
|
767
|
+
showAllDays = !showAllDays;
|
|
768
|
+
renderTable();
|
|
752
769
|
}
|
|
753
770
|
|
|
754
771
|
|
package/public/share/bronze.html
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
<meta property="og:url" content="https://sowonlabs.github.io/ccusage-ui/share/bronze.html">
|
|
10
10
|
<meta property="og:title" content="I'm a Bronze AI User">
|
|
11
11
|
<meta property="og:description" content="My AI usage pace is over 5M tokens/month. Check your stats: npx ccusage-ui">
|
|
12
|
-
<meta property="og:image" content="https://sowonlabs.github.io/ccusage-ui/share/images/bronze.png">
|
|
12
|
+
<meta property="og:image" content="https://sowonlabs.github.io/ccusage-ui/share/images/card-bronze.png">
|
|
13
13
|
|
|
14
14
|
<!-- Twitter -->
|
|
15
15
|
<meta property="twitter:card" content="summary_large_image">
|
|
16
16
|
<meta property="twitter:url" content="https://sowonlabs.github.io/ccusage-ui/share/bronze.html">
|
|
17
17
|
<meta property="twitter:title" content="I'm a Bronze AI User">
|
|
18
18
|
<meta property="twitter:description" content="My AI usage pace is over 5M tokens/month. Check your stats: npx ccusage-ui">
|
|
19
|
-
<meta property="twitter:image" content="https://sowonlabs.github.io/ccusage-ui/share/images/bronze.png">
|
|
19
|
+
<meta property="twitter:image" content="https://sowonlabs.github.io/ccusage-ui/share/images/card-bronze.png">
|
|
20
20
|
|
|
21
21
|
<script>window.location.href = "https://github.com/sowonlabs/ccusage-ui";</script>
|
|
22
22
|
<meta http-equiv="refresh" content="0;url=https://github.com/sowonlabs/ccusage-ui" />
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=1200, height=630">
|
|
6
|
-
<title>
|
|
6
|
+
<title>BRONZE Card</title>
|
|
7
7
|
<style>
|
|
8
8
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
9
|
body {
|
|
@@ -39,8 +39,17 @@
|
|
|
39
39
|
background: radial-gradient(circle, rgba(205, 127, 50, 0.15) 0%, transparent 70%);
|
|
40
40
|
pointer-events: none;
|
|
41
41
|
}
|
|
42
|
+
.big-icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 60px;
|
|
45
|
+
top: 45%;
|
|
46
|
+
transform: translateY(-50%);
|
|
47
|
+
width: 280px;
|
|
48
|
+
height: 280px;
|
|
49
|
+
filter: drop-shadow(0 0 20px rgba(205, 127, 50, 0.8)) drop-shadow(0 0 40px rgba(205, 127, 50, 0.5)) drop-shadow(0 0 60px rgba(205, 127, 50, 0.3));
|
|
50
|
+
opacity: 0.95;
|
|
51
|
+
}
|
|
42
52
|
.header { display: flex; align-items: center; gap: 24px; }
|
|
43
|
-
.tier-icon { font-size: 80px; filter: drop-shadow(0 0 30px rgba(205, 127, 50, 0.8)); }
|
|
44
53
|
.tier-info h1 {
|
|
45
54
|
font-size: 64px;
|
|
46
55
|
font-weight: 800;
|
|
@@ -62,9 +71,23 @@
|
|
|
62
71
|
</style>
|
|
63
72
|
</head>
|
|
64
73
|
<body>
|
|
74
|
+
<!-- SVG filter to remove magenta fringing -->
|
|
75
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
76
|
+
<defs>
|
|
77
|
+
<filter id="remove-magenta" color-interpolation-filters="sRGB">
|
|
78
|
+
<!-- Convert to separate channels and reduce magenta -->
|
|
79
|
+
<feColorMatrix type="matrix" values="
|
|
80
|
+
1 0 0 0 0
|
|
81
|
+
0 1 0 0 0
|
|
82
|
+
0 0 1 0 0
|
|
83
|
+
-0.5 1 -0.5 1 0
|
|
84
|
+
"/>
|
|
85
|
+
</filter>
|
|
86
|
+
</defs>
|
|
87
|
+
</svg>
|
|
65
88
|
<div class="card">
|
|
89
|
+
<img class="big-icon" src="./icons/bronze.png" alt="">
|
|
66
90
|
<div class="header">
|
|
67
|
-
<span class="tier-icon">🟫</span>
|
|
68
91
|
<div class="tier-info">
|
|
69
92
|
<h1>BRONZE</h1>
|
|
70
93
|
<div class="subtitle">Casual AI User</div>
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=1200, height=630">
|
|
6
|
-
<title>
|
|
6
|
+
<title>CHALLENGER Card</title>
|
|
7
7
|
<style>
|
|
8
8
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
-
|
|
10
9
|
body {
|
|
11
10
|
width: 1200px;
|
|
12
11
|
height: 630px;
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
justify-content: center;
|
|
18
17
|
overflow: hidden;
|
|
19
18
|
}
|
|
20
|
-
|
|
21
19
|
.card {
|
|
22
20
|
width: 1100px;
|
|
23
21
|
height: 530px;
|
|
@@ -31,7 +29,6 @@
|
|
|
31
29
|
position: relative;
|
|
32
30
|
overflow: hidden;
|
|
33
31
|
}
|
|
34
|
-
|
|
35
32
|
.card::before {
|
|
36
33
|
content: '';
|
|
37
34
|
position: absolute;
|
|
@@ -42,18 +39,17 @@
|
|
|
42
39
|
background: radial-gradient(circle, rgba(155, 89, 182, 0.15) 0%, transparent 70%);
|
|
43
40
|
pointer-events: none;
|
|
44
41
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
filter: drop-shadow(0 0 30px rgba(155, 89, 182, 0.8));
|
|
42
|
+
.big-icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 60px;
|
|
45
|
+
top: 45%;
|
|
46
|
+
transform: translateY(-50%);
|
|
47
|
+
width: 280px;
|
|
48
|
+
height: 280px;
|
|
49
|
+
filter: drop-shadow(0 0 20px rgba(255, 215, 0, 0.8)) drop-shadow(0 0 40px rgba(255, 215, 0, 0.5)) drop-shadow(0 0 60px rgba(255, 215, 0, 0.3));
|
|
50
|
+
opacity: 0.95;
|
|
55
51
|
}
|
|
56
|
-
|
|
52
|
+
.header { display: flex; align-items: center; gap: 24px; }
|
|
57
53
|
.tier-info h1 {
|
|
58
54
|
font-size: 64px;
|
|
59
55
|
font-weight: 800;
|
|
@@ -63,77 +59,40 @@
|
|
|
63
59
|
background-clip: text;
|
|
64
60
|
letter-spacing: -2px;
|
|
65
61
|
}
|
|
66
|
-
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.
|
|
75
|
-
display: flex;
|
|
76
|
-
gap: 60px;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.stat {
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-direction: column;
|
|
82
|
-
gap: 8px;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.stat-value {
|
|
86
|
-
font-size: 56px;
|
|
87
|
-
font-weight: 700;
|
|
88
|
-
color: #fff;
|
|
89
|
-
letter-spacing: -1px;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.stat-label {
|
|
93
|
-
font-size: 20px;
|
|
94
|
-
color: rgba(255, 255, 255, 0.5);
|
|
95
|
-
text-transform: uppercase;
|
|
96
|
-
letter-spacing: 2px;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.footer {
|
|
100
|
-
display: flex;
|
|
101
|
-
justify-content: space-between;
|
|
102
|
-
align-items: flex-end;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.command {
|
|
106
|
-
background: rgba(255, 255, 255, 0.1);
|
|
107
|
-
padding: 16px 32px;
|
|
108
|
-
border-radius: 12px;
|
|
109
|
-
font-family: 'SF Mono', Monaco, monospace;
|
|
110
|
-
font-size: 24px;
|
|
111
|
-
color: #34c759;
|
|
112
|
-
border: 1px solid rgba(52, 199, 89, 0.3);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.branding {
|
|
116
|
-
text-align: right;
|
|
117
|
-
color: rgba(255, 255, 255, 0.4);
|
|
118
|
-
font-size: 20px;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.branding strong {
|
|
122
|
-
color: rgba(255, 255, 255, 0.7);
|
|
123
|
-
font-size: 24px;
|
|
124
|
-
}
|
|
62
|
+
.tier-info .subtitle { font-size: 28px; color: rgba(255, 255, 255, 0.6); margin-top: 8px; font-weight: 500; }
|
|
63
|
+
.stats { display: flex; gap: 60px; }
|
|
64
|
+
.stat { display: flex; flex-direction: column; gap: 8px; }
|
|
65
|
+
.stat-value { font-size: 56px; font-weight: 700; color: #fff; letter-spacing: -1px; }
|
|
66
|
+
.stat-label { font-size: 20px; color: rgba(255, 255, 255, 0.5); text-transform: uppercase; letter-spacing: 2px; }
|
|
67
|
+
.footer { display: flex; justify-content: space-between; align-items: flex-end; }
|
|
68
|
+
.command { background: rgba(255, 255, 255, 0.1); padding: 16px 32px; border-radius: 12px; font-family: 'SF Mono', Monaco, monospace; font-size: 24px; color: #34c759; border: 1px solid rgba(52, 199, 89, 0.3); }
|
|
69
|
+
.branding { text-align: right; color: rgba(255, 255, 255, 0.4); font-size: 20px; }
|
|
70
|
+
.branding strong { color: rgba(255, 255, 255, 0.7); font-size: 24px; }
|
|
125
71
|
</style>
|
|
126
72
|
</head>
|
|
127
73
|
<body>
|
|
74
|
+
<!-- SVG filter to remove magenta fringing -->
|
|
75
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
76
|
+
<defs>
|
|
77
|
+
<filter id="remove-magenta" color-interpolation-filters="sRGB">
|
|
78
|
+
<!-- Convert to separate channels and reduce magenta -->
|
|
79
|
+
<feColorMatrix type="matrix" values="
|
|
80
|
+
1 0 0 0 0
|
|
81
|
+
0 1 0 0 0
|
|
82
|
+
0 0 1 0 0
|
|
83
|
+
-0.5 1 -0.5 1 0
|
|
84
|
+
"/>
|
|
85
|
+
</filter>
|
|
86
|
+
</defs>
|
|
87
|
+
</svg>
|
|
128
88
|
<div class="card">
|
|
89
|
+
<img class="big-icon" src="./icons/challenger.png" alt="">
|
|
129
90
|
<div class="header">
|
|
130
|
-
<span class="tier-icon">🏆</span>
|
|
131
91
|
<div class="tier-info">
|
|
132
92
|
<h1>CHALLENGER</h1>
|
|
133
93
|
<div class="subtitle">World #1 Level AI User</div>
|
|
134
94
|
</div>
|
|
135
95
|
</div>
|
|
136
|
-
|
|
137
96
|
<div class="stats">
|
|
138
97
|
<div class="stat">
|
|
139
98
|
<div class="stat-value">1.5B+</div>
|
|
@@ -144,13 +103,9 @@
|
|
|
144
103
|
<div class="stat-label">Global Ranking</div>
|
|
145
104
|
</div>
|
|
146
105
|
</div>
|
|
147
|
-
|
|
148
106
|
<div class="footer">
|
|
149
107
|
<div class="command">npx ccusage-ui</div>
|
|
150
|
-
<div class="branding">
|
|
151
|
-
<strong>Claude Code Usage</strong><br>
|
|
152
|
-
sowonlabs.com
|
|
153
|
-
</div>
|
|
108
|
+
<div class="branding"><strong>Claude Code Usage</strong><br>sowonlabs.com</div>
|
|
154
109
|
</div>
|
|
155
110
|
</div>
|
|
156
111
|
</body>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=1200, height=630">
|
|
6
|
-
<title>
|
|
6
|
+
<title>DIAMOND Card</title>
|
|
7
7
|
<style>
|
|
8
8
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
9
|
body {
|
|
@@ -39,8 +39,17 @@
|
|
|
39
39
|
background: radial-gradient(circle, rgba(0, 188, 212, 0.15) 0%, transparent 70%);
|
|
40
40
|
pointer-events: none;
|
|
41
41
|
}
|
|
42
|
+
.big-icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 60px;
|
|
45
|
+
top: 45%;
|
|
46
|
+
transform: translateY(-50%);
|
|
47
|
+
width: 280px;
|
|
48
|
+
height: 280px;
|
|
49
|
+
filter: drop-shadow(0 0 20px rgba(0, 188, 212, 0.8)) drop-shadow(0 0 40px rgba(0, 188, 212, 0.5)) drop-shadow(0 0 60px rgba(0, 188, 212, 0.3));
|
|
50
|
+
opacity: 0.95;
|
|
51
|
+
}
|
|
42
52
|
.header { display: flex; align-items: center; gap: 24px; }
|
|
43
|
-
.tier-icon { font-size: 80px; filter: drop-shadow(0 0 30px rgba(0, 188, 212, 0.8)); }
|
|
44
53
|
.tier-info h1 {
|
|
45
54
|
font-size: 64px;
|
|
46
55
|
font-weight: 800;
|
|
@@ -62,9 +71,23 @@
|
|
|
62
71
|
</style>
|
|
63
72
|
</head>
|
|
64
73
|
<body>
|
|
74
|
+
<!-- SVG filter to remove magenta fringing -->
|
|
75
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
76
|
+
<defs>
|
|
77
|
+
<filter id="remove-magenta" color-interpolation-filters="sRGB">
|
|
78
|
+
<!-- Convert to separate channels and reduce magenta -->
|
|
79
|
+
<feColorMatrix type="matrix" values="
|
|
80
|
+
1 0 0 0 0
|
|
81
|
+
0 1 0 0 0
|
|
82
|
+
0 0 1 0 0
|
|
83
|
+
-0.5 1 -0.5 1 0
|
|
84
|
+
"/>
|
|
85
|
+
</filter>
|
|
86
|
+
</defs>
|
|
87
|
+
</svg>
|
|
65
88
|
<div class="card">
|
|
89
|
+
<img class="big-icon" src="./icons/diamond.png" alt="">
|
|
66
90
|
<div class="header">
|
|
67
|
-
<span class="tier-icon">💠</span>
|
|
68
91
|
<div class="tier-info">
|
|
69
92
|
<h1>DIAMOND</h1>
|
|
70
93
|
<div class="subtitle">Top 1% AI User</div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=1200, height=630">
|
|
6
|
-
<title>
|
|
6
|
+
<title>EMERALD Card</title>
|
|
7
7
|
<style>
|
|
8
8
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
9
|
body {
|
|
@@ -39,8 +39,17 @@
|
|
|
39
39
|
background: radial-gradient(circle, rgba(0, 229, 160, 0.15) 0%, transparent 70%);
|
|
40
40
|
pointer-events: none;
|
|
41
41
|
}
|
|
42
|
+
.big-icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 60px;
|
|
45
|
+
top: 45%;
|
|
46
|
+
transform: translateY(-50%);
|
|
47
|
+
width: 280px;
|
|
48
|
+
height: 280px;
|
|
49
|
+
filter: drop-shadow(0 0 20px rgba(0, 229, 160, 0.8)) drop-shadow(0 0 40px rgba(0, 229, 160, 0.5)) drop-shadow(0 0 60px rgba(0, 229, 160, 0.3));
|
|
50
|
+
opacity: 0.95;
|
|
51
|
+
}
|
|
42
52
|
.header { display: flex; align-items: center; gap: 24px; }
|
|
43
|
-
.tier-icon { font-size: 80px; filter: drop-shadow(0 0 30px rgba(0, 229, 160, 0.8)); }
|
|
44
53
|
.tier-info h1 {
|
|
45
54
|
font-size: 64px;
|
|
46
55
|
font-weight: 800;
|
|
@@ -62,9 +71,23 @@
|
|
|
62
71
|
</style>
|
|
63
72
|
</head>
|
|
64
73
|
<body>
|
|
74
|
+
<!-- SVG filter to remove magenta fringing -->
|
|
75
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
76
|
+
<defs>
|
|
77
|
+
<filter id="remove-magenta" color-interpolation-filters="sRGB">
|
|
78
|
+
<!-- Convert to separate channels and reduce magenta -->
|
|
79
|
+
<feColorMatrix type="matrix" values="
|
|
80
|
+
1 0 0 0 0
|
|
81
|
+
0 1 0 0 0
|
|
82
|
+
0 0 1 0 0
|
|
83
|
+
-0.5 1 -0.5 1 0
|
|
84
|
+
"/>
|
|
85
|
+
</filter>
|
|
86
|
+
</defs>
|
|
87
|
+
</svg>
|
|
65
88
|
<div class="card">
|
|
89
|
+
<img class="big-icon" src="./icons/emerald.png" alt="">
|
|
66
90
|
<div class="header">
|
|
67
|
-
<span class="tier-icon">💎</span>
|
|
68
91
|
<div class="tier-info">
|
|
69
92
|
<h1>EMERALD</h1>
|
|
70
93
|
<div class="subtitle">Heavy AI User</div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=1200, height=630">
|
|
6
|
-
<title>
|
|
6
|
+
<title>GOLD Card</title>
|
|
7
7
|
<style>
|
|
8
8
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
9
|
body {
|
|
@@ -39,8 +39,17 @@
|
|
|
39
39
|
background: radial-gradient(circle, rgba(255, 215, 0, 0.15) 0%, transparent 70%);
|
|
40
40
|
pointer-events: none;
|
|
41
41
|
}
|
|
42
|
+
.big-icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 60px;
|
|
45
|
+
top: 45%;
|
|
46
|
+
transform: translateY(-50%);
|
|
47
|
+
width: 280px;
|
|
48
|
+
height: 280px;
|
|
49
|
+
filter: drop-shadow(0 0 20px rgba(255, 215, 0, 0.8)) drop-shadow(0 0 40px rgba(255, 215, 0, 0.5)) drop-shadow(0 0 60px rgba(255, 215, 0, 0.3));
|
|
50
|
+
opacity: 0.95;
|
|
51
|
+
}
|
|
42
52
|
.header { display: flex; align-items: center; gap: 24px; }
|
|
43
|
-
.tier-icon { font-size: 80px; filter: drop-shadow(0 0 30px rgba(255, 215, 0, 0.8)); }
|
|
44
53
|
.tier-info h1 {
|
|
45
54
|
font-size: 64px;
|
|
46
55
|
font-weight: 800;
|
|
@@ -62,9 +71,23 @@
|
|
|
62
71
|
</style>
|
|
63
72
|
</head>
|
|
64
73
|
<body>
|
|
74
|
+
<!-- SVG filter to remove magenta fringing -->
|
|
75
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
76
|
+
<defs>
|
|
77
|
+
<filter id="remove-magenta" color-interpolation-filters="sRGB">
|
|
78
|
+
<!-- Convert to separate channels and reduce magenta -->
|
|
79
|
+
<feColorMatrix type="matrix" values="
|
|
80
|
+
1 0 0 0 0
|
|
81
|
+
0 1 0 0 0
|
|
82
|
+
0 0 1 0 0
|
|
83
|
+
-0.5 1 -0.5 1 0
|
|
84
|
+
"/>
|
|
85
|
+
</filter>
|
|
86
|
+
</defs>
|
|
87
|
+
</svg>
|
|
65
88
|
<div class="card">
|
|
89
|
+
<img class="big-icon" src="./icons/gold.png" alt="">
|
|
66
90
|
<div class="header">
|
|
67
|
-
<span class="tier-icon">🟡</span>
|
|
68
91
|
<div class="tier-info">
|
|
69
92
|
<h1>GOLD</h1>
|
|
70
93
|
<div class="subtitle">Regular AI User</div>
|