diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml new file mode 100644 index 0000000..d1ff7ea --- /dev/null +++ b/.github/workflows/frontend-ci.yml @@ -0,0 +1,53 @@ +name: CI – Frontend Build & Typecheck + +on: + push: + paths: + - "frontend/**" + pull_request: + paths: + - "frontend/**" + workflow_dispatch: + +jobs: + build: + name: Build & Typecheck Frontend + runs-on: ubuntu-latest + + defaults: + run: + working-directory: frontend + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "24" + cache: "pnpm" + cache-dependency-path: frontend/pnpm-lock.yaml + + - name: Clean workspace + run: git clean -fdx + + - name: Install dependencies + run: pnpm install --no-frozen-lockfile + + - name: Setup environment + run: cp .env.ci .env.local + + - name: TypeScript typecheck + run: pnpm exec tsc --noEmit + + - name: Lint + run: pnpm run lint + + - name: Build + run: pnpm run build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9efbc77..36782a9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,7 +2,11 @@ name: CI – Build & Test Soroban Contracts on: push: + paths: + - 'smartcontract/**' pull_request: + paths: + - 'smartcontract/**' workflow_dispatch: diff --git a/README.md b/README.md index 6e2b315..67a4982 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,11 @@ # JointSave - [](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml) +[](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml) +[](https://github.com/Sendi0011/Joint_Save/actions/workflows/frontend-ci.yml) + +A decentralized community savings platform built on Stellar, enabling trusted groups to automate contributions, payouts, and transparency using Soroban smart contracts. - A decentralized community savings platform built on Stellar, enabling trusted groups to automate contributions, payouts, and transparency using Soroban smart contracts. ## Live Demo @@ -52,11 +54,13 @@ The frontend is built with Next.js and integrates with multiple Stellar wallets ## Technology Stack ### Smart Contracts + - **Rust** with Soroban SDK for smart contract development - **WebAssembly (WASM)** compilation for efficient execution - **Stellar Testnet** for secure, low-cost transactions ### Frontend + - **Next.js 14** with App Router for modern React development - **TypeScript** for type-safe development - **Tailwind CSS** for responsive, mobile-first styling @@ -65,6 +69,7 @@ The frontend is built with Next.js and integrates with multiple Stellar wallets - **Stellar Wallets Kit** for multi-wallet support ### Infrastructure + - **Vercel** for frontend deployment and hosting - **Supabase** for off-chain metadata and user data - **GitHub Actions** for automated CI/CD pipeline @@ -73,14 +78,14 @@ The frontend is built with Next.js and integrates with multiple Stellar wallets All contracts are deployed on **Stellar Testnet**: -| Contract | Address | -|----------|---------| -| **Factory** | `CBZNGP52FLFZ4BOGC265FUAMP5KFMAYPQK3KTI5UHMYVMM3QCST3IMRI` | +| Contract | Address | +| ------------------- | ------------------------------------------------------------------ | +| **Factory** | `CBZNGP52FLFZ4BOGC265FUAMP5KFMAYPQK3KTI5UHMYVMM3QCST3IMRI` | | **Rotational WASM** | `d350a325d8734263a3d7150c875555d8956e13a527fb3497d5141b8b3f3d2c74` | -| **Target WASM** | `133a62226501fc5443e70007d79deeeb0b33fdf8c85c7fcd3cf16293bb5c7292` | -| **Flexible WASM** | `df6ff088fd79f13d8d03e72160434517fdb4a83b8c7bfdd887be4369805e0d6b` | +| **Target WASM** | `133a62226501fc5443e70007d79deeeb0b33fdf8c85c7fcd3cf16293bb5c7292` | +| **Flexible WASM** | `df6ff088fd79f13d8d03e72160434517fdb4a83b8c7bfdd887be4369805e0d6b` | -*Deployed on April 16, 2026* +_Deployed on April 16, 2026_ For complete API documentation — functions, events, storage keys, error conditions, and CLI examples — see **[docs/contract-api.md](docs/contract-api.md)**. @@ -96,12 +101,14 @@ For complete API documentation — functions, events, storage keys, error condit ### Quick Start 1. **Clone the repository** + ```bash git clone https://github.com/Sendi0011/Joint_Save.git cd Joint_Save ``` 2. **Set up the frontend** + ```bash cd frontend npm install @@ -109,7 +116,6 @@ For complete API documentation — functions, events, storage keys, error condit ``` 3. **Configure environment variables** - Use the inline comments in `frontend/.env.example` as the source of truth for each value. The frontend validates required variables during startup, so missing values fail fast with a clear `Missing required env var: ...` error. ```env NEXT_PUBLIC_SUPABASE_URL=your_supabase_url @@ -121,6 +127,7 @@ For complete API documentation — functions, events, storage keys, error condit ``` 4. **Start the development server** + ```bash npm run dev ``` @@ -189,11 +196,10 @@ JointSave demonstrates several advanced Soroban patterns:
{progressLabel}
+ )} +{error}
-{error}
- {total === 0 - ? "Manage your savings circles" - : `${total} active group${total !== 1 ? "s" : ""}`} + {total === 0 ? "Manage your savings circles" : `${total} active group${total !== 1 ? "s" : ""}`}
No pools match your search
-- Try adjusting your search term or{" "} - - . -
-Create your first savings group or join an existing one
+ +{pool.progressLabel}
+ )} +- Showing {page * PAGE_SIZE + 1}–{Math.min((page + 1) * PAGE_SIZE, total)} of {total}{" "} - pools + Showing {page * PAGE_SIZE + 1}–{Math.min((page + 1) * PAGE_SIZE, total)} of {total} pools