# Generators & Page Builder

### Generators

#### mix petal.gen.live

This produces the same files as Phoenix's `mix phx.gen.live` . The only difference is that the templates use Tailwind and Petal Components. You can try it out with:&#x20;

```
mix petal.gen.live Todos Todo todos label:string is_done:boolean
```

Add the routes from the output.&#x20;

{% hint style="info" %}
If you're wondering where to put the routes, you can search in the router file for the text "page\_builder:live:protected", and add them straight after that line.
{% endhint %}

```elixir
def PetalProWeb.Router do
  ...

  scope "/", PetalProWeb do
    pipe_through [
      :browser,
      :require_authenticated_user,
      :kick_user_if_suspended_or_deleted,
      :onboard_new_users
    ]
    
    live_session :require_authenticated_user,
      on_mount: {PetalProWeb.UserOnMountHooks, :require_authenticated_user} do
      live "/todos", TodoLive.Index, :index
      live "/todos/new", TodoLive.Index, :new
      live "/todos/:id/edit", TodoLive.Index, :edit
    
      live "/todos/:id", TodoLive.Show, :show
      live "/todos/:id/show/edit", TodoLive.Show, :edit
    end
  end
  ...
end
```

![After running the generator: the "index" screen](https://50448613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSwy36CS0dsnIH4ah9iHk%2Fuploads%2FX0630mGdFIjIsKwRZDLJ%2Fimage.png?alt=media\&token=85f6cf2b-9ab0-47b9-852d-51a47c787925)

![The "new todo" screen](https://50448613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSwy36CS0dsnIH4ah9iHk%2Fuploads%2FMNFNX33C0X6baldiDM4a%2Fimage.png?alt=media\&token=4b78752d-5157-4c74-8378-72dba28b909c)

![After creating a new todo](https://50448613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSwy36CS0dsnIH4ah9iHk%2Fuploads%2FYOLBceAZenoRUvpno1Zm%2Fimage.png?alt=media\&token=fd7ff830-f356-462c-a7e8-877ae4fb9cb9)

![The "show" page](https://50448613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSwy36CS0dsnIH4ah9iHk%2Fuploads%2FRldnuYvtgrANw01C33xH%2Fimage.png?alt=media\&token=00c251e3-9e2c-47c6-8877-f406a8555c63)

### Page Builder

Usually, when you want to create a new page, you would have to create a new template file or live view file. Then you would create a route and point it either to the template's corresponding controller action, or directly to the live view.&#x20;

To skip these steps, we made it so if you navigate to a path with no route on it then it will show what we call "The Page Builder" 👏.  The Page Builder is simply a form that helps you construct a page at that route. Submitting the form will result in the route being automatically added to the `router.ex` file and either a template or live view file is created for you.

![Me creating a new page at the route "my-cool-new-page"](https://50448613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSwy36CS0dsnIH4ah9iHk%2Fuploads%2FSBcb2zoqG2AODqvdtfkZ%2Fimage.png?alt=media\&token=e499a1d3-fba2-43d0-b031-659319be9887)
