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
53 changes: 53 additions & 0 deletions .github/workflows/frontend-ci.yml
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ name: CI – Build & Test Soroban Contracts

on:
push:
paths:
- 'smartcontract/**'
pull_request:
paths:
- 'smartcontract/**'
workflow_dispatch:

jobs:
Expand Down
43 changes: 30 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@

# JointSave

[![CI – Build & Test Soroban Contracts](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml/badge.svg)](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml)
[![CI – Build & Test Soroban Contracts](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml/badge.svg)](https://github.com/Sendi0011/Joint_Save/actions/workflows/test.yml)
[![CI – Frontend Build & Typecheck](https://github.com/Sendi0011/Joint_Save/actions/workflows/frontend-ci.yml/badge.svg)](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.
</div>

## Live Demo
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)**.

Expand All @@ -96,20 +101,21 @@ 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
cp .env.example .env.local
```

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
Expand All @@ -121,6 +127,7 @@ For complete API documentation — functions, events, storage keys, error condit
```

4. **Start the development server**

```bash
npm run dev
```
Expand Down Expand Up @@ -169,11 +176,10 @@ JointSave demonstrates several advanced Soroban patterns:

<div align="center">



### Desktop Features

![CI/CD Pipeline](docs/ci-screenshot.png)
*Automated testing and deployment*
_Automated testing and deployment_

### Transaction Export
![Transaction History with CSV Export](docs/transactions-screenshot.png)
Expand All @@ -184,21 +190,29 @@ JointSave demonstrates several advanced Soroban patterns:
## Roadmap

### 🚀 Phase 1 - Foundation (Current)

- ✅ Core savings pool functionality (Rotational, Target, Flexible)
- ✅ Multi-wallet Stellar integration
- ✅ Factory contract for pool discovery
- ✅ Mobile-responsive web interface
- ✅ Real-time on-chain state synchronization
- ✅ Automated CI/CD pipeline

### CI Checks

- **Smart Contracts** – Rust/Soroban contracts are built and tested on push/PR (any branch)
- **Frontend** – TypeScript typecheck, lint, and Next.js build run on PRs affecting `frontend/**`

### 🔧 Phase 2 - Enhancement

- **DeFi Integration** – Connect flexible pools to Stellar DeFi protocols for yield
- **Mobile App** – Native iOS and Android applications
- **Advanced Analytics** – Detailed savings insights and projections
- **Group Communication** – In-app messaging and notifications
- **Reputation System** – Trust scores based on participation history

### 🌍 Phase 3 - Scale

- **Mainnet Deployment** – Production-ready contracts on Stellar mainnet
- **Fiat Integration** – Direct bank transfers and credit card support
- **Social Features** – Friend invitations and community building
Expand All @@ -210,17 +224,20 @@ JointSave demonstrates several advanced Soroban patterns:
We welcome contributions from the community! Here's how you can help:

### Development

- 🐛 **Bug Reports** – Found an issue? [Open an issue](https://github.com/Sendi0011/Joint_Save/issues)
- 💡 **Feature Requests** – Have an idea? We'd love to hear it
- 🔧 **Code Contributions** – Submit pull requests for improvements
- 📖 **Documentation** – Help improve our docs and guides

### Testing

- 🧪 **Testnet Testing** – Try the app and report issues
- 📱 **Device Testing** – Test on different devices and browsers
- 🔍 **Security Review** – Help audit smart contracts and frontend code

### Community

- 💬 **Discussions** – Join conversations in GitHub Discussions
- 🌟 **Spread the Word** – Share JointSave with your network
- 🎓 **Education** – Help others learn about decentralized savings
Expand Down Expand Up @@ -252,7 +269,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file

**Built with ❤️ for communities worldwide**

*Powered by [Stellar](https://stellar.org) • [Soroban](https://soroban.stellar.org) • [Next.js](https://nextjs.org)*
_Powered by [Stellar](https://stellar.org) • [Soroban](https://soroban.stellar.org) • [Next.js](https://nextjs.org)_

[Live Demo](https://joint-save.vercel.app) • [Watch Video](https://youtu.be/Iuy-As9im7A) • [View Code](https://github.com/Sendi0011/Joint_Save)

Expand Down
19 changes: 19 additions & 0 deletions frontend/.env.ci
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://placeholder.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=placeholder-key

# Stellar
NEXT_PUBLIC_STELLAR_RPC_URL=https://soroban-testnet.stellar.org
NEXT_PUBLIC_STELLAR_HORIZON_URL=https://horizon-testnet.stellar.org

# JointSave Contracts
NEXT_PUBLIC_FACTORY_CONTRACT_ID=CBZNGP52FLFZ4BOGC265FUAMP5KFMAYPQK3KTI5UHMYVMM3QCST3IMRI
NEXT_PUBLIC_TOKEN_CONTRACT_ID=native

# Pool WASM hashes
NEXT_PUBLIC_ROTATIONAL_WASM_HASH=d350a325d8734263a3d7150c875555d8956e13a527fb3497d5141b8b3f3d2c74
NEXT_PUBLIC_TARGET_WASM_HASH=133a62226501fc5443e70007d79deeeb0b33fdf8c85c7fcd3cf16293bb5c7292
NEXT_PUBLIC_FLEXIBLE_WASM_HASH=df6ff088fd79f13d8d03e72160434517fdb4a83b8c7bfdd887be4369805e0d6b

# Dev Tooling
NEXT_PUBLIC_DEBUG_DATA_LAYER=false
3 changes: 2 additions & 1 deletion frontend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (but keep example)
# env files (but keep example and ci)
.env*
!.env.example
!.env.ci

# vercel
.vercel
Expand Down
Loading
Loading