<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: GridSherpa</title>
    <description>The latest articles on DEV Community by GridSherpa (@gridsherpa).</description>
    <link>https://dev.to/gridsherpa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4126929%2F6784d4c7-98bc-4b0a-9fcd-19eb8e96b312.png</url>
      <title>DEV Community: GridSherpa</title>
      <link>https://dev.to/gridsherpa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gridsherpa"/>
    <language>en</language>
    <item>
      <title>I built a one-click switch between my work and sim-racing PC setups</title>
      <dc:creator>GridSherpa</dc:creator>
      <pubDate>Wed, 16 Sep 2026 07:57:05 +0000</pubDate>
      <link>https://dev.to/gridsherpa/i-built-a-one-click-switch-between-my-work-and-sim-racing-pc-setups-5caa</link>
      <guid>https://dev.to/gridsherpa/i-built-a-one-click-switch-between-my-work-and-sim-racing-pc-setups-5caa</guid>
      <description>&lt;p&gt;If you use the same Windows PC for work and sim racing, getting ready to drive can turn into a checklist: rearrange monitors, change the default speakers and microphone, start companion apps, and then reverse the whole thing when you're done.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Sherpa Manager&lt;/strong&gt; to make that switch a repeatable profile rather than a ritual. It's a standalone, open-source Windows utility linked from the GridSherpa site. GridSherpa helps you explore iRacing schedules; Sherpa Manager solves a different problem: changing the &lt;em&gt;PC setup&lt;/em&gt; around a racing session.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a profile saves
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A display layout captured from your current Windows setup.&lt;/li&gt;
&lt;li&gt;Playback and recording devices, so a headset/mic can belong to a racing profile and desk speakers to a work profile.&lt;/li&gt;
&lt;li&gt;Companion apps to launch, with optional apps to close on a switch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It starts with Work, iRacing, and ACC profiles, and you can create your own. Profiles can be activated from the app, a keyboard shortcut, or a desktop shortcut. The app also supports tray controls and a Restore Last action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the display test matters
&lt;/h2&gt;

&lt;p&gt;Monitor configuration is the risky part of a one-click switch: a wrong layout can leave you looking at the wrong screen. Sherpa Manager asks you to arrange your displays first and capture that known-good state. When you test a layout, you have 10 seconds to keep it; otherwise the display change reverts. If a monitor, cable, or driver changes later, recapture the layout on that PC.&lt;/p&gt;

&lt;p&gt;The NVIDIA Surround option needs a compatible NVIDIA GPU and driver; it isn't a promise that every display configuration will work on every rig.&lt;/p&gt;

&lt;h2&gt;
  
  
  A sensible first run
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Arrange your displays in Windows or NVIDIA settings, then capture a Work layout.&lt;/li&gt;
&lt;li&gt;Set the playback and microphone devices, and add the apps you want for that profile.&lt;/li&gt;
&lt;li&gt;Repeat for Racing, test the display change, and only keep it if it looks right.&lt;/li&gt;
&lt;li&gt;Save anything open before activating a profile if you enable &lt;strong&gt;Close on switch&lt;/strong&gt;; apps in that list may be force-closed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sherpa Manager runs on 64-bit Windows 10/11. The release has an installer and a portable build that share profiles. It is MIT-licensed, requires no account, and has no telemetry. The downloads are currently unsigned, so Windows SmartScreen may warn; inspect the source and release details before deciding whether to install. It is not affiliated with iRacing or ACC.&lt;/p&gt;

&lt;p&gt;You can find &lt;strong&gt;Download Sherpa Manager for Windows&lt;/strong&gt; in the &lt;a href="https://grid-sherpa.com/" rel="noopener noreferrer"&gt;GridSherpa header&lt;/a&gt; or go directly to the &lt;a href="https://github.com/jaksdhflkjahsdfkjahsdfkjh/SherpaManager" rel="noopener noreferrer"&gt;source and README&lt;/a&gt; and &lt;a href="https://github.com/jaksdhflkjahsdfkjahsdfkjh/SherpaManager/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt;. If you run a mixed work/racing PC, I'd be interested in what part of the switch still takes manual effort for you.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Turned iRacing’s Season PDF Into a Local-Time Schedule Explorer</title>
      <dc:creator>GridSherpa</dc:creator>
      <pubDate>Tue, 15 Sep 2026 21:59:00 +0000</pubDate>
      <link>https://dev.to/gridsherpa/how-i-turned-iracings-season-pdf-into-a-local-time-schedule-explorer-400m</link>
      <guid>https://dev.to/gridsherpa/how-i-turned-iracings-season-pdf-into-a-local-time-schedule-explorer-400m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx5itk06mj1ir8ieihlvk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx5itk06mj1ir8ieihlvk.jpg" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
When iRacing publishes a new season, the source is comprehensive—but it is still a PDF designed for reading, not querying.&lt;/p&gt;

&lt;p&gt;I built GridSherpa to turn that document into answers such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What can I race today?&lt;/li&gt;
&lt;li&gt;Which sessions start at a sensible time in my timezone?&lt;/li&gt;
&lt;li&gt;Which purchase unlocks the most weeks for the series I actually run?&lt;/li&gt;
&lt;li&gt;Which team events need another driver?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 2026 Season 4 import currently contains 155 official series and 2,002 scheduled series-weeks. Getting there required more than extracting a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PDF is a document, not an API
&lt;/h2&gt;

&lt;p&gt;GridSherpa’s backend is TypeScript and Express. The import pipeline uses &lt;code&gt;pdf-parse&lt;/code&gt;, then normalizes the extracted text into series and week records.&lt;/p&gt;

&lt;p&gt;The first pass reads the table of contents to recover category, license group, and series order. A second pass locates each series body and parses its preamble and week blocks.&lt;/p&gt;

&lt;p&gt;That sounds straightforward until layout becomes data.&lt;/p&gt;

&lt;p&gt;Track names can wrap across physical lines. A hyphenated car name can be split in the middle of a word. Weather and rule text wrap differently depending on length. Some series change cars by week. Offseason documents label consecutive calendar days as “Week 1” through “Week 7.”&lt;/p&gt;

&lt;p&gt;Each of those cases needs a narrow rule. A broad cleanup regex may make one row look better while silently corrupting another.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important distinction: simulation time is not start time
&lt;/h2&gt;

&lt;p&gt;The schedule can contain an in-session simulated date and clock. That value must not be treated as UTC and converted into the driver’s timezone.&lt;/p&gt;

&lt;p&gt;The published race cadence—such as “every two hours at :45”—is a separate concept.&lt;/p&gt;

&lt;p&gt;GridSherpa stores the simulated clock without a timezone and derives actual event occurrences from the cadence. Keeping those concepts separate prevents a plausible-looking but incorrect local schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Normalize first, trust later
&lt;/h2&gt;

&lt;p&gt;The importer produces normalized JSON, but the runtime does not trust it simply because TypeScript generated it.&lt;/p&gt;

&lt;p&gt;The loader validates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real ISO dates&lt;/li&gt;
&lt;li&gt;positive week numbers&lt;/li&gt;
&lt;li&gt;non-empty series and track names&lt;/li&gt;
&lt;li&gt;safe artwork filenames&lt;/li&gt;
&lt;li&gt;valid optional time multipliers&lt;/li&gt;
&lt;li&gt;duplicate series and week numbers&lt;/li&gt;
&lt;li&gt;bounded day spans for daily offseason rows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because generated data can still be truncated, hand-edited, or copied from an incompatible release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make season changes transactional
&lt;/h2&gt;

&lt;p&gt;A new schedule affects more than one file. The normalized schedule, artwork, and generated SEO pages need to describe the same release.&lt;/p&gt;

&lt;p&gt;The import command supports a dry run. The production workflow stages and validates generated outputs before promotion, and one exclusive lock covers the full process so concurrent imports cannot interleave releases.&lt;/p&gt;

&lt;p&gt;Schedule data changes only after a reviewed PDF import is promoted. GridSherpa deliberately does not pretend to be a live iRacing API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn the normalized data into decisions
&lt;/h2&gt;

&lt;p&gt;Once the schedule is structured, the useful product work begins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local-time Today and This Week views&lt;/li&gt;
&lt;li&gt;filters for category, license, car, track, weekday, and time&lt;/li&gt;
&lt;li&gt;season-over-season diffs&lt;/li&gt;
&lt;li&gt;track-use and buying analysis&lt;/li&gt;
&lt;li&gt;calendar subscriptions and reminders&lt;/li&gt;
&lt;li&gt;team-race share cards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Season 4, the report shows 141 cars, 251 track configurations, and 17 rookie series. The global venue ranking is interesting, but it is not a buying recommendation: disciplines reuse tracks differently, so the useful answer appears only after filtering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://grid-sherpa.com/season-report?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=season_4_build_20260916" rel="noopener noreferrer"&gt;Explore the current Season 4 report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jaksdhflkjahsdfkjahsdfkjh/GridSherpa" rel="noopener noreferrer"&gt;View the GridSherpa source on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have built an importer for a document that was never intended to be a database, I would be interested in the edge case that caused you the most trouble.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;GridSherpa is an independent fan-built tool and is not affiliated with iRacing. The Season 4 figures measure scheduled use, not participation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
