A social media platform exclusively for college students, verified through university email domains.
Wavve is a college-focused social network where students can:
- Share stories and connect with peers from their university
- Follow and interact with college organizations and clubs
- Discover and RSVP to campus events
- Share ideas and participate in discussions
- Build a verified college community
Current Phase: Authentication & University Verification (January 2026)
This backend API powers Wavve's authentication system. We're starting with a robust foundation that ensures only verified college students can access the platform.
Building a secure authentication system with:
- University email verification via OTP
- Session management
- Multi-device support
- Role-based access
Once authentication is complete, Wavve will expand to include:
- Social Features: User profiles, follow system, posts, stories, and feed
- Organizations: College clubs and organizations can create pages and manage content
- Events: Event creation, discovery, and RSVP system
- Discussions: Idea boards and threaded conversations
Details and specifications for future features will be designed and documented as we progress.
- Framework: Phoenix 1.8 (Elixir)
- Database: PostgreSQL
- API Style: REST (JSON)
- Email: Swoosh
- Web Server: Bandit
- Elixir 1.15+
- Erlang/OTP 26+
- PostgreSQL 14+
See docs/SETUP.md for detailed installation instructions.
# Quick start
git clone <repository-url>
cd wavve_backend
mix deps.get
./env_manager.sh switch dev
mix ecto.setup
mix phx.serverServer runs at http://localhost:4000
mix testmix precommit# Create migration
mix ecto.gen.migration migration_name
# Run migrations
mix ecto.migrate
# Rollback
mix ecto.rollback
# Reset database
mix ecto.reset./env_manager.sh switch dev # Development
./env_manager.sh switch staging # Staging
./env_manager.sh switch prod # Productionusers
- Email, role, verification status
- Last login tracking
universities
- University name and status
university_domains
- Verified email domains (e.g., @stanford.edu)
- Domain types (student, alumni, faculty, org)
auth_providers
- OAuth provider connections (for future use)
otp_tokens
- Email verification codes
- Expiration and rate limiting
sessions
- Active user sessions
- Device tracking and management
lib/
βββ wavve_backend/
β βββ accounts/ # Authentication & users
β β βββ user.ex
β β βββ session.ex
β β βββ otp_token.ex
β β βββ auth_provider.ex
β βββ universities/ # University management
β β βββ university.ex
β β βββ university_domain.ex
β βββ application.ex
β βββ repo.ex
β βββ mailer.ex
βββ wavve_backend_web/
βββ controllers/ # API endpoints
βββ endpoint.ex
βββ router.ex
API Endpoints
- POST /api/auth/signup - Register with university email
- POST /api/auth/verify-email - Verify OTP code
- POST /api/auth/resend-otp - Resend verification code
- POST /api/auth/login - Email/password login
- POST /api/auth/logout - End session
- GET /api/auth/me - Current user info
- POST /api/auth/refresh - Refresh session
Business Logic
- User registration with university email validation
- OTP generation and email delivery
- Rate limiting for OTP requests
- Session management (create, validate, revoke)
- Password hashing with Bcrypt/Argon2
- JWT token generation and validation
Testing & Security
- Comprehensive test coverage
- Rate limiting middleware
- Brute force protection
- Input validation and sanitization
See docs/JANUARY_MILESTONE.md for detailed weekly breakdown.
Future features (user profiles, social graph, organizations, events, discussions) will be specified and designed after authentication is complete.
We welcome contributions! Whether you're fixing bugs, adding features, or improving documentation.
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Implement your changes
- Test thoroughly:
mix test - Format code:
mix format - Run precommit checks:
mix precommit - Commit with clear messages
- Push to your fork
- Open a Pull Request
See docs/CONTRIBUTING.md for detailed guidelines.
- Follow Elixir and Phoenix conventions (see
AGENTS.md) - Write tests for new features
- Update documentation as needed
- Keep commits focused and atomic
Look for issues tagged with good-first-issue:
- Email verification flow
- OTP validation logic
- Session management helpers
- API endpoint implementations
- Test coverage improvements
DATABASE_URL=ecto://postgres:postgres@localhost/wavve_backend_dev
SECRET_KEY_BASE=<generate with mix phx.gen.secret>
PHX_HOST=localhostPORT=4000
POOL_SIZE=10
PHX_SERVER=trueSee docs/ENVIRONMENT.md for complete configuration guide.
All documentation is available in the docs/ folder:
- SETUP.md - Step-by-step installation guide
- ENVIRONMENT.md - Environment setup and configuration
- CONTRIBUTING.md - How to contribute
- JANUARY_MILESTONE.md - January 2026 tasks and weekly breakdown
- PROJECT_STATUS.md - Implementation status and roadmap
- API_RESPONSES.md - API response format and examples
- AGENTS.md - Code style and conventions (root level)
January 2026: Authentication & University Verification February 2026: User Profiles & Social Graph March 2026: Organizations & Events April 2026: Discussions & Content + Launch
Goal: Stable launch by end of April 2026
This project is licensed under the MIT License - see the LICENSE file for details.
- Issues: Report bugs or request features
- Discussions: Ask questions or share ideas
- Pull Requests: Contribute code or documentation
Built with β€οΈ using Phoenix Framework and Elixir.