Visual friendly api endpoint returning district unlock state as geo json like structure#368
Conversation
- Create lib/renderer/construction.ts to manage the 4-phase animation timeline. - Integrate district.unlocked SSE event listener into components/pixel-city.tsx. - Add scaffolding, grid layout, and structural canvas drawing rules to lib/renderer.ts. - Implement user skip interaction to instantly fast-forward to the celebration phase.
Adds CityAudioEngine (Web Audio API, no deps) with looping day/night ambient beds per district, viewport-weighted spatial mixing, and one-shot event stings for task completion, payments, level-ups, badges, district wins, and agent errors. Ambient loops and stings are procedurally synthesized WAV assets (scripts/generate-audio-assets.mjs) checked into public/audio/. Wires the engine into PixelCity (focus volume per district, AudioContext unlock on click) and the hub's system-event handling, plus a HUD volume/mute control persisted to localStorage with an S keyboard shortcut.
…) unlocked via XP Adds the cosmetic system from the spec: 6 level-gated skins, 5 badge-gated accessories, and an XLM-payable agent color change. - lib/cosmetics.ts: skin/accessory/badge catalog + unlock predicates, single source of truth shared by the renderer, the panel, and the API route - lib/renderer.ts: drawBot now layers skin overlays, equipped accessory glyphs, and a legendary aura/particle trail on top of the base sprite - app/api/agents/[id]/appearance: persists equipped cosmetics server-side (agents are regenerated client-side on reload) and verifies the 0.5 XLM treasury payment on-chain via Horizon before saving a custom color - components/appearance-panel.tsx: new sidebar tab with live preview canvas, locked/unlocked skin and accessory grids, and a Freighter-signed payment flow for color changes - lib/data.ts, lib/types.ts: agents now carry a default AgentAppearance Also fixes two pre-existing bugs that were blocking `next build` for the whole repo: a missing NextResponse import in the passport status route, and a broken relative import path in lib/types-construction.ts. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…idden The preview comment is informational only. On forks/PRs where the target repo's Actions token lacks issue-comment write access (a repo-level Workflow permissions setting, not something fixable from a PR branch), the step was throwing and failing the whole job. Catch and warn instead. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, badges, district wins Adds lib/renderer/particles.ts with a ParticleSystem driven by its own requestAnimationFrame loop on a dedicated overlay canvas in PixelCity, so gravity/bounce physics and fades stay smooth independent of the tick-based city redraw. SSE events (task.completed, payment.received, agent.xp, badge.unlocked, district.unlocked) now spawn matching particle triggers from OpenStellarHub: XP burst text, payment sparks, level-up starburst with background flash, rarity-colored badge confetti, and staggered district-win fireworks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements GET /api/cron/close-stale-quests secured with CRON_SECRET. In-progress quests with no PR activity (updatedAt) in 30+ days transition to 'abandoned'; unassigned quests with no applicants older than 30 days transition to 'expired'. Both emit protocol events (quest.abandoned / quest.expired) via the system event bus. Schedule added to vercel.json at midnight UTC daily (0 0 * * *). 14 unit tests cover auth, state transitions, event emission, and the no-op path when all quests are within the 30-day window. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oyments Implements the npx open-stellar bootstrap setup wizard with readline prompts for project name, Stellar network, database URL, and admin wallet address. Validates Stellar G... addresses (re-prompts on failure), warns on non-postgres DB URLs, writes .env.local with all four values, and supports --yes for CI. Adds 15 unit tests covering validation, env generation, file writing, and the --yes code path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements GET /api/agents/[id]/districts/map returning all districts with unlocked/locked status, XP progress, and unlock timestamps. Adds static district registry (lib/districts/) as the source of truth for labels and XP thresholds, backed by an in-memory unlock store following the existing globalThis pattern. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Thanks @ekwe7! Same blockers as #367: this is conflicting with main (needs rebase) and SonarCloud Code Analysis is failing (dashboard). It also touches 51 files — if the GeoJSON endpoint is the actual feature here, it'd land much faster as a focused PR with just the route + its test, separate from the renderer/audio/cosmetics changes. Happy to review once it's rebased, scoped down, and the gate is green. 👍 |
leocagli
left a comment
There was a problem hiding this comment.
Thanks @ekwe7 — the required SonarCloud Code Analysis quality gate is failing on this PR (see the SonarCloud dashboard linked in the checks). Typically it's new-code duplication, insufficient coverage on new code, or code smells/security hotspots. Please open the SonarCloud report for this PR, resolve the flagged issues (add tests for new code, dedupe, address smells), and push — once the gate passes (and the branch is rebased on current main) it can merge.




Closes #306
Description
This PR adds a map-oriented API endpoint that exposes an agent's district unlock progress in a renderer-agnostic format, enabling clients to visualize unlocked and locked districts.
Changes
GET /api/agents/[id]/districts/map.lib/districts/district-registry.tsto store static district metadata (labels and future display properties).unlockedAt,xpAtUnlock) and progress information for locked districts (xpCurrent,progressPct).Testing
Added unit tests covering:
statusvalues (unlocked/locked).xpRequired,progressPct, and unlock metadata.Files Changed
app/api/agents/[id]/districts/map/route.tslib/districts/district-registry.ts