-
Jokić o27.5 PTS
NBA · DEN @ MIN
+
Jokić o27.5 PTS
NBA · DEN @ MIN
A+
+105
-
Edwards o5.5 AST
NBA · DEN @ MIN
+
Edwards o5.5 AST
NBA · DEN @ MIN
A
+130
-
Skenes o6.5 K
MLB · PIT @ CHC
+
Skenes o6.5 K
MLB · PIT @ CHC
A
-120
-
Judge o1.5 TB
MLB · NYY @ BOS
+
Judge o1.5 TB
MLB · NYY @ BOS
B
+140
@@ -1282,6 +1282,15 @@ class Component extends DCLogic {
AGGRESSOR:{c:'#FF6B4A',g:'
'},
SURGEON:{c:'#7AA6D8',g:'
'},
TOPSPIN:{c:'#B36CFF',g:'
'},
+ BRUSH:{c:'#E0B84A',g:'
'},
+ WHIFF:{c:'#E86A6A',g:'
'},
+ CONNECTOR:{c:'#9AB0C4',g:'
'},
+ DISTRIBUTOR:{c:'#7AB8D8',g:'
'},
+ FASTBREAK:{c:'#4AA0E8',g:'
'},
+ FLEX:{c:'#A08AC8',g:'
'},
+ HYBRID:{c:'#C88AB0',g:'
'},
+ SWITCH:{c:'#C0B08A',g:'
'},
+ SWITCHBOARD:{c:'#90A0E8',g:'
'},
RETURNER:{c:'#6C9CB0',g:'
'}
};
}
@@ -1295,7 +1304,8 @@ class Component extends DCLogic {
{sport:'HOCKEY', names:['SNIPER','SETUP','WALL','REARGUARD','PEST','WORKHORSE','ENFORCER','SPARK','VAULT','HOWITZER']},
{sport:'SOCCER', names:['FINISHER','MAESTRO','TOWER','MOTOR','BLADE','WALL']},
{sport:'BOXING / MMA', names:['PRESSURE','COUNTER','TECHNICIAN','SLUGGER','PHANTOM','SOUTHPAW','GRAPPLER','STRIKER','IRON','FINISHER']},
- {sport:'TENNIS', names:['CANNON','GRINDER','AGGRESSOR','SURGEON','TOPSPIN','RETURNER']}
+ {sport:'TENNIS', names:['CANNON','GRINDER','AGGRESSOR','SURGEON','TOPSPIN','RETURNER']},
+ {sport:'CLASSIFIER LEGACY · BASKETBALL / BASEBALL', names:['BRUSH','WHIFF','CONNECTOR','DISTRIBUTOR','FASTBREAK','FLEX','HYBRID','SWITCH','SWITCHBOARD']}
];
}
diff --git a/src/services/archetypeService.js b/src/services/archetypeService.js
index 0610211..d6d7301 100644
--- a/src/services/archetypeService.js
+++ b/src/services/archetypeService.js
@@ -55,13 +55,13 @@ const ARCHETYPES = {
education: 'Dual Threats score and create in equal measure, so points and assists both stay in play. Rebounds are the volatile leg for their size.',
},
CONNECTOR: {
- legacyName: 'ROLE GLUE', tag: 'CONNECTOR', sport: 'nba', color: '#9499A8', glyph: 'chain',
+ legacyName: 'ROLE GLUE', tag: 'CONNECTOR', sport: 'nba', color: '#9AB0C4', glyph: 'chain',
description: 'Low-usage specialist',
propDNA: { reliable: [], volatile: ['points', 'assists', 'rebounds'] },
education: 'Connectors do the little things at low usage. Their counting props are thin and matchup-dependent — they reward unders more often than overs.',
},
FASTBREAK: {
- legacyName: 'TRANSITION ENGINE', tag: 'FASTBREAK', sport: 'nba', color: '#22D3EE', glyph: 'chevrons',
+ legacyName: 'TRANSITION ENGINE', tag: 'FASTBREAK', sport: 'nba', color: '#4AA0E8', glyph: 'chevrons',
description: 'Pace-pushing fast-break threat',
propDNA: { reliable: ['points'], volatile: ['assists', 'threes'] },
education: 'Fastbreaks feast in the open floor. Their points correlate with game pace — target overs in projected up-tempo matchups.',
@@ -79,7 +79,7 @@ const ARCHETYPES = {
education: 'Lockdowns earn minutes with their on-ball defense. Steals and blocks carry their card; offensive props are low-volume and streaky.',
},
SWITCHBOARD: {
- legacyName: 'POINT FORWARD', tag: 'SWITCHBOARD', sport: 'nba', color: '#38BDF8', glyph: 'half',
+ legacyName: 'POINT FORWARD', tag: 'SWITCHBOARD', sport: 'nba', color: '#90A0E8', glyph: 'half',
description: 'Oversized primary creator',
propDNA: { reliable: ['points', 'assists', 'rebounds'], volatile: ['threes'] },
education: 'Switchboards run the offense from a wing or big body, so points, assists, and rebounds all stay live. Their three-point output is the swing factor.',
@@ -111,7 +111,7 @@ const ARCHETYPES = {
// ───────── WNBA-unique (5) ─────────
DISTRIBUTOR: {
- legacyName: 'POST FACILITATOR', tag: 'DISTRIBUTOR', sport: 'wnba', color: '#C084FC', glyph: 'node',
+ legacyName: 'POST FACILITATOR', tag: 'DISTRIBUTOR', sport: 'wnba', color: '#7AB8D8', glyph: 'node',
description: 'Playmaking hub from the post',
propDNA: { reliable: ['assists', 'rebounds'], volatile: ['threes'] },
education: 'Distributors orchestrate from the elbow and block. Assists and rebounds are reliable; perimeter shooting is the volatile leg.',
@@ -149,7 +149,7 @@ const ARCHETYPES = {
education: 'Bombers drive the ball over the fence. Total bases and home-run props carry their value; their batting-average-driven props (hits) are the volatile leg from strikeout risk.',
},
BRUSH: {
- legacyName: 'CONTACT', tag: 'BRUSH', sport: 'mlb', color: '#C0C63C', glyph: 'crosshair',
+ legacyName: 'CONTACT', tag: 'BRUSH', sport: 'mlb', color: '#E0B84A', glyph: 'crosshair',
description: 'High average, low strikeout',
propDNA: { reliable: ['hits'], volatile: ['home_runs', 'total_bases'] },
education: 'Brush hitters rarely strike out, so their hits props are among the most reliable in baseball. Power props (HR, TB) are the volatile leg.',
@@ -167,7 +167,7 @@ const ARCHETYPES = {
education: 'Alphas miss bats and go deep. Strikeout and innings props are their most reliable; earned-run props are noisier because one swing can change a line.',
},
WHIFF: {
- legacyName: 'STRIKEOUT ARTIST', tag: 'WHIFF', sport: 'mlb', color: '#FFB347', glyph: 'bolt',
+ legacyName: 'STRIKEOUT ARTIST', tag: 'WHIFF', sport: 'mlb', color: '#E86A6A', glyph: 'bolt',
description: 'Bat-missing arm, high K with traffic',
propDNA: { reliable: ['strikeouts'], volatile: ['earned_runs', 'innings_pitched'] },
education: 'Whiffs rack up strikeouts but allow more baserunners than an Alpha. The strikeout prop is reliable; earned-run and innings props swing with their traffic.',
@@ -179,13 +179,13 @@ const ARCHETYPES = {
education: 'Ghosts turn singles into runs. Stolen-base and runs props are their lane; power props rarely clear.',
},
HYBRID: {
- legacyName: 'TWO-WAY PLAYER', tag: 'HYBRID', sport: 'mlb', color: '#F472B6', glyph: 'half',
+ legacyName: 'TWO-WAY PLAYER', tag: 'HYBRID', sport: 'mlb', color: '#C88AB0', glyph: 'half',
description: 'Bats and pitches at elite level',
propDNA: { reliable: ['total_bases', 'strikeouts'], volatile: ['hits'] },
education: 'Hybrids produce on both sides of the ball. Read which role they fill that day — their batting and pitching props live on different lines.',
},
FLEX: {
- legacyName: 'UTILITY PLAYER', tag: 'FLEX', sport: 'mlb', color: '#22D3EE', glyph: 'plus',
+ legacyName: 'UTILITY PLAYER', tag: 'FLEX', sport: 'mlb', color: '#A08AC8', glyph: 'plus',
description: 'Multi-position lineup flex',
propDNA: { reliable: [], volatile: ['hits', 'total_bases', 'rbi'] },
education: 'Flex players move around the lineup and the diamond. Their props are matchup- and slot-dependent — confirm they are starting before betting.',
@@ -227,7 +227,7 @@ const ARCHETYPES = {
education: 'Bridges throw short, high-leverage outings. Strikeout props can hit in one inning; innings and earned-run props are too small a sample to trust.',
},
SWITCH: {
- legacyName: 'DEFENSIVE WIZARD', tag: 'SWITCH', sport: 'mlb', color: '#FF5C5C', glyph: 'batball',
+ legacyName: 'DEFENSIVE WIZARD', tag: 'SWITCH', sport: 'mlb', color: '#C0B08A', glyph: 'batball',
description: 'Platoon-leveraged, glove-first bat',
propDNA: { reliable: [], volatile: ['hits', 'total_bases', 'rbi'] },
education: 'Switch bats earn their spot with the glove and favorable platoon splits. Their offensive props are thin and matchup-dependent — lean unders outside their platoon edge.',
diff --git a/web/src/lib/archetypes.js b/web/src/lib/archetypes.js
index e3e7c81..3a6a8d2 100644
--- a/web/src/lib/archetypes.js
+++ b/web/src/lib/archetypes.js
@@ -8,6 +8,17 @@
/* Glyph SVG inner-markup keyed by name (drawn in a 0 0 16 16 viewBox). */
const GLYPHS = {
+ /* Rev 3 — 9 classifier-legacy marks (fallback renders, never user-facing) */
+ 'brush': '
',
+ 'whiff': '
',
+ 'connector': '
',
+ 'distributor': '
',
+ 'fastbreak': '
',
+ 'flex': '
',
+ 'hybrid': '
',
+ 'switch': '
',
+ 'switchboard': '
',
+
/* Design 74-mark library — real archetype marks (HANDOFF) */
'alpha': '
',
'anchor': '
',
@@ -75,37 +86,37 @@ const ARCHETYPE_MAP = {
ARTILLERY: { c: '#C98A5A', d: 'Floor-spacing shooting big', g: 'artillery', legacy: 'STRETCH BIG' },
SURGE: { c: '#FFA24A', d: 'Usage spikes when stars sit', g: 'surge', legacy: 'USAGE SPONGE' },
'DUAL THREAT': { c: '#1EA6D8', d: 'Scoring + playmaking hybrid', g: 'twin', legacy: 'COMBO GUARD' },
- CONNECTOR: { c: '#9499A8', d: 'Low-usage specialist', g: 'chain', legacy: 'ROLE GLUE' },
- FASTBREAK: { c: '#22D3EE', d: 'Pace-pushing fast-break threat', g: 'chevrons', legacy: 'TRANSITION ENGINE' },
+ CONNECTOR: { c: '#9AB0C4', d: 'Low-usage specialist', g: 'connector', legacy: 'ROLE GLUE' },
+ FASTBREAK: { c: '#4AA0E8', d: 'Pace-pushing fast-break threat', g: 'fastbreak', legacy: 'TRANSITION ENGINE' },
'PAINT BOSS': { c: '#FF5C5C', d: 'Back-to-basket interior scorer', g: 'postup', legacy: 'POST SCORER' },
LOCKDOWN: { c: '#5A6474', d: 'Perimeter stopper, low usage', g: 'lockdown', legacy: 'DEFENSIVE SPECIALIST' },
- SWITCHBOARD: { c: '#38BDF8', d: 'Oversized primary creator', g: 'half', legacy: 'POINT FORWARD' },
+ SWITCHBOARD: { c: '#90A0E8', d: 'Oversized primary creator', g: 'switchboard', legacy: 'POINT FORWARD' },
ARCHITECT: { c: '#B07CFF', d: 'Self-created shot maker, rim-attacking', g: 'architect', legacy: 'SLASHER' },
PISTON: { c: '#E87B4A', d: 'Lob and putback finisher', g: 'piston', legacy: 'RIM RUNNER' },
SENTINEL: { c: '#4FA0C4', d: 'Catch-and-shoot plus defense', g: 'sentinel', legacy: '3-AND-D' },
IGNITER: { c: '#FF8A3D', d: 'Bench scoring spark', g: 'igniter', legacy: 'SIXTH MAN' },
// WNBA-unique
- DISTRIBUTOR: { c: '#C084FC', d: 'Playmaking hub from the post', g: 'node', legacy: 'POST FACILITATOR' },
+ DISTRIBUTOR: { c: '#7AB8D8', d: 'Playmaking hub from the post', g: 'distributor', legacy: 'POST FACILITATOR' },
SHIELD: { c: '#5A8CA8', d: 'Two-way perimeter forward', g: 'shield', legacy: 'TWO-WAY WING' },
RANGE: { c: '#C77CE0', d: 'Floor-spacing forward', g: 'range', legacy: 'STRETCH FORWARD' },
SPARK: { c: '#F0A93D', d: 'Downhill scoring guard', g: 'spark', legacy: 'SLASHING GUARD' },
ANCHOR: { c: '#4C86C4', d: 'Dominant paint defender and rebounder', g: 'anchor', legacy: 'INTERIOR ANCHOR' },
// MLB
BOMBER: { c: '#FF9F45', d: 'Middle-of-the-order power producer', g: 'bomber', legacy: 'POWER SLUGGER' },
- BRUSH: { c: '#C0C63C', d: 'High average, low strikeout', g: 'crosshair', legacy: 'CONTACT' },
+ BRUSH: { c: '#E0B84A', d: 'High average, low strikeout', g: 'brush', legacy: 'CONTACT' },
DRIVER: { c: '#5A7D9A', d: 'RBI-dependent, lineup context', g: 'driver', legacy: 'RUN PRODUCER' },
ALPHA: { c: '#7C5CFF', d: 'High K/9, low WHIP, deep games', g: 'alpha', legacy: 'ACE' },
- WHIFF: { c: '#FFB347', d: 'Bat-missing arm, high K with traffic', g: 'bolt', legacy: 'STRIKEOUT ARTIST' },
+ WHIFF: { c: '#E86A6A', d: 'Bat-missing arm, high K with traffic', g: 'whiff', legacy: 'STRIKEOUT ARTIST' },
GHOST: { c: '#3FD8E0', d: 'Stolen bases, speed score', g: 'ghost', legacy: 'SPEED THREAT' },
- HYBRID: { c: '#F472B6', d: 'Bats and pitches at elite level', g: 'half', legacy: 'TWO-WAY PLAYER' },
- FLEX: { c: '#22D3EE', d: 'Multi-position lineup flex', g: 'plus', legacy: 'UTILITY PLAYER' },
+ HYBRID: { c: '#C88AB0', d: 'Bats and pitches at elite level', g: 'hybrid', legacy: 'TWO-WAY PLAYER' },
+ FLEX: { c: '#A08AC8', d: 'Multi-position lineup flex', g: 'flex', legacy: 'UTILITY PLAYER' },
WORKHORSE: { c: '#C89B5A', d: 'Durable, deep-start arm', g: 'workhorse', legacy: 'INNINGS EATER' },
CATALYST: { c: '#E88AC0', d: 'On-base leadoff catalyst', g: 'catalyst', legacy: 'TABLE SETTER' },
MIRROR: { c: '#B0B6C8', d: 'Gap-to-gap line-drive bat', g: 'mirror', legacy: 'GAP HITTER' },
HAMMER: { c: '#FF4D6D', d: 'Ninth-inning save specialist', g: 'hammer', legacy: 'CLOSER' },
SINKER: { c: '#5A9AB0', d: 'Groundball spot-starter / long relief', g: 'sinker', legacy: 'SWINGMAN' },
BRIDGE: { c: '#6C9CB0', d: 'Setup / high-leverage middle relief', g: 'bridge', legacy: 'BULLPEN ARM' },
- SWITCH: { c: '#FF5C5C', d: 'Platoon-leveraged, glove-first bat', g: 'batball', legacy: 'DEFENSIVE WIZARD' },
+ SWITCH: { c: '#C0B08A', d: 'Platoon-leveraged, glove-first bat', g: 'switch', legacy: 'DEFENSIVE WIZARD' },
// Soccer
FINISHER: { c: '#FF5C5C', d: 'Penalty-box finisher', g: 'crosshair', legacy: 'POACHER' },
MAESTRO: { c: '#D9A441', d: 'Chance-creating playmaker', g: 'maestro', legacy: 'CREATOR' },