Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
0d024a1
Juno agent/dex guards 20260629 (#1)
JakeHartnell Jun 30, 2026
ed0a51f
fix(juno): harden audit launch guards (#8)
JakeHartnell Jul 1, 2026
1973da6
feat(frontend): scaffold Juno DEX app (#10)
JakeHartnell Jul 1, 2026
cb906c9
docs: record Juno DEX v1 mainnet deployment (#9)
JakeHartnell Jul 1, 2026
0ff0664
feat(frontend): polish Juno DEX UI (#11)
JakeHartnell Jul 2, 2026
bdaa34d
docs(planning): Juno DEX full-build frontend plan + issue index (#56)
JakeHartnell Jul 2, 2026
ad2862a
ci(frontend): add frontend validation workflow (#57)
JakeHartnell Jul 2, 2026
bf7fac2
feat(frontend): generate typed Astroport contract clients (#58)
JakeHartnell Jul 2, 2026
19971a5
feat(frontend): adopt Interchain UI Juno dark theme (#59)
JakeHartnell Jul 2, 2026
0210838
feat(frontend): add responsive Juno DEX app shell (#60)
JakeHartnell Jul 2, 2026
2566679
feat(frontend): add shared DEX UI primitives (#61)
JakeHartnell Jul 2, 2026
f2b604b
feat(frontend): integrate cosmos-kit wallet support (#62)
JakeHartnell Jul 2, 2026
485a9ce
feat(frontend): add slippage and price-impact controls (#63)
JakeHartnell Jul 2, 2026
35e5e7d
feat(frontend): show wallet balances and address actions (#64)
JakeHartnell Jul 2, 2026
7890542
feat(frontend): add Juno network guard (#65)
JakeHartnell Jul 2, 2026
3705157
feat(frontend): add reusable transaction lifecycle UX (#66)
JakeHartnell Jul 2, 2026
cd90453
feat(frontend): enable add-liquidity form flow (#67)
JakeHartnell Jul 2, 2026
1c81415
feat(frontend): enable remove-liquidity form flow (#68)
JakeHartnell Jul 2, 2026
4cd0d22
feat(frontend): add LP position panel (#69)
JakeHartnell Jul 2, 2026
f49b290
feat(frontend): discover factory pools dynamically (#70)
JakeHartnell Jul 2, 2026
7fad958
feat(frontend): enable direct-pair swap execution (#71)
JakeHartnell Jul 2, 2026
8749156
feat(frontend): add searchable token selector (#72)
JakeHartnell Jul 2, 2026
ef77d92
feat(frontend): add multi-hop router support (#73)
JakeHartnell Jul 2, 2026
5f2fe17
feat(frontend): add exact-out quotes and quote freshness (#74)
JakeHartnell Jul 2, 2026
c068580
feat(frontend): add chain-registry asset metadata (#76)
JakeHartnell Jul 2, 2026
4c29753
feat(frontend): add token verification and risk badges (#75)
JakeHartnell Jul 2, 2026
8fe7a15
feat(frontend): add searchable sortable pool list metrics (#77)
JakeHartnell Jul 2, 2026
c6fbe2e
feat(frontend): add pool detail analytics (#78)
JakeHartnell Jul 2, 2026
059ab42
feat(frontend): add pool type support and caveats (#80)
JakeHartnell Jul 2, 2026
ebba1b2
feat(frontend): add permissionless create pool flow (#79)
JakeHartnell Jul 2, 2026
098b43b
feat(frontend): add seed liquidity guardrails (#81)
JakeHartnell Jul 2, 2026
6f8f029
feat(indexer): add event ingestion foundation (#83)
JakeHartnell Jul 2, 2026
81d7fc2
feat(indexer): add metrics and pool stats API (#82)
JakeHartnell Jul 2, 2026
149f5d2
feat(indexer): add candle price history endpoint (#85)
JakeHartnell Jul 2, 2026
c3c12f0
feat(indexer): add USD pricing resolver (#86)
JakeHartnell Jul 2, 2026
5bdfeef
feat(frontend): add indexer fallback data layer (#84)
JakeHartnell Jul 2, 2026
c57cc86
feat(frontend): add portfolio positions page (#87)
JakeHartnell Jul 2, 2026
611ccb2
feat(frontend): add wallet transaction history (#88)
JakeHartnell Jul 2, 2026
f61dec9
feat(frontend): add incentives staking actions (#89)
JakeHartnell Jul 2, 2026
7bb2a8d
feat(frontend): add stats dashboard (#90)
JakeHartnell Jul 2, 2026
9d2d0a9
feat(frontend): add price candle charts (#91)
JakeHartnell Jul 2, 2026
d82eebe
test(frontend): add Playwright E2E coverage (#92)
JakeHartnell Jul 2, 2026
b45d592
fix(frontend): initialize browser polyfills before app boot
JakeHartnell Jul 2, 2026
7e9b144
fix(frontend): audit state fallbacks and retries (#95)
JakeHartnell Jul 2, 2026
f65fc09
docs(devops): add hosting and indexer deploy readiness (#94)
JakeHartnell Jul 2, 2026
00f422a
perf(frontend): improve accessibility and route performance (#96)
JakeHartnell Jul 2, 2026
af24736
Fix frontend wallet transaction signing
JakeHartnell Jul 2, 2026
60769fa
Update .gitignore to include .env files
JakeHartnell Jul 2, 2026
dc82fd8
Fix CosmJS Vite module interop
JakeHartnell Jul 2, 2026
0103a3e
fix(frontend): clean up Juno DEX branding and copy (#97)
JakeHartnell Jul 2, 2026
0362bd2
First pass at redesign
JakeHartnell Jul 2, 2026
a465778
Refine Juno DEX frontend design
JakeHartnell Jul 2, 2026
3776c18
Clean up Juno DEX interface
JakeHartnell Jul 3, 2026
21189cd
Refine swap surface and per-surface style architecture (#98)
JakeHartnell Jul 3, 2026
434caf8
Rename project to Juno Dex and update README
JakeHartnell Jul 3, 2026
148a7c3
More UI cleanup
JakeHartnell Jul 3, 2026
0768ea5
docs: plan indexer production readiness
JakeHartnell Jul 3, 2026
752716c
feat: add production indexer API foundation (#99)
JakeHartnell Jul 3, 2026
4021f32
test: validate indexer events against real Juno tx fixtures (#100)
JakeHartnell Jul 3, 2026
437fbcb
fix: halt indexer on processed block hash mismatch (#101)
JakeHartnell Jul 3, 2026
d0d9b68
feat: add bounded staging indexer backfill (#102)
JakeHartnell Jul 3, 2026
9569089
feat: expose indexer ops metrics (#103)
JakeHartnell Jul 3, 2026
27a67ce
feat: expose pool reserve snapshots (#104)
JakeHartnell Jul 3, 2026
a9855ee
fix: use asset decimals for indexer candles
hermes-agent Jul 3, 2026
22630b3
fix: use asset decimals for indexer candles (#105)
hermes-agent Jul 3, 2026
57ea9e7
feat: snapshot pool reserves during indexing
hermes-agent Jul 3, 2026
0ca3ac4
feat: snapshot pool reserves during indexing (#106)
hermes-agent Jul 3, 2026
940edd4
fix: derive indexer readiness migrations
hermes-agent Jul 3, 2026
b23bd24
fix: derive indexer readiness migrations (#107)
hermes-agent Jul 3, 2026
4b1121f
fix: ignore unknown pair events
hermes-agent Jul 3, 2026
bef1d51
fix: ignore unknown pair events (#108)
hermes-agent Jul 3, 2026
1941343
docs: expand indexer staging deployment runbook
hermes-agent Jul 3, 2026
29cd691
feat(indexer): add performance runtime config
hermes-agent Jul 4, 2026
0bd90d7
docs(indexer): add Rust hot path benchmark decision record
hermes-agent Jul 4, 2026
46dd308
feat(indexer): add bounded block range fetcher
hermes-agent Jul 4, 2026
1d4116c
feat(indexer): refactor ingestion pipeline stages
hermes-agent Jul 4, 2026
48e1024
feat(indexer): add snapshot job queue
hermes-agent Jul 4, 2026
c37fff4
feat(indexer): add candle worker jobs
hermes-agent Jul 4, 2026
9c0e364
feat(indexer): add bulk staging merge path
hermes-agent Jul 4, 2026
20cd965
feat(indexer): add API read models
hermes-agent Jul 4, 2026
fb15f5a
Merge pull request #119 from JakeHartnell/idx-perf-01-config
JakeHartnell Jul 5, 2026
ffae82c
Merge pull request #120 from JakeHartnell/idx-perf-02-block-fetcher
JakeHartnell Jul 5, 2026
f2f3286
Merge pull request #121 from JakeHartnell/idx-perf-03-pipeline
JakeHartnell Jul 5, 2026
e63d800
Merge pull request #123 from JakeHartnell/idx-perf-05-snapshot-queue
JakeHartnell Jul 5, 2026
d97ac69
Merge pull request #124 from JakeHartnell/idx-perf-06-candle-worker
JakeHartnell Jul 5, 2026
e5f24e3
Merge pull request #125 from JakeHartnell/idx-perf-07-bulk-staging
JakeHartnell Jul 5, 2026
ecc1377
Merge pull request #126 from JakeHartnell/idx-perf-08-read-models
JakeHartnell Jul 5, 2026
0aea6a0
feat(indexer): add ingestion throughput metrics
hermes-agent Jul 4, 2026
6402557
Merge pull request #122 from JakeHartnell/idx-perf-04-metrics
JakeHartnell Jul 5, 2026
90cc0b5
Merge pull request #128 from JakeHartnell/idx-perf-10-rust-decision
JakeHartnell Jul 5, 2026
64f13f5
docs(indexer): add performance benchmark runbook
hermes-agent Jul 4, 2026
33cc847
Merge pull request #127 from JakeHartnell/idx-perf-09-benchmark
JakeHartnell Jul 5, 2026
8c2b3b0
More indexer and frontend work
JakeHartnell Jul 5, 2026
40601dc
Remove mock indexer in favor of real one
JakeHartnell Jul 13, 2026
1fd1524
feat(frontend): add Season 0 test token config
hermes-agent Jul 13, 2026
ff26928
feat: improve dex trading UX and live market data
JakeHartnell Jul 13, 2026
4afdcea
Merge pull request #129 from JakeHartnell/feat/season0-test-token-config
JakeHartnell Jul 13, 2026
e72eccb
feat(frontend): harden and refine DEX user experience
JakeHartnell Jul 14, 2026
1ae5b9f
UI cleanup
JakeHartnell Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 15 additions & 10 deletions .github/workflows/check_artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,6 @@ jobs:
restore-keys: |
${{ runner.os }}-cargo-

- name: Restore cached artifacts
uses: actions/cache@v4
with:
path: artifacts
key: ${{ runner.os }}-artifacts-${{ hashFiles('**/Cargo.lock') }}

- name: Build Artifacts
run: |
docker run \
Expand All @@ -55,6 +49,17 @@ jobs:
run: |
$GITHUB_WORKSPACE/scripts/check_artifacts_size.sh

- name: Check Juno v1 artifact set
run: |
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_artifacts.py

- name: Upload checked artifacts
uses: actions/upload-artifact@v4
with:
name: cosmwasm-artifacts-${{ github.sha }}
path: artifacts
if-no-files-found: error



cosmwasm-check:
Expand All @@ -72,12 +77,12 @@ jobs:

- name: Checkout sources
uses: actions/checkout@v4
- name: Restore cached artifacts
uses: actions/cache/restore@v4

- name: Download checked artifacts
uses: actions/download-artifact@v4
with:
name: cosmwasm-artifacts-${{ github.sha }}
path: artifacts
key: ${{ runner.os }}-artifacts-${{ hashFiles('**/Cargo.lock') }}
fail-on-cache-miss: true

- name: Cosmwasm check
run: |
Expand Down
54 changes: 54 additions & 0 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Frontend CI

on:
pull_request:
paths:
- "frontend/**"
- "services/indexer/**"
- ".github/workflows/frontend.yml"
push:
paths:
- "frontend/**"
- "services/indexer/**"
- ".github/workflows/frontend.yml"

jobs:
validate:
name: Typecheck, lint, test, and build
runs-on: ubuntu-latest

defaults:
run:
working-directory: frontend

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

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontend/package-lock.json

- name: Install dependencies
run: npm ci

- name: Typecheck
run: npm run typecheck

- name: Lint
run: npm run lint

- name: Test
run: npm test

- name: Install Playwright browsers
run: npx playwright install --with-deps chromium

- name: Playwright E2E
run: npm run test:e2e

- name: Build
run: npm run build
59 changes: 59 additions & 0 deletions .github/workflows/frontend_deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Frontend deploy

on:
pull_request:
paths:
- "frontend/**"
- ".github/workflows/frontend_deploy.yml"
push:
branches:
- main
paths:
- "frontend/**"
- ".github/workflows/frontend_deploy.yml"

permissions:
contents: read
deployments: write
pull-requests: read

concurrency:
group: frontend-deploy-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
vercel:
name: Vercel preview/production
runs-on: ubuntu-latest
if: ${{ vars.VERCEL_ENABLED == 'true' }}
defaults:
run:
working-directory: frontend
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
steps:
- name: Checkout sources
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontend/package-lock.json

- name: Install dependencies
run: npm ci

- name: Install Vercel CLI
run: npm install --global vercel@latest

- name: Pull Vercel environment
run: vercel pull --yes --environment=${{ github.event_name == 'push' && 'production' || 'preview' }} --token=${{ secrets.VERCEL_TOKEN }}

- name: Build Vercel output
run: vercel build ${{ github.event_name == 'push' && '--prod' || '' }} --token=${{ secrets.VERCEL_TOKEN }}

- name: Deploy Vercel output
run: vercel deploy --prebuilt ${{ github.event_name == 'push' && '--prod' || '' }} --token=${{ secrets.VERCEL_TOKEN }}
46 changes: 46 additions & 0 deletions .github/workflows/indexer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Indexer CI

on:
pull_request:
paths:
- "services/indexer/**"
- ".github/workflows/indexer.yml"
push:
branches:
- main
paths:
- "services/indexer/**"
- ".github/workflows/indexer.yml"

jobs:
validate:
name: Typecheck, test, build, and containerize
runs-on: ubuntu-latest
defaults:
run:
working-directory: services/indexer
steps:
- name: Checkout sources
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: services/indexer/package-lock.json

- name: Install dependencies
run: npm ci

- name: Typecheck
run: npm run typecheck

- name: Test
run: npm test

- name: Build
run: npm run build

- name: Build Docker image
run: docker build -t astroport-juno-indexer:${{ github.sha }} .
6 changes: 0 additions & 6 deletions .github/workflows/release_artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,6 @@ jobs:
restore-keys: |
${{ runner.os }}-cargo-

- name: Restore cached artifacts
uses: actions/cache@v4
with:
path: artifacts
key: ${{ runner.os }}-artifacts-${{ hashFiles('**/Cargo.lock') }}

- name: Build Artifacts
run: |
$GITHUB_WORKSPACE/scripts/build_release.sh
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/tests_and_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,26 @@ jobs:

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

- name: Check Juno v1 launch guards
run: |
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_scope.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_schemas.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_deployment_template.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_tx_extractor.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_deployment_command.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_secret_scan.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_operator_checklist.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_dry_run_txs.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_deployment_gitignore.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_deployment_readme.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_frontend_config.py
python3 $GITHUB_WORKSPACE/scripts/generate_juno_v1_frontend_types.py --check
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_frontend_example.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_frontend_handoff_sync.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_frontend_release_checklist.py
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_ci_wiring.py

- uses: actions/cache@v4
if: always()
with:
Expand Down Expand Up @@ -57,5 +77,6 @@ jobs:
- name: Generate and check schemas
run: |
$GITHUB_WORKSPACE/scripts/build_schemas.sh
python3 $GITHUB_WORKSPACE/scripts/check_juno_v1_schemas.py
git add -A $GITHUB_WORKSPACE/schemas # consider new contract schemas
git diff-index --cached HEAD --exit-code --
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

# Build results
target/
/services/indexer/dist/

# IDEs
.vscode/
Expand All @@ -15,8 +16,15 @@ target/
# Auto-gen
.cargo-ok
/scripts/.env
*/node_modules/*
**/node_modules/
#/scripts/package-lock.json
/artifacts/
/contracts/**/schema/
/e2e/config.json
/deployment/tx/
/deployment/juno-v1-testnet.json
/deployment/juno-v1-mainnet.json

# env
.env
.env.local
51 changes: 51 additions & 0 deletions ACCESSIBILITY_AUDIT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# JUNO DEX Accessibility Validation

Date: 2026-07-13
Target: WCAG 2.2 Level AA
Scope: swap, pools, pool details, portfolio, liquidity, pool creation, transaction review/lifecycle, token selection, settings, and responsive navigation.

## Automated evidence

- Serious and critical axe findings fail Playwright across `/swap`, `/pools`, `/portfolio`, `/create`, `/liquidity`, and `/stats`.
- Transaction review, wallet rejection, and confirmed transaction states receive the same axe gate.
- The token selector dialog receives a dedicated axe gate.
- A rendered-style audit fails if visible informative text on any core route is below 12 CSS pixels.
- The 320 CSS-pixel viewport has no horizontal overflow and primary navigation, wallet, transaction, and quick-navigation controls are at least 44 pixels high.
- Keyboard checks cover skip navigation, route focus, token selector focus entry/return, settings Escape/return, and modal focus containment.
- Charts expose one keyboard focus target and an accessible data summary rather than one tab stop per candle.
- Reduced-motion emulation verifies that confirmed-transaction feedback collapses to no meaningful animation.
- Sort state, live transaction status, quote refresh state, and page changes have programmatic semantics.

Current automated result: all 16 Playwright checks pass together in one run, including the six-route axe sweep with its appropriate 60-second scope timeout.

## Manual release checks still required

These checks require human perception or assistive-technology behavior and must be recorded before claiming full WCAG 2.2 AA conformance:

- Complete swap, add/remove liquidity, incentives, and pool creation with current NVDA + Firefox or Chrome.
- Repeat the primary swap and transaction-recovery journey with current VoiceOver + Safari on macOS and iOS.
- Confirm announcement order and usefulness for quote refresh, validation errors, wallet rejection, timeout, confirmation, and delayed indexing.
- Inspect focus visibility and reading order in Windows High Contrast/forced-colors mode.
- Inspect text and non-text contrast for hover, focus, disabled, stale, warning, danger, verified, and success states with a contrast analyzer.
- Validate browser text-only zoom to 200% and desktop page zoom to 400% without clipped controls or lost content.
- Validate target spacing and fixed navigation with touch exploration on a physical narrow-screen device.

Record browser, OS, assistive-technology version, tester, date, outcome, and linked defects for each run. `GOAL.md` keeps full WCAG 2.2 AA unchecked until this manual evidence is complete.

## Evidence record

Use `Pass`, `Fail`, or `N/A` with an explanation. A tool name without tester, version, date, and observed result is not evidence.

| Environment | Journey/state | Tester and date | Result | Defect or evidence link |
| --- | --- | --- | --- | --- |
| NVDA + Firefox (current) | Swap, review, rejection, timeout, confirmation | | | |
| NVDA + Chrome (current) | Add/remove liquidity, rewards, pool creation | | | |
| VoiceOver + macOS Safari (current) | Swap, review, recovery, activity | | | |
| VoiceOver + iOS Safari (current) | Swap, navigation, review, recovery | | | |
| Windows forced colors | All core routes and transaction states | | | |
| Contrast analyzer | Text/non-text interactive states | | | |
| Desktop browser at 200% text zoom | All core routes | | | |
| Desktop browser at 400% page zoom | All core routes | | | |
| Physical narrow-screen touch device | Navigation, dialogs, forms, activity | | | |

For screen-reader journeys, record whether labels identify asset and action, changed content is announced once in a useful order, review bounds are understandable without visual context, focus never becomes lost or trapped, and the user can distinguish safe retry from an ambiguous submitted transaction.
Loading
Loading