Features โข Quick Start โข Tech Stack โข Documentation โข Roadmap
Attest is a decentralized proof-of-attendance protocol built on Solana that enables event organizers to create verifiable, on-chain attendance records through NFTs. Whether you're hosting a conference, workshop, meetup, or virtual event, Attest provides a seamless way to reward attendees with unique, collectible NFTs that prove their participation.
- ๐ Verifiable Attendance: Immutable on-chain proof that can't be forged or duplicated
- โก Lightning Fast: Built on Solana for instant minting and low transaction costs
- ๐จ Customizable: Create unique NFT designs for each event
- ๐ฑ Mobile-Friendly: QR code-based claiming for seamless check-ins
- ๐ Decentralized: No centralized authority controls your attendance records
- ๐ฐ Cost-Effective: Minimal fees compared to other blockchain solutions
- ๐ซ Create Events: Set up events with custom details, images, and claim codes
- ๐ Dashboard: Track attendance metrics and claim statistics in real-time
- ๐ QR Code Generation: Automatically generate shareable QR codes for easy claiming
- ๐จ Custom NFT Metadata: Design unique NFT artwork and metadata for each event
- ๐ฅ Attendee Management: View who claimed NFTs and when
- ๐ Wallet Integration: Connect with Phantom, Solflare, Backpack, and other Solana wallets
- ๐ธ QR Code Scanning: Quick claim process via QR code
- ๐ Signature Verification: Prove wallet ownership through message signing
- ๐ Instant NFT Minting: Receive your attendance NFT immediately
- ๐ผ๏ธ NFT Gallery: View all your collected attendance NFTs in your wallet
- ๐ Dual Backend Support: Works with both Node.js/MongoDB and Supabase
- ๐ REST API: Clean, documented API for integrations
- ๐จ Modern UI: Beautiful interface built with shadcn/ui and Tailwind CSS
- ๐ฑ Responsive Design: Works seamlessly on desktop and mobile
- ๐ Secure: No private keys stored, wallet-based authentication
- Node.js 18+ and npm
- MongoDB (local or Atlas) OR Supabase account
- Solana Wallet (Phantom recommended)
- Devnet SOL for testing (get from Solana Faucet)
-
Clone the repository
git clone https://github.com/yourusername/event-beacon.git cd event-beacon -
Install frontend dependencies
npm install
-
Install backend dependencies
cd backend npm install cd ..
-
Set up MongoDB (if using Node.js backend)
# Windows (using Chocolatey) choco install mongodb # Start MongoDB mongod --dbpath C:\data\db
-
Configure environment variables
Frontend (
.envin root):VITE_USE_LOCAL_API=false VITE_API_URL=http://localhost:5000
Backend (
backend/.env):MONGODB_URI=mongodb://localhost:27017/attest SOLANA_RPC_URL=https://api.devnet.solana.com SOLANA_PAYER_SECRET_KEY=your_base58_secret_key_here PORT=5000 FRONTEND_URL=http://localhost:8080
-
Start the development servers
Terminal 1 - Backend:
cd backend npm run devTerminal 2 - Frontend:
npm run dev
-
Open your browser
Navigate to
http://localhost:8080and connect your Solana wallet!
๐ For detailed setup instructions, see:
- INSTALLATION.md - Complete installation guide
- QUICK_START.md - 5-minute quick start
- LOCAL_TESTING.md - Local testing guide
- SOLANA_SETUP.md - Solana wallet setup
- backend/README.md - Backend-specific setup
- Framework: React 18.3 + TypeScript 5.8
- Build Tool: Vite 5.4
- Styling: Tailwind CSS 3.4 + shadcn/ui components
- UI Components: Radix UI primitives
- Routing: React Router 6.30
- State Management: TanStack Query (React Query)
- Forms: React Hook Form + Zod validation
- Icons: Lucide React
- Network: Solana (Devnet/Mainnet)
- SDK: @solana/web3.js 1.98
- Wallet Adapters: Phantom, Solflare, Backpack, Torus
- NFT Standard: Metaplex Token Metadata (MPL)
- Token Program: SPL Token
- Runtime: Node.js + Express
- Database: MongoDB + Mongoose
- NFT Minting: Metaplex Foundation SDK
- Image Processing: Sharp
- CORS: Configured for cross-origin requests
- Database: PostgreSQL
- Functions: Deno Edge Functions
- Authentication: Supabase Auth
- Storage: Supabase Storage
- Linting: ESLint 9
- Package Manager: npm / Bun
- Version Control: Git
- Deployment: Vercel (frontend), Render/Railway (backend)
event-beacon/
โโโ src/ # Frontend source code
โ โโโ components/ # React components
โ โ โโโ CreateEventForm.tsx # Event creation form
โ โ โโโ ClaimNFT.tsx # NFT claiming interface
โ โ โโโ ... # UI components (buttons, cards, etc.)
โ โโโ pages/ # Route pages
โ โ โโโ Index.tsx # Landing page
โ โ โโโ Events.tsx # Events listing
โ โ โโโ EventDetail.tsx # Single event view
โ โ โโโ CreateEvent.tsx # Create event page
โ โ โโโ Claim.tsx # Claim NFT page
โ โโโ contexts/ # React contexts
โ โ โโโ WalletContext.tsx # Solana wallet provider
โ โโโ hooks/ # Custom React hooks
โ โโโ lib/ # Utilities and API clients
โ โ โโโ api-adapter.ts # Backend abstraction layer
โ โ โโโ utils.ts # Helper functions
โ โโโ integrations/ # Third-party integrations
โ โโโ supabase/ # Supabase client (optional)
โโโ backend/ # Node.js backend
โ โโโ src/
โ โโโ models/ # MongoDB schemas
โ โ โโโ Event.js # Event model
โ โ โโโ Claim.js # Claim model
โ โโโ routes/ # API routes
โ โ โโโ events.js # Event endpoints
โ โ โโโ claims.js # Claim endpoints
โ โ โโโ mint.js # NFT minting endpoint
โ โโโ lib/ # Backend utilities
โ โ โโโ solana.js # Solana connection
โ โ โโโ metaplex.js # NFT minting logic
โ โโโ server.js # Express server
โโโ public/ # Static assets
โ โโโ logo.png # App logo
โ โโโ favicon.ico # Favicon
โโโ docs/ # Documentation
โ โโโ INSTALLATION.md # Setup guide
โ โโโ LOCAL_TESTING.md # Testing guide
โ โโโ SOLANA_SETUP.md # Solana configuration
โ โโโ CODEBASE_ANALYSIS.md # Architecture overview
โโโ package.json # Dependencies
graph LR
A[Organizer] -->|Connects Wallet| B[Create Event]
B -->|Fills Form| C[Submit Event]
C -->|Generates| D[Claim Code + QR]
D -->|Share| E[Attendees]
- Organizer connects their Solana wallet
- Creates an event with details (name, description, image, date)
- System generates a unique claim code and QR code
- Organizer shares the code/QR with attendees
graph LR
A[Attendee] -->|Scans QR/Enters Code| B[Event Page]
B -->|Connects Wallet| C[Sign Message]
C -->|Verified| D[Mint NFT]
D -->|Success| E[NFT in Wallet]
- Attendee scans QR code or enters claim code
- Connects their Solana wallet (Phantom, Solflare, etc.)
- Signs a verification message to prove ownership
- Backend mints NFT using Metaplex
- NFT appears in attendee's wallet immediately
Frontend (React) โ API Adapter โ Backend (Express/Supabase)
โ
MongoDB/Postgres
โ
Solana RPC (Devnet)
โ
Metaplex NFT Mint
โ
Attendee Wallet
| Document | Description |
|---|---|
| INSTALLATION.md | Complete installation and setup guide |
| QUICK_START.md | Get started in 5 minutes |
| LOCAL_TESTING.md | Test the full flow locally |
| SOLANA_SETUP.md | Configure Solana wallets and keys |
| WALLET_SETUP.md | Set up Phantom and other wallets |
| CODEBASE_ANALYSIS.md | Architecture deep dive |
| CODEBASE_AUDIT.md | Code quality and security audit |
| backend/README.md | Backend-specific documentation |
Get all active events
Response: [
{
"_id": "event_id",
"name": "Web3 Conference 2024",
"description": "Annual blockchain conference",
"claimCode": "WEB3-2024",
"imageUrl": "https://...",
"date": "2024-12-25T00:00:00Z",
"organizerWallet": "ABC...XYZ"
}
]Create a new event
Request: {
"name": "Event Name",
"description": "Event description",
"claimCode": "UNIQUE-CODE",
"imageUrl": "https://...",
"date": "2024-12-25",
"organizerWallet": "wallet_address"
}Find event by claim code
Create a new claim
Request: {
"eventId": "event_id",
"walletAddress": "wallet_address",
"signature": "signed_message"
}Check if wallet already claimed
Mint NFT for a claim
Request: {
"claimId": "claim_id",
"walletAddress": "recipient_wallet",
"eventName": "Event Name",
"eventDate": "2024-12-25"
}
Response: {
"success": true,
"mintAddress": "NFT_mint_address",
"signature": "transaction_signature"
}- Push code to GitHub
- Import project in Vercel
- Set environment variables:
VITE_API_URL=https://your-backend.com - Deploy!
- Create new Web Service
- Connect GitHub repository
- Set build command:
cd backend && npm install - Set start command:
cd backend && npm start - Add environment variables:
MONGODB_URI=mongodb+srv://... SOLANA_RPC_URL=https://api.mainnet-beta.solana.com SOLANA_PAYER_SECRET_KEY=... FRONTEND_URL=https://your-frontend.vercel.app NODE_ENV=production
- Create cluster at mongodb.com/cloud/atlas
- Get connection string
- Update
MONGODB_URIin backend environment
- Event creation and management
- QR code generation
- Wallet integration (Phantom, Solflare, Backpack)
- NFT minting on Solana devnet
- Claim verification system
- Responsive UI with shadcn/ui
- Node.js + MongoDB backend
- Dual backend support (Supabase/Node.js)
- Mainnet Deployment: Move from devnet to Solana mainnet
- Event Analytics Dashboard: Detailed metrics and insights
- Batch Minting: Mint multiple NFTs at once for large events
- Email Notifications: Alert attendees when NFTs are minted
- Social Sharing: Share attendance on Twitter/social media
- Event Categories: Tag and filter events by type
- Search & Discovery: Find events by location, date, category
- Multi-Chain Support: Expand to Ethereum, Polygon, Base
- Dynamic NFTs: Update NFT metadata based on event milestones
- Tiered Attendance: Different NFT tiers (VIP, General, etc.)
- Event Series: Link multiple events into a series with collection rewards
- Gamification: Badges, achievements, leaderboards
- Mobile App: Native iOS/Android apps
- White-Label Solution: Custom branding for organizations
- Marketplace Integration: Trade/sell attendance NFTs
- DAO Governance: Community-driven feature decisions
- Token Gating: Require specific NFTs to access events
- Proof-of-Participation Rewards: Airdrops for active attendees
- Event Sponsorships: Sponsored NFTs and branded experiences
- API Marketplace: Third-party integrations and plugins
- Cross-Platform Identity: Unified attendance profile across platforms
- Virtual Event Integration: Zoom, Discord, Twitter Spaces
- Metaverse Events: VR/AR attendance tracking
Have an idea? Open an issue or join our Discord!
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow the existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
MongoDB Connection Error
# Ensure MongoDB is running
mongod --dbpath C:\data\dbSolana Mint Fails
- Check payer wallet has sufficient SOL
- Verify
SOLANA_PAYER_SECRET_KEYis valid base58 format - Confirm RPC URL is accessible
CORS Errors
- Update
FRONTEND_URLin backend.env - Ensure frontend uses correct
VITE_API_URL
Wallet Won't Connect
- Install Phantom wallet extension
- Switch to Devnet in wallet settings
- Refresh page and try again
This project is licensed under the MIT License - see the LICENSE file for details.
- Solana Foundation for the incredible blockchain infrastructure
- Metaplex for NFT standards and tooling
- shadcn/ui for beautiful UI components
- Vercel for seamless deployment
- The Solana Community for continuous support and feedback
- GitHub Issues: Report bugs or request features
- Discord: Join our community (Coming soon)
- Twitter: @AttestProtocol (Coming soon)
- Email: support@attest.xyz (Coming soon)
Built with โค๏ธ on Solana
โญ Star us on GitHub โข ๐ฆ Follow on Twitter โข ๐ฌ Join Discord