1 Commits
Author SHA1 Message Date
Mr. Lowprofile 48f86c590c feat(fork): fork identity in the app, fork banner, and fork docs
Upstream stays the source of truth; this fork now carries changes that are
visible as its own.

- app/version.js: add BUILD/FORK/UPSTREAM next to an untouched VERSION, so the
  updater keeps comparing against the upstream feed
- app/ui/LanguageSheet.jsx: read-only "About this build" section (fork name,
  build tag, app version, upstream URL), marked with the upstream MODIFIED
  convention
- app/i18n/locales/{en,id}.json: the about.* keys
- assets/banner.svg: fork banner for the social preview
- README.md: fork notice with upstream credits intact; FORK-NOTES.md and
  CHANGELOG.md added
2026-10-16 19:24:50 +07:00
8 changed files with 170 additions and 20 deletions

No files matched your search

+31
View File
@@ -0,0 +1,31 @@
# Changelog
Changes made in this fork on top of [MyLuxy/overdrive](https://github.com/MyLuxy/overdrive).
Upstream's own history is in its [releases](https://github.com/MyLuxy/overdrive/releases);
this file only records the fork's additions. See [FORK-NOTES.md](FORK-NOTES.md) for what each
change touches.
## Unreleased
Nothing yet.
## mrlowpr.1 — 2026-10-16
First fork build. Starts from upstream `v1.0.5` (`4d3ced0`).
### Added
- **About this build** section in the settings sheet, showing the fork name, the fork build
tag, the app version and the upstream URL, so a fork build is never mistaken for an
upstream build.
- `BUILD`, `FORK` and `UPSTREAM` exports in `app/version.js`. `VERSION` deliberately left at
`1.0.5` so the updater keeps comparing against the upstream feed.
- `about.*` copy for English and Indonesian.
### Changed
- Fork banner and social preview art (`assets/banner.svg`).
- README opens with a fork notice, links to this fork's releases, and keeps upstream's
install instructions and credits intact.
### Known limitations
- Only the `about.*` keys are translated here; the other 14 catalogs fall back to English,
which is the upstream behaviour for any missing key.
+51
View File
@@ -0,0 +1,51 @@
# Fork notes
This repository is a fork of **[MyLuxy/overdrive](https://github.com/MyLuxy/overdrive)** — the
original project, which decompiled the PS5 store, recovered its source and rebuilt it. All
original credit goes to [MyLuxy](https://github.com/MyLuxy) and the upstream contributors.
Upstream stays the source of truth for how the store works. This fork exists so that a few
local changes can live somewhere without blocking on upstream. Everything below is what this
fork adds; everything else is upstream code.
## What this fork changes
| Area | Change | Where |
| --- | --- | --- |
| Build identity | `BUILD`, `FORK` and `UPSTREAM` exports next to the untouched `VERSION` | `app/version.js` |
| Settings sheet | New read-only **About this build** section: fork name, fork build tag, app version, upstream URL | `app/ui/LanguageSheet.jsx` |
| Copy (EN) | `about.title`, `about.detail`, `about.build`, `about.version`, `about.upstream` | `app/i18n/locales/en.json` |
| Copy (ID) | The same five keys, in Indonesian | `app/i18n/locales/id.json` |
| Branding | Fork banner and social preview (`assets/banner.svg`) | `assets/banner.svg` |
| Docs | Fork notice at the top of the README, this file, and `CHANGELOG.md` | `README.md` |
## Why `VERSION` is not bumped
`VERSION` is what the app compares against the upstream update feed. Changing it would make a
fork build claim a version the upstream feed has never published, and the updater would start
offering an update that does not exist. The fork therefore carries its own `BUILD` tag
(`mrlowpr.N`) instead, and `VERSION` stays `1.0.5` until upstream moves.
## Staying in sync with upstream
```bash
git remote -v # origin = this fork, upstream = MyLuxy/overdrive
git fetch upstream
git merge upstream/main # or rebase, your choice
```
Two conflicts are expected and both are mechanical:
- `app/version.js` — upstream may move `VERSION`; keep the fork's `BUILD`/`FORK`/`UPSTREAM`
exports when merging.
- `app/i18n/locales/en.json` and `id.json` — the `about.*` keys are appended at the end of
each catalog, so an upstream append lands next to them.
If a change here is worth having upstream, open a pull request against
[MyLuxy/overdrive](https://github.com/MyLuxy/overdrive) rather than letting it drift.
## Conventions
Upstream marks every deliberate deviation with a `// MODIFIED:` comment in the file header.
Fork-only changes continue that convention with an explicit `// MODIFIED (fork):` marker, so
the two sets of changes stay distinguishable in the diff.
+17
View File
@@ -1,3 +1,20 @@
<div align="center">
<img src="assets/banner.svg" alt="Overdrive — MrLowPr fork" width="100%">
</div>
> [!IMPORTANT]
> **This repository is a fork of [MyLuxy/overdrive](https://github.com/MyLuxy/overdrive).**
> Upstream is the original project and stays the source of truth for the app's behaviour;
> this fork exists to carry its own changes. Everything that is different here is listed in
> **[FORK-NOTES.md](FORK-NOTES.md)** and in [CHANGELOG.md](CHANGELOG.md).
> Credits go to [MyLuxy](https://github.com/MyLuxy) and the original contributors.
>
> **Install from this fork:** [latest fork release](https://github.com/MrLowPr/overdrive/releases/latest) ·
> [fork changelog](CHANGELOG.md) · [what changed here](FORK-NOTES.md).
> Upstream's builds are still the recommended ones unless you want a fork-only change.
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/readme/logo-dark.svg">
+6 -1
View File
@@ -452,5 +452,10 @@
"capture.validating": "Checking the captured file\u2026",
"capture.detail": "Don't press Download or any ad: the link is captured by itself and the download starts automatically. You have 3 minutes.",
"capture.link.title": "Download verification",
"capture.link.detail": "Pass the check: the link is captured by itself. Cancel any download the browser starts. You have 3 minutes."
"capture.link.detail": "Pass the check: the link is captured by itself. Cancel any download the browser starts. You have 3 minutes.",
"about.title": "About this build",
"about.detail": "This build comes from a fork. Upstream stays the source of truth for how the store works.",
"about.build": "Build",
"about.version": "App version",
"about.upstream": "Upstream"
}
+6 -1
View File
@@ -431,5 +431,10 @@
"versions.recommended": "Direkomendasikan · berjalan native di PS5",
"versions.sources": "{count, plural, other {# sumber}}",
"versions.thisPage": "Halaman ini",
"versions.title": "Pilih versi"
"versions.title": "Pilih versi",
"about.title": "Tentang build ini",
"about.detail": "Build ini berasal dari fork. Proyek asli tetap jadi rujukan utama cara kerja toko.",
"about.build": "Build",
"about.version": "Versi aplikasi",
"about.upstream": "Proyek asli"
}
+22 -1
View File
@@ -1,6 +1,8 @@
// ../pub-game-store/native/ui/LanguageSheet.jsx
// reconstructed from the esbuild bundle in eboot.bin
// MODIFIED: the sheet is the app's settings: a download speed limit, navigation vibration, then the languages.
// MODIFIED (fork): an "About this build" section after the languages, so a build from this fork is
// told apart from an upstream build: fork name, fork build tag, app version and the upstream URL.
import '../assets/Inter-Regular.ttf';
import { Fragment, jsx, jsxs } from 'react/jsx-runtime';
@@ -12,6 +14,7 @@ import { SideSheet } from './SideSheet.jsx';
import { colors } from './colors.js';
import { setNavigationHaptics, useNavigationHaptics } from './haptics.js';
import { LIMITS, setSpeedLimit, useSpeedLimit } from '../state/speed-limit.js';
import { BUILD, FORK, UPSTREAM, VERSION } from '../version.js';
import { Text, View, useIsFocused } from '@ps5-react/core';
var nameOf = (code) => LOCALES.find((locale2) => locale2.code === code).name;
@@ -62,6 +65,23 @@ import { Text, View, useIsFocused } from '@ps5-react/core';
text
] });
}
// MODIFIED (fork): the build's identity, read-only. A label and a value per row, so nothing here
// takes focus and the sheet stays a settings sheet.
function AboutRow({ label, value }) {
return /* @__PURE__ */ (0, jsxs)(View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 24, paddingHorizontal: 18, paddingVertical: 9 }, children: [
/* @__PURE__ */ (0, jsx)(Text, { style: { fontFamily: "Inter-Regular", fontSize: 21, color: colors.muted }, children: label }),
/* @__PURE__ */ (0, jsx)(Text, { style: { fontFamily: "Inter-Regular", fontSize: 21, fontWeight: 600, color: colors.fg, flexShrink: 1, textAlign: "right" }, children: value })
] });
}
function AboutBuild() {
const t2 = useT();
return /* @__PURE__ */ (0, jsxs)(View, { style: { gap: 3, paddingBottom: 18 }, children: [
/* @__PURE__ */ (0, jsx)(SectionLabel, { icon: "package", title: t2("about.title"), detail: t2("about.detail") }),
/* @__PURE__ */ (0, jsx)(AboutRow, { label: t2("about.build"), value: `${FORK} · ${BUILD}` }),
/* @__PURE__ */ (0, jsx)(AboutRow, { label: t2("about.version"), value: `v${VERSION}` }),
/* @__PURE__ */ (0, jsx)(AboutRow, { label: t2("about.upstream"), value: UPSTREAM })
] });
}
function LanguageSheet({ onClose }) {
const t2 = useT();
const choice2 = languageChoice();
@@ -81,7 +101,8 @@ import { Text, View, useIsFocused } from '@ps5-react/core';
/* @__PURE__ */ (0, jsx)(Row4, { code: "system", name: t2("language.system"), detail: nameOf(systemLocale()), checked: choice2 === null, onPress: () => pick2(null) }),
LOCALES.map(
({ code, name }) => /* @__PURE__ */ (0, jsx)(Row4, { code, name, detail: t2(`language.name.${code}`), checked: choice2 === code, onPress: () => pick2(code) }, code)
)
),
/* @__PURE__ */ (0, jsx)(AboutBuild, {})
] }) });
}
+7 -2
View File
@@ -1,7 +1,12 @@
// ../pub-game-store/native/version.js
// reconstructed from the esbuild bundle in eboot.bin
// MODIFIED: fork identity. VERSION stays the upstream app version so the update
// check keeps comparing against the upstream feed; BUILD is this fork's own
// build tag, shown in the settings sheet's "About this build" section.
var VERSION = "1.0.5";
var BUILD = "mrlowpr.1";
var FORK = "MrLowPr fork";
var UPSTREAM = "https://github.com/MyLuxy/overdrive";
export { VERSION };
export { VERSION, BUILD, FORK, UPSTREAM };
+30 -15
View File
@@ -1,24 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640" role="img" aria-label="overdrive">
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640" role="img" aria-label="Overdrive — MrLowPr fork">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#0f172a"/>
<stop offset="0.55" stop-color="#1e1b4b"/>
<stop offset="1" stop-color="#312e81"/>
<stop offset="0" stop-color="#2b0a1a"/>
<stop offset="0.5" stop-color="#4a0f2a"/>
<stop offset="1" stop-color="#120a2e"/>
</linearGradient>
<linearGradient id="accent" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#38bdf8"/>
<stop offset="1" stop-color="#a78bfa"/>
<stop offset="0" stop-color="#fb7185"/>
<stop offset="0.55" stop-color="#f472b6"/>
<stop offset="1" stop-color="#22d3ee"/>
</linearGradient>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M40 0H0V40" fill="none" stroke="#ffffff" stroke-opacity="0.05"/>
<radialGradient id="glow" cx="0.75" cy="0.25" r="0.6">
<stop offset="0" stop-color="#f472b6" stop-opacity="0.28"/>
<stop offset="1" stop-color="#f472b6" stop-opacity="0"/>
</radialGradient>
<pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
<circle cx="2" cy="2" r="1.4" fill="#ffffff" fill-opacity="0.07"/>
</pattern>
</defs>
<rect width="1280" height="640" fill="url(#bg)"/>
<rect width="1280" height="640" fill="url(#grid)"/>
<circle cx="1090" cy="120" r="220" fill="#38bdf8" fill-opacity="0.10"/>
<circle cx="1180" cy="520" r="180" fill="#a78bfa" fill-opacity="0.12"/>
<rect x="96" y="236" width="96" height="8" rx="4" fill="url(#accent)"/>
<text x="96" y="332" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="84" font-weight="800" fill="#ffffff">overdrive</text>
<text x="96" y="396" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="30" fill="#cbd5e1">Overdrive, a PS5 homebrew game store with 1,800+ games.</text>
<text x="96" y="560" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="22" fill="#94a3b8">github.com/MrLowPr/overdrive</text>
<rect width="1280" height="640" fill="url(#dots)"/>
<rect width="1280" height="640" fill="url(#glow)"/>
<rect x="96" y="188" width="104" height="8" rx="4" fill="url(#accent)"/>
<text x="96" y="286" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="88" font-weight="800" fill="#ffffff">Overdrive</text>
<text x="96" y="344" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="30" fill="#e9d5e2">Your PS5 game store — rebuilt from its own binary</text>
<g transform="translate(96 392)">
<rect x="0" y="0" width="286" height="46" rx="23" fill="#f472b6" fill-opacity="0.16" stroke="#f472b6" stroke-opacity="0.55"/>
<text x="143" y="30" text-anchor="middle" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="20" font-weight="700" fill="#fbcfe8">MrLowPr fork · v1.1.0</text>
</g>
<g font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="21" fill="#c9b6c4">
<text x="410" y="422">Fork of MyLuxy/overdrive · full source, rebuilt UI</text>
</g>
<text x="96" y="560" font-family="Inter, Segoe UI, Helvetica, Arial, sans-serif" font-size="22" fill="#a78b9a">github.com/MrLowPr/overdrive</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB