Complete step-by-step guide to go from zero to a live testnet deployment ready for SCF Build Award submission.
Total time: ~3 hours (mostly waiting for builds/deploys)
Step 1 Generate keypairs (5 min)
Step 2 Fund testnet accounts (5 min)
Step 3 Build + deploy contracts (20 min — mostly build time)
Step 4 Initialise contracts (5 min)
Step 5 Deploy backend to Railway (20 min)
Step 6 Run migrations (5 min)
Step 7 Deploy frontend to Vercel (10 min — already linked to GitHub)
Step 8 Seed the catalog (10 min)
Step 9 Smoke test (5 min)
Step 10 Record demo video (30 min)
Install these before starting:
# Rust + wasm target
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup target add wasm32-unknown-unknown
# Soroban CLI
cargo install --locked soroban-cli
soroban --version # should print 21.x.x
# Node.js 20+ (for scripts)
node --version # should print v20.x.x
# Railway CLI (optional — can use dashboard instead)
npm install -g @railway/clicd AtriumMind-contracts # or the deploy folder
node scripts/01-generate-keypairs.jsCopy all 5 keypairs into a password manager right now.
node scripts/02-fund-accounts.js \
G[DEPLOYER] G[BACKEND] G[PUBLISHER1] G[PUBLISHER2] G[BUYER1]Verify at: https://stellar.expert/explorer/testnet/account/G[DEPLOYER]
export DEPLOYER_SECRET=S[your_deployer_secret]
export BACKEND_PUBLIC=G[your_backend_public_key]
bash scripts/03-deploy-contracts.sh # builds + deploys, ~20 min
source contract-ids.env
bash scripts/04-init-contracts.sh # calls init() on each contractSave the contract IDs from contract-ids.env — you need them for the backend.
Follow: docs/railway-deploy.md
Key env vars to set in Railway:
DATABASE_URL = your Supabase connection string
STELLAR_CONTRACT_VAULT_REGISTRY = from contract-ids.env
STELLAR_CONTRACT_ACCESS_LEASE = from contract-ids.env
STELLAR_CONTRACT_SUBSCRIPTION = from contract-ids.env
STELLAR_SECRET_KEY = your BACKEND secret key
ADMIN_API_KEY = openssl rand -hex 32
In Railway shell:
pnpm drizzle-kit migrateYour frontend is already connected to GitHub. Just update the env vars:
VITE_API_URL = https://[your-railway-app].up.railway.app
Then trigger a redeploy in Vercel.
BACKEND_URL=https://[your-railway-app].up.railway.app \
node scripts/05-seed-catalog.jsThis publishes 3 real resources to the catalog.
BACKEND_URL=https://[your-railway-app].up.railway.app \
ADMIN_API_KEY=[your_admin_key] \
node scripts/06-smoke-test.jsAll 6 checks should pass. Fix any failures before submitting.
SCF requires a 3–5 minute demo video. Record:
- Show the live URL (https://atriumind.vercel.app)
- Connect Freighter wallet
- Browse the catalog — show 3 real resources
- Click "Buy" on one resource — approve the USDC payment
- Show the content delivered
- Open Stellar Expert — show the contract interactions on-chain
- Show admin panel (
/admin/stats) — proves backend is live - Show GitHub repos — all 3, with recent commits and green CI
Upload to YouTube (unlisted) and paste the URL in the SCF submission form.
In docs/SCF-submission.md, replace these placeholders:
C[CONTRACT_ID]with your actual contract IDs fromcontract-ids.envhttps://atriumind-backend.up.railway.appwith your actual Railway URLhttps://atriumind.vercel.appwith your actual Vercel URL- Add the demo video URL in Section 12
Then submit the interest form at: https://communityfund.stellar.org/awards
See docs/contract-deploy-guide.md for contract issues. See docs/railway-deploy.md for backend issues.
For SCF questions: Stellar Dev Discord → #scf-general