A multi-tenant decentralized social curation system for Ethereum-aligned communities. This Next.js 15 application enables communities to manage member voting on potential new members through a subgroup assignment system, built as a Farcaster mini-app.
The Aligned Mini App provides:
- Multi-Tenant Architecture: Each community/group operates independently with isolated data
- Member Curation: Democratic voting system for adding/removing community members
- Subgroup Management: Organized voting through subgroup assignments
- Farcaster Integration: Built as a mini-app using Frame SDK
- External API: Integrates with voting-services-api for all data operations
- Node.js 18+
- pnpm package manager
- Access to voting-services-api backend
# Clone the repository
git clone <repository-url>
cd aligned-mini-app
# Install dependencies
pnpm install
# Install Playwright for testing
pnpm run test:installCreate a .env.local file with required variables:
# API Configuration
NEXT_PUBLIC_API_URL=http://localhost:4000
# Farcaster Configuration
NEYNAR_API_KEY=your_neynar_api_key
# Frame SDK environment variables
# (Additional Frame SDK variables as needed)# Start development server
pnpm dev
# Open http://localhost:3000# Build for production
pnpm build
# Start production server
pnpm startpnpm dev- Start development serverpnpm build- Build the applicationpnpm lint- Run ESLint and format codepnpm lint:fix- Fix ESLint issues onlypnpm format- Format code with Prettierpnpm format:check- Check code formattingpnpm typecheck- Run TypeScript type checkingpnpm start- Start production server
# Run all tests
pnpm test
# Run tests with UI
pnpm test:ui
# Show test report
pnpm test:report
# Debug tests
pnpm test:debugSee tests/README.md for comprehensive testing documentation.
- Framework: Next.js 15 with App Router
- Language: TypeScript
- Styling: Tailwind CSS + shadcn/ui components
- State Management: TanStack Query
- Authentication: Frame SDK
- Blockchain: viem + wagmi for wallet interactions
- Testing: Playwright with comprehensive mocking system
- Multi-Tenant Routing:
/groups/[groupId]/URL structure - Server-Side Rendering: Data prefetching in server components
- External API Integration: All data operations via voting-services-api
- Mobile-First Design: Optimized for mobile Farcaster experience
- Comprehensive Testing: Playwright tests with Frame SDK mocking
app/
├── groups/[groupId]/ # Group-scoped routes
│ ├── page.tsx # Group dashboard
│ ├── members/ # Member management
│ ├── proposals/ # Proposal management
│ ├── settings/ # Group configuration
│ └── ...
├── components/ # Reusable UI components
├── lib/ # Utilities and types
└── tests/ # Playwright test suite
- ESLint + Prettier for consistent formatting
- TypeScript strict mode
- Prefer kebab-case for file names
- Follow existing component patterns
- Create feature branch from
develop - Implement changes with tests
- Run
pnpm lintandpnpm typecheck - Submit pull request to
develop
- Write Playwright tests for new features
- Use the comprehensive mocking system for Frame SDK
- Ensure tests cover authentication flows
- See tests/README.md for detailed guidance
This app requires the companion voting-services-api backend:
- Repository:
../voting-services-api(sibling directory) - Purpose: All data operations, authentication validation, multi-tenant data isolation
- API Base: Configured via
NEXT_PUBLIC_API_URL
- Purpose: Farcaster mini-app integration and authentication
- Version: @farcaster/miniapp-sdk 0.1.7
- Authentication: JWT tokens via quickAuth
- CLAUDE.md - Detailed architecture and development guidance
- tests/README.md - Comprehensive testing documentation
[Add license information]