{"id":31588637,"url":"https://github.com/beamlabeu/phoenix_kit","last_synced_at":"2026-04-15T19:00:57.871Z","repository":{"id":312320875,"uuid":"1039272060","full_name":"BeamLabEU/phoenix_kit","owner":"BeamLabEU","description":"The Elixir Phoenix Boilerplate Starter Kit for writing your SaaS, social networks, ERP systems, marketplaces, internal tools, AI-powered apps, community platforms, and more.","archived":false,"fork":false,"pushed_at":"2026-04-15T13:51:43.000Z","size":22810,"stargazers_count":21,"open_issues_count":2,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-15T14:32:05.464Z","etag":null,"topics":["elixir","phoenix-elixir","phoenix-framework","phoenix-kit","saas-boilerplate"],"latest_commit_sha":null,"homepage":"https://phoenixkit.eu","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BeamLabEU.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-16T21:10:19.000Z","updated_at":"2026-04-15T07:53:31.000Z","dependencies_parsed_at":"2025-08-29T21:25:12.276Z","dependency_job_id":"c6d6b0e4-4fb0-4cfc-850e-1d3630e8aeba","html_url":"https://github.com/BeamLabEU/phoenix_kit","commit_stats":null,"previous_names":["beamlabeu/phoenix_kit"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/BeamLabEU/phoenix_kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeamLabEU%2Fphoenix_kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeamLabEU%2Fphoenix_kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeamLabEU%2Fphoenix_kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeamLabEU%2Fphoenix_kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BeamLabEU","download_url":"https://codeload.github.com/BeamLabEU/phoenix_kit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeamLabEU%2Fphoenix_kit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31855432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","phoenix-elixir","phoenix-framework","phoenix-kit","saas-boilerplate"],"created_at":"2025-10-06T02:11:49.166Z","updated_at":"2026-04-15T19:00:57.837Z","avatar_url":"https://github.com/BeamLabEU.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PhoenixKit — A Foundation for Building Your Elixir Phoenix Apps\n\n[![Hex Version](https://img.shields.io/hexpm/v/phoenix_kit)](https://hex.pm/packages/phoenix_kit)\n[![CI](https://github.com/BeamLabEU/phoenix_kit/workflows/CI/badge.svg)](https://github.com/BeamLabEU/phoenix_kit/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/BeamLabEU/phoenix_kit/branch/main/graph/badge.svg)](https://codecov.io/gh/BeamLabEU/phoenix_kit)\n\nWe are actively building PhoenixKit, a foundation for building your Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, internal tools, AI-powered apps, community platforms, and more. Our goal is to eliminate the need to reinvent the wheel every time you start a new project.\n\n**🚧 Early Access - We Need Your Feedback!**\n\nPhoenixKit is under heavy development and we're looking for early adopters to test, provide feedback, and help shape the future of this toolkit. If you're building with Phoenix and want to skip the boilerplate setup, we'd love to have you try it out and share your experience.\n\nWith PhoenixKit, you will be able to create Elixir/Phoenix apps much faster and focus on your unique business logic instead of reimplementing common patterns.\n\n## 📖 Documentation\n\n- **[Integration Guide](guides/integration.md)** - Complete guide for using PhoenixKit as a dependency, with API reference and examples. Optimized for AI assistants (Claude, Cursor, Copilot, Tidewave MCP).\n- **[All Guides](guides/README.md)** - Full list of development guides\n\n## Semi-Automatic Installation\n\nPhoenixKit provides pretty simple installation method, powered by igniter library, which takes care of all configuration needs.\n\nAdd `phoenix_kit` to your project dependencies. `igniter` installed in `phoenix_kit`.\n\n```elixir\n# mix.exs\ndef deps do\n  [\n    {:phoenix_kit, \"~\u003e 1.7\"}\n  ]\nend\n```\n\nThen run the PhoenixKit installer:\n\n```bash\nmix deps.get\nmix phoenix_kit.install\n```\n\nThis will automatically:\n\n- Auto-detect your Ecto repository\n- **Validate PostgreSQL compatibility** with adapter detection\n- Generate migration files for authentication tables\n- **Optionally run migrations interactively** for instant setup\n- Add PhoenixKit configuration to `config/config.exs`\n- Configure mailer settings for development\n- **Create production mailer templates** in `config/prod.exs`\n- Add authentication routes to your router\n\n## 📦 Current PhoenixKit Features / Modules:\n\n```\n✅ Simple installation using Igniter (`mix phoenix_kit.install` and updating via `mix phoenix_kit.update`) \n✅ Tailwind and DaisyUI integration\n✅ App layout integration\n✅ App database integration (Postgres only for now)\n✅ Custom slug prefix (default: `/phoenix_kit`)\n\n✅ Backend Admin module\n\n✅ User Module\n  ✅ Registration\n  ✅ Login\n  ✅ Logout\n  ✅ Magic link\n  ✅ Email confirmation (waiting Email Module)\n  ✅ Fail2ban (userbased, ip based, region based)\n  ✅ Password reset\n  ✅ User roles\n  ✅ Custom user fields\n    ✅ JSONB storage for flexibility\n  ✅ Location of registration (ip, country, region, city)\n  ✅ User's timezone (and mismatch detection)\n  ✅ User's locale\n  ✅ OAuth (google, facebook)\n\n\n✅ Modules Manager\n\n✅ Session Manager Module\n\n✅ Settings\n    ✅ General\n    ✅ App title\n    ✅ Global app timezone (switched from timex to native elixir)\n    ✅ Global time format (switched from timex to native elixir)\n    ✅ Language configuration\n\n✅ Languages (Backend and frontend languages, broken down to countries and regions)\n    ✅ Backend languages\n    ✅ Frontend enduser languages, broken down and organized by countries and regions\n\n✅ Users Module\n    ✅ Role management\n    ✅ Referral Program\n\n✅ User Relationship Module (for User Generated Content/UGC)\n\n✅ Maintenance Mode Module\n\n✅ Email Module\n    ✅ AWS SES integration\n\n✅ Entities Module (dynamic content types)\n    ✅ Dynamic entity type creation\n    ✅ Flexible field schemas (13 field types)\n    ✅ JSONB storage for flexibility\n    ✅ Full CRUD interfaces\n    ✅ Settings management\n\n✅ Media Module\n    ✅ Photos and Videos\n    ✅ Local and cloud multiple storages\n    ✅ Image resizing \n    ✅ Video resizing\n✅ Publishing Module\n     ✅ 2 types supported: timed and slug based\n     ✅ Multilingual publishing\n     ✅ Timezone support\n\n✅ Posts Module (for User Generated Content/UGC)\n\n✅ Sitemap Module\n\n✅ AI Module\n     ✅ OpenRouter Integration\n\n✅ Billing Module\n    - Invoices\n    - Payment\n      - Integration\n        - Stripe\n        - PayPal\n    - Orders\n  - Membership / Subscription Module\n\n✅ Basic UI Components\n    ✅ [Draggable List](guides/draggable_list_component.md) - Drag-and-drop grid/list component\n```\n\n\n## 🛣️ Roadmap / Ideas / Feature requests\n\n--- Next priority\n\n- Newsletter Module\n- Notifications Module\n- Cookies Module\n- Complience and Legal Module\n    - Cookies usage\n    - Terms Of Service\n    - Acceptable Use\n    - GDPR (General Data Protection Regulation) for EU users\n    - CCPA (California Consumer Privacy Act) for California users\n    - Data Retention Policy\n    - Privacy Policy\n- Customer service Module\n    - Chat\n- Jobs Module (Oban powered)\n- E-commerce Module\n    - E-commerce Storefront\n    - Physical products\n    - Digital and downloadable products\n- Missing features for User Auth Module\n  - 2FA\n  - User impersonation\n  - New device notification\n\n--- To sort items\n\n- Design / templates / themes\n- Integration with notification providers (Twilio, etc...)\n- Media / Gallery (with s3 backend)\n- Video (Video processing, streaming, Adaptive Bitrate (ABR): stream in multiple bitrates and resolutions for difference devices, HTTP Live Streaming (HLS): reduce bandwidth usage, playback latency, and buffering, H.264, H.265, VP8 \u0026 VP9: optimized next-generation video codecs)\n- Audio\n- Media / Gallery\n- Local / External storage support (AWS S3, Azure Storage, Google Storage, Cloudflare R2, and DigitalOcean Spaces)\n- CDN\n- Comments\n- Search\n- Blocks\n- Sliders\n- Video player (mp4, youtube, etc)\n- Booking Module (Calendar based)\n- Popups Module\n- Contact Us Module\n- SEO Module (sitemap, open graph)\n- What’s New Module\n- Internal Chat Module (https://github.com/basecamp/once-campfire)\n- DB Manager Module\n    - Export / Import\n    - Snapshots\n    - Backups (onsite/offsite)\n- Feedback Module\n- Roadmap / Ideas Module\n- CRM Module\n- App Analytics / BI Module\n  - ClickHouse backend\n  - Events\n  - Charts, trends and notifications\n- API Module\n- Cron Modules\n- Forms Module\n- Cluster Module\n\n💡 Send your ideas and suggestions about any existing modules and features our way. Start building your apps today!\n\n## Installation\n\nPhoenixKit provides multiple installation methods to suit different project needs and developer preferences.\n\n### Semi-Automatic Installation\n\n**Recommended for most projects**\n\nAdd `phoenix_kit` to your project dependencies (Igniter is included automatically):\n\n```elixir\n# mix.exs\ndef deps do\n  [\n    {:phoenix_kit, \"~\u003e 1.7\"}\n  ]\nend\n```\n\nThen run the PhoenixKit installer:\n\n```bash\nmix deps.get\nmix phoenix_kit.install\n```\n\nThis will automatically:\n\n- ✅ Auto-detect your Ecto repository\n- ✅ **Validate PostgreSQL compatibility** with adapter detection\n- ✅ Generate migration files for authentication tables\n- ✅ **Optionally run migrations interactively** for instant setup\n- ✅ Add PhoenixKit configuration to `config/config.exs`\n- ✅ Configure mailer settings for development\n- ✅ **Create production mailer templates** in `config/prod.exs`\n- ✅ Add authentication routes to your router\n- ✅ Provide detailed setup instructions\n\n**Optional parameters:**\n\n```bash\n# Specify custom repository\nmix phoenix_kit.install --repo MyApp.Repo\n\n# Use PostgreSQL schema prefix for table isolation\nmix phoenix_kit.install --prefix \"auth\" --create-schema\n\n# Specify custom router file path\nmix phoenix_kit.install --router-path lib/my_app_web/router.ex\n```\n\n## Manual Installation\n\n1. Add `{:phoenix_kit, \"~\u003e 1.7\"}` to `mix.exs`\n2. Run `mix deps.get \u0026\u0026 mix phoenix_kit.gen.migration`\n3. Configure repository: `config :phoenix_kit, repo: MyApp.Repo`\n4. Add `phoenix_kit_routes()` to your router\n5. Run `mix ecto.migrate`\n\n## Quick Start\n\nVisit these URLs after installation:\n\n- `http://localhost:4000/{prefix}/users/register` - User registration\n- `http://localhost:4000/{prefix}/users/log-in` - User login\n\nWhere `{prefix}` is your configured PhoenixKit URL prefix (default: `/phoenix_kit`).\n\n## Configuration\n\n### Basic Setup\n\n```elixir\n# config/config.exs (automatically added by installer)\nconfig :phoenix_kit,\n  repo: YourApp.Repo,\n  from_email: \"noreply@yourcompany.com\",  # Required for email notifications\n  from_name: \"Your Company Name\"          # Optional, defaults to \"PhoenixKit\"\n\n# Production mailer (see config/prod.exs for more options)\nconfig :phoenix_kit, PhoenixKit.Mailer,\n  adapter: Swoosh.Adapters.SMTP,\n  relay: \"smtp.your-provider.com\",\n  username: System.get_env(\"SMTP_USERNAME\"),\n  password: System.get_env(\"SMTP_PASSWORD\"),\n  port: 587\n```\n\n### Layout Integration\n\n```elixir\n# Use your app's layout (optional)\nconfig :phoenix_kit,\n  layout: {YourAppWeb.Layouts, :app},\n  root_layout: {YourAppWeb.Layouts, :root}\n```\n\n### Email Configuration\n\nPhoenixKit supports multiple email providers with automatic setup assistance:\n\n#### AWS SES (Complete Setup)\n\nFor AWS SES, PhoenixKit automatically configures required dependencies and HTTP client:\n\n```elixir\n# Add to mix.exs dependencies (done automatically by installer when needed)\n{:gen_smtp, \"~\u003e 1.2\"}\n\n# Application supervisor includes Finch automatically\n{Finch, name: Swoosh.Finch}\n\n# Production configuration\nconfig :phoenix_kit, PhoenixKit.Mailer,\n  adapter: Swoosh.Adapters.AmazonSES,\n  region: \"eu-north-1\"  # or \"eu-north-1\", \"eu-west-1\", etc.\n```\n\n**AWS SES Checklist:**\n\n- ✅ Create AWS IAM user with SES permissions (`ses:*`)\n- ✅ Verify sender email address in AWS SES Console\n- ✅ Verify recipient emails (if in sandbox mode)\n- ✅ Ensure AWS region matches your verification region\n- ✅ Request production access to send to any email\n- ✅ Configure AWS credentials in Settings UI or via config\n\n#### Other Email Providers\n\n```elixir\n# SendGrid\nconfig :phoenix_kit, PhoenixKit.Mailer,\n  adapter: Swoosh.Adapters.Sendgrid,\n  api_key: System.get_env(\"SENDGRID_API_KEY\")\n\n# Mailgun\nconfig :phoenix_kit, PhoenixKit.Mailer,\n  adapter: Swoosh.Adapters.Mailgun,\n  api_key: System.get_env(\"MAILGUN_API_KEY\"),\n  domain: System.get_env(\"MAILGUN_DOMAIN\")\n```\n\n**Note:** Run `mix deps.compile phoenix_kit --force` after changing configuration.\n\n### OAuth Configuration\n\nEnable social authentication (Google, Apple, GitHub) through admin UI at `{prefix}/admin/settings`.\nBuilt-in setup instructions included. For reverse proxy deployments, ensure `X-Forwarded-Proto` header is set:\n\n```nginx\nproxy_set_header X-Forwarded-Proto $scheme;\n```\n\nSee [OAuth Setup Guide](guides/oauth-and-magic-link-setup.md) for details.\n\n### Advanced Options\n\n- Custom URL prefix: `phoenix_kit_routes(\"/authentication\")`\n- PostgreSQL schemas: `mix phoenix_kit.install --prefix \"auth\" --create-schema`\n- Custom repository: `mix phoenix_kit.install --repo MyApp.CustomRepo`\n\n## Routes\n\n### User Authentication Routes\n\n- `GET {prefix}/users/register` - Registration form\n- `GET {prefix}/users/log-in` - Login form\n- `GET {prefix}/users/reset-password` - Password reset\n- `GET {prefix}/users/confirm/:token` - Email confirmation\n- `DELETE {prefix}/users/log-out` - Logout endpoint\n\n### User Dashboard Routes (when enabled)\n\n- `GET {prefix}/dashboard` - User dashboard home\n- `GET {prefix}/dashboard/settings` - User settings\n- `GET {prefix}/dashboard/settings/confirm-email/:token` - Email confirmation\n\n### Admin Routes (Owner/Admin only)\n\n- `GET {prefix}/admin` - Admin dashboard\n- `GET {prefix}/admin/users` - User management\n\n## API Usage\n\n### Current User Access\n\n```elixir\n# In your controller or LiveView\nuser = conn.assigns[:phoenix_kit_current_user]\n\n# Or using Scope system\nscope = socket.assigns[:phoenix_kit_current_scope]\nPhoenixKit.Users.Auth.Scope.authenticated?(scope)\n```\n\n### Role-Based Access\n\n```elixir\n# Check user roles\nPhoenixKit.Users.Roles.user_has_role?(user, \"Admin\")\n\n# Promote user to admin\n{:ok, _} = PhoenixKit.Users.Roles.promote_to_admin(user)\n\n# Use in LiveView sessions\non_mount: [{PhoenixKitWeb.Users.Auth, :phoenix_kit_ensure_admin}]\n```\n\n### Authentication Helpers\n\n```elixir\n# In your LiveView sessions\non_mount: [{PhoenixKitWeb.Users.Auth, :phoenix_kit_mount_current_scope}]\non_mount: [{PhoenixKitWeb.Users.Auth, :phoenix_kit_ensure_authenticated_scope}]\n```\n\n## Database Schema\n\nPhoenixKit creates these PostgreSQL tables:\n\n- `phoenix_kit_users` - User accounts with email, names, status\n- `phoenix_kit_users_tokens` - Authentication tokens (session, reset, confirm)\n- `phoenix_kit_user_roles` - System and custom roles\n- `phoenix_kit_user_role_assignments` - User-role mappings with audit trail\n- `phoenix_kit_role_permissions` - Module-level permission grants per role (V53)\n- `phoenix_kit_schema_versions` - Migration version tracking\n\n## Role-Based Access Control\n\n### System Roles\n\n- **Owner** - Full system access (first user)\n- **Admin** - Management privileges\n- **User** - Standard access (default)\n\n### Role Management\n\n```elixir\n# Check roles\nPhoenixKit.Users.Roles.get_user_roles(user)\n# =\u003e [\"Admin\", \"User\"]\n\n# Role promotion/demotion\nPhoenixKit.Users.Roles.promote_to_admin(user)\nPhoenixKit.Users.Roles.demote_to_user(user)\n\n# Create custom roles\nPhoenixKit.Users.Roles.create_role(%{name: \"Manager\", description: \"Team lead\"})\n```\n\n### Module-Level Permissions (V53)\n\nPhoenixKit includes a granular permission system that controls which roles can access which admin sections and feature modules.\n\n**24 permission keys**: 5 core sections (dashboard, users, media, settings, modules) + 19 feature modules\n\n**Access rules**:\n- **Owner** bypasses all checks (full access always)\n- **Admin** seeded with all 24 keys by default\n- **Custom roles** start with no permissions, assigned via matrix UI or API\n\n```elixir\n# Grant/revoke permissions for a role\nPermissions.grant_permission(role_id, \"billing\", admin_id)\nPermissions.revoke_permission(role_id, \"billing\")\nPermissions.set_permissions(role_id, [\"dashboard\", \"users\", \"billing\"], admin_id)\n\n# Query permissions\nPermissions.get_permissions_for_role(role_id)    # [\"dashboard\", \"users\", ...]\nPermissions.role_has_permission?(role_id, \"shop\") # true/false\n\n# Check access via Scope (in LiveViews)\nScope.has_module_access?(scope, \"billing\")       # true/false\nScope.has_any_module_access?(scope, [\"billing\", \"shop\"])\nScope.system_role?(scope)                        # Owner or Admin?\n```\n\n**Admin UI**: Interactive permission matrix at `{prefix}/admin/users/permissions` and inline editor on the Roles page.\n\n**Route enforcement**: `phoenix_kit_ensure_admin` and `phoenix_kit_ensure_module_access` on_mount hooks enforce permissions at the route level. Sidebar navigation is gated per-user based on granted permissions.\n\n### Module System\n\nPhoenixKit uses a modular architecture where features can be enabled/disabled at runtime. **All modules are disabled by default** and must be enabled before use.\n\n**Enable via Admin UI:**\nVisit `{prefix}/admin/modules` to toggle modules on/off.\n\n**Enable via Code:**\n```elixir\n# Check if a module is enabled\nPhoenixKit.Modules.AI.enabled?()        # =\u003e false (default)\nPhoenixKit.Modules.Entities.enabled?()  # =\u003e false (default)\n\n# Enable modules before use\nPhoenixKit.Modules.AI.enable_system()\nPhoenixKit.Modules.Entities.enable_system()\nPhoenixKit.Modules.Posts.enable_system()\nPhoenixKit.Emails.enable_system()\nPhoenixKit.Billing.enable_system()\n\n# Disable when no longer needed\nPhoenixKit.Modules.AI.disable_system()\n```\n\n**Important**: Attempting to use a disabled module's API functions or admin pages will result in errors or redirects. Always enable modules before:\n- Calling their API functions (e.g., `PhoenixKit.Modules.AI.ask/3`)\n- Visiting their admin pages (e.g., `/{prefix}/admin/ai/endpoints`)\n\n### Built-in Admin Interface\n\n**Core Administration:**\n- `{prefix}/admin` - System statistics and overview\n- `{prefix}/admin/users` - User management with role controls\n- `{prefix}/admin/users/permissions` - Permission matrix for all roles\n- `{prefix}/admin/sessions` - Active session management\n- `{prefix}/admin/modules` - Enable/disable PhoenixKit modules\n- `{prefix}/admin/settings` - System settings (timezone, date/time formats)\n\n**Content \u0026 Data:**\n- `{prefix}/admin/publishing` - Blog posts and articles management\n- `{prefix}/admin/posts` - User-generated content (social posts)\n- `{prefix}/admin/entities` - Dynamic content types\n\n**Communication:**\n- `{prefix}/admin/emails` - Email logs and delivery tracking\n- `{prefix}/admin/emails/dashboard` - Email metrics and analytics\n\n**AI Module:**\n- `{prefix}/admin/ai/endpoints` - AI provider endpoints\n- `{prefix}/admin/ai/prompts` - Reusable prompt templates\n- `{prefix}/admin/ai/usage` - AI usage statistics\n\n**Billing \u0026 Payments:**\n- `{prefix}/admin/billing` - Billing dashboard\n- `{prefix}/admin/billing/orders` - Order management\n- `{prefix}/admin/billing/invoices` - Invoice management\n- `{prefix}/admin/billing/subscriptions` - Subscription management\n\n**Settings \u0026 Configuration:**\n- `{prefix}/admin/settings/languages` - Multi-language configuration\n- `{prefix}/admin/settings/media` - Storage buckets and image dimensions\n- `{prefix}/admin/settings/sitemap` - Sitemap generation settings\n- `{prefix}/admin/settings/seo` - SEO configuration\n\n## Architecture\n\nPhoenixKit follows professional library patterns:\n\n- **OTP Application**: Ships with its own supervision tree (`PhoenixKit.Application`) for background workers, caching, and scheduled jobs\n- **Dynamic Repository**: Uses your existing Ecto repo\n- **Versioned Migrations**: Oban-style schema management\n- **PostgreSQL Only**: Optimized for production databases\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/BeamLabEU/phoenix_kit/blob/main/CONTRIBUTING.md) for detailed instructions on setting up a development environment and contributing to PhoenixKit.\n\n## License\n\nMIT License - see [CHANGELOG.md](CHANGELOG.md) for version history.\n\n---\n\nBuilt in 🇪🇺🇪🇪 with ❤️ for the Elixir Phoenix community.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeamlabeu%2Fphoenix_kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeamlabeu%2Fphoenix_kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeamlabeu%2Fphoenix_kit/lists"}