rfunds-online/MODULE_SPEC.md

91 lines
3.5 KiB
Markdown

# rFunds — Funding Flows & Treasury
**Module ID:** `rfunds`
**Domain:** `rfunds.online`
**Version:** 0.1.0
**Framework:** Next.js 14 / React 18 / React Flow / Zustand (client-side only)
**Status:** Active
## Purpose
Visual funding flow designer using threshold-based conviction funding. Users create directed graphs of funnel nodes (with min/max thresholds) feeding into outcome nodes. Integrates with rVote for governance-linked funding and Gnosis Safe for on-chain treasury management. Currently client-side only with URL-based sharing.
## Data Model
### Client-Side Types (no database)
| Type | Key Fields | Description |
|------|-----------|-------------|
| **FunnelNodeData** | minThreshold, maxThreshold, inflowRate, overflowAllocations, spendingAllocations | Funding funnel with configurable thresholds |
| **OutcomeNodeData** | fundingReceived, fundingTarget | Target outcome that receives funds |
| **FlowNode** | id, type (funnel/outcome), position, data | React Flow graph node |
| **AllocationEdgeData** | percentage, type (overflow/spending) | Edge connecting funnels to outcomes |
| **IntegrationSource** | rvoteSpace, safeAddress | Links to rVote proposals or Safe treasury |
| **FundingSource** | type (fiat/crypto/safe/bank), config | Payment source configuration |
### Storage
- **Local:** `rfunds-space-<name>` in localStorage
- **Sharing:** LZ-compressed state encoded in URL
- **No server persistence** — future: Automerge CRDT + space-scoped storage
## Permission Model
### Space Integration
- **SpaceVisibility:** PUBLIC by default (anyone can view flow diagrams)
- **Default role for open spaces:** PARTICIPANT (can create/edit flows)
### Capabilities
| Capability | Required SpaceRole | AuthLevel | Description |
|-----------|-------------------|-----------|-------------|
| `view_flows` | VIEWER | BASIC | See funding flow diagrams |
| `create_flow` | PARTICIPANT | STANDARD | Create new funding flows |
| `contribute_funds` | PARTICIPANT | STANDARD | Allocate funds to flows |
| `moderate_flows` | MODERATOR | STANDARD | Edit/archive others' flows |
| `configure_treasury` | ADMIN | ELEVATED | Manage Safe integration, treasury settings |
### Current Auth Implementation
- EncryptID optional (anonymous creation allowed)
- Auth state in Zustand + localStorage (`rfunds-auth`)
- No server-side permission checks
## API Endpoints
| Method | Path | Auth Required | Capability | Description |
|--------|------|---------------|------------|-------------|
| GET | /api/proxy/rvote | No | view_flows | Proxy to rvote.online for space/proposal data |
No native CRUD API — all state is client-side.
## Canvas Integration
Embeds as shapes on rSpace canvas:
- **`folk-budget`**: Budget tracker summary
- **`demo-expense`**: Individual expense with split tracking
- Click to expand into full React Flow diagram
## Cross-Module Dependencies
| Module | Integration |
|--------|------------|
| **rVote** | Governance-linked funding (proposals trigger flows) |
| **rWallet** | Gnosis Safe treasury management |
| **rSpace** | Canvas shape embedding |
## Local-First / Offline Support
- Fully client-side already — works offline by default
- URL sharing for collaboration (no real-time sync)
- Future: Automerge CRDT for real-time collaborative flow editing
## Migration Plan
1. Add server-side persistence (Prisma or Automerge) for spaces
2. Add EncryptID auth middleware to new API routes
3. Import `RFUNDS_PERMISSIONS` from SDK
4. Add `hasCapability()` checks when server API routes are added
5. Add space membership for MEMBERS_ONLY treasury spaces