How I designed a telemetry platform for Indian karting tracks.
Indian go-karting tracks are infrastructure-rich and data-poor. Venues like F9 Go Karting (Gurgaon), Meco Kartopia (Bangalore), and Ajmera IndiKarting (Mumbai) have RFID timing systems installed — but the data those systems generate never leaves the timing box. Track operators manage revenue on gut feel and WhatsApp messages from the cashier. Drivers receive a paper lap slip, glance at it, and forget it.
KartMetrix is the middleware layer between timing hardware and business intelligence — a B2B2C telemetry platform with two customers: the track operator (B2B, paying SaaS) and the driver (B2C, free app), connected by a flywheel where engaged drivers drive repeat sessions which increase operator revenue and willingness to pay.
I designed it end-to-end: stakeholder scoping, hardware architecture, feature prioritisation, unit economics, and a working prototype. This page covers the decisions — what I built, what I cut, why, and what I learned about building for two customers simultaneously.
MVP Scoping
The philosophy: solve the operator's revenue clarity problem first. Driver engagement is the retention flywheel — but it requires operator data to be meaningful. Sequence matters in B2B2C.
✅ In scope — v1
Session analytics dashboard
Core operator value prop — immediate ROI visibility without calling the cashier.
Driver leaderboard (per-track)
Primary driver retention hook. Social competition drives repeat sessions.
Daily / weekly revenue summary
Replaces WhatsApp cashier reports. Builds the daily-check-in habit with operators.
WhatsApp lap-time delivery
Zero-friction driver activation — no app download, no friction. Post-session message with deep link.
Session utilization heatmap
Visual trigger for the pricing conversation. "You run at 28% on Tuesday afternoons."
Basic driver profiles
Foundation for LTV scoring in V2. Needs 90+ days of session history before it's useful.
❌ Explicitly descoped
Multi-track franchise support
Smaaash has 10+ locations but each is operationally independent. Cross-track analytics adds API complexity without V1 value. Revisit when 3+ Enterprise customers exist.
White-label driver apps
N custom apps = N maintenance burdens for a 2-person team. One KartMetrix app builds brand equity and reduces driver CAC through word-of-mouth.
Global cross-track leaderboard
Technically feasible but meaningless without normalisation — Indian tracks don't run identical kart models or track lengths. Needs sector data standards first.
Race replay / video sync
RaceFacer offers this in Europe. Camera hardware + high storage costs. Out of scope until Enterprise tier validates the demand.
The deliberate sequencing trade-off
Shipping the driver app alongside the operator dashboard creates a cold-start problem — the leaderboard is empty at launch. The mitigation: pre-seed driver profiles with historical session data from the existing MyLaps/AMB software on day 0. The bet is that even a partially populated leaderboard is enough social proof to trigger the engagement loop before real-time data accumulates.
Technical Architecture
Data flow — hardware to dashboard
Kart crosses RFID loop
Timing unit (AMB or MyLaps) outputs raw crossing event: [kart_id, loop_id, unix_timestamp_ms]. This is the ground truth input.
Edge device parses serial port
Raspberry Pi 4B running Go daemon. Normalises events to common schema, buffers to local SQLite during connectivity gaps, forwards via MQTT QoS 2.
MQTT broker receives events
AWS IoT Core or self-hosted Mosquitto. Exactly-once delivery guarantee. Fan-out to event processor.
Event processor calculates lap times
Consecutive crossings of start/finish loop by same kart ID → lap duration. Sector loops → sector splits. Session = operator-flagged booking window.
PostgreSQL stores structured data
Normalised schema: sessions → laps → drivers. Enables all analytics queries: utilisation %, driver LTV, revenue trends, leaderboard.
REST + WebSocket serves both clients
Operator dashboard: Next.js API routes + WebSocket for live session feed (2-second intervals). Driver app: REST on-demand; WhatsApp link triggers post-session delivery.
Key constraint — lap time is derived, not measured
Raw event
{ kart_id: "K07", loop_id: "SF", timestamp_ms: 1716547234891 }Lap calculation
lap_time_ms = crossing[n].timestamp_ms
- crossing[n-1].timestamp_ms
// same kart_id, same loop_id (SF = start/finish)Performance target
< 500ms: lap time pushed to dashboard < 2000ms: WebSocket update during live session < 200ms: historical query response
Key technical decisions
Edge cases handled
| Connectivity dropout at track | SQLite buffer on edge device. MQTT replays on reconnect. Deduplication by event UUID prevents double-counting. |
| Duplicate crossing events | Timing units occasionally emit 2 events for the same crossing (mechanical jitter). De-duped by [kart_id, loop_id, timestamp] within a 150ms window. |
| Session boundary ambiguity | Operator explicitly flags session start/end in dashboard. Fallback: auto-close sessions with no crossing events for 20+ minutes. |
| Driver not in system (new transponder) | Kart ID maps to an anonymous "Guest" profile. WhatsApp opt-in flow during checkout creates the driver record retroactively. |
| AMB vs. MyLaps protocol mismatch | Go daemon detects protocol via handshake byte on connection. Loads AMB or MyLaps parser accordingly. No manual configuration at install. |
B2B2C Strategy
The architecture of the business is as important as the architecture of the system. KartMetrix has two customers with opposite incentive structures — understanding how they reinforce each other was the central product challenge.
The flywheel
Track operator installs KartMetrix
Paying B2B customer. Wants session analytics and revenue visibility.
Driver receives WhatsApp lap time post-session
Free B2C user. Sees their lap, sees the leaderboard. No app download required.
Driver returns to improve their ranking
Repeat sessions increase operator utilisation %. Dynamic pricing recommendation becomes more accurate.
Operator revenue increases
Higher utilisation + pricing engine → measurable revenue lift. Operator retains the subscription.
KartMetrix MRR grows
High NRR (>90% target) → predictable ARR growth without continuous re-acquisition.
Operator JTBD
“Help me understand which hours are profitable and which drivers are worth investing in so I can run a tighter operation.”
✗Revenue tracked on gut feel and Excel
✗Off-peak hours run at 20–30% capacity
✗No visibility into driver LTV or return frequency
✗Revenue dashboard = WhatsApp messages from cashier
Driver JTBD
“Show me how I'm improving over time and let me compete with other regulars at my track.”
✗Lap slip is printed, glanced at, forgotten
✗No session history — every race starts from zero context
✗No visibility into track leaderboard between visits
✗Improvement isn't shareable or competitive
Go-to-market: field sales + anchor track model
Phase 0 · Pilot
Month 1–2Sign one anchor track per city at 50% discount for a 60-day pilot in exchange for testimonial rights. Target: F9 Gurgaon (Delhi NCR), Meco Kartopia (Bangalore), Ajmera IndiKarting (Mumbai), Pune Kartdrome. These are the most visible, high-volume tracks in each city — their endorsement carries weight with the rest of the market.
Phase 1 · Proof
Month 3–6Document revenue lift from utilisation improvements and pricing recommendations at pilot tracks. Package results as operator testimonials. Use peer introductions from pilot operators to close the next 5–6 tracks per city. Indian go-karting is a relationship business.
Phase 2 · Scale
Month 7–18Expand to Chennai, Hyderabad, Ahmedabad. Target multi-location operators (Smaaash, High Octane) for Enterprise contracts. Driver app virality — WhatsApp shares of personal-best lap times — starts generating inbound operator interest.
Metrics & Validation
🎯 North Star
Track Operator MRR Retention Rate
Target: >90% net revenue retention at 12 months. An operator who sees measurable revenue improvement retains. An operator who doesn't churn by month 3. This metric surfaces product truth faster than any leading indicator.
Leading indicators — target Month 6
| Session utilisation % change | Primary operator ROI signal. +15% in 90 days of install = product is working | +15% in 90d |
| Driver app DAU/MAU | Flywheel health. High engagement → repeat sessions → operator revenue | 35% |
| WhatsApp opt-in rate | Driver notification reach. Below 75% = onboarding friction at checkout | >75% |
| Driver repeat rate (14-day) | The business outcome. Engaged drivers return. Target: 42% return within 14 days | >42% |
| Avg revenue per driver | LTV trend. Should increase as dynamic pricing activates and LTV segmentation improves offers | +8%/quarter |
| Time to first insight | Operator onboarding quality. Under 2 hours from install to first meaningful dashboard load | <2 hours |
What I learned
B2B2C flywheel mechanics are underappreciated
The driver app isn't a feature — it's the retention mechanism for the operator subscription. Without driver engagement, operators see no value from the platform. This means you can't launch the B2B product and add B2C later. The cold-start problem compounds: empty leaderboard → uninterested drivers → no session uplift → operator churn.
Hardware integration makes or breaks unit economics
I initially underestimated the proprietary protocol problem. AMB and MyLaps don't want third parties reading their data — they want you to pay for their software. The serial bypass is the right call, but it adds a physical support burden that pure SaaS companies don't have. Every track install is essentially bespoke. This is the primary growth bottleneck.
TAM constraints are worth respecting early
India has ~120 commercial karting tracks. 50% market share at Pro tier = ₹60L ARR. This is not a venture-scale business — it's a bootstrapped micro-SaaS with a ceiling. The right conclusion isn't "don't build it" but "build it to be profitable from day one, not venture-scale." The portfolio value is in the reasoning, not the pitch.
Dynamic pricing is the real operator unlock
Off-peak utilisation is the biggest revenue opportunity. A track at 30% capacity from 2–4 PM that improves to 50% through a 15% price reduction adds ~₹4,800/month of incremental revenue — more than half the platform fee. This makes the pricing engine the most important V2 feature, but it requires V1 utilisation data to calibrate.
WhatsApp is the distribution channel in India
Building a native app first would have been wrong. The post-session activation window is 5 minutes. App Store download friction closes that window. Indian consumers have frictionless WhatsApp habits — a message with a deep link to the leaderboard converts at 3–5× the rate of any app store funnel. The PWA approach meets users where they already are.
Roadmap & Strategy
Portfolio self-assessment
Why this works as portfolio
Shows product thinking for a hardware-constrained, dual-stakeholder problem. Demonstrates unit economics reasoning, scoping discipline, and distribution strategy — all grounded in a real market with real TAM constraints.
Why this won't scale as a business
TAM ceiling at ₹60L ARR. Every install is bespoke (hardware complexity caps velocity). Field sales model requires headcount to scale. No network effects — each track is independent.
What I'd do differently
Talk to 10 track operators before writing a line of code. Validate that the "WhatsApp reports from cashier" problem is the real pain — not just an assumed one. The product reasoning is sound, but customer discovery should precede architecture.
A/B experiments to run
V2 priorities
Dynamic pricing engine
RevenueThe biggest operator unlock. Needs V1 utilization data baseline. An off-peak slot at 28% capacity with a 15% price reduction → +₹4,800/month incremental revenue for a 120-session track. More than half the platform fee.
Driver LTV segmentation
RetentionSeparates high-value regulars (>8 sessions/quarter) from one-timers. Enables win-back campaigns ("Rahul hasn't returned in 30 days — send a ₹50 voucher"). Requires 90+ days of driver history before the model is meaningful.
Sector time analysis
DifferentiationRaceFacer parity for enthusiast drivers. Shows where a driver is losing time — corner 3 vs. straight speed. Requires sector loop infrastructure at the track, which isn't universal. Sequenced after V1 validates basic driver engagement.
Championship mode
Session densityOperators can run structured multi-week competitions with points, brackets, and a live championship leaderboard. Adds session density — participants book dedicated practice slots. Needs operator engagement to configure and run.
Kart health dashboard
OperationsAnomalous lap time variance per kart → maintenance alert ("Kart 7 is consistently 2 seconds slower than the fleet — check the engine"). Requires V1 lap data baseline per kart ID before anomaly detection is meaningful.
Monetisation tiers
Target: family-run indoor tracks and smaller outdoor circuits. Platform fee is 7–15% of gross revenue. Setup fee ₹80K (hardware + install). Hardware payback: ~18 months. Designed to get smaller tracks onto the platform and establish session data. Low CAC due to lower sales effort.
The bread-and-butter tier. At 120 sessions × ₹800 = ₹96K gross/month, the platform fee is ~10.4% of gross — justifiable if the dashboard improves utilisation by even 5%. CAC ~₹40K, recovered in 4 months. Expected to be 50% of Phase 1 installs.
Targets Meco Kartopia, Ajmera IndiKarting, Pune Kartdrome. Includes sector analysis, multi-staff accounts, custom reporting, priority support, and a dedicated account manager. Hardware payback: ~5 months. The anchor tier that funds the pilot program.
Platforms referenced