The Ledger of Invisible Impact.
In-Vert captures grassroots sustainability actions, verifies them, anchors proofs on Hedera, and aggregates verified actions into composable Impact Pools.
Name origin: "vert" means "green" in French, so In-Vert expresses the idea of being in green and actively greening up places through community action.
Most environmental effort in emerging markets is informal, local, and undocumented. In-Vert provides proof-of-impact infrastructure for this missing layer.
Core loop:
Submit -> Verify -> Attest -> Reward -> Aggregate -> Reuse
flowchart LR
U[Contributors] --> FE[Next.js Frontend]
FE --> API[Express API]
API --> V[Verification Engine]
V --> DB[(PostgreSQL on Supabase)]
API --> DB
API --> HCS[Hedera Consensus Service]
API --> HTS[Hedera Token Service]
API --> HSCS[Hedera Smart Contract Service]
API --> GEO[Geocoding + EXIF Analysis]
DB --> IMP[Impact Pools]
DB --> FOREST[3D Proof Forest]
IMP --> FE
FOREST --> FE
flowchart TD
subgraph Frontend
A1[Submit Action Form]
A2[Verification Queue View]
A3[Protocol Receipt View]
A4[Impact Dashboard]
A5[Impact Pool Board]
A6[3D Forest Experience]
end
subgraph Backend
B1[Actions Route]
B2[Verification Service]
B3[Queue Service]
B4[Hedera Service]
B5[Impact Pools Service]
B6[Actions Repository]
end
A1 --> B1
B1 --> B3
B3 --> B2
B2 --> B6
B2 --> B4
A3 --> B1
A4 --> B1
A5 --> B5
A6 --> B6
B5 --> B6
sequenceDiagram
participant User
participant Frontend
participant API
participant Queue
participant Verifier
participant Hedera
participant DB
User->>Frontend: Submit action + evidence
Frontend->>API: POST /api/actions
API->>DB: Create queued action
API->>Queue: Enqueue action id
Queue->>Verifier: processVerification(action id)
Verifier->>DB: Run checks + persist result
alt approved
Verifier->>Hedera: HCS attestation + HTS reward + HSCS register
Verifier->>DB: Persist attestations and rewards
else rejected
Verifier->>DB: Persist rejection reason
end
Frontend->>API: GET /api/actions/:id/status
API->>DB: Read current status
API-->>Frontend: Verification envelope
flowchart LR
Browser[Web Client] --> Vercel[Vercel Next.js]
Vercel --> Render[Render Express API]
Render --> Supabase[(Supabase Postgres)]
Render --> Hedera[(Hedera Testnet)]
- Action type, quantity, location, user handle, Hedera account id.
- Evidence via URL or uploaded image.
- Evidence presence, timestamp validity, quantity bounds, location presence.
- Anti-fraud checks: EXIF location distance, stock-photo risk, image hash reuse.
- Queue processing with recovery sweep and single-claim processing.
- HCS message submission for proof anchoring.
- HSCS contract registration for action-level state.
- HTS reward transfer for approved actions.
- Impact Pools aggregate approved actions.
- Pool hash provides reusable proof primitive.
- Pool export endpoint provides partner-facing proof JSON.
- Impact dashboard with protocol stats, feed, leaderboard.
- Forest tab with a 3D reforestation scene where each approved action is rendered as a tree.
erDiagram
USERS ||--o{ ACTIONS : submits
ACTIONS ||--o| VERIFICATIONS : has
ACTIONS ||--o| ATTESTATIONS : has
ACTIONS ||--o| REWARDS : has
ACTIONS ||--o| ACTION_MEDIA_SIGNALS : has
IMPACT_POOLS ||--o{ IMPACT_POOL_ACTIONS : includes
ACTIONS ||--o| IMPACT_POOL_ACTIONS : pooled_in
- Frontend: Next.js, React, TypeScript.
- Backend: Node.js, Express, TypeScript.
- Database: PostgreSQL on Supabase.
- Blockchain: Hedera SDK using HCS, HTS, HSCS.
- Evidence analysis: EXIF parsing, image hashing, geocoding.
- src: frontend app and components.
- server/src: API routes, services, repositories.
- server/migrations: schema evolution.
- server/contracts: contract artifacts and deployment scripts.
- Node.js 22 or newer.
- Supabase Postgres connection string.
- Hedera testnet account with funded HBAR.
Create server/.env with at minimum:
SUPABASE_DATABASE_URL=postgres://...
DATABASE_SSL=true
HEDERA_NETWORK=testnet
HEDERA_ACCOUNT_ID=0.0.xxxxx
HEDERA_PRIVATE_KEY=302e...npm install
npm --prefix server install
npm run server:migrateTerminal 1:
npm run server:devTerminal 2:
npm run dev- Frontend on Vercel.
- Backend on Render.
- Supabase as managed database.
- Vercel environment variable BACKEND_URL must point to Render API origin.
- Queue sweep picks pending items that were missed by one-shot processing.
- Single-claim processing prevents duplicate workers processing same action.
- Processing errors are persisted as terminal verification outcomes.
- On-chain failures are logged and surfaced in checks for observability.
- POST /api/actions
- GET /api/actions/:id/status
- GET /api/protocol/stats
- GET /api/protocol/attestations/:id
- GET /api/impact-pools
- POST /api/impact-pools
- GET /api/impact-pools/:id/export
- GET /api/forest/summary
- GET /api/forest/trees
Sustainability
In-Vert transforms grassroots environmental actions into verifiable, composable impact assets on-chain.
In-Vert verifies grassroots sustainability actions and records trusted impact proofs on Hedera. Contributors submit evidence, autonomous checks validate authenticity, and approved actions are attested and rewarded. The platform then bundles many approved actions into Impact Pools and exposes proof exports for NGO, sponsor, and future carbon-linked workflows. A live 3D Proof Forest turns approved actions into a growing digital reforestation experience.
- GitHub repository URL.
- Live demo URL.
- Demo video URL.
- Pitch deck PDF URL.
- Team roster and roles.
npm run lint
npm run build
npm run server:lint
npm run server:build
npm run server:migrate