Skip to content

ElixirEvents gathers all Elixir and Erlang related events, like conferences and meetups, in a single place. The goal is to make all events more discoverable and to help grow the community. Find and contribute new events!

License

Notifications You must be signed in to change notification settings

joladev/elixir_events

Repository files navigation

ElixirEvents

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.

Features

Event Management

  • 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

User Experience

  • 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

Content Distribution

  • RSS Feed: Subscribe to approved events via RSS
  • Bluesky Integration: Automatic posting of new events to Bluesky

Administrative Features

  • 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

Tech Stack

  • 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

Development Setup

Prerequisites

  • Elixir 1.17 or later
  • Erlang/OTP 26 or later
  • PostgreSQL 14 or later
  • Node.js 16 or later (for assets)

Getting Started

  1. Clone the repository:

    git clone https://github.com/joladev/elixir_events.git
    cd elixir_events
  2. Install dependencies and setup database:

    mix setup
  3. Start the Phoenix server:

    mix phx.server

    Or with an interactive shell:

    iex -S mix phx.server
  4. Visit localhost:4000 in your browser

Configuration

Development Environment

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

Production Environment

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

API Endpoints

Public Routes

  • GET / - Main event listing
  • GET /event/:slug - Individual event page
  • GET /propose - Event submission form
  • GET /rss - RSS feed of approved events

Admin Routes (authentication required)

  • GET /admin - Admin dashboard
  • Event approval/rejection actions
  • Event editing capabilities

Database Schema

Main Tables

  • 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

Architecture

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

Development Commands

# 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

Deployment

Using Docker

# 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

Using Elixir Releases

# Build a release
MIX_ENV=prod mix release

# Run the release
_build/prod/rel/elixir_events/bin/elixir_events start

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please ensure:

  • All tests pass (mix test)
  • Code is formatted (mix format)
  • You've added tests for new functionality

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • The Elixir community for inspiration and support
  • Phoenix Framework team for the excellent web framework
  • All contributors who help make this project better

About

ElixirEvents gathers all Elixir and Erlang related events, like conferences and meetups, in a single place. The goal is to make all events more discoverable and to help grow the community. Find and contribute new events!

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •