Behaviour and macro for Cringe applications.
@callback handle_event(term(), term()) :: {:noreply, term()} | {:stop, term()}
@callback init(keyword()) :: {:ok, term()} | {:stop, term()}
@callback render(term()) :: Cringe.Document.t()