{"query":"petal.build","mode":"domain","best":{"domain":"petal.build","status":"valid","tier":"listed","authority":46,"verified":false,"title":"Petal Pro Documentation","summary":"**v4 migration note:** The AI Admin Chat was rewritten in v4 to use Jido and ReqLLM (replacing the LangChain-based implementation from v3). If you added custom LangChain tools in v3, you'll need to reimplement them as native `Jido.Action` modules described below. The tool surface is the same; only the implementation pattern changed.","country":"US","country_source":"ip","publisher_country":null,"publisher_country_source":null,"hosting_country":"US","llms_txt":"https://petal.build/llms.txt","llms_full_txt":null,"last_checked":"2026-10-24T19:38:53.456Z","agent_terms":null,"categories":["developer-tools","documentation-reference"],"capabilities":[],"inferred_tags":["phoenix framework","elixir","boilerplate","saas starter","petal pro"],"audience":"developers","agent_uses":["read_docs"],"language":"en","platform_generated":false,"agent_summary":"Documentation for Petal Pro, a paid Phoenix/Elixir boilerplate for production web apps, including v4 AI admin chat (Jido, ReqLLM) and install guides.","llms_txt_cached":"https://agentwebmap.com/v1/domain/petal.build/llms.txt","agentic":"documentation","section_keys":["1-1-0-2022-02-28-00-08-52","1-1-1-2022-03-12-20-45-36","1-2-0-2022-05-31-07-34-11","1-3-0-2022-06-17-02-43-55","1-4-0-2022-10-12-23-44-20","1-4-1-2022-11-15-16-30-00","1-5-0-2023-2-10","1-5-1-2023-3-10","1-5-2","1-5-2-2023-4-20","1-6-0-2023-7-05","1-6-1-2023-9-28","1-6-1-7","1-6-2-2023-11-03","1-7-0-2024-11-01","1-8-0-2024-04-04","1-8-2-0","1-adding-a-field-to-the-user-schema","1-create-a-sentry-project","1-download-and-unzip-a-release","1-params-supported","2-0-0-2024-08-15","2-0-2-2","2-2-0-2024-12-19","2-2-3-0","2-adding-a-new-page-to-the-sidebar","2-install-elixir-erlang-with-asdf","2-session-not-yet-supported","2-set-the-dsn-in-production","3-0-0-2025-07-22","3-0-4-0","3-adding-a-new-admin-page","3-rename-your-project-not-recommended-if-you-want-updates","3-subdomain-not-yet-supported","4-0-0-2026-05-04","4-0-x-4-1-0","4-1-0-2026-05-21","4-2-0-2026-06-08","4-3-0-2026-06-24","4-3-0-4-4-0","4-adding-a-new-oban-worker","4-run-the-setup-command","5-run-the-server","5-scoping-a-resource-under-organizations","6-adding-an-oauth-provider","7-add-in-your-branding-and-details-can-be-done-later","7-adding-a-new-email-template","8-adding-a-webhook-endpoint","8-look-over-our-recipes","9-forking-a-petal-component","a-word-on-environment-variables","action-registry","added","adding-a-custom-tool","adding-custom-categories","adding-custom-context","adding-more-providers","adding-new-components","adding-plug-ins","adding-rate-limiting-to-a-controller","adding-the-feedback-widget","admin-ai-chat","admin-dashboard","admin-datatable","admin-feedback","admin-mcp-server","admin-pages","ai-admin-chat","ai-admin-chat-jido-powered","ai-cost-tracking","ai-developer-tooling","amazon-s3","architecture","architecture-changes","asking-claude-code-to-work-on-a-task","assignorgdata","aurora-attribute-renames","auth-additions","auth-pages","authentication","before-deploy","blog-cms","borderbeam-attribute-renames","box","brand","branding","breaking","breaking-changes","build-the-image","built-in-notifications-v4","built-in-tools","callout-boxes","capturing-custom-messages","capturing-exceptions-manually","careful-unknown-attributes-fail-silently","catch-this-in-your-own-app","change-email","changed","changelog","changelog-system","changes","choosing-an-image-upload-hosting-provider","claude-code-integration","claude-code-recipe-commands","claude-md-files","cloudinary","color-scheme-switch","colors","components","comprehensive-install-instructions","configurable-section-gap","configuration","connecting-claude-code","connecting-claude-desktop","consuming-broadcast-messages","consuming-via-a-live-view","consuming-via-the-notification-bell","content-editor","context-module","contributing","controller-actions","createchangelogupdate","creating-a-changelog-entry-from-claude-code","creating-a-new-notification-type","custom-domain-config","customization-recipes","daily-budget","dark-mode","data-entry","data-structure","database-structure","db-schema-visualizer","dedicated-feedback-page","deployment","deployment-with-fly-io","dev-pages","developer-workflow-commands","difference-from-fathom-external-analytics","docker","edit-notifications","edit-password","edit-profile","email-helpers","email-provider-resend","email-template-components","email-templates","emails","enabling-passkeys","environment-behavior","error-tracking","extending-the-feedback-system","faker-dependency-and-the-landing-page","feature-addition","feature-additions","feature-removal","feedback-analytics","feedback-system","feedback-widget","file-browser","fixed","fixes","floatingdiv-is-gone","folder-structure","gdpr-compliance","generators","getaicallstats","getsitestats","gray-button-variant","hook-structure","hooks-from-petal-pro","how-daily-aggregation-works","how-does-it-work","how-does-this-fit-in-with-the-existing-user-schema","how-is-totp-implemented","how-it-works","how-it-works-for-users","how-our-config-is-used-to-create-checkout-sessions","how-passwordless-works","how-preferences-are-checked","how-sync-works","how-to-add-a-new-layout","how-to-add-remove-languages","how-to-add-update-your-pot-po-files-after-adding-more-gettexts","how-to-modify-an-existing-layout","how-to-prevent-data-leakage-true-multi-tenancy","how-to-run-a-recipe","how-to-turn-off-2fa","how-to-use","i-want-dark-mode-only","i-want-light-mode-only","if-you-can-t-pull-4-4-0","if-you-decide-to-support-both-light-and-dark-color-schemes","image-uploads","impersonation","inbound-webhook","included-pages","individual-pages-available-at-petal-pro-raw-path","infinitescrollhook","installation","instrumenting-a-page","integrations","javascript-hooks","key-naming","key-runtime-environment-variables","landing-page","language-select","layouts","layouts-menus","listchangelogupdates","listchangelogupdates-createchangelogupdate-managechangelog","listorgs","listrecentusers","live-views","logos","logs-page","managechangelog","manageorg","manageuser","markdown","marketing-emails-with-resend","mcp-tools-claude-code-integration","menus","mix-petal-gen-html","mix-petal-gen-live","mix-quality-now-runs-credo-strict-and-dialyzer","multi-tenancy","new","new-environment-variables","new-hooks-in-v4","new-migrations","notification","notifications","npm-packages","option-1-copy-your-files-into-a-fresh-project","option-2-using-git-branches","option-3-rebasing","option-4-attempt-a-git-merge","option-6-use-a-diffing-tool-like-araxis-merge","org-onmount-hooks","org-plugs","org-routes","organization-pages","organizations-multitenancy","other-tools-we-use-to-help-develop-web-apps","our-recommendation","page-analytics","page-components","page-header","page-index-available-at-petal-pro-docs-json","passkeys","password-change-alert","passwordless","passwordless-process","per-type-notification-preferences","persistent-admin-chat-history-optional","petal-pro-layouts","petalpro-changelog-like","petalpro-changelog-read","petalpro-changelog-update","pre-installed-editor-js-plug-ins","prerequisites","pretty-markdown","primary-auth-vs-2fa-mode","production-dockerfile","protected-pages","public-layout","public-page-and-seo","public-pages","publishing-process","querying-analytics-data","quick-install-instructions","rate-limiting","rate-limiting-and-error-tracking","recipes","recommended-upgrade-steps","registering-a-passkey","removed","removeflashhook","removing-a-tool","removing-csp","removing-organizations","removing-passkeys-entirely","removing-support-toggling-light-and-dark","required-env-vars","requireorgadmin","requireorgmember","resizetextareahook","route-tree","routes","run-locally","running-a-recipe","running-a-skill","scaffolding","schema","schemas","scrolltobottomhook","scrolltohashhook","scrolltophook","searchusers","security-considerations","segments","selectallhook","sending-notifications","sent-emails","setting-and-accessing-the-current-user","setting-user-context","setup","setup-github-sign-in","setup-google-sign-in","sharehook","sidebar-collapse","sidebar-layout","sidebar-tabs-container","signal-streamblog-cms","signing-in","skills","social-button","social-login-providers","source-https-petal-build-petal-pro","source-https-petal-build-petal-pro-changelog","source-https-petal-build-petal-pro-fundamentals-admin-mcp-server","source-https-petal-build-petal-pro-fundamentals-ai-admin-chat","source-https-petal-build-petal-pro-fundamentals-blog-cms","source-https-petal-build-petal-pro-fundamentals-branding","source-https-petal-build-petal-pro-fundamentals-changelog-system","source-https-petal-build-petal-pro-fundamentals-claude-code-integration","source-https-petal-build-petal-pro-fundamentals-components","source-https-petal-build-petal-pro-fundamentals-customization-recipes","source-https-petal-build-petal-pro-fundamentals-dark-mode","source-https-petal-build-petal-pro-fundamentals-deployment","source-https-petal-build-petal-pro-fundamentals-emails","source-https-petal-build-petal-pro-fundamentals-feedback-system","source-https-petal-build-petal-pro-fundamentals-folder-structure","source-https-petal-build-petal-pro-fundamentals-generators","source-https-petal-build-petal-pro-fundamentals-image-uploads","source-https-petal-build-petal-pro-fundamentals-impersonation","source-https-petal-build-petal-pro-fundamentals-included-pages","source-https-petal-build-petal-pro-fundamentals-installation","source-https-petal-build-petal-pro-fundamentals-javascript-hooks","source-https-petal-build-petal-pro-fundamentals-layouts-and-menus","source-https-petal-build-petal-pro-fundamentals-organizations-and-multitenancy","source-https-petal-build-petal-pro-fundamentals-passkeys","source-https-petal-build-petal-pro-fundamentals-stripe-billing","source-https-petal-build-petal-pro-fundamentals-translations","source-https-petal-build-petal-pro-fundamentals-user-notifications","source-https-petal-build-petal-pro-fundamentals-users-and-authentication","source-https-petal-build-petal-pro-recipes","source-https-petal-build-petal-pro-upgrade-guide","starting-a-session","step-1-add-the-type-to-usernotification","step-2-register-it-in-preferences","step-3-add-the-attrs-helper","step-4-send-the-notification","step-5-add-a-notification-item-component","steps-to-delete","stripe-billing","sub-agents","take-pro-4-4-0-before-you-run-mix-deps-update-petalcomponents","the-endpoint","the-layout-component","the-preference-schema","the-read-path","the-route","the-stripe-schema","the-token","this-file-contains-all-petal-pro-documentation-concatenated-for-llm-consumption","tools-are-native-jido-actions","tracking-a-custom-event","transactional-emails","translations","turn-off-impersonation","two-factor-authentication-2fa-with-totp","type-definitions","un-publishing","updated","updated-app-css","updating-petal-framework","updating-preferences","updating-the-boilerplate-code","upgrade-guide","upgrade-notes","upgrade-steps","user-dashboard-page","user-dropdown-menu","user-management-page","user-notifications","user-onboarding-page","user-settings-pages","users","users-authentication","using-figma-to-create-your-assets-quickly","using-pro-components-in-another-project","using-sub-agents","utilities","verifying-it-works","viewing-analytics-in-the-admin","viewing-notifications","webauthn-passkeys-optional","webhook-notifications-on-new-feedback","welcome-notification","what-gets-captured-automatically","what-if-the-user-forgets-what-social-login-they-used","what-is-petal-pro","what-it-does-not-track","what-it-tracks","what-s-included","what-s-included-in-v4","what-s-rate-limited-by-default","your-data"],"section_partial":true,"section_indexed_at":"2026-10-24T19:38:55.640Z","why":["authority 46 (listed)","checked 412 minutes ago"]},"read":{"llms_txt":"https://petal.build/llms.txt","llms_full_txt":null,"nested_llms_txt":[]},"terms":null,"health":{"ok":true,"status":"valid","tier":"listed","authority":46,"last_checked":"2026-10-24T19:38:53.456Z","checked_minutes_ago":412,"stale":false,"max_age_seconds":86400,"live_checked":false,"http_status":200,"last_valid":"2026-10-24T19:38:53.456Z","content_hash":"52bf1e0e9b52bc6b7af1443ae5b719eb","documentation_indexed_at":"2026-10-24T19:38:52.374Z"},"sources":[],"match":{"strength":"domain","reason":"Exact domain or its registered publisher."},"provenance":{"selection":"directory","reranked":false,"verification":"domain_ownership","terms":"unknown","excerpts":"publisher_link_metadata","health":"stored_crawl"},"alternatives":[]}