Enterprise reward infrastructure for GitHub contributions. Pay contributors instantly with blockchain-backed bounties.
- Blockchain-Backed Bounties: Create and fund bounties on GitHub issues using USDC on Tempo blockchain
- Passkey Wallet: Secure, passwordless wallet using WebAuthn (Face ID/Touch ID)
- Auto-Pay: Automated bounty payouts with Access Key authorization
- GitHub Integration: Native integration with GitHub issues and pull requests
- Instant Payments: Direct blockchain payments with sub-second finality
- Frontend: Next.js 15 (App Router), React 19, TypeScript
- Styling: Tailwind CSS with custom design system
- Database: PostgreSQL with Drizzle ORM
- Authentication: Better Auth with Passkey support
- Blockchain: Tempo (Layer-1 blockchain for stablecoin payments)
- TIP-20 tokens (USDC)
- Payment Lanes for guaranteed low-cost transfers
- Fee Sponsorship (app pays gas fees)
- Passkey (P256) native signing
- Key Management: Turnkey HSM for backend signing
- Node.js 18+ and pnpm
- PostgreSQL database
- GitHub OAuth App credentials
- Turnkey account (for Access Key auto-signing)
-
Clone the repository
git clone https://github.com/wozhendeai/grip.git cd grip -
Install dependencies
pnpm install
-
Set up environment variables
cp .env.example .env
Required variables:
DATABASE_URL: PostgreSQL connection stringGITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET: GitHub OAuthNEXT_PUBLIC_APP_URL: Your app URL (https://usegrip.xyz)NEXT_PUBLIC_RP_ID: Passkey relying party ID (usegrip.xyz)TEMPO_RPC_URL: Tempo blockchain RPC endpointTEMPO_USDC_ADDRESS: USDC token address on TempoTURNKEY_ORGANIZATION_ID/TURNKEY_API_*: Turnkey credentials
-
Run database migrations
pnpm db:generate pnpm db:migrate
-
Start development server
pnpm dev
pnpm dev- Start development server with Turbopackpnpm build- Build for productionpnpm start- Start production serverpnpm lint- Run Biome linterpnpm format- Format code with Biomepnpm typecheck- Run TypeScript type checkingpnpm db:generate- Generate Drizzle migrationspnpm db:migrate- Run database migrationspnpm db:studio- Open Drizzle Studio (database GUI)
This project uses Lefthook for automated quality checks:
- Pre-commit: Linting, formatting, type checking, migration checks
- Commit-msg: Conventional Commits validation
- Pre-push: Production build verification
Install hooks: pnpm hooks:install
grip/
├── app/ # Next.js App Router
│ ├── (main)/ # Main app routes
│ │ ├── bounties/ # Bounty management
│ │ ├── wallet/ # Wallet & payments
│ │ ├── settings/ # User settings
│ │ └── [owner]/[repo]/# Repository pages
│ ├── api/ # API routes
│ └── layout.tsx # Root layout
├── components/ # Global React components
│ ├── ui/ # UI primitives (shadcn/ui)
│ └── layout/ # Layout components
├── lib/ # Utilities & libraries
│ ├── auth/ # Better Auth configuration
│ ├── tempo/ # Tempo blockchain utilities
│ ├── github/ # GitHub API integration
│ └── turnkey/ # Turnkey HSM client
├── db/ # Database layer
│ ├── schema/ # Drizzle schema definitions
│ └── queries/ # Database queries
├── public/ # Static assets
└── docs/ # Documentation
- Create: Repo owner creates a bounty on a GitHub issue
- Fund: Bounty is funded with USDC (promise model, not escrow)
- Claim: Contributor opens a PR referencing the issue
- Complete: PR is merged on GitHub
- Approve: Funder approves the submission
- Payout: Contributor receives USDC directly to their wallet
- Users create a wallet using Face ID/Touch ID (WebAuthn)
- Private key never leaves the device
- Passkey public key derives Tempo blockchain address (P-256 curve)
- No seed phrases or passwords required
- Users can authorize GRIP to sign payouts automatically
- Backend wallet (Turnkey HSM) signs on behalf of user
- Spending limits and expiry enforced on-chain via Tempo's Account Keychain
- Revocable at any time
MIT
- Website: usegrip.xyz
- Documentation: docs.usegrip.xyz
- GitHub: github.com/wozhendeai/grip