Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
> ([Claude Code](https://claude.com/claude-code)).

A GTA Online companion that runs in your browser. Keep it open while you play, and it tracks your
businesses, safes and cooldowns, so you know when stock is full, a safe needs emptying or a heist
is ready again.
businesses, safes and cooldowns, so you know when stock is full or a safe needs
emptying.

> **Status:** early development. Not usable yet; see the [issues](https://github.com/ToothyDev/LSOS/issues) for what's planned.

Expand Down
19 changes: 19 additions & 0 deletions docs/decisions/021-no-heist-tracker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# 021: No heist cooldown tracker, no Heists tab

2026-10-15, issue #12.

## Decision

- **No heist cooldowns are tracked**, and the Heists tab is removed. An old `#/heists` link
opens the default tab.
- The research (sources on issue #12) found one cooldown worth a timer: Cayo Perico, 144 minutes
solo or 48 with a crew, on real time. Every other heist has 48 minutes with a crew and no
sourced solo value, or no cooldown at all.
- **Not modelled:** the weekly completion bonus from The Kortz Center Heist update (more money for
the first finale each week), and the 7-day Cayo Perico period with worse loot. The second
would need its own separate tracker.

## Why

A list for one real cooldown is not worth a tab. A new issue can bring the tab back if one of the
items above turns out to be worth tracking.
1 change: 1 addition & 0 deletions docs/decisions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ free number, add one line below. **Replacing one:** write a new decision, then m
- [018](018-money-fronts.md) Money Fronts: one Car Wash safe card on the Safes tab, paid by the fronts and other businesses, heat per front (est.), missions and legal jobs
- [019](019-owned-value-bonus.md) Money Front value bonus: owning Car Wash or Smoke on the Water adds 35% to Counterfeit Cash or Weed, far value adds the bonuses (est.), Helitours left out
- [020](020-shut-down.md) Shut-down businesses: a Running/Shut down button next to Owned for biker businesses and the Bunker; shutting down clears the stock; no production, card greyed, nightclub goods locked, nothing to the Money Fronts safe
- [021](021-no-heist-tracker.md) No heist cooldown tracker: only Cayo Perico has one worth a timer; Heists tab removed
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<meta property="og:title" content="LSOS: GTA Online business tracker" />
<meta
property="og:description"
content="Keep it open while you play: stock, supplies, safes and cooldowns at a glance, so you know when to sell, collect or start the next heist. Free, no account, runs in your browser."
content="Keep it open while you play: stock, supplies, safes and cooldowns at a glance, so you know when to sell or collect. Free, no account, runs in your browser."
/>
<meta property="og:image" content="https://lsos.toothy.dev/og-image.png" />
<meta property="og:image:type" content="image/png" />
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"private": true,
"license": "MIT",
"version": "0.0.0",
"description": "Los Santos Operating System: a GTA Online business, heist and cooldown tracker that runs in your browser.",
"description": "Los Santos Operating System: a GTA Online business and cooldown tracker that runs in your browser.",
"type": "module",
"engines": {
"node": ">=22"
Expand Down
2 changes: 1 addition & 1 deletion src/lib/tabs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe('tabFromHash', () => {
})

it('accepts a hash without the slash', () => {
expect(tabFromHash('#heists')).toBe('heists')
expect(tabFromHash('#safes')).toBe('safes')
})

it('falls back to the default tab for empty or unknown hashes', () => {
Expand Down
3 changes: 1 addition & 2 deletions src/lib/tabs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ export const TABS = [
{ id: 'overview', label: 'Overview' },
{ id: 'businesses', label: 'Businesses' },
{ id: 'safes', label: 'Safes' },
{ id: 'heists', label: 'Heists' },
{ id: 'weekly', label: 'Weekly' },
{ id: 'settings', label: 'Settings' },
] as const
Expand All @@ -11,7 +10,7 @@ export type TabId = (typeof TABS)[number]['id']

export const DEFAULT_TAB: TabId = 'overview'

/** Maps a location hash like `#/heists` to a tab id, falling back to the default tab. */
/** Maps a location hash like `#/safes` to a tab id, falling back to the default tab. */
export function tabFromHash(hash: string): TabId {
const id = hash.replace(/^#\/?/, '')
return TABS.find((tab) => tab.id === id)?.id ?? DEFAULT_TAB
Expand Down
Loading