Curated library of 38 atomic skills, 7 personas, and 1 orchestrator for Elixir and Phoenix development. Organized by category: fundamentals, phoenix, database, testing, auth, infrastructure, quality, security, integrations, tooling, frameworks, personas, and orchestration. Covers core Elixir patterns, Phoenix LiveView, Ecto, OTP, Oban, testing, security, deployment, real-time, and modern tooling (Req, Swoosh, Cachex, Broadway, Ash).
91
91%
Does it follow best practices?
Impact
91%
1.37xAverage score across 56 eval scenarios
Advisory
Suggest reviewing before use
Cachex cache-aside layer for Accounts context
Cachex.fetch/3 used
100%
100%
TTL set on cache entry
66%
100%
stats: true in config
100%
100%
Cachex in supervision tree
100%
100%
Cache invalidation on update
100%
100%
Structured logging
0%
0%
with for sequential operations
0%
70%
cachex dep in mix.exs
100%
100%
DESIGN.md present
100%
100%
instruction-1
93%
100%
instruction-2
100%
100%
instruction-3
57%
100%
instruction-4
50%
100%
instruction-5
57%
100%
instruction-6
0%
100%
instruction-7
0%
100%
instruction-1
80%
93%
instruction-2
13%
86%
instruction-3
28%
71%
instruction-4
92%
100%
instruction-5
21%
92%
instruction-6
0%
92%
instruction-7
0%
100%
instruction-1
92%
100%
instruction-2
69%
76%
instruction-3
84%
100%
instruction-4
92%
100%
instruction-5
16%
50%
instruction-6
58%
100%
instruction-7
66%
100%
instruction-8
58%
100%
instruction-1
100%
100%
instruction-2
70%
90%
instruction-3
100%
100%
instruction-4
30%
100%
instruction-5
100%
100%
instruction-6
80%
100%
instruction-7
100%
100%
instruction-8
100%
100%
instruction-9
80%
100%
instruction-10
70%
80%
instruction-1
76%
100%
instruction-2
92%
100%
instruction-3
61%
84%
instruction-4
92%
61%
instruction-5
66%
75%
instruction-6
75%
66%
instruction-7
83%
91%
instruction-8
91%
100%
instruction-1
100%
100%
instruction-2
40%
100%
instruction-3
78%
100%
instruction-4
100%
100%
instruction-5
0%
100%
instruction-6
0%
100%
instruction-7
0%
64%
ExUnit test conventions for Phoenix context and LiveView
Fixture file exists
100%
100%
No inline data duplication
70%
70%
Context tests use DataCase
100%
100%
LiveView tests use ConnCase
100%
100%
has_element?/2 used in LiveView tests
30%
100%
No html =~ for structure checks
25%
87%
Unauthorized case tested
80%
100%
No hardcoded dates
0%
100%
LiveView async: false
100%
100%
Context async: true
0%
100%
Fixture module function names
100%
100%
instruction-1
40%
100%
instruction-2
10%
100%
instruction-3
65%
100%
instruction-4
75%
100%
instruction-5
20%
60%
instruction-1
100%
100%
instruction-2
70%
90%
instruction-3
40%
50%
instruction-4
30%
90%
instruction-5
20%
100%
instruction-6
40%
100%
instruction-7
70%
100%
instruction-8
70%
100%
instruction-9
70%
100%
instruction-10
20%
30%
Ecto schema, migrations, and context for project management
DB unique constraint on team name
0%
0%
FK index on users.team_id
100%
100%
FK index on projects.user_id
100%
100%
FK index on tasks.project_id
100%
100%
on_delete :delete_all for tasks
100%
100%
on_delete explicit for users FK
100%
100%
Separate named changesets
0%
0%
unsafe_validate_unique + unique_constraint pairing
0%
0%
cast_assoc for tasks
100%
100%
Preload before update
100%
100%
Task changeset omits project_id
0%
100%
No mixed schema+data migrations
100%
100%
instruction-1
72%
100%
instruction-2
100%
100%
instruction-3
56%
100%
instruction-4
72%
100%
instruction-1
20%
100%
instruction-2
53%
100%
instruction-3
7%
100%
instruction-4
92%
100%
instruction-5
92%
100%
instruction-6
92%
100%
instruction-7
50%
100%
instruction-1
20%
70%
instruction-2
0%
100%
instruction-3
0%
100%
instruction-4
20%
100%
instruction-5
0%
100%
instruction-6
30%
100%
instruction-7
0%
100%
instruction-8
0%
70%
instruction-9
0%
100%
instruction-10
70%
100%
instruction-1
50%
70%
instruction-2
100%
100%
instruction-3
100%
100%
instruction-4
50%
70%
instruction-5
100%
100%
instruction-6
20%
100%
instruction-7
100%
100%
instruction-8
100%
100%
instruction-9
40%
100%
instruction-10
40%
100%
instruction-1
70%
90%
instruction-2
70%
100%
instruction-3
80%
100%
instruction-4
90%
100%
instruction-5
90%
100%
instruction-6
10%
100%
instruction-7
90%
100%
instruction-8
40%
100%
instruction-9
70%
100%
instruction-10
60%
100%
instruction-1
47%
100%
instruction-2
100%
100%
instruction-3
100%
100%
instruction-4
100%
100%
instruction-5
87%
100%
instruction-6
100%
100%
instruction-1
80%
90%
instruction-2
100%
100%
instruction-3
100%
100%
instruction-4
80%
100%
instruction-5
50%
100%
instruction-6
20%
100%
instruction-7
20%
100%
instruction-8
100%
100%
instruction-9
80%
80%
instruction-10
100%
80%
instruction-1
80%
90%
instruction-2
90%
100%
instruction-3
100%
100%
instruction-4
60%
100%
instruction-5
70%
100%
instruction-6
40%
100%
instruction-7
80%
100%
instruction-8
100%
100%
instruction-9
90%
100%
instruction-10
30%
70%
instruction-1
100%
100%
instruction-2
70%
100%
instruction-3
100%
100%
instruction-4
50%
100%
instruction-5
30%
100%
instruction-6
90%
100%
instruction-7
70%
100%
instruction-8
100%
100%
instruction-9
100%
100%
instruction-10
60%
100%
instruction-1
70%
80%
instruction-2
60%
50%
instruction-3
100%
80%
instruction-4
90%
50%
instruction-5
50%
60%
instruction-6
100%
100%
instruction-7
90%
90%
instruction-8
70%
90%
instruction-9
80%
100%
instruction-10
60%
100%
instruction-1
50%
60%
instruction-2
40%
90%
instruction-3
20%
40%
instruction-4
0%
10%
instruction-5
100%
100%
instruction-6
10%
30%
instruction-7
10%
20%
instruction-8
10%
20%
instruction-9
10%
20%
instruction-10
20%
60%
Broadway pipeline error handling and dead-letter routing
No raise in handle_message
100%
100%
Broadway.Message.failed/2 used
100%
100%
handle_failed/2 implemented
100%
100%
Payload schema validation
100%
100%
No raw payload logged
37%
100%
Structured logging in handle_failed
0%
100%
Pipeline in supervision tree
100%
100%
@impl true before callbacks
100%
100%
Test uses push_message
100%
100%
Malformed message test
100%
100%
instruction-1
94%
40%
instruction-2
96%
100%
instruction-1
80%
100%
instruction-2
60%
100%
instruction-3
100%
100%
instruction-4
90%
100%
instruction-5
40%
100%
instruction-6
60%
100%
instruction-7
20%
100%
instruction-8
10%
100%
instruction-9
30%
90%
instruction-10
90%
100%
instruction-1
100%
100%
instruction-2
100%
100%
instruction-3
69%
76%
instruction-4
92%
76%
instruction-5
58%
100%
instruction-6
100%
100%
instruction-7
100%
100%
instruction-8
66%
100%
instruction-1
76%
100%
instruction-2
100%
100%
instruction-3
30%
100%
instruction-4
69%
100%
instruction-5
66%
100%
instruction-6
100%
100%
instruction-7
100%
100%
instruction-8
33%
100%
Phoenix JSON API with auth, versioning, and safe queries
:api pipeline used
100%
100%
No mixed pipelines
100%
100%
URL version prefix
100%
100%
action_fallback declared
100%
100%
Controller returns tagged tuples
50%
75%
FallbackController handles errors
100%
100%
Secure token comparison
0%
33%
No == for token check
100%
100%
Parameterized search query
100%
100%
No interpolation in queries
100%
100%
User-scoped queries
100%
100%
instruction-1
70%
90%
instruction-2
100%
100%
instruction-3
40%
100%
instruction-4
20%
100%
instruction-5
40%
100%
instruction-6
70%
100%
instruction-7
100%
100%
instruction-8
0%
100%
instruction-9
20%
100%
instruction-10
10%
90%
instruction-1
80%
100%
instruction-2
100%
100%
instruction-3
100%
100%
instruction-4
100%
100%
instruction-5
30%
40%
instruction-6
20%
30%
instruction-7
50%
100%
instruction-8
100%
100%
instruction-9
80%
100%
instruction-10
90%
100%
instruction-1
100%
100%
instruction-2
100%
100%
instruction-3
80%
80%
instruction-4
100%
100%
instruction-1
70%
100%
instruction-2
80%
100%
instruction-3
95%
100%
instruction-4
85%
100%
instruction-5
55%
85%
instruction-1
100%
100%
instruction-2
100%
100%
instruction-3
100%
100%
instruction-4
46%
100%
instruction-5
66%
100%
instruction-6
91%
100%
instruction-7
100%
100%
instruction-8
100%
100%
instruction-1
76%
100%
instruction-2
82%
100%
instruction-3
94%
100%
instruction-4
82%
100%
instruction-5
93%
100%
instruction-6
81%
100%
instruction-1
66%
86%
instruction-2
86%
66%
instruction-3
14%
92%
instruction-4
7%
78%
instruction-5
85%
71%
instruction-6
28%
100%
instruction-7
57%
92%
instruction-1
70%
80%
instruction-2
70%
100%
instruction-3
30%
100%
instruction-4
30%
100%
instruction-5
30%
70%
instruction-6
70%
0%
instruction-7
20%
60%
instruction-8
100%
100%
instruction-9
30%
100%
instruction-10
100%
100%
instruction-1
82%
94%
instruction-2
36%
96%
instruction-3
0%
84%
instruction-1
6%
100%
instruction-2
0%
100%
instruction-3
0%
100%
instruction-4
7%
100%
instruction-5
0%
100%
instruction-6
50%
71%
instruction-7
57%
100%
instruction-1
80%
100%
instruction-2
92%
100%
instruction-3
40%
100%
instruction-4
88%
100%
Phoenix production deployment configuration
runtime.exs uses System.get_env!/1
0%
100%
Secrets in runtime.exs only
100%
100%
Release module with Ecto.Migrator
100%
100%
No mix ecto.migrate in deployment
100%
100%
Health endpoint queries database
100%
100%
Health endpoint returns JSON
100%
100%
Logger level :info in production
0%
80%
Docker multi-stage build
100%
100%
Telemetry in Application.start/2
100%
100%
No debug-level log config
100%
75%
instruction-1
88%
100%
instruction-2
66%
100%
instruction-3
93%
100%
instruction-1
83%
100%
instruction-2
45%
100%
instruction-3
36%
100%
instruction-4
54%
100%
instruction-5
36%
100%
instruction-6
36%
100%
instruction-7
45%
100%
instruction-8
27%
100%
instruction-9
81%
100%
OTP GenServer with ETS reads and public API
ETS table created
100%
100%
Reads bypass GenServer
100%
100%
GenServer owns writes
62%
100%
Public API functions
100%
100%
No direct GenServer.call in public API
100%
100%
@impl true on callbacks
100%
100%
Fast init with handle_continue
50%
80%
Registry-based naming
0%
0%
Structured logging
70%
80%
Design doc explains ETS rationale
100%
100%
instruction-1
92%
100%
instruction-2
76%
100%
instruction-3
61%
100%
instruction-4
53%
100%
instruction-5
58%
83%
instruction-6
83%
100%
instruction-7
66%
100%
instruction-8
83%
16%
instruction-1
94%
100%
instruction-2
84%
100%
instruction-3
36%
100%
instruction-1
100%
100%
instruction-2
100%
100%
instruction-3
0%
100%
instruction-4
100%
100%
instruction-5
100%
100%
instruction-6
100%
100%
instruction-1
80%
80%
instruction-2
90%
100%
instruction-3
20%
90%
instruction-4
80%
70%
instruction-5
0%
90%
instruction-6
0%
90%
instruction-7
0%
60%
instruction-8
50%
100%
instruction-9
0%
70%
instruction-10
100%
70%
instruction-1
85%
90%
instruction-2
25%
100%
instruction-3
85%
95%
instruction-4
60%
75%
instruction-5
15%
65%
Real-time LiveView with PubSub
connected? guard
100%
100%
All assigns in mount
100%
100%
No Repo in LiveView
100%
100%
Broadcast in context
100%
100%
@impl true on callbacks
100%
100%
mount returns {:ok, socket}
100%
100%
handle_event returns {:noreply, socket}
100%
100%
with for multi-step ops
40%
50%
handle_info updates assigns
60%
100%
instruction-1
100%
100%
instruction-2
66%
100%
instruction-3
50%
100%
instruction-4
100%
100%
instruction-5
100%
100%
instruction-6
71%
100%
instruction-7
7%
100%
instruction-1
75%
75%
instruction-2
81%
27%
instruction-3
63%
90%
instruction-4
72%
18%
instruction-5
63%
90%
instruction-6
18%
100%
instruction-7
18%
90%
instruction-8
81%
90%
instruction-9
18%
63%
instruction-1
75%
90%
instruction-2
95%
100%
instruction-3
90%
100%
instruction-4
100%
100%
instruction-5
25%
100%
instruction-1
40%
70%
instruction-2
30%
100%
instruction-3
0%
90%
instruction-4
0%
100%
instruction-5
0%
100%
instruction-6
0%
80%
instruction-7
30%
100%
instruction-8
30%
100%
instruction-9
0%
100%
instruction-10
0%
90%
instruction-1
96%
100%
instruction-2
92%
100%
Property-based tests for data transformation invariants
Uses ExUnitProperties
100%
100%
Property syntax
100%
100%
Invariant assertions
100%
90%
Custom generator
100%
100%
Shrinking constraints
100%
100%
Pattern matching in impl
80%
70%
No nested if/else
75%
87%
For comprehension usage
0%
0%
Ok/error tuples — normalize
100%
100%
Ok/error tuples — merge
100%
100%
Properties cover all functions
100%
100%
Oban async welcome email worker with idempotency
ID-only args
100%
100%
Fresh data fetch
100%
100%
Idempotency check
50%
50%
Not-found cancellation
100%
100%
Oban.insert/1 used
0%
50%
Error tuple handled
0%
0%
Context enqueues job
100%
100%
Separate email module
100%
100%
perform_job/2 in tests
0%
100%
assert_enqueued in tests
0%
100%
Table of Contents