{"id":33346532,"url":"https://github.com/nirwanadoteth/onepulse","last_synced_at":"2026-06-11T19:31:10.509Z","repository":{"id":322705387,"uuid":"1082740672","full_name":"nirwanadoteth/onepulse","owner":"nirwanadoteth","description":"A Base App/Farcaster Mini App for saying \"GM\" onchain daily across multiple networks","archived":false,"fork":false,"pushed_at":"2026-01-10T18:11:21.000Z","size":7127,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T05:28:27.350Z","etag":null,"topics":["base","base-app","celo","farcaster","farcaster-mini-app","optimism","walletconnect","web3","web3-dapp"],"latest_commit_sha":null,"homepage":"https://onepulse.nirwana.lol","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nirwanadoteth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-24T17:38:55.000Z","updated_at":"2026-01-10T18:11:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nirwanadoteth/onepulse","commit_stats":null,"previous_names":["nirwanadoteth/onepulse"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nirwanadoteth/onepulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirwanadoteth%2Fonepulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirwanadoteth%2Fonepulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirwanadoteth%2Fonepulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirwanadoteth%2Fonepulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nirwanadoteth","download_url":"https://codeload.github.com/nirwanadoteth/onepulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirwanadoteth%2Fonepulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34215253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base","base-app","celo","farcaster","farcaster-mini-app","optimism","walletconnect","web3","web3-dapp"],"created_at":"2025-11-22T08:00:15.210Z","updated_at":"2026-06-11T19:31:10.501Z","avatar_url":"https://github.com/nirwanadoteth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OnePulse\n\n![OnePulse Logo](./public/logo.png)\n\n## Daily GM Tracking on Multiple Blockchains\n\nA Base app/Farcaster Mini App for saying \"GM\" daily across Base, Celo, and Optimism networks\n\n---\n\n## ✨ Overview\n\nOnePulse is a Base app/Farcaster Mini App that lets users say \"GM\" (Good Morning) daily across multiple blockchain networks, track their streaks, and earn rewards in USDC (configurable). Built with modern Web3 technologies, it demonstrates seamless integration between Farcaster, smart contracts, and real-time databases.\n\n### 🚀 Key Features\n\n- **Multi-Chain GM Tracking** - Say GM on Base, Celo, and Optimism\n- **Real-Time Streaks** - Track current and highest streaks\n- **ERC-20 Rewards** - Automatic token rewards for daily participation\n- **Farcaster Integration** - Native Mini App experience\n- **Live Statistics** - Real-time updates via SpacetimeDB\n\n---\n\n## 🛠 Tech Stack\n\n| Category | Technology | Version |\n| ---------- | ------------ | --------- |\n| **Frontend** | Next.js, React, TypeScript | 16.0, 19.0, 5.0 |\n| **Styling** | Tailwind CSS | 4.1 |\n| **Web3** | OnchainKit, Wagmi, Viem, AppKit (Reown) | latest, 2.19, 2.38, 1.8.14 |\n| **Database** | SpacetimeDB | 1.7 |\n| **Farcaster** | MiniApp SDK | 0.2.1 |\n| **UI** | Radix UI, Motion | latest |\n\n---\n\n## 📁 Project Structure\n\n```text\napp/                   # Next.js App Router\n├── api/               # API routes (auth, gm, claims)\n├── layout.tsx         # Root layout\n├── page.tsx           # Main app page\n└── globals.css        # Global styles\n\ncomponents/            # React components\n├── gm-chain-card/     # Per-chain GM UI\n├── providers/         # Context providers\n├── ui/                # Reusable UI components\n└── ...\n\ncontracts/            # Solidity smart contracts\nhooks/                # Custom React hooks\nlib/                  # Utilities and configurations\nserver/               # Rust/SpacetimeDB backend\n```\n\n---\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Node.js 18+ or Bun\n- Coinbase Developer Platform account\n- Farcaster account\n\n### Installation\n\n```bash\n# Clone repository\ngit clone https://github.com/nirwanadoteth/onepulse.git\ncd onepulse\n\n# Install dependencies\nnpm install\n\n# Configure environment\ncp .env.example .env.local\n# Edit .env.local with your API keys\n\n# Start development server\nnpm run dev\n```\n\nVisit `http://localhost:3000` to see the app.\n\n### Environment Setup\n\n```bash\n# Required environment variables\nNEXT_PUBLIC_ONCHAINKIT_API_KEY=your_cdp_api_key\nNEXT_PUBLIC_ONCHAINKIT_PROJECT_ID=your_cdp_project_id\nNEXT_PUBLIC_REOWN_PROJECT_ID=your_reown_project_id\nNEXT_PUBLIC_URL=http://localhost:3000\n\n# Smart contract addresses\nNEXT_PUBLIC_DAILY_GM_ADDRESS_BASE=0x...\nNEXT_PUBLIC_DAILY_GM_ADDRESS_CELO=0x...\nNEXT_PUBLIC_DAILY_GM_ADDRESS_OPTIMISM=0x...\nNEXT_PUBLIC_DAILY_REWARDS_V2_ADDRESS_BASE=0x...\nNEXT_PUBLIC_DAILY_REWARDS_V2_ADDRESS_CELO=0x...\nNEXT_PUBLIC_DAILY_REWARDS_V2_ADDRESS_OPTIMISM=0x...\n\n# Neynar\nNEYNAR_API_KEY=\n\n# Database\nSPACETIMEDB_HOST_URL=\nSPACETIMEDB_MODULE=\n\n# Redis\nKV_REST_API_URL=\nKV_REST_API_TOKEN=\n\n# Signer PK\nBACKEND_SIGNER_PRIVATE_KEY=0x...\n\n# Paymaster endpoint from Coinbase (optional)\nPAYMASTER_ENDPOINT=\n```\n\n---\n\n## 🏗 Architecture\n\n### Data Flow\n\n```mermaid\ngraph TD\n    A[Farcaster Frame] --\u003e B[Mini App SDK]\n    B --\u003e C[React App]\n    C --\u003e D[Root Providers]\n    D --\u003e E[GM Components]\n    E --\u003e F[Smart Contracts]\n    F --\u003e G[SpacetimeDB]\n```\n\n### Key Components\n\n- **Server Components** - Data fetching and static content\n- **Client Components** - Interactive UI and wallet connections\n- **Custom Hooks** - Reusable logic for GM stats, connections\n- **Context Providers** - Global state management\n\n---\n\n## 📊 Features\n\n### Daily GM Tracking\n\n- One GM per UTC day per network\n- Automatic streak calculation\n- Real-time statistics updates\n\n### Multi-Chain Support\n\n- **Base** - Ethereum L2 with low fees\n- **Celo** - Mobile-first blockchain\n- **Optimism** - Optimistic rollup\n\n### Reward System\n\n- ERC-20 token rewards (currently use USDC)\n- Automatic claiming\n- Reward history tracking\n\n---\n\n## 🧪 Development\n\n### Available Scripts\n\n```bash\nnpm dev              # Start development server\nnpm run build        # Build for production\nnpm run typecheck        # Run TypeScript checks\nnpm run check            # Run ultracite check\nnpm run format           # Format code with ultracite\n```\n\n### Code Quality\n\nThe project maintains high code quality with:\n\n- **TypeScript strict mode** enabled\n- **Biome** lint and format tools with ultracite settings\n- **Automated import sorting**\n\n### Naming Conventions\n\n- Components: `PascalCase` (UserCard)\n- Hooks: `camelCase` with `use` prefix (useGmStats)\n- Utilities: `camelCase` (normalizeChainId)\n- Constants: `UPPER_SNAKE_CASE` (API_TIMEOUT)\n\n---\n\n## 🚢 Deployment\n\n### Vercel Deployment\n\n```bash\nnpm run build\nvercel --prod\n```\n\n### Mini App Configuration\n\n1. Deploy to production domain\n2. Generate signed manifest at [Farcaster Manifest Tool](https://farcaster.xyz/~/developers/mini-apps/manifest)\n3. Update `minikit.config.ts` with signed `accountAssociation`\n4. Redeploy\n\n### Environment Variables\n\nSet production environment variables in your hosting platform:\n\n- `NEXT_PUBLIC_ONCHAINKIT_API_KEY`\n- `NEXT_PUBLIC_ONCHAINKIT_PROJECT_ID`\n- `NEXT_PUBLIC_URL` (production domain)\n- Smart contract addresses\n\n---\n\n## 📚 Documentation\n\n### 📖 Guides\n\n- [Architecture Overview](app/README.md)\n- [Farcaster MiniApp Checklist](.github/instructions/farcaster-miniapps.instructions.md)\n- [OnchainKit Best Practices](.github/instructions/onchainkit.instructions.md)\n- [Performance Optimization](.github/instructions/performance-optimization.instructions.md)\n- [Security Guidelines](.github/instructions/security-and-owasp.instructions.md)\n\n### 🏗 API Reference\n\n- [Smart Contracts](contracts/) - DailyGM.sol, DailyRewards.sol\n- [Component Library](components/ui/) - Reusable UI components\n- [Hooks Reference](hooks/) - Custom React hooks\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! Please follow these steps:\n\n1. **Fork the repository**\n2. **Create a feature branch** (`git checkout -b feature/amazing-feature`)\n3. **Make your changes** following our coding standards**\n4. **Run quality checks** (`npm check`)\n5. **Commit your changes** (`git commit -m 'feat: add amazing feature'`)\n6. **Push to the branch** (`git push origin feature/amazing-feature`)\n7. **Open a Pull Request**\n\n### Development Guidelines\n\n- Follow TypeScript strict mode\n- Use functional components with proper typing\n- Implement proper error handling\n- Add comments for complex business logic\n- Update documentation for new features\n\n---\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n#### Manifest Not Loading\n\n```bash\n# Check manifest is accessible\ncurl https://your-domain/.well-known/farcaster.json\n```\n\n#### App Not Initializing\n\nEnsure `sdk.actions.ready()` is called in your Mini App initialization.\n\n#### Transaction Failures\n\n- Verify wallet is connected to correct network\n- Check sufficient balance for gas fees\n- Confirm smart contract addresses are correct\n\n#### Database Connection Issues\n\n- Verify SpacetimeDB endpoint accessibility\n- Check subscription queries are properly formatted\n- Ensure event handlers are correctly configured\n\n\u003e **Note:** For detailed troubleshooting, see our [Farcaster MiniApp Checklist](.github/instructions/farcaster-miniapps.instructions.md).\n\n---\n\n## 🔗 Links\n\n- [🌐 Live Demo](https://onepulse.nirwana.lol)\n- [📖 Farcaster Documentation](https://docs.farcaster.xyz)\n- [🔗 Reown AppKit](https://docs.reown.com)\n- [🛠 OnchainKit](https://onchainkit.xyz)\n- [📚 Next.js Docs](https://nextjs.org/docs)\n- [🎨 Tailwind CSS](https://tailwindcss.com)\n\n---\n\n## ⚠️ Disclaimer\n\n**This is a live Farcaster Mini App accessible through Farcaster clients and Base app, as well as via web browsers.**\n\nUse at your own risk. This application interacts with blockchain networks and may involve financial transactions.\n\n---\n\n## Built with ❤️ using Next.js, React, OnchainKit, and Reown AppKit\n\n⭐ [Star us on GitHub](https://github.com/nirwanadoteth/onepulse) • 🐛 [Report Issues](https://github.com/nirwanadoteth/onepulse/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnirwanadoteth%2Fonepulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnirwanadoteth%2Fonepulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnirwanadoteth%2Fonepulse/lists"}