Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
# Copy this file to .env.local for local development:
# cp .env.example .env.local
#
# Both variables below are validated at build time (next.config.ts) — an
# unset or invalid value fails `next build`/`next dev`/`next start`
# immediately rather than silently falling back (#26). The values below are
# exactly what local dev needs, so the quickstart in README.md works with
# zero edits.
#
# Local port convention (#599):
# - Next.js dev server: http://localhost:3000 (default `next dev`)
# - mergefi-backend API: http://localhost:4000 (set PORT=4000 in the
# backend's .env so it does not collide with Next)
# - backend FRONTEND_URL must be http://localhost:3000 so CORS and OAuth
# redirects point at the SPA.

# Base URL of the mergefi-backend API. Falls back to the value below if
# unset, so this line is optional — kept explicit for discoverability.
NEXT_PUBLIC_API_URL=http://localhost:4000/api

# Must be exactly "TESTNET" or "PUBLIC" (case-sensitive) — no other value
# is accepted, and there is no default. This selects the Freighter network
# passphrase used to sign transactions (see src/lib/wallet.ts); the wrong
# value here signs with the wrong network's passphrase.
NEXT_PUBLIC_STELLAR_NETWORK=TESTNET

# Base URL used by src/app/sitemap.ts to generate absolute URLs in the
# sitemap. Falls back to "https://mergefi.app" if unset — set this when
# deploying to a domain other than mergefi.app (staging, forks, etc.).
NEXT_PUBLIC_SITE_URL=https://mergefi.app
# Copy this file to .env.local for local development:
# cp .env.example .env.local
#
# Both variables below are validated at build time (next.config.ts) — an
# unset or invalid value fails `next build`/`next dev`/`next start`
# immediately rather than silently falling back (#26). The values below are
# exactly what local dev needs, so the quickstart in README.md works with
# zero edits.
#
# Local port convention (#599):
# - Next.js dev server: http://localhost:3000 (default `next dev`)
# - mergefi-backend API: http://localhost:4000 (set PORT=4000 in the
# backend's .env so it does not collide with Next)
# - backend FRONTEND_URL must be http://localhost:3000 so CORS and OAuth
# redirects point at the SPA.
# Base URL of the mergefi-backend API. Falls back to the value below if
# unset, so this line is optional — kept explicit for discoverability.
NEXT_PUBLIC_API_URL=http://localhost:4000/api
# Must be exactly "TESTNET" or "PUBLIC" (case-sensitive) — no other value
# is accepted, and there is no default. This selects the Freighter network
# passphrase used to sign transactions (see src/lib/wallet.ts); the wrong
# value here signs with the wrong network's passphrase.
NEXT_PUBLIC_STELLAR_NETWORK=TESTNET
# Base URL used by src/app/sitemap.ts to generate absolute URLs in the
# sitemap. Falls back to "https://mergefi.app" if unset — set this when
# deploying to a domain other than mergefi.app (staging, forks, etc.).
NEXT_PUBLIC_SITE_URL=https://mergefi.app
22 changes: 11 additions & 11 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# CODEOWNERS — paths requiring named reviewers before merge.
# Money-path and critical files get mandatory review from maintainers.

/lib/api.ts @oldtaker24
/lib/wallet.ts @oldtaker24
/lib/network.ts @oldtaker24
/src/context/WalletContext.tsx @oldtaker24
/next.config.ts @oldtaker24
/src/lib/api.ts @oldtaker24
/src/lib/wallet.ts @oldtaker24
/src/context/WalletContext.tsx @oldtaker24
# CODEOWNERS — paths requiring named reviewers before merge.
# Money-path and critical files get mandatory review from maintainers.
/lib/api.ts @oldtaker24
/lib/wallet.ts @oldtaker24
/lib/network.ts @oldtaker24
/src/context/WalletContext.tsx @oldtaker24
/next.config.ts @oldtaker24
/src/lib/api.ts @oldtaker24
/src/lib/wallet.ts @oldtaker24
/src/context/WalletContext.tsx @oldtaker24
100 changes: 50 additions & 50 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,50 +1,50 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
build-and-lint:
runs-on: ubuntu-latest
# next.config.ts validates NEXT_PUBLIC_STELLAR_NETWORK on every Next.js
# command (build, dev, start) — not just `build` — so `verify:headers`'s
# own `next start` needs this too, not only the `build` step. Set once
# at the job level rather than repeating it per-step, so a future step
# that also invokes `next` doesn't quietly reintroduce this gap.
# verify:env intentionally strips this back out before each of its own
# test builds (see scripts/verify-env-validation.mjs), so it isn't
# affected by the default set here.
env:
NEXT_PUBLIC_STELLAR_NETWORK: TESTNET
steps:
# #622 — Pin actions to full commit SHAs for supply-chain security.
# Dependabot's github-actions ecosystem will bump these automatically.
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
cache: npm

- name: Cache Next.js build
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: .next/cache
key: ${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }}-${{ hashFiles('src/**') }}
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }}-

- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run verify:env
- run: npm run build
- run: npm run verify:headers
- run: npm audit --audit-level=high
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build-and-lint:
runs-on: ubuntu-latest
# next.config.ts validates NEXT_PUBLIC_STELLAR_NETWORK on every Next.js
# command (build, dev, start) — not just `build` — so `verify:headers`'s
# own `next start` needs this too, not only the `build` step. Set once
# at the job level rather than repeating it per-step, so a future step
# that also invokes `next` doesn't quietly reintroduce this gap.
# verify:env intentionally strips this back out before each of its own
# test builds (see scripts/verify-env-validation.mjs), so it isn't
# affected by the default set here.
env:
NEXT_PUBLIC_STELLAR_NETWORK: TESTNET
steps:
# #622 — Pin actions to full commit SHAs for supply-chain security.
# Dependabot's github-actions ecosystem will bump these automatically.
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
cache: npm
- name: Cache Next.js build
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: .next/cache
key: ${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }}-${{ hashFiles('src/**') }}
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }}-
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run verify:env
- run: npm run build
- run: npm run verify:headers
- run: npm audit --audit-level=high
84 changes: 42 additions & 42 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*
!.env.example

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env files (can opt-in for committing if needed)
!.env.example
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
config.bat
80 changes: 40 additions & 40 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- `CODEOWNERS` file for mandatory review on money-path files (#623)
- `CHANGELOG.md` for tracking notable changes (#624)
- `aria-expanded`/`aria-haspopup` and Escape-to-close on Navbar Dashboards trigger (#625)
- `DataSourceNotice` on issue detail and reputation pages when serving mock data (#626)

### Changed
- Stat grid on issue detail reflows to 2x2 when milestone is present (#443)
- `aria-current="page"` on DashboardShell nav and role-switcher links (#444)
- Account sequence number caching in SDK `BaseClient` (#71)
- Configurable poll interval and attempt count for transaction confirmation (#72)
- `simulateWithResources()` on `PreparedCall` for fee estimation (#73)
- `AbortSignal` support on `simulate()` and `signAndSend()` (#74)

### Fixed
- Dashboard error boundary shared across all three dashboard sub-routes (#441)
- Keyboard navigation tests for Tabs component (#442)
- Sensitive query parameters masked in logging interceptor (#596)
- Conditional policy revert to prevent concurrent status overwrites (#597)
- Friendbot retry logging with attempt counts and delays (#1338)
- `.dev-seed` file permission warnings (#1339)
- CoinGecko client cache invalidation on API key change (#331)
- IPv6 private range coverage in SSRF validation (#332)

## [0.1.0] - 2026-10-01

### Added
- Initial release with bounty, milestone, and reputation features
- Stellar/Soroban smart contract integration
- Responsive dark/light theme
- WCAG 2.1 AA accessibility baseline
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- `CODEOWNERS` file for mandatory review on money-path files (#623)
- `CHANGELOG.md` for tracking notable changes (#624)
- `aria-expanded`/`aria-haspopup` and Escape-to-close on Navbar Dashboards trigger (#625)
- `DataSourceNotice` on issue detail and reputation pages when serving mock data (#626)
### Changed
- Stat grid on issue detail reflows to 2x2 when milestone is present (#443)
- `aria-current="page"` on DashboardShell nav and role-switcher links (#444)
- Account sequence number caching in SDK `BaseClient` (#71)
- Configurable poll interval and attempt count for transaction confirmation (#72)
- `simulateWithResources()` on `PreparedCall` for fee estimation (#73)
- `AbortSignal` support on `simulate()` and `signAndSend()` (#74)
### Fixed
- Dashboard error boundary shared across all three dashboard sub-routes (#441)
- Keyboard navigation tests for Tabs component (#442)
- Sensitive query parameters masked in logging interceptor (#596)
- Conditional policy revert to prevent concurrent status overwrites (#597)
- Friendbot retry logging with attempt counts and delays (#1338)
- `.dev-seed` file permission warnings (#1339)
- CoinGecko client cache invalidation on API key change (#331)
- IPv6 private range coverage in SSRF validation (#332)
## [0.1.0] - 2026-10-01
### Added
- Initial release with bounty, milestone, and reputation features
- Stellar/Soroban smart contract integration
- Responsive dark/light theme
- WCAG 2.1 AA accessibility baseline
Loading