README.md

# HomeDash

HomeDash provides a simple way of presenting dashboard cards from various services.

This is still in early experimental stage.

## Setup

### Adding to deps

Add the home dash library to your deps in mix.exs

```elixir
  {:home_dash, "~> 0.0"},
```

### Configuration

#### Starting the Provider servers yourself

You may want to start the Providers in your application, say for example if you have a provider that relys in another GenServer (like PubSub.)

```elixir
config :home_dash, servers: false
```

### Hello World

HomeDash can be up and running with the example Welcome card provider by adding the following to the router:

```elixir
scope "/home_dash", HomeDashWeb do
  pipe_through [:browser]

  live_session :cards, layout: {MyAppWeb.Layouts, :app} do
    live "/cards", CardsLive, :my_action
  end
end
```

Now the welcome cards will be at `/home_dash/cards`.

### Configuring Providers

You can change the card providers in your config with the following:

```elixir
config :home_dash,
  actions: [
    my_action: [{HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}]
  ]
```

Now the [BrewDash](https://github.com/hez/brew-dash) cards will be at `/home_dash/cards`.

### Multiple Providers

Multiple providers can be configured for the same live action

```elixir
config :home_dash,
  actions: [
    my_action: [
      HomeDash.Providers.Welcome,
      {HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}
    ]
  ]
```

Similarly, there can be multiple live actions

```elixir
config :home_dash,
  actions: [
    welcome: [HomeDash.Providers.Welcome]
    brewdash: [
        {HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}
    ]
  ]
```

### Config options

* `:server_name` - Define the name that the server will be registered under. Defaults to the provider module name, e.g. `HomeDash.Providers.Welcome`. This is required if you have one provider that will be used with more than one configuration.

* `:sort_priority` - The integer value to be added to cards before sorting. Use this to push cards earlier or later in the sort order.


### Layout

Consider the spacing in your app layout (`MyAppWeb.Layouts`, `app.html.heex`). It is not uncommon to have `class="mx-auto max-w-2xl"` on your container `div` inside of `app.html.heex`, but for HomeDash, that may give you an overly restrictive container div. Removing width restrictions for your container div may provide better results.

### Tailwind

Since HomeDash requires Tailwind CSS, and Tailwind purges CSS classes it is not familair with, you will need to add HomeDash to your tailwind.config.js:

```
module.exports = {
  content: [
    "./js/**/*.js",
    "../lib/my_project_web.ex",
    "../lib/my_project_web/**/*.*ex",
    "../deps/home_dash/lib/home_dash_web.ex",
    "../deps/home_dash/lib/home_dash_web/**/*.*ex"
  ],
```

### Welcome Card Provider

The welcome card provider is an example implementation.

You can add additional welcome cards with:

```
HomeDash.Providers.Welcome.push_cards(%HomeDash.Card{
  card_component: HomeDashWeb.Cards.Default,
  id: UUID.uuid4(),
  order: 4,
  data: %{title: "My New Card"}
})
```