A complete toolkit for iRacing sim racers — from raw telemetry to actionable insights.
Upload .ibt files and compare laps side-by-side with interactive graphs for speed, throttle, brake, tyres, steering angle, and more.
Get AI-powered coaching insights that compare your laps and identify where you can gain time — powered by Amazon Bedrock.
Explore race results, qualifying times, lap-vs-iRating scatter plots, and car distributions — shareable as PNG cards via Discord bot.
Slash commands for driver cards, series cards, BOP charts, and calendar lookups — directly inside your Discord server.
Native Go application that watches your iRacing folder and auto-uploads .ibt telemetry files to the cloud as you race.
Browse the full iRacing schedule with series filtering, search for any driver by name, and view detailed race history.
Tractix Racing — a bang average team of sim racers who pride themselves on racing fairly, having fun, and being just quick enough to be annoying to their opponents.
Tractix Racing is a small, close-knit sim racing team competing in leagues for the love of the sport. Our focus is on camaraderie, clean racing, and enjoying every lap together.
Full-stack engineer and 4K GT3 driver. Built every layer of Telemetry Ace — from the Next.js frontend and AWS infrastructure to the Go desktop app and Discord bot.
6K GT3 & Porsche Cup driver. Liable to find the shadowrealm when he features on stream.
3K GT3 driver.
Team manager.
Every technology, service, and tool powering Telemetry Ace — from the browser to the cloud.
Requests flow from clients through the AWS edge layer into serverless compute and data stores.
React meta-framework powering SSR, API routes, and static generation. Deployed on AWS Amplify with server-side rendering.
Component-based UI library driving the entire client-side experience.
Strict type-safe JavaScript used across the entire codebase — frontend, API routes, Lambda functions, and the Discord bot.
Utility-first CSS framework for rapid, consistent styling with a custom dark/light theme system.
Low-level D3-powered React visualisation primitives used for telemetry graphs, scatter plots, and brush-based zoom controls.
Interactive map rendering for satellite-view track maps with GPS coordinate overlays.
Clean, flexible icon library used throughout the UI.
Converts JSX components to SVG at the edge — the engine behind every card image rendered for Discord and web export.
Client-side DOM-to-PNG capture powering the "Download PNG" and "Copy" buttons on the Race Card page.
Server-side endpoints for card generation, calendar data, search, and telemetry processing — deployed as Amplify SSR compute.
Handles Discord and Twitch OAuth sign-in with encrypted sessions stored in DynamoDB.
OAuth2 integration fetching race results, series schedules, driver stats, and lap data from iRacing's official API.
Server-side parser for iRacing .ibt binary telemetry files — extracts laps, channels, and session metadata.
Containerised Lambda using Satori + Sharp to render driver and series card images as PNGs for Discord embeds.
Lambda function invoking Amazon Bedrock and Comprehend for AI-powered telemetry coaching insights.
Hosts the Next.js app with SSR compute. Auto-builds on every GitHub push with environment variable injection and custom domain SSL.
5 buckets handling telemetry file uploads (presigned URLs), processed data & card image cache, desktop app releases, static assets, and inbound email storage.
4 on-demand tables: auth sessions/users, saved laps, iRacing race results (with GSI), and pre-computed weekly stats.
8 functions covering file storage, ibt processing, AI analysis, page-hit tracking, iRacing data sync (hourly cron), stats aggregation, email forwarding, and contact forms.
REST API for 5 endpoints plus an HTTP API for the card image Lambda — all with CORS and stage deployments.
CDN distribution with S3 origin and API Gateway integration for low-latency global delivery.
Two hourly cron schedules triggering iRacing results sync and stats aggregation Lambdas automatically.
Two container registries — one for the card-gen Lambda image, one for the Discord bot image.
Runs the Discord bot as a long-lived container (0.25 vCPU / 512 MB on Fargate Spot) with auto-restart.
Inbound email receipt rules (S3 + Lambda forwarder) and outbound email for the contact form, with DKIM/SPF verification.
Foundation model invocation for AI-powered telemetry analysis and coaching insights.
Centralised logging for all Lambdas and ECS tasks, plus a custom metrics dashboard tracking page views.
Full-featured Discord API client powering slash commands for driver cards, series cards, BOP charts, and calendar lookups.
/driver, /series, /bop — each generates a rich card image PNG embedded directly into Discord.
Runs 24/7 on Fargate Spot with Docker multi-stage builds, ECR image hosting, and VPC networking.
Compiled desktop uploader application with system tray integration for automatic .ibt file detection and upload.
Custom Go library for parsing iRacing .ibt binary telemetry files — extracts headers, ticks, channels, and car setup YAML.
Uses getlantern/systray for native Windows system tray presence with go-toast notifications.
All AWS infrastructure defined as code — S3, DynamoDB, Lambda, API Gateway, ECS, ECR, CloudFront, EventBridge, SES, IAM roles, VPC, and more. ~1500 lines of HCL.
Multi-stage builds for the card-gen Lambda (Node.js + Sharp native binaries) and Discord bot containers.
Every push to main triggers an Amplify build & deploy. Card Lambda and Discord bot use manual deploy.bat scripts with ECR push.
Docker-based local AWS emulation (S3 + DynamoDB) for development without cloud costs.
Consistent code quality and formatting across TypeScript, with eslint-config-next and Prettier integration.