Gamification: Pawprintz, Treatz & Niblz
smo1 beginner 5 min read
ELI5
SMO1 turns link management into a game by giving every link three scores and a mood label. Pawprintz measures how popular and recent the link is (like a thermometer). Treatz measures how much shorter the link is than the original URL (like a compression trophy). Niblz is the raw number of characters saved (like counting coins). The mood label tells you if your link is energetic, sleepy, or somewhere in between.
Technical Deep Dive
Scoring Metrics
Pawprintz (Activity Engagement, 0–100)
Pawprintz decays over time like radioactive material — links that were popular last month but silent this week lose heat.
recency = e^(-0.03 × daysSinceLastClick) // half-life ≈ 23 daysbase = min(60, 10 × ln(1 + totalClicks)) // log-scaled historical volumebonus = min(40, 8 × ln(1 + clicks7d)) // recent activity boostpawprintz = clamp(0, 100, round(base × recency + bonus))| Component | Max contribution | Driver |
|---|---|---|
base | 60 points | Total lifetime clicks (logarithmic) |
bonus | 40 points | Clicks in the last 7 days (logarithmic) |
recency | Multiplier | Days since last click (exponential decay) |
Example: A link with 100 total clicks and 20 clicks this week, last clicked 3 days ago:
recency= e^(-0.03 × 3) ≈ 0.914base= min(60, 10 × ln(101)) ≈ 46.0bonus= min(40, 8 × ln(21)) ≈ 24.3pawprintz= round(46.0 × 0.914 + 24.3) = round(66.3) = 66
Treatz (Compression Efficiency, 0–100)
treatz = round( (originalLength - shortLength) / originalLength × 100 )A 120-character URL shortened to smo1.io/abc123 (16 chars):
treatz= round((120 - 16) / 120 × 100) = 87
Niblz (Raw Compression, unbounded)
niblz = originalLength - shortLengthSame example: niblz = 120 - 16 = 104 characters saved.
Link Status (Cat-Themed Activity Labels)
Status is computed from clicks_7d and last_clicked_at:
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#e8f4f8', 'primaryTextColor': '#2d3748', 'primaryBorderColor': '#90cdf4', 'lineColor': '#718096', 'secondaryColor': '#f0fff4', 'tertiaryColor': '#fefcbf'}}}%%flowchart TD A[Compute status] --> B{"total_clicks == 0 ?"} B -->|Yes| C["🆕 new"] B -->|No| D{"clicks_7d > 100<br/>or<br/>(clicks_7d > 20<br/>and last_click < 24h) ?"} D -->|Yes| E["⚡ zoomies"] D -->|No| F{"clicks_7d > 20<br/>or<br/>(clicks_7d > 5<br/>and last_click < 48h) ?"} F -->|Yes| G["🎾 playful"] F -->|No| H{"clicks_7d > 5<br/>or<br/>last_click < 72h ?"} H -->|Yes| I["🔍 curious"] H -->|No| J{"last_click < 168h ?"} J -->|Yes| K["😴 sleepy"] J -->|No| L["🍞 loaf"]| Status | Condition | Emoji | Professional equivalent |
|---|---|---|---|
| new | 0 total clicks | 🆕 | New |
| zoomies | >100 clicks/week OR (>20/week + <24h) | ⚡ | Viral |
| playful | >20 clicks/week OR (>5/week + <48h) | 🎾 | Active |
| curious | >5 clicks/week OR <72h since click | 🔍 | Warm |
| sleepy | <168h (7 days) since click | 😴 | Dormant |
| loaf | Everything else | 🍞 | Inactive |
Metric Comparison
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#e8f4f8', 'primaryTextColor': '#2d3748', 'primaryBorderColor': '#90cdf4', 'lineColor': '#718096', 'secondaryColor': '#f0fff4', 'tertiaryColor': '#fefcbf'}}}%%quadrantChart title Pawprintz vs Treatz — Link Health Matrix x-axis Low Treatz --> High Treatz y-axis Low Pawprintz --> High Pawprintz quadrant-1 Popular & Efficient quadrant-2 Popular but Long URL quadrant-3 Unpopular & Long URL quadrant-4 Unpopular but Efficient "Viral short link": [0.9, 0.95] "Viral long link": [0.9, 0.3] "Dead short link": [0.1, 0.9] "Dead long link": [0.1, 0.2]Key Terms
- Pawprintz → 0–100 activity score combining historical volume, recent clicks, and recency decay
- Treatz → 0–100 compression efficiency: how much shorter the link is than the original URL
- Niblz → Raw character count saved by the short link (unbounded integer)
- Recency decay → Exponential half-life factor (e^(-0.03×days)) that reduces pawprintz as a link goes stale
- zoomies → Highest activity status; named after the burst of energy cats exhibit
- loaf → Lowest non-zero activity status; named after a cat lying in a bread-loaf position
Q&A
Q: Why logarithmic scaling for pawprintz base and bonus? A: Logarithms prevent runaway scores. Without them, a link with 10,000 clicks would be unreachably high compared to a link with 100 clicks. Log scaling keeps the game fair for new links.
Q: Can pawprintz increase without new clicks? A: No. Because of recency decay, pawprintz strictly decreases when there are zero clicks. The only way to raise it is to generate new traffic.
Q: What is the maximum possible treatz score? A: The theoretical maximum approaches 100 as the original URL length approaches infinity and the short URL stays fixed at ~16 characters. In practice, treatz above 90 is excellent.
Q: Why are statuses named after cat behaviours?
A: SMO1 has a cat-themed personality layer (see smo1-019). Statuses translate to professional terms in “professional mode,” but the canonical names are cat-themed to match the brand.
Examples
Think of pawprintz like a campfire:
- Base score is the size of the wood pile you started with
- Bonus is the fresh kindling you added this week
- Recency decay is the wind and rain that slowly cools the embers
- A big fire with no new wood eventually goes out (high base, zero bonus, low recency)
- A small fire with constant new wood stays warm (low base, steady bonus, high recency)
Treatz and Niblz are like packing a suitcase:
- Treatz is the percentage of space you saved by rolling clothes instead of folding
- Niblz is the actual number of extra souvenirs you can fit because of the space saved
neighbors on the map
- Cat Mode & Personality Mapping Layer adding a new UI label that needs both cat and professional versions