A decentralized voting platform for the Pubky ecosystem, built with Next.js and Pubky Ring authentication.
- 🔐 Decentralized Authentication: Login with Pubky Ring mobile app via QR code
- 🗳️ Cryptographic Voting: Secure voting with Ed25519 signatures
- 🏠 Homeserver Storage: Features stored on user's Pubky homeserver
- 📱 Responsive Design: Modern dark theme with mobile support
- ⚡ Real-time Updates: Dynamic feature list with instant vote updates
- Homeserver: User features stored at
pubky://{pubkey}/pub/roadky-app/features/{id}.json - Local Cache: Vote counts and metadata cached locally for performance
- User scans QR code with Pubky Ring mobile app
- App generates challenge and signature
- Server verifies Ed25519 signature
- Session established with user's public key
- Frontend: Next.js 14, React 18, TypeScript
- Styling: Tailwind CSS with dark theme
- Authentication: Pubky Ring with Ed25519 signatures
- Storage: Pubky homeserver + local JSON cache
- Deployment: Docker with production optimizations
- Node.js 18+
- pnpm (recommended)
- Pubky Ring mobile app for testing
# Install dependencies
pnpm install
# Start development server
pnpm devOpen http://localhost:3000 with your browser to see the result.
- Install Pubky Ring mobile app
- Click "Login with Pubky Ring" on the homepage
- Scan the QR code with the mobile app
- Complete the authentication challenge
- Login with Pubky Ring
- Click "Create Feature" on the homepage
- Fill in title, description, and category
- Feature is saved to your homeserver and displayed publicly
- Click vote buttons on any feature
- Votes are cryptographically signed
- Vote counts update in real-time
- Access "My Features" from the navigation
- Edit or delete your submitted features
- Changes sync with your homeserver
src/
├── app/ # Next.js App Router
│ ├── page.tsx # Homepage with feature list
│ ├── profile/ # User profile page
│ ├── admin/ # Feature management
│ ├── how-it-works/ # Documentation page
│ └── api/ # API endpoints
├── components/ # React components
│ ├── FeatureList.jsx # Main feature display
│ ├── LoginModal.jsx # Authentication modal
│ └── Header.jsx # Navigation header
├── contexts/ # React contexts
│ └── AuthContext.js # Authentication state
├── services/ # Business logic
│ ├── pubkyService.js # Pubky homeserver client
│ └── featureService.js # Feature management
└── styles/ # Global styles
GET /api/features- List all features with vote countsPOST /api/features- Create new feature (authenticated)PUT /api/features/[id]- Update feature (authenticated)DELETE /api/features/[id]- Delete feature (authenticated)POST /api/features/[id]/vote- Vote on featurePOST /api/auth/verify- Verify Pubky Ring signature
# Build and run
docker build -t pubky-roadmap .
docker run -p 3000:3000 pubky-roadmapCreate .env.local:
# Optional: Custom configuration
NEXT_PUBLIC_APP_NAME="Pubky RoadMap"- Fork the repository
- Create a feature branch
- Make your changes
- Test with Pubky Ring authentication
- Submit a pull request
MIT License - see LICENSE file for details