diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml
new file mode 100644
index 0000000..166f45e
--- /dev/null
+++ b/.github/workflows/deploy-preview.yml
@@ -0,0 +1,81 @@
+name: Deploy Preview
+
+on:
+ push:
+ branches:
+ - 'claude/**'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}preview/
+
+ steps:
+ - name: Checkout main branch
+ uses: actions/checkout@v4
+ with:
+ ref: main
+ lfs: true
+ path: main
+
+ - name: Checkout preview branch
+ uses: actions/checkout@v4
+ with:
+ lfs: true
+ path: preview
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+
+ - name: Build main site
+ working-directory: main
+ run: |
+ npm ci
+ npm run build
+
+ - name: Build preview site
+ working-directory: preview
+ run: |
+ npm ci
+ npm run type-check
+ npx vite build --base=/RaiderCache/preview/
+
+ - name: Combine builds
+ run: |
+ mkdir -p combined
+ cp -r main/dist/* combined/
+ mkdir -p combined/preview
+ cp -r preview/dist/* combined/preview/
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: ./combined
+
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
+
+ - name: Summary
+ run: |
+ echo "### Deployed! :rocket:" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "**Main site:** https://otdavies.github.io/RaiderCache/" >> $GITHUB_STEP_SUMMARY
+ echo "**Preview:** https://otdavies.github.io/RaiderCache/preview/" >> $GITHUB_STEP_SUMMARY
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index c63a56e..4d8a94f 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -21,10 +21,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - name: Checkout
+ - name: Checkout main
uses: actions/checkout@v4
with:
lfs: true
+ fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
@@ -38,9 +39,40 @@ jobs:
- name: Type check
run: npm run type-check
- - name: Build
+ - name: Build main site
run: npm run build
+ - name: Check for preview branch
+ id: preview
+ run: |
+ # Find the most recent claude/* branch
+ PREVIEW_BRANCH=$(git branch -r | grep 'origin/claude/' | head -1 | tr -d ' ')
+ if [ -n "$PREVIEW_BRANCH" ]; then
+ echo "branch=${PREVIEW_BRANCH#origin/}" >> $GITHUB_OUTPUT
+ echo "exists=true" >> $GITHUB_OUTPUT
+ echo "Found preview branch: $PREVIEW_BRANCH"
+ else
+ echo "exists=false" >> $GITHUB_OUTPUT
+ echo "No preview branch found"
+ fi
+
+ - name: Build preview site
+ if: steps.preview.outputs.exists == 'true'
+ run: |
+ # Save main build
+ mv dist main-dist
+
+ # Checkout and build preview branch
+ git checkout ${{ steps.preview.outputs.branch }}
+ npm ci
+ npx vite build --base=/RaiderCache/preview/
+
+ # Combine builds
+ mv main-dist dist-combined
+ mkdir -p dist-combined/preview
+ cp -r dist/* dist-combined/preview/
+ mv dist-combined dist
+
- name: Setup Pages
uses: actions/configure-pages@v4
diff --git a/index.html b/index.html
index 6e441b8..42edf2a 100644
--- a/index.html
+++ b/index.html
@@ -81,6 +81,7 @@
@@ -120,6 +121,11 @@
+
+
+
diff --git a/public/data/.map-discovery-cache.json b/public/data/.map-discovery-cache.json
new file mode 100644
index 0000000..3b8dea2
--- /dev/null
+++ b/public/data/.map-discovery-cache.json
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ce5da7aa3ce65d36f232d4cbd1a399a99ac3cfc72783d5ebaa06010efd88c18
+size 148
diff --git a/public/data/items.json b/public/data/items.json
index 7e421d9..ec05f07 100644
--- a/public/data/items.json
+++ b/public/data/items.json
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:731c5588325d38352e982d8b7276f653f13413c088a6bd3285a300d840eee6ad
-size 244917
+oid sha256:b786e30cbb6a6801a28160c5b081e420456777c47613475813a45fb68c12386a
+size 243376
diff --git a/public/data/map-extents.json b/public/data/map-extents.json
index a26afc2..6355969 100644
--- a/public/data/map-extents.json
+++ b/public/data/map-extents.json
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:90ecb4847ed141fdd0f5b590f6bb1ffd89d65ef5b84680770caa90e7fedc4bb5
-size 794
+oid sha256:fbeafaeed7c7a0d4e745305792408b938b4a91e5d4fc2b2fa1cc0f361518eacc
+size 800
diff --git a/public/data/maps.json b/public/data/maps.json
index 48ece6e..34de543 100644
--- a/public/data/maps.json
+++ b/public/data/maps.json
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d16db72c4fa1d3a6c4ecc68011156d8c99f52bd54046c348cc74916b995a76ad
-size 2697868
+oid sha256:1e96a1071843eec9d25877b7db3f3ed65fb2f9f642733a3fbd4eba439d4d99eb
+size 1080868
diff --git a/public/data/metadata.json b/public/data/metadata.json
index 13ce8a9..3e09886 100644
--- a/public/data/metadata.json
+++ b/public/data/metadata.json
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4f3a82b0a36a95adadab330430e60d063377e348ab07f53a13e6415bdb12ce14
-size 750
+oid sha256:26981844b44832eb75b6f8afe8b2f49f3fae510648846ad6000b1c65069efcdc
+size 486
diff --git a/public/data/quests.json b/public/data/quests.json
index 998c4d1..dfe3034 100644
--- a/public/data/quests.json
+++ b/public/data/quests.json
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b337db12d090a1fa06c8f0b0301f4475c5f4fd9726171a4dc400ce5ad03395d5
-size 106803
+oid sha256:31193da85cdceb80b3816572d8acb69794c0030ec339105ce714ed0f2032aa18
+size 111099
diff --git a/scripts/fetch-data.ts b/scripts/fetch-data.ts
index 294cc8c..f87097f 100644
--- a/scripts/fetch-data.ts
+++ b/scripts/fetch-data.ts
@@ -50,8 +50,10 @@ interface MetaForgeQuest {
objectives?: string[];
required_items?: any[];
rewards?: any;
- trader?: string;
+ trader_name?: string;
xp?: number;
+ sort_order?: number;
+ position?: { x: number; y: number };
[key: string]: any;
}
@@ -305,7 +307,7 @@ async function fetchAllItems(): Promise {
// Rate limiting: wait 500ms between requests to be respectful
if (hasNextPage) {
- await new Promise(resolve => setTimeout(resolve, 500));
+ await new Promise(resolve => setTimeout(resolve, 100));
}
} catch (error) {
console.error(` β Failed to fetch page ${currentPage}:`, error);
@@ -337,7 +339,7 @@ async function fetchAllQuests(): Promise {
console.log(` β
Page ${currentPage - 1}: ${response.data.length} quests (Total so far: ${allQuests.length})`);
if (hasNextPage) {
- await new Promise(resolve => setTimeout(resolve, 500));
+ await new Promise(resolve => setTimeout(resolve, 100));
}
} catch (error) {
console.error(` β Failed to fetch quests page ${currentPage}:`, error);
@@ -400,11 +402,43 @@ async function fetchAllRecycleComponents(): Promise