Wiki under construction. Many concepts here are from alpha 0.2 and may still change. The wiki will be finalised for version 1.0 — for now it's here to help closed testers and, later, early-access players find their way around. For the most up-to-date and accurate info, join the Discord — that's where changes are announced first and where you can ask directly.

Join the Discord for the latest info

Career Desktop & Sidebar

The Win95 sidebar and desktop — every app icon, the department gauges, the taskbar, and what is locked in which phase.

Work in progress. First draft is here, but content may evolve and screenshots are still being added. Spotted something wrong? Tell us on Discord.
On this page

The sidebar is the 180-pixel Win95 column pinned to the left of every career screen: your team header, the app list, the department gauges, the taskbar clock and the budget line. The Desktop is the old icon screen it grew out of — still reachable, still keyboard-driven, but no longer the default view. This page is the navigation map: every app, where it goes, when it is locked, and how the app area scrolls.

How to open it

  • The sidebar is always there on career screens that declare has_sidebar() — the Hub, every app, every profile page. Race-weekend screens (live sessions, run plans, podium, debrief) do not draw it.
  • The Desktop (the icon field over the background image) is the screen behind the sidebar when no app is open. It is reached implicitly by the phase-transition flow; you will normally see the Hub instead.
  • The Weekend Loadout is a full-page screen with no sidebar.

The sidebar, top to bottom

1. Team header

PFS <Team Name> over a status line that changes with the phase:

StateStatus line
Mid-season windowSeason N — Free Weekend — Turn n/3
In seasonSeason N — GP n/20
Season overSeason N — Complete
Phase 2 or 3Negotiation — Turn X/10 (the two phases share one window)
Any other phasePhase N/6 — Turn X/5 (turn part only on multi-turn phases)

2. The app list

Eighteen entries, in one fixed order that never changes between pre-season and season:

#EntryOpens
15HubCareer Hub
5NewsPFS Media
4EmailPFS Mail — suffixed (N) when there is unread mail
11StandingsCompetition
20PFS SeriesSeries page
12CalendarCalendar
6FinanceFinance
10CarCar app — also the entry point for R&D
9TeamMy Team
2ScoutingScouting
0InfrastructureInfrastructure
18AcademyDriver Academy
1MarketingMarketing — the merged Sponsors + Suppliers app
14World DataWorld Data
17Bug Reportthe bug-report packager
7 / 8End Phase / Next Turn / Next GP / Free Weekend / Next Seasonadvances the career
19SettingsCareer Settings
16Log Outquit to menu, via the Hub’s confirmation dialog

Two legacy icons no longer have their own entry: Suppliers (folded into Marketing since 0.4.1) and R&D (the Car icon opens the merged Car/R&D app).

Button styling tells you the state at a glance:

  • Raised, plain beige — normal.
  • Raised with a warm accent and bold text — the suggested app for the current pre-season phase: Infrastructure in phase 1, Marketing in phases 2 and 3, Scouting in phase 4, the advance button in phase 5, R&D in phase 6. No suggestion is shown in season.
  • Sunken red with white bold text — the app currently open.
  • Flat and muted — locked. Clicking pops the reason.

3. Taskbar clock

A sunken Win95 tray well showing your system clock (HH:MM). In a multiplayer career it shows the shared-turn countdown instead, turning red under a minute.

4. Department gauges

Six sunken wells, each a read-out with a hover tooltip and a click route:

GaugeShowsTooltipClick opens
HammerN WUEngineering — Work Units left for weekend repairsCar / R&D
FlaskN WUR&D — WU left for designs and improvements (private-testing maintenance is charged at each race weekend)Car / R&D
Magnifierfree/totalScouting — observation capacityScouting
Handshakefree/totalMarketing — WU for negotiation missionsMarketing
(money)$X/GPEstimated net income per Grand Prix — green if ≥ 0, red belowFinance
StarNTeam reputation — drives sponsor deals, driver interest and prize moneyMy Team

The R&D figure is rnd_wu_remaining minus the private-testing reserve. It is deliberately not double-reserved: the testing maintenance is already debited for real at each post-race refill, and an extra display-side reserve used to make this gauge disagree with the R&D tabs.

The gauges are read-outs, not focus stops — they were removed from the gamepad focus ring because they sat between the app list and nothing and swallowed D-pad presses meant for the apps. Mouse clicks still route.

5. Budget line

Budget: $X at the very bottom — green while positive, red once negative.

Which apps are locked, and why

Every app is visible from phase 1. Locked ones render dimmed and pop a Win95 dialog naming the unlock. Locks apply only during the pre-season — once the season starts, locked_reason returns nothing and every app is open.

AppLocked whenMessage
Infrastructureafter phase 1”The facilities plan is locked after Phase 1 — Infrastructure. It opens again once the season starts.”
Marketingbefore phase 2”Available in Phase 2 — the negotiation window opens (Marketing: sponsors & suppliers).”
Marketingafter phase 3”The negotiation window is closed. Marketing opens again once the season starts.”
Teambefore phase 5, and only in season 1”Available from Phase 5 — Car Review, once your driver line-up is locked in.”
Carbefore phase 5”Available from Phase 5 — Car Review, once the season car build begins.”
Academyafter phase 1, while the Driver Academy department is closed”Opens once the Driver Academy department is built (Infrastructure, Phase 1).”
Standings, World Dataalways, in pre-season”Available once the season starts.”

The My Team rule is the subtle one: from season 2 onward the team carries a standing line-up through the rollover, so has_roster (season ≥ 2) unlocks it in every pre-season phase. Only a brand-new career has nothing to show before the first driver negotiation.

The logic behind the lock list is the phase model itself: a phase is a window, and it closes. Infrastructure spending is committed at the end of phase 1; the sponsor/supplier negotiation window spans phases 2–3 and expires at the end of phase 3 (unclaimed ready deals are withdrawn by email, missing supplier categories get emergency contracts). You cannot go back and redo a closed window.

Apps opened from other apps

Several screens are not in the sidebar at all and are only reachable through a link:

ScreenReached from
Driver Profileany clickable driver name, a news headline, a mail’s driver card, Scouting, Standings
Team Profileany clickable team name, news, Standings
Circuit Profilethe Hub’s next-GP name, the Calendar, the Debrief
Manufacturer ProfileWorld Data → Manufacturers
Country Profileany clickable flag, the PFS Series page’s Countries tab
Development SeriesWorld Data → Series, and the PFS page’s ladder strip
Mid-Season Windowthe Free Weekend advance turns after GP 10
R&D tabs (Inventory, Production, Repair, Improve, Design, Projects, Private Testing)the Car / R&D app
The Mod Editor and Circuit Editorthe main menu only (Modding Tools / Dev Tools), never from a career

Mails can also deep-link: a delivered-part mail jumps to R&D → Inventory, a design-ready mail to R&D → Production, a scouting mail to Scouting → Missions, a finance mail to Finance, an academy report to the Academy app, and a negotiation mail to Marketing → Missions.

The generic app scroll

Career apps do not clip. Instead, every sidebar screen except the Desk opts into one shared vertical page scroll:

  • The mouse wheel scrolls, but only while the cursor is right of the sidebar (or a gamepad is active) — so the wheel never fights the sidebar.
  • A purple Win95 scrollbar appears on the right edge, and only when the content genuinely overflows: the range is content_height − (screen height − pinned footer height), and anything under a 16 px tolerance counts as “fits”. That tolerance exists because app templates use min-height:100%, so the status bar always reaches the screen bottom whether or not there is real overflow.
  • The scroll position resets to 0 whenever you change app.
  • The range is measured from the real laid-out content height, not from the lowest pixel drawn. An earlier version used the on-screen extent, which grew by 16 px on every scroll step and let the page run off into empty black space.
  • Each app open (and any change in the range) logs one [app-scroll] <Screen> ui_scale=… viewport_h=… content_h=… overflow=… max_scroll=… line to debug.log. If a list looks cut off at 150 % UI scale, that line is the diagnostic.

One documented exception: the Scouting app’s Browse tab virtualises its 400-row list with its own row window and scrollbar, so it opts out of the page scroll. Every other Scouting tab opts back in — two hand-rolled windowing attempts sized by estimated row heights kept cutting the Missions list at the bottom; the generic scroll measures instead of estimating.

Controls

InputEffect
MouseClick any app button, gauge, or Desktop icon
D-pad up/downSwitch app directly, from the Hub or any open app — skipping locked apps, the advance button and Log Out
Start (≡)Fires End Phase / Next GP from any app screen
AOpen the highlighted entry (Desktop cursor)
B / Escape / QBack out; on the Desktop it returns to the main menu
SToggle the Desktop status overlay

The D-pad refuses to land on the advance button or Log Out on purpose: both are irreversible, and both must be a deliberate A press. A modal dialog suppresses Start for the same reason — the dialog owns its buttons.

Advanced

  • The Desk owns its own cursor. On the Desktop screen, the highlighted sidebar entry is the desk cursor’s hover, not an open app, and the sidebar’s D-pad handler stands down (nav_claimed). Everywhere else the sidebar drives.
  • An app with no sidebar icon still works with the pad. A screen whose icon is not in the visible set (the Academy, for instance) starts D-pad navigation from the top of the list rather than disabling it — an earlier version left the sidebar unusable from such screens until the mouse rescued it.
  • The sidebar template is cached and only re-parsed when its variables change, which is why the clock ticks but the list does not flicker.
  • Log Out never quits directly. It routes to the Hub and raises the quit confirmation there, so you always get “Your progress has been saved” before leaving.
  • Locks are pre-season only. If an app you expect to be closed is open, check whether the season has started — season_state being present disables the whole lock table.
  • Impersonation (dev builds). With --dev, F7 impersonates an AI team; while impersonating, End Phase / Next GP are inert and a red banner is drawn across the top.
  • screen_label() names every screen for the GPU watchdog line in debug.log — including telling a live race (RaceLive) from a headless simulate (RaceSim). If you file a bug about memory growth, the label in that log line identifies which screen was open.

Common mistakes

  • Hunting for a Suppliers icon. There isn’t one — Marketing tab 3 is Suppliers, tab 4 is the Supplier Market.
  • Hunting for an R&D icon. There isn’t one either — the Car icon opens the merged Car/R&D app, and it carries R&D’s phase-5 unlock rule.
  • Assuming a dimmed app is broken. Click it: the dialog names the exact phase it opens (or closes).
  • Trying to redo Infrastructure in phase 3. The facilities plan is committed at the end of phase 1 and does not reopen until the season starts.
  • Scrolling with the cursor over the sidebar. The wheel is deliberately ignored there; move right of the 180 px column.
  • Expecting the wheel to work on the Desktop. The Desk keeps a fixed layout and is the one sidebar screen excluded from the page scroll.
  • Pressing Start to skip a dialog. Modals suppress it; answer the dialog first.

See also