Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
bda5eb3
add slider for range selection
tunikakeks Feb 12, 2026
f2b0c0c
imrpove ui/ux in general
tunikakeks Feb 12, 2026
7297e88
Add row selection, fix positioning of backend selection buttons, add …
PleaseInsertNameHere Feb 12, 2026
d1fb98f
add .next/ to gitignore
PleaseInsertNameHere Feb 12, 2026
4b9b376
merge conflicts
tunikakeks Feb 12, 2026
21d4749
small prediction change
tunikakeks Feb 12, 2026
373d834
add loading skeleton
tunikakeks Feb 12, 2026
723cd68
Changes
tunikakeks Feb 12, 2026
6d4edb7
fix preferences
tunikakeks Feb 12, 2026
8a25249
Improve prediction chart zoom and styling
tunikakeks Feb 12, 2026
5571961
change prediction ch
tunikakeks Feb 12, 2026
3d144a9
Address PR feedback on stats and UI
tunikakeks Feb 12, 2026
74ce68c
change prediction chart to be more smooth
tunikakeks Feb 12, 2026
13bcee6
fix y axis problems
tunikakeks Feb 12, 2026
c8d40c4
fix chart coloring
tunikakeks Feb 12, 2026
7e9ee77
comment fixes
tunikakeks Feb 12, 2026
f41ef23
Add experimental Android snapshot workflow
tunikakeks Feb 12, 2026
b4ec1dd
Limit snapshot workflow triggers and use Java 21
tunikakeks Feb 12, 2026
2e61f0d
add cursor gradient, prevent right click and selection
PleaseInsertNameHere Feb 12, 2026
ae60238
Merge branch 'dev' of https://github.com/RedstoneCloud/RedTrack into dev
PleaseInsertNameHere Feb 12, 2026
0a71e0e
make cursor gradient smaller and faster
PleaseInsertNameHere Feb 12, 2026
c4dbfc7
Add nightly dev Android snapshot release
tunikakeks Feb 12, 2026
911bb8a
Merge branch 'dev' of https://github.com/RedstoneCloud/RedTrack into dev
PleaseInsertNameHere Feb 12, 2026
9ba35cb
Split dev nightly Android snapshot workflow
tunikakeks Feb 12, 2026
b545be0
Run dev snapshot workflow on dev pushes only
tunikakeks Feb 12, 2026
a7b6f5b
Update backend/src/jobs/PingServerJob.ts
tunikakeks Feb 12, 2026
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
15 changes: 15 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"permissions": {
"allow": [
"Bash(pnpm add:*)",
"Bash(node -e:*)",
"Bash(npx tsc:*)",
"Bash(pnpm run build:*)",
"Bash(pnpm exec tsc:*)",
"Bash(git add:*)",
"Bash(git commit -m \"$\\(cat <<''EOF''\nAdd interactive first-time setup wizard for backend\n\nAdds an interactive CLI setup that runs automatically when no .env file\nexists, guiding through MongoDB URI, port, ping interval, HTTPS, and\nadmin account creation with input validation, colored output, and\npassword masking. Supports --skip-setup flag for CI/Docker environments.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(npx next build:*)",
"Bash(git commit -m \"$\\(cat <<''EOF''\nRedesign chart: smooth lines, move legend to table, fix Now button zoom reset\n\n- Add tension \\(0.3\\) to chart lines for smoother curves\n- Remove built-in Chart.js legend, replace with clickable color dots\n in the server table''s new \"Chart\" column to toggle server visibility\n- Sort table rows by player count descending\n- Fix \"Now\" button to also reset chart zoom via forwardRef/useImperativeHandle\n- Remove redundant \"Reset to live\" button\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\nEOF\n\\)\")"
]
}
}
146 changes: 146 additions & 0 deletions .github/workflows/android-snapshot-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: Android Snapshot (dev)

on:
push:
branches: ["dev"]
workflow_dispatch:

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: app

steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: dev

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "21"

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build web assets
run: pnpm build

- name: Sync Android
run: pnpm sync:android

- name: Build APK
run: |
chmod +x android/gradlew
cd android
./gradlew assembleDebug

- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: android-apk
path: app/android/app/build/outputs/apk/debug/app-debug.apk

release:
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: dev

- name: Download APK artifact
uses: actions/download-artifact@v4
with:
name: android-apk

- name: Update latest snapshot tag
run: |
git tag -f latest-snapshot-dev "${GITHUB_SHA}"
git push -f origin latest-snapshot-dev

- name: Prepare release
id: release
uses: actions/github-script@v7
with:
script: |
const tag = "latest-snapshot-dev";
const notes = `Snapshot build from ${context.sha.substring(0, 7)} (${new Date().toISOString().slice(0, 10)})`;
let release;
try {
release = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag
});
} catch (error) {
if (error.status !== 404) throw error;
}

if (!release) {
release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: "Latest Snapshot (dev)",
body: notes,
prerelease: true
});
} else {
const assets = await github.paginate(github.rest.repos.listReleaseAssets, {
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id
});
for (const asset of assets) {
await github.rest.repos.deleteReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
asset_id: asset.id
});
}
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id,
name: "Latest Snapshot (dev)",
body: notes,
prerelease: true
});
}

core.setOutput("upload_url", release.data.upload_url);

- name: Upload release asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release.outputs.upload_url }}
asset_path: app-debug.apk
asset_name: app-debug.apk
asset_content_type: application/vnd.android.package-archive
144 changes: 144 additions & 0 deletions .github/workflows/android-snapshot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Android Snapshot

on:
push:
branches: ["main"]
workflow_dispatch:

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: app

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "21"

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build web assets
run: pnpm build

- name: Sync Android
run: pnpm sync:android

- name: Build APK
run: |
chmod +x android/gradlew
cd android
./gradlew assembleDebug

- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: android-apk
path: app/android/app/build/outputs/apk/debug/app-debug.apk

release:
runs-on: ubuntu-latest
needs: build
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download APK artifact
uses: actions/download-artifact@v4
with:
name: android-apk

- name: Update latest snapshot tag
run: |
git tag -f latest-snapshot "${GITHUB_SHA}"
git push -f origin latest-snapshot

- name: Prepare release
id: release
uses: actions/github-script@v7
with:
script: |
const tag = "latest-snapshot";
const notes = `Snapshot build from ${context.sha.substring(0, 7)} (${new Date().toISOString().slice(0, 10)})`;
let release;
try {
release = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag
});
} catch (error) {
if (error.status !== 404) throw error;
}

if (!release) {
release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: "Latest Snapshot",
body: notes,
prerelease: true
});
} else {
const assets = await github.paginate(github.rest.repos.listReleaseAssets, {
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id
});
for (const asset of assets) {
await github.rest.repos.deleteReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
asset_id: asset.id
});
}
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id,
name: "Latest Snapshot",
body: notes,
prerelease: true
});
}

core.setOutput("upload_url", release.data.upload_url);

- name: Upload release asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release.outputs.upload_url }}
asset_path: app-debug.apk
asset_name: app-debug.apk
asset_content_type: application/vnd.android.package-archive
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.next/
Loading
Loading