Authentication
Signup
Theme
Hound
Framework
Tailwind CSS
Be sure to read the Rails UI authentication design patterns overview to understand how we've customized the default Devise views to work nicely inside the Hound theme.
Sign up for an account
Already have an account? Sign in
<!-- app/views/devise/registrations/new.html.erb-->
<% content_for :masthead do %>
<div class="text-center">
<h1 class="text-3xl font-extrabold text-slate-900 dark:text-slate-100 tracking-tight my-3">Sign up for an account</h1>
<p class="mb-6 text-slate-700 dark:text-slate-200">Already have an account? <%= link_to "Sign in", new_session_path(resource_name), class: "btn-link" %></p>
</div>
<%= render "shared/error_messages", resource: resource %>
<% end %>
<%= render "auth_layout" do %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), data: { turbo: false }) do |f| %>
<div class="form-group">
<%= f.label :email, class: "form-label" %>
<div class="relative">
<%= f.email_field :email, autofocus: true, autocomplete: "email", class: "form-input focus:pl-10 peer transition", pattern: "[^@\s]+@[^@\s]+\.[^@\s]+", title: "Invalid email address" %>
<%= icon "envelope", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400" %>
</div>
</div>
<div class="form-group">
<%= f.label :password, class: "form-label" %>
<div class="relative">
<%= f.password_field :password, autocomplete: "new-password", class: "form-input focus:pl-10 peer transition" %>
<%= icon "lock-closed", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400" %>
</div>
<% if @minimum_password_length %>
<p class="text-xs text-slate-500 dark:text-slate-400 mt-1">(<%= @minimum_password_length %> characters minimum)</p>
<% end %>
</div>
<div class="form-group">
<%= f.label :password_confirmation, class: "form-label" %>
<div class="relative">
<%= f.password_field :password_confirmation, autocomplete: "new-password", class: "form-input focus:pl-10 peer transition" %>
<%= icon "lock-closed", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400" %>
</div>
</div>
<%= f.submit "Sign up", class: "btn btn-primary w-full" %>
<% end %>
<% end %>
/ app/views/devise/registrations/new.html.erb
- content_for :masthead do
.text-center
%h1.text-3xl.font-extrabold.text-slate-900.dark:text-slate-100.tracking-tight.my-3 Sign up for an account
%p.mb-6.text-slate-700.dark:text-slate-200
Already have an account? #{link_to "Sign in", new_session_path(resource_name), class: "btn-link"}
= render "shared/error_messages", resource: resource
= render "auth_layout" do
= form_for(resource, as: resource_name, url: registration_path(resource_name), data: { turbo: false }) do |f|
.form-group
= f.label :email, class: "form-label"
.relative
= f.email_field :email, autofocus: true, autocomplete: "email", class: "form-input focus:pl-10 peer transition", pattern: "[^@\s]+@[^@\s]+\.[^@\s]+", title: "Invalid email address"
= icon "envelope", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400"
.form-group
= f.label :password, class: "form-label"
.relative
= f.password_field :password, autocomplete: "new-password", class: "form-input focus:pl-10 peer transition"
= icon "lock-closed", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400"
- if @minimum_password_length
%p.text-xs.text-slate-500.dark:text-slate-400.mt-1
(#{@minimum_password_length} characters minimum)
.form-group
= f.label :password_confirmation, class: "form-label"
.relative
= f.password_field :password_confirmation, autocomplete: "new-password", class: "form-input focus:pl-10 peer transition"
= icon "lock-closed", classes: "w-5 h-5 absolute translate-x-0 top-3 text-slate-300 peer-focus:text-indigo-500/80 opacity-0 transition transform peer-focus:opacity-100 peer-focus:translate-x-3 dark:peer-focus:text-indigo-400"
= f.submit "Sign up", class: "btn btn-primary w-full"