A real-time collaborative brainstorming web application built with Elixir and Phoenix LiveView.
- Language: Elixir 1.17
- Framework: Phoenix 1.7.21
- UI: Phoenix LiveView (real-time updates)
- Database: PostgreSQL
- Deployment: Docker & docker-compose
lib/
├── mindwendel/ # Core business logic (contexts)
│ ├── brainstormings.ex # Brainstorming sessions
│ ├── ideas.ex # Ideas within brainstormings
│ ├── lanes.ex # Kanban-style lanes
│ ├── accounts.ex # User management
│ ├── comments.ex # Comments on ideas
│ ├── attachments.ex # File/link attachments
│ └── services/ # S3 storage, vault encryption
├── mindwendel_web/ # Web layer
│ ├── router.ex # Route definitions
│ ├── live/ # LiveView components
│ └── controllers/ # HTTP controllers
config/ # Environment configuration
priv/repo/migrations/ # Database migrations
test/ # Test files
lib/mindwendel_web/router.ex- All routes and pipelineslib/mindwendel_web/live/brainstorming_live/show.ex- Main brainstorming UIlib/mindwendel/brainstormings.ex- Core brainstorming logiclib/mindwendel/ideas.ex- Idea CRUD and positioningconfig/config.exs,config/dev.exs,config/prod.exs- Configurationmix.exs- Dependencies and project settings
# Setup database
mix ecto.setup
# Start Phoenix server
mix phx.server
# Run tests
mix test
# Format code
mix format
# Update translations
mix gettext.extract --mergeAccess at: http://localhost:4000
Important: After every feature, plase execute the following commands and make sure they pass correctly:
mix testmix credomix formatmix gettext.extract --merge
- Brainstorming: A session where users collaborate
- Ideas: Individual thoughts/items within a brainstorming
- Lanes: Kanban-style columns to organize ideas
- Labels: Tags/categories for filtering ideas
- Comments: Discussion on specific ideas
- Likes: Upvoting mechanism for ideas
See .env.default for complete list.
Use agent-browser for web automation. Run agent-browser --help for all commands.
Core workflow:
agent-browser open <url>- Navigate to pageagent-browser snapshot -i- Get interactive elements with refs (@e1, @e2)agent-browser click @e1/fill @e2 "text"- Interact using refs- Re-snapshot after page changes