A Phoenix LiveView application for discovering and managing Elixir community events worldwide. ElixirEvents serves as a central hub for conferences, meetups, and online gatherings in the Elixir ecosystem.
- Event Submission: Community members can propose new events
- Admin Approval System: Events are reviewed before publication
- Event Suggestions: Users can suggest edits to existing events
- Event Types: Support for conferences, meetups, and online events
- Timezone Support: Events display in their local timezone
- Location-based Filtering: Find events near you or in specific regions
- SEO-friendly URLs: Events have clean, descriptive URLs
- Responsive Design: Works seamlessly on desktop and mobile
- Markdown Support: Rich text formatting for event descriptions
- RSS Feed: Subscribe to approved events via RSS
- Bluesky Integration: Automatic posting of new events to Bluesky
- Admin Dashboard: Comprehensive event management interface
- Bulk Operations: Approve or reject multiple events at once
- Event Editing: Direct editing of event details
- Feature Flags: Toggle features on/off dynamically
- Backend: Elixir 1.17+ with Phoenix Framework 1.7
- Frontend: Phoenix LiveView for real-time interactivity
- Database: PostgreSQL
- Styling: Tailwind CSS
- JavaScript: ESBuild for asset bundling
- External Services:
- Bluesky API for social media posting
- FunWithFlags for feature management
- Elixir 1.17 or later
- Erlang/OTP 26 or later
- PostgreSQL 14 or later
- Node.js 16 or later (for assets)
-
Clone the repository:
git clone https://github.com/joladev/elixir_events.git cd elixir_events
-
Install dependencies and setup database:
mix setup
-
Start the Phoenix server:
mix phx.server
Or with an interactive shell:
iex -S mix phx.server
-
Visit
localhost:4000
in your browser
Create a .env
file in the project root:
# Database
DATABASE_URL=ecto://postgres:postgres@localhost/elixir_events_dev
# Admin credentials (for seeding)
[email protected]
ADMIN_PASSWORD=adminpassword123
# Bluesky integration (optional)
BLUESKY_USERNAME=your-handle.bsky.social
BLUESKY_PASSWORD=your-app-password
Required environment variables for production:
DATABASE_URL=ecto://user:pass@host/database
SECRET_KEY_BASE=your-secret-key-base
PHX_HOST=your-domain.com
PHX_SERVER=true
BLUESKY_USERNAME=your-handle.bsky.social
BLUESKY_PASSWORD=your-app-password
GET /
- Main event listingGET /event/:slug
- Individual event pageGET /propose
- Event submission formGET /rss
- RSS feed of approved events
GET /admin
- Admin dashboard- Event approval/rejection actions
- Event editing capabilities
-
events - Core event information
- Title, description, dates
- Location details (venue, city, country)
- Event type (conference/meetup)
- Approval status
- Online-only flag
-
suggestions - User-submitted event edits
- Linked to original event
- Contains proposed changes
- Approval workflow
-
users - Authentication and authorization
- Email/password authentication
- Admin role support
The application follows Phoenix's context-based architecture:
- Events Context (
lib/elixir_events/events.ex
): Core business logic - Accounts Context (
lib/elixir_events/accounts.ex
): User management - Distribution Context (
lib/elixir_events/distribution.ex
): External integrations
LiveViews handle the interactive UI components:
- Event listings with real-time filtering
- Form submissions and validations
- Admin interfaces with live updates
# Run tests
mix test
# Run specific test file
mix test test/path/to/test_file.exs
# Format code
mix format
# Database operations
mix ecto.create # Create database
mix ecto.migrate # Run migrations
mix ecto.reset # Drop and recreate database
# Asset management
mix assets.build # Build assets
mix assets.deploy # Build for production
# Build the image
docker build -t elixir_events .
# Run with environment variables
docker run -e DATABASE_URL=... -e SECRET_KEY_BASE=... -p 4000:4000 elixir_events
# Build a release
MIX_ENV=prod mix release
# Run the release
_build/prod/rel/elixir_events/bin/elixir_events start
- Fork the repository
- Create your 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
Please ensure:
- All tests pass (
mix test
) - Code is formatted (
mix format
) - You've added tests for new functionality
This project is licensed under the MIT License - see the LICENSE file for details.
- The Elixir community for inspiration and support
- Phoenix Framework team for the excellent web framework
- All contributors who help make this project better