Nx + TypeScript monorepo bootstrap for a Soroban-first Stellar block explorer.
This repository starts from the official nrwl/typescript-template foundation and adapts
it to the planned product architecture:
webfor the frontend explorer UIcrates/apifor the public REST API (Rust/axum)crates/indexerfor ledger ingestion entrypoints (Rust)infrafor infrastructure as code (AWS CDK)libs/uifor shared frontend components
nvm use
npm install
npm run lint
npm run build
npm run typecheckweb/
crates/
api/
indexer/
xdr-parser/
infra/
libs/
ui/
docs/
architecture/
The workspace contains:
- root Nx / TypeScript / ESLint / Prettier bootstrap
web— React 19 + Vite SPA with MUI, React Router, and TanStack Querylibs/ui— shared React component library (Vite lib mode)infra— AWS CDK infrastructure stackscrates/— Rust backend (api, indexer, xdr-parser)- architecture docs aligned with the reviewed technical design
Backend: Rust (axum + utoipa + sqlx), deployed as Lambda via cargo-lambda (per ADR 0005). They will be introduced as dedicated follow-up steps.
AWS infrastructure is managed with CDK (TypeScript) in infra/.
- AWS CLI configured with a named profile:
aws configure --profile soroban-explorer
- Set the profile in your shell:
export AWS_PROFILE=soroban-explorer
Bootstrap CDK on the AWS account (once per account + region):
npm run infra:bootstrapSee docs/deployment.md — the single source of truth
for what command ships what. In short: production is the only environment,
and deploys are run manually from a laptop.
make -C infra diff-production # preview
make -C infra deploy-production-compute # ship the API / indexer / enrichment Lambdas
make -C infra deploy-production-web # ship the frontend SPA
make -C infra deploy-production # deploy ALL stacks (see gotchas in the guide)There is no staging environment and no CI-driven deploy (AWS staging was retired by task 0249).
deploy-staging.yml,scripts/staging-deploy.sh,npm run infra:*:stagingand anymake deploy-staging*target are dead — they reference files/targets that no longer exist. Do not use them.