SmartSwing AI Technical Documentation
Complete reference for the SmartSwing AI biomechanics analysis engine — covering every formula, correlation, analysis workflow, scoring model, grip inference algorithm, and architectural decision that powers the platform. This document serves as the "central brain" backup of the proprietary analyzer.
Last updated: April 8, 2026 | Engine version: 2.0 | Author: SmartSwing AI Engineering
Technical Architecture
SmartSwing AI is a multi-page static web application with serverless backend functions, designed for real-time biomechanical analysis in the browser.
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | HTML + CSS + Vanilla JS | Zero-framework, maximum compatibility |
| Pose Detection | MoveNet / MediaPipe (17-keypoint) | Real-time body landmark tracking |
| Biomechanics | advanced-biomechanics-engine.js | Joint angles, kinematics, scoring |
| Grip Analysis | grip-analysis-engine.js | Grip inference from body kinematics |
| State | app-data.js (SmartSwingStore) | Client-side store + Supabase sync |
| Hosting | Vercel | Static hosting + serverless functions |
| Database | Supabase (PostgreSQL) | Auth, profiles, assessments, reports |
| Payments | Stripe | Hosted checkout + webhook sync |
| AI Coach | Claude API (Anthropic) | Personalized coaching narratives |
Data Flow Pipeline
Video Input (upload / YouTube URL / webcam)
|
v
Pose Detection (MoveNet Thunder / MediaPipe)
| Outputs: 17 keypoints × N frames
| Each keypoint: { x, y, score }
v
Frame Processing (per-frame metrics)
| Joint angles, velocities, rotations
| Head stability, balance, COM tracking
v
Contact Frame Detection (peak wrist speed)
v
Grip Analysis Engine (5 indicators → Gaussian classifier)
| Output: detected_grip, confidence, distribution
v
Sequence Analysis (kinematic chain, power, efficiency)
v
Session Aggregation (means, stdDevs, ranges)
v
Scoring Pipeline (component → weighted → overall)
| Level-adjusted benchmarks, grade, percentile
v
AI Coach Narrative (Claude API call)
v
Report Generation (HTML template assembly)
v
Persistence (localStorage + Supabase cloud sync)
Keypoint Model (MoveNet 17-Point)
SmartSwing uses the MoveNet Thunder model (or MediaPipe equivalent) that produces 17 body keypoints per frame. Each keypoint provides (x, y, confidence_score).
| Index | Keypoint | Body Part | Usage |
|---|---|---|---|
| 0 | NOSE | Head | Head stability tracking |
| 1 | LEFT_EYE | Head | Head orientation |
| 2 | RIGHT_EYE | Head | Head orientation |
| 3 | LEFT_EAR | Head | Head rotation proxy |
| 4 | RIGHT_EAR | Head | Head rotation proxy |
| 5 | LEFT_SHOULDER | Upper body | Shoulder rotation, joint angles |
| 6 | RIGHT_SHOULDER | Upper body | Shoulder rotation, joint angles |
| 7 | LEFT_ELBOW | Arm | Elbow angle, kinematic chain |
| 8 | RIGHT_ELBOW | Arm | Elbow angle, kinematic chain |
| 9 | LEFT_WRIST | Arm | Racquet speed proxy, grip analysis |
| 10 | RIGHT_WRIST | Arm | Racquet speed proxy, grip analysis |
| 11 | LEFT_HIP | Core | Hip rotation, COM, balance |
| 12 | RIGHT_HIP | Core | Hip rotation, COM, balance |
| 13 | LEFT_KNEE | Lower body | Knee bend, power generation |
| 14 | RIGHT_KNEE | Lower body | Knee bend, power generation |
| 15 | LEFT_ANKLE | Lower body | Footwork, base width, balance |
| 16 | RIGHT_ANKLE | Lower body | Footwork, base width, balance |
Dominant side is auto-detected by comparing confidence score sums for left vs right arm keypoints. Minimum keypoint confidence threshold: 0.3.
Calibration (Pixel-to-Metric Conversion)
Auto-Calibration (Player Height)
estimatedTorsoHeight = 0.9 m
pixelsToMeters = 0.9 / heightPixels
Manual Calibration (Court Lines)
Core Geometry Formulas
Euclidean Distance
3-Point Angle
v = B → C = (C.x - B.x, C.y - B.y)
cos(angle) = dot(u, v) / (|u| × |v|)
angle = acos( clamp(cos, -1, 1) ) × (180 / pi)
Signed Angle (Rotation)
angle = atan2(cross, dot(u, v)) × (180 / pi)
Velocity Calculation
distMeters = distPixels × pixelsToMeters
speedMS = distMeters / timeDelta // timeDelta default = 1/30 s
speedMPH = speedMS × 2.237
speedKPH = speedMS × 3.6
Joint Angle Calculations
All joint angles use the 3-point angle formula with the joint as vertex B:
| Joint | Point A | Vertex B | Point C | Optimal Range |
|---|---|---|---|---|
| Elbow | Shoulder | Elbow | Wrist | 140-170 deg |
| Shoulder | Hip | Shoulder | Elbow | 80-120 deg |
| Hip | Shoulder | Hip | Knee | 150-175 deg |
| Knee | Hip | Knee | Ankle | 145-165 deg |
Angular velocity is calculated between consecutive frames:
Rotations & X-Factor
Hip Rotation
hipRotation = signedAngle(hipLine, horizontalAxis)
Shoulder Rotation
shoulderRotation = signedAngle(shoulderLine, horizontalAxis)
X-Factor (Hip-Shoulder Separation)
xFactor = abs( wrapAngle(separation) )
Optimal range: 30-50 degrees
The X-Factor measures the rotational separation between hips and shoulders during the swing. Greater separation stores elastic energy in the trunk musculature, enabling more powerful rotation through the kinetic chain. Professional players typically achieve 40-55 degrees of X-Factor at peak loading.
Trunk Tilt
shoulderMid = midpoint(leftShoulder, rightShoulder)
verticalRef = (hipMid.x, hipMid.y - 100)
trunkTilt = angle3Points(verticalRef, hipMid, shoulderMid)
Stability & Balance
Center of Mass (COM)
hipMid = midpoint(leftHip, rightHip)
COM.x = 0.4 × shoulderMid.x + 0.6 × hipMid.x
COM.y = 0.4 × shoulderMid.y + 0.6 × hipMid.y
// Hips weighted 60%, shoulders 40%
Head Stability (Rolling Window = 10 frames)
stability = max(0, 100 - variance)
displacement = sqrt(variance) × pixelsToMeters × 100 // in cm
Balance Score
anklesMidX = (rightAnkle.x + leftAnkle.x) / 2
comOffset = |COM.x - anklesMidX|
balanceRatio = 1 - (comOffset / (baseWidth / 2))
balanceScore = max(0, min(100, balanceRatio × 100))
Kinematic Chain Sequencing
The kinetic chain principle states that efficient power transfer requires proximal-to-distal activation: hips first, then shoulders, then elbow, then wrist. SmartSwing detects peak velocity timing for each segment.
peakIdx = argmax(velocity[segment]) across all frames
Delays:
hipToShoulder = peakShoulder - peakHip
shoulderToElbow = peakElbow - peakShoulder
elbowToWrist = peakWrist - peakElbow
Proper sequence: ALL delays > 0
efficiency = 100 if proper, else 50
Contact Point Quality
distance = |wrist.x - hip.x| × pixelsToMeters × 100 // cm
Optimal range: 25-45 cm in front
quality = 100 if optimal
quality = max(0, 100 - |distance - 35| × 2) if outside
Power Generation Score
Composite score from three weighted factors:
xScore = 100 if in range
xScore = max(0, 100 - |xFactor - 40| × 2) if outside
kneeScore = 100 if in range
kneeScore = max(0, 100 - |kneeAngle - 155|) if outside
speedScore = min(100, (maxRacquetSpeed / 85) × 100)
Efficiency Score
Deductions:
Poor kinematic sequence: -20
Low balance (< 70): -(70 - balance) × 0.5
High head displacement (> 5 cm): -displacement
efficiencyScore = max(0, min(100, baseScore - deductions))
Overall Score Calculation
Component Weighting (Default)
+ timing × 0.14
+ footwork × 0.08
+ positioning × 0.08
+ readiness × 0.08
Level Adjustment
Profile boost: Beginner = 1.0x, Intermediate = 1.05x, Advanced = 1.10x
adjustedScore = max(floor, rawScore × boost)
progressBonus = min(5, improvement_delta) // up to +5 pts
overallScore = min(100, adjustedScore + progressBonus)
Component Scores
| Component | Weight | Inputs |
|---|---|---|
| Biomechanics | 62% | Racquet speed, acceleration, wrist lag, knee bend, shoulder/hip rotation |
| Timing | 14% | Contact timing consistency vs optimal swing phase |
| Footwork | 8% | Stride length, base width, movement smoothness |
| Positioning | 8% | Distance from baseline, angle to ball, recovery position |
| Readiness | 8% | Preparation time, racket position pre-contact, stance |
Each component uses scoreMetricAgainstBenchmark() with three deviation windows:
- Soft (within 20%): Score 80-100
- Good (within 15%): Score 60-80
- Fair (within 10%): Score 40-60
Shot-Type Scoring Models
Each shot type uses custom component weights (via SHOT_SCORING_MODELS):
| Shot Type | Biomechanics | Timing | Positioning | Footwork | Readiness |
|---|---|---|---|---|---|
| Forehand | 70% | 10% | 10% | 5% | 5% |
| Backhand | 65% | 12% | 12% | 6% | 5% |
| Serve | 75% | 15% | 5% | 3% | 2% |
| Volley | 60% | 20% | 10% | 5% | 5% |
| Slice | 68% | 12% | 10% | 5% | 5% |
| Drop Shot | 55% | 20% | 15% | 5% | 5% |
| Lob | 58% | 15% | 18% | 5% | 4% |
Grading & Percentiles
Letter Grade Thresholds
| Grade | Score Range | Meaning |
|---|---|---|
| A+ | 95-100 | Elite execution |
| A | 90-94 | Excellent |
| B+ | 85-89 | Very good |
| B | 80-84 | Good |
| C+ | 75-79 | Above average |
| C | 70-74 | Average |
| D | 60-69 | Below average |
| F | <40 | Needs significant work |
Percentile Calculation
percentile = 50 × (1 + tanh(z / 1.7))
Level shifts: Beginner +5%, Intermediate 0%, Advanced -5%
The 1.7 divisor compresses the distribution to match typical tournament bell curves, ensuring meaningful differentiation across the 0-100 percentile range.
Benchmark System
Level-Specific Tolerance Multipliers
| Level | Tolerance | Effect |
|---|---|---|
| Beginner | 1.5x | More forgiving — wider acceptable range |
| Intermediate | 1.0x | Standard benchmark expectations |
| Advanced | 0.7x | Stricter — narrow acceptable range |
Additional adjustment factors:
- AGE_ADJUSTMENTS: Modifies benchmark expectations by age bracket
- GENDER_ADJUSTMENTS: Adjusts power-related benchmarks by gender
KPI Calculations
| KPI | Calculation | Interpretation |
|---|---|---|
| Timing Consistency | StdDev of contact timing (ms) within benchmark window | Lower = more consistent |
| Footwork Efficiency | Stride length variance + base width consistency | Lower variance = better |
| Positioning Score | Avg distance from ideal court position, normalized 0-100 | Higher = better positioning |
| Contact Height | Consistency of strike height above court surface | Lower variance = better |
| Speed Consistency | Racquet velocity StdDev as % of benchmark mean | Lower = more repeatable |
Grip Analysis Engine
The grip analysis engine infers the player's grip type from body-only kinematic signals at the contact frame. Since MoveNet provides only body landmarks (no finger or hand detail), the engine uses five proxy indicators that correlate strongly with grip type according to biomechanics literature.
Traditional grip detection requires high-resolution hand imaging. SmartSwing's approach uses inferential kinematics — the body's configuration at contact frame strongly constrains which grip the player must be using. For example, a Western forehand grip forces high wrist extension, elevated contact point, and steep swing plane — detectable from shoulder/elbow/wrist positions alone.
Contact Frame Detection
speed[i] = distance(wrist[i-1], wrist[i]) / timeDelta[i]
contactIdx = argmax(speed)
timeDelta = (frames[i].timestamp - frames[i-1].timestamp) || (1/30)
Minimum: 3 frames required, wrist confidence >= 0.3
Five Kinematic Indicators
1. Wrist Extension Angle (degrees)
handDir = avg wrist displacement over ±2 frames around contact
angle = |atan2(cross2(forearm, handDir), dot(forearm, handDir))|
If angle > 90: fold to (180 - angle)
Continental: 0-15 deg | Eastern: 15-25 deg | Semi-Western: 25-40 deg | Western: 40-60 deg
2. Contact Height Ratio (normalized)
0 = wrist at hip level | 1 = wrist at shoulder | >1 = above shoulder
Continental → low contact | Western → high contact
3. Swing Plane Angle (degrees above horizontal)
swingPlane = atan2(deltaY_upward, |deltaX|)
Continental: ~5-15 deg | Western: ~40-55 deg
4. Elbow Angle at Contact (degrees, 0-180)
elbowAngle = acos(clamp(dot(u,v) / (|u| × |v|), -1, 1))
Extended arm → larger angle (serve/volley) | Bent → smaller (Western forehand)
5. Forearm Pronation Proxy (normalized 0-1)
trunk = mean_hip - shoulder
angle = acos(clamp(dot(forearm, trunk) / (|forearm| × |trunk|), -1, 1))
pronation = clamp(angle / 90, 0, 1)
0 = parallel (neutral) | 1 = perpendicular (fully pronated)
Gaussian Classifier
Each grip type is modeled as a diagonal-covariance Gaussian in 5D indicator space. Classification scores are computed as the product of per-indicator Gaussian likelihoods:
gScore = exp(-(z^2) / 2)
Floor: max(0.01, gScore) // prevents single-indicator zero-killing
Minimum 2 valid indicators required
confidence = max(distribution) // rounded to 3 decimal places
Grip Parameter Tables
Each cell shows [center, sigma] for the Gaussian classifier.
Forehand Grips
| Grip | Wrist Ext | Height | Swing Plane | Elbow | Pronation |
|---|---|---|---|---|---|
| Continental | [10, 8] | [0.45, 0.20] | [10, 10] | [165, 12] | [0.20, 0.20] |
| Eastern | [20, 8] | [0.75, 0.15] | [20, 10] | [158, 12] | [0.40, 0.20] |
| Semi-Western | [33, 10] | [0.95, 0.15] | [32, 10] | [148, 12] | [0.60, 0.20] |
| Western | [50, 12] | [1.15, 0.20] | [48, 12] | [140, 12] | [0.80, 0.20] |
Backhand Grips
| Grip | Wrist Ext | Height | Swing Plane | Elbow | Pronation |
|---|---|---|---|---|---|
| Continental | [12, 8] | [0.55, 0.20] | [12, 10] | [165, 12] | [0.25, 0.20] |
| Eastern BH | [22, 10] | [0.85, 0.18] | [22, 10] | [155, 14] | [0.45, 0.20] |
| Two-Handed BH | [18, 10] | [0.85, 0.20] | [24, 12] | [150, 15] | [0.50, 0.25] |
Serve Grips
| Grip | Wrist Ext | Height | Swing Plane | Elbow | Pronation |
|---|---|---|---|---|---|
| Continental | [15, 10] | [1.35, 0.30] | [30, 20] | [155, 15] | [0.30, 0.25] |
| Eastern | [25, 12] | [1.30, 0.30] | [28, 20] | [155, 15] | [0.45, 0.25] |
| Semi-Western | [35, 14] | [1.25, 0.30] | [26, 20] | [150, 15] | [0.60, 0.25] |
Shot-Grip Appropriateness Mapping
| Shot Type | Expected Grips | Mismatches & Severity |
|---|---|---|
| Forehand | Eastern, Semi-Western, Western | Continental = medium |
| Serve | Continental | Eastern = high, Semi-W = critical, Western = critical |
| Volley | Continental | Eastern = medium, Semi-W/Western = high |
| Slice | Continental | Eastern = medium, Semi-W/Western = high |
| Drop Shot | Continental | Eastern = medium, Semi-W/Western = high |
| Backhand | Continental, Eastern BH, Two-Handed | Eastern = medium, Semi-W = medium, Western = high |
| Lob / Return | All grips accepted | No mismatches |
Permissive coaching mode: Grip mismatches generate coaching callouts but do NOT penalize the overall score. This ensures players receive actionable guidance without being unfairly scored.
Coaching Recommendations
The engine generates structured recommendations based on detected grip vs shot type:
| Trigger | Recommendation | Drills |
|---|---|---|
| Serve + non-Continental | Switch to Continental — unlocks forearm pronation for slice/kick serves | grip-bevel-check-continental, shadow-serve-pronation-snap |
| Volley/Slice/Drop + non-Continental | Use Continental — only grip for both FH+BH punch volleys | grip-bevel-check-continental, punch-volley-no-switch |
| Forehand + Continental | Move to Eastern or Semi-Western — caps topspin ceiling | grip-bevel-check-eastern, low-to-high-shadow-swing |
| Forehand + Western (beginner) | Consider Semi-Western — Western is difficult for low balls | — |
Report Structure
The analysis report is generated as an HTML template assembled from session data:
- Session Header — Date, duration, shot count by type, overall grade
- Score Breakdown — Biomechanics, timing, footwork, positioning, readiness (bar charts)
- Grade Details — Per-shot-type grades with percentile rankings
- Grip Analysis — Detected grip, confidence, distribution bars, severity badge, coaching notes
- Benchmark Comparison — Player metrics vs profile-adjusted benchmarks
- Progress Context — Personal best tracking, session-over-session delta, streaks
- Milestone Achievements — Level-specific unlocked badges based on score thresholds
- KPI Summary — Timing consistency, footwork efficiency, positioning, contact height
- AI Coaching Narrative — Swing Story, Analogy, Feel This, Your Potential
- Tailored Drills — Shot-type-specific drills based on weakest component scores
- Tactical Suggestions — Pattern-based playing recommendations
- Consistency Analysis — Standard deviation visualization across metrics
AI Coach Narrative
SmartSwing uses Claude (Anthropic) to generate personalized coaching insights. The prompt includes session data, shot type, score, and player profile. The response follows a strict four-section format:
Swing Story — 2-3 sentences describing what happened in plain English
The Analogy — One clear metaphor or everyday comparison (max 2 sentences)
Feel This — Specific physical sensation/cue for next practice (2-3 sentences)
Your Potential — One sentence about what's achievable in 2-4 weeks
Rules: Calibrate language to player level (beginner = simple analogies, pro = technical precision). Be honest but encouraging. Never use generic filler. Total: 150-220 words.
Stack & Hosting
| Service | Provider | Purpose |
|---|---|---|
| Hosting | Vercel | Static files + serverless /api/*.js |
| Database | Supabase (PostgreSQL) | Auth, profiles, assessments, reports |
| Storage | Supabase Storage | Buckets: tennis-videos, analysis-reports |
| Payments | Stripe | Checkout sessions + webhook sync |
| AI | Anthropic (Claude) | Coaching narratives |
| CI/CD | GitHub Actions | Auto-deploy to Vercel on push |
Database Schema (Supabase)
Core Tables
| Table | Purpose |
|---|---|
profiles | User profiles, subscription_tier, stripe IDs, player settings |
assessments | Saved analysis results — scores, angles, metrics, grip_assessment (JSONB) |
coach_sessions | Booked coaching sessions |
contact_messages | Contact form submissions |
player_goals | Player-set improvement targets |
progress_events | Timeline entries (milestones, achievements) |
drill_assignments | Auto-generated drill plans from assessments |
analysis_reports | Full report HTML/data |
shot_benchmarks | Reference benchmarks by level/age/gender |
drill_library | Curated drill database |
tactic_library | Tactical pattern database |
customer_subscriptions | Stripe subscription state mirror |
report_usage_monthly | Server-authoritative free report quota |
Grip Assessment Column
The assessments.grip_assessment column (JSONB) stores:
{
"detected_grip": "semi-western",
"confidence": 0.847,
"distribution": { "continental": 0.02, "eastern": 0.11, ... },
"indicators": { "wrist_extension": 31.4, "contact_height": 0.92, ... },
"shot_match": { "expected": ["eastern","semi-western","western"], "severity": null },
"recommendations": [{ "action": "maintain", "title": "...", "why": "...", "how_steps": [] }],
"drill_ids": [],
"contact_frame_index": 42,
"handedness": "right",
"notes": []
}
Auth & Billing Flow
Authentication
Supabase Auth handles email/password + Google/Apple OAuth. Flow: signup.html → auth-callback.html → welcome.html → dashboard.html. Local browser fallback (demo mode) activates when Supabase config is missing.
Billing
Stripe Checkout sessions created via api/create-checkout-session.js. Webhook (api/stripe-webhook.js) updates Supabase profiles.subscription_tier. Client syncs via restoreSupabaseSession() on dashboard load.
Plan Definitions
| Plan | Reports | Drills | Coaching |
|---|---|---|---|
| Free | 3 lifetime | Basic | None |
| Starter | 10/month | Full library | AI coach |
| Pro | Unlimited | Full + custom | AI + human |
| Elite | Unlimited | Full + custom | Priority 1-on-1 |
Academic References & Studies
The SmartSwing AI engine draws from established sports biomechanics research:
Pose Estimation & Motion Analysis
- Cao, Z. et al. (2019) — "OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields." IEEE TPAMI. Foundation for real-time multi-keypoint body tracking.
- Google Research (2021) — "MoveNet: Ultra fast and accurate pose detection model." TensorFlow Hub. The primary pose model used by SmartSwing for 17-keypoint detection.
- Bazarevsky, V. et al. (2020) — "BlazePose: On-device Real-time Body Pose tracking." CVPR Workshop. Alternative MediaPipe pose model for cross-platform fallback.
Tennis Biomechanics
- Elliott, B. (2006) — "Biomechanics and Tennis." British Journal of Sports Medicine, 40(5). Comprehensive review of tennis stroke mechanics, kinetic chain principles, and injury prevention. Key source for joint angle benchmarks and optimal ranges.
- Reid, M., Elliott, B., & Crespo, M. (2013) — "Mechanics and Learning Practices Associated with the Tennis Forehand: A Review." Journal of Sports Science & Medicine, 12(2). Source for forehand grip-specific mechanics and wrist extension patterns.
- Knudson, D. & Blackwell, J. (2005) — "Upper Extremity Angular Kinematics of the One-Handed Backhand Drive in Tennis Players With and Without Tennis Elbow." International Journal of Sports Medicine. Elbow angle and wrist lag benchmarks for backhand analysis.
- Abrams, G. et al. (2011) — "Biomechanics of the Tennis Serve." Sports Health, 3(6). Serve kinematic chain timing, shoulder rotation, and pronation mechanics. Foundation for serve-specific scoring weights and Continental grip enforcement.
- Landlinger, J. et al. (2010) — "Key Performance Indicators for Tennis." Journal of Sports Science & Medicine, 9. Source for KPI definitions and benchmark calibration across skill levels.
Grip Biomechanics
- Groppel, J.L. (1992) — "High Tech Tennis." Leisure Press. Foundational reference on grip mechanics and their effect on ball contact, spin production, and shot selection.
- Brody, H. (2002) — "The Physics and Technology of Tennis." Racquet Tech Publishing. Physics of grip pressure, wrist action, and contact geometry. Source for grip-contact height correlations.
- Vergauwen, L. et al. (1998) — "Wrist and Forearm Muscle Activity in Tennis." British Journal of Sports Medicine, 32. EMG studies of forearm pronation across grip types. Foundation for the pronation proxy indicator.
Kinetic Chain & Power Transfer
- Kibler, W.B. (1995) — "Biomechanical Analysis of the Shoulder During Tennis Activities." Clinics in Sports Medicine, 14(1). Hip-shoulder separation (X-Factor) research and proximal-to-distal sequencing principles.
- Fleisig, G. et al. (2003) — "Kinematic and Kinetic Comparison Between Baseball Pitching and Football Passing." Journal of Applied Biomechanics. Cross-sport validation of kinetic chain principles applied to tennis serve mechanics.
- Putnam, C.A. (1993) — "Sequential Motions of Body Segments in Striking and Throwing Skills." Journal of Biomechanics, 26. Theoretical foundation for proximal-to-distal activation sequencing used in kinematic chain scoring.
Scoring & Performance Assessment
- Hughes, M. & Franks, I. (2004) — "Notational Analysis of Sport." Routledge. Framework for performance quantification and statistical analysis in racquet sports.
- O'Donoghue, P. (2010) — "Research Methods for Sports Performance Analysis." Routledge. Methodological foundation for z-score percentile calculations and benchmark normalization.
Glossary
| Term | Definition |
|---|---|
| X-Factor | Angular separation between hip and shoulder rotation axes during the swing loading phase |
| Kinetic Chain | Sequential activation of body segments from proximal (hips) to distal (wrist) for power transfer |
| Contact Frame | The frame at which peak wrist speed occurs — proxy for ball-racquet contact moment |
| COM | Center of Mass — weighted average of shoulder and hip midpoints (40/60 split) |
| Pronation | Inward rotation of the forearm — critical for serve power and spin |
| Continental Grip | Base knuckle on bevel 2 — the universal grip for serves, volleys, and slices |
| Semi-Western Grip | Base knuckle on bevel 4 — default modern forehand grip for topspin |
| Swing Plane | Angle of the racquet path relative to horizontal — steeper planes produce more topspin |
| SmartSwing Score | Composite 0-100 metric combining biomechanics (62%), timing (14%), footwork (8%), positioning (8%), readiness (8%) |
| Diagonal Covariance | Gaussian classifier that treats each indicator independently — assumes no cross-indicator correlation |
SmartSwing AI — Proprietary & Confidential. This document is for internal engineering reference only.
Generated April 8, 2026. Engine v2.0.