diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index b043282e..6169ee7c 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -44,6 +44,7 @@ def update
def dashboard
redirect_to(root_url) unless user_signed_in?
@pending = { main: current_user.unseen_notifications.count }
+ @crumbs = ['User dashboard']
if current_user.admin?
@contributor_applications = User.contributor_applications
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index cec8f2ff..9ae83fb2 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -113,6 +113,10 @@ def longer_list(title = '', hide_over = 3, elements = nil, &blk)
end
end
+ def current_community_member?
+ current_user.try :community_member?
+ end
+
def current_contributor?
current_user.try :contributor?
end
diff --git a/app/views/users/_actions.html.erb b/app/views/users/_actions.html.erb
index 4de676da..c56bf1db 100644
--- a/app/views/users/_actions.html.erb
+++ b/app/views/users/_actions.html.erb
@@ -27,6 +27,17 @@
<% end %>
<% end %>
+ <% unless current_community_member? %>
+
+ <%= link_to(
+ 'https://forms.gle/FWMb3JnUpVDt7TXXA',
+ class: 'nav-link', target: '_blank'
+ ) do %>
+ <%= fa_icon('users') %> Become a SeqCode Community member
+ <% end %>
+
+ <% end %>
+
<% if false # Do not include this option for now %>
<%= link_to(
diff --git a/app/views/users/_affiliation.html.erb b/app/views/users/_affiliation.html.erb
new file mode 100644
index 00000000..5f4b181c
--- /dev/null
+++ b/app/views/users/_affiliation.html.erb
@@ -0,0 +1,22 @@
+<% department ||= false %>
+
+<% if user.affiliation_ror? %>
+ <%= link_to(user.affiliation, user.ror_url, target: '_blank') %>
+<% else %>
+ <%= user.affiliation %>
+<% end %>
+<% if department && user.department? %>
+ (<%= user.department %>)
+<% end %>
+
+<% if user.affiliation_2? %>
+ |
+ <% if user.affiliation_2_ror? %>
+ <%= link_to(user.affiliation_2, user.ror_2_url, target: '_blank') %>
+ <% else %>
+ <%= user.affiliation_2 %>
+ <% end %>
+ <% if department && user.department_2? %>
+ (<%= user.department_2 %>)
+ <% end %>
+<% end %>
diff --git a/app/views/users/_community_member.html.erb b/app/views/users/_community_member.html.erb
new file mode 100644
index 00000000..b81ab2a5
--- /dev/null
+++ b/app/views/users/_community_member.html.erb
@@ -0,0 +1,38 @@
+<% if current_community_member? %>
+ Community member
+
+ You are registered as a SeqCode Community member. This allows you to
+ actively participate in the governance of the SeqCode Community, including
+ through proposing and voting for SeqCode Committee members, participating in
+ open discussions, and casting ballots on SeqCode ammendments.
+
+
+
+
+
+ <%= fa_icon('user-tie', class: 'float-right') %>
+ Member profile
+
+
+ <%
+ {
+ 'Given name' => :given,
+ 'Family name' => :family,
+ 'Email address' => :email,
+ 'Affiliation' => render(
+ partial: 'affiliation',
+ locals: { user: current_user, department: true }
+ ),
+ 'Position' => :position,
+ 'Highest academic degree' => :highest_degree,
+ 'Brief description of achievements' => :achievements,
+ 'Membership in a microbiological society' => :membership_societies,
+ 'Interest in serving in the SeqCode Committee' =>
+ current_user.committee_interest? ? 'Yes' : 'No'
+ }.each do |k, v|
+ %>
+ - <%= k %>
+ - <%= v.is_a?(Symbol) ? current_user.send(v) : v %>
+ <% end %>
+
+<% end %>
diff --git a/app/views/users/_dashboard_links.html.erb b/app/views/users/_dashboard_links.html.erb
index c579dc21..e7cd3316 100644
--- a/app/views/users/_dashboard_links.html.erb
+++ b/app/views/users/_dashboard_links.html.erb
@@ -6,6 +6,8 @@
links[:editor] = ['user-edit', 'Editor'] if current_editor?
links[:curator] = ['user-check', 'Curator'] if current_curator?
links[:contributor] = ['user-plus', 'Contributor'] if current_contributor?
+ links[:community_member] =
+ ['users', 'Community member'] if current_community_member?
%>
<% links.each do |role, icon| %>
diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb
index 51b132b2..b3eeb9e0 100644
--- a/app/views/users/_user.html.erb
+++ b/app/views/users/_user.html.erb
@@ -14,19 +14,7 @@
<% end %>
<%= adaptable_value(entry, 'Affiliation') do %>
- <% if user.affiliation_ror? %>
- <%= link_to(user.affiliation, user.ror_url, target: '_blank') %>
- <% else %>
- <%= user.affiliation %>
- <% end %>
- <% if user.affiliation_2? %>
- |
- <% if user.affiliation_2_ror? %>
- <%= link_to(user.affiliation_2, user.ror_2_url, target: '_blank') %>
- <% else %>
- <%= user.affiliation_2 %>
- <% end %>
- <% end %>
+ <%= render(partial: 'affiliation', locals: { user: user }) %>
<% end %>
<%= adaptable_value(entry, 'Roles') do %>
diff --git a/app/views/users/dashboard.html.erb b/app/views/users/dashboard.html.erb
index 49c00231..d55e187c 100644
--- a/app/views/users/dashboard.html.erb
+++ b/app/views/users/dashboard.html.erb
@@ -11,7 +11,7 @@
<%= render(partial: 'about') %>
<%= render(partial: 'actions') %>
- <% when 'admin', 'editor', 'curator', 'contributor' %>
+ <% when 'admin', 'editor', 'curator', 'contributor', 'community_member' %>
<%= render(partial: which) %>
<% end %>
diff --git a/db/migrate/20260701161300_add_community_member_to_users.rb b/db/migrate/20260701161300_add_community_member_to_users.rb
new file mode 100644
index 00000000..d785b657
--- /dev/null
+++ b/db/migrate/20260701161300_add_community_member_to_users.rb
@@ -0,0 +1,5 @@
+class AddCommunityMemberToUsers < ActiveRecord::Migration[6.1]
+ def change
+ add_column :users, :community_member, :bool, default: false
+ end
+end
diff --git a/db/migrate/20260701163952_add_departments_to_users.rb b/db/migrate/20260701163952_add_departments_to_users.rb
new file mode 100644
index 00000000..7d07db67
--- /dev/null
+++ b/db/migrate/20260701163952_add_departments_to_users.rb
@@ -0,0 +1,6 @@
+class AddDepartmentsToUsers < ActiveRecord::Migration[6.1]
+ def change
+ add_column :users, :department, :string, default: nil
+ add_column :users, :department_2, :string, default: nil
+ end
+end
diff --git a/db/migrate/20260701164537_add_community_answers_to_users.rb b/db/migrate/20260701164537_add_community_answers_to_users.rb
new file mode 100644
index 00000000..90e49957
--- /dev/null
+++ b/db/migrate/20260701164537_add_community_answers_to_users.rb
@@ -0,0 +1,9 @@
+class AddCommunityAnswersToUsers < ActiveRecord::Migration[6.1]
+ def change
+ add_column :users, :position, :string, default: nil
+ add_column :users, :highest_degree, :string, default: nil
+ add_column :users, :achievements, :text, default: nil
+ add_column :users, :membership_societies, :string, default: nil
+ add_column :users, :committee_interest, :boolean, default: nil
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 66b65806..a0eafbd0 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2026_05_14_135351) do
+ActiveRecord::Schema.define(version: 2026_07_01_164537) do
# These are extensions that must be enabled in order to support this database
enable_extension "fuzzystrmatch"
@@ -536,6 +536,14 @@
t.boolean "opt_message_email", default: true
t.string "affiliation_2"
t.string "affiliation_2_ror"
+ t.boolean "community_member", default: false
+ t.string "department"
+ t.string "department_2"
+ t.string "position"
+ t.string "highest_degree"
+ t.text "achievements"
+ t.string "membership_societies"
+ t.boolean "committee_interest"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true