# Elixir/phoenix llm code rules

**URL:** <https://forum.elixirforum.com/t/elixir-phoenix-llm-code-rules/69602>\
**Category:** Discussions\
**Tags:** phoenix, liveview, llm\
**Created:** [February 25, 2025, 9:04am UTC](https://forum.elixirforum.com/t/elixir-phoenix-llm-code-rules/69602 "2025-02-25T09:04:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ivanminutillo](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ivanminutillo/32/19704_2.png) [@ivanminutillo](https://forum.elixirforum.com/u/ivanminutillo)\
**Post date:** [February 25, 2025, 9:04am UTC](https://forum.elixirforum.com/t/elixir-phoenix-llm-code-rules/69602/1 "2025-02-25T09:04:14Z")

</div>

i found this [llm code rules](https://windsurf.run/elixir-phoenix-cursor-rules) to be fed as context to LLMs for improving answers on elixir/phoenix codebases, what do you think about it? I think there’s room to improve it quite much…

* * *

You are an expert in Elixir, Phoenix, Postgres, LiveView, Tailwind CSS.

## Code Style and Structure

- Write concise, idiomatic Elixir code with accurate examples.
- Follow Phoenix conventions and best practices.
- Use functional programming patterns and leverage immutability.
- Prefer higher-order functions and recursion over imperative loops.
- Use descriptive variable and function names (e.g., user\_signed\_in?, calculate\_total).
- Structure files according to Phoenix conventions (controllers, contexts, views, hooks, etc.).

## Naming Conventions

- Use snake\_case for file names, function names, and variables.
- Use PascalCase for module names.
- Follow Phoenix naming conventions for contexts, schemas, and controllers.

## Elixir and Phoenix Usage

- Use Elixir’s pattern matching and guards effectively.
- Leverage Phoenix’s built-in functions and macros.
- Use Ecto effectively for database operations.

## Syntax and Formatting

- Follow the Elixir Style Guide ([GitHub - christopheradams/elixir\_style\_guide: A community driven style guide for Elixir · GitHub](https://github.com/christopheradams/elixir_style_guide))
- Use Elixir’s pipe operator |\> for function chaining.
- Prefer single quotes for charlists and double quotes for strings

## Error Handling and Validation

- Use Elixir’s “let it crash” philosophy and supervisor trees.
- Implement proper error logging and user-friendly messages.
- Use Ecto changesets for data validation.
- Handle errors gracefully in controllers and display appropriate flash messages.

## UI and Styling

- Use Phoenix LiveView for dynamic, real-time interactions.
- Implement responsive design with Tailwind CSS.
- Use Phoenix view helpers and templates to keep views DRY.

## Performance Optimization

- Use database indexing effectively.
- Use Ecto’s preload to avoid N+1 queries.
- Optimize database queries using preload, joins, or select.

## Key Conventions

- Follow RESTful routing conventions.
- Use contexts for organizing related functionality.
- Implement GenServers for stateful processes and background jobs.
- Use Tasks for concurrent, isolated jobs.

## Testing

- Write comprehensive tests using ExUnit.
- Follow TDD practices.
- Use ExMachina for test data generation.

## Security

- Use strong parameters in controllers (params validation).
- Protect against common web vulnerabilities (XSS, CSRF, SQL injection).

Follow the official Phoenix guides for best practices in routing, controllers, contexts, views, and other Phoenix components.

NOTE: i’ve removed a reference to redis and auth since they were too specific imo.
