diff --git a/app/controllers/admin/standby_blocks_controller.rb b/app/controllers/admin/standby_blocks_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..49f037a225789cb58437facd759b50cf9d92f31f
--- /dev/null
+++ b/app/controllers/admin/standby_blocks_controller.rb
@@ -0,0 +1,103 @@
+class Admin::StandbyBlocksController < Admin::BaseController
+  before_action :set_conference
+  before_action :set_standby_block, only: [:show, :edit, :update, :destroy]
+  before_action :authorize_permission
+
+  def index
+    @standby_blocks = @conference.standby_blocks.includes(:user).order(:starts_at)
+    @suggestions = @conference.suggest_standby_blocks
+    @users = User.all.order(:name)
+  end
+
+  def show
+  end
+
+  def new
+    @standby_block = @conference.standby_blocks.build
+    @users = User.all.order(:name)
+    
+    # Pre-fill with suggestion if provided
+    if params[:suggestion_id].present?
+      suggestion = @conference.suggest_standby_blocks[params[:suggestion_id].to_i]
+      if suggestion
+        @standby_block.starts_at = suggestion[:starts_at]
+        @standby_block.ends_at = suggestion[:ends_at]
+      end
+    end
+  end
+
+  def create
+    @standby_block = @conference.standby_blocks.build(standby_block_params)
+    
+    if @standby_block.save
+      redirect_to admin_conference_standby_blocks_path(@conference), 
+                  notice: 'Standby block was successfully created.'
+    else
+      @users = User.all.order(:name)
+      render :new, status: :unprocessable_entity
+    end
+  end
+
+  def edit
+    @users = User.all.order(:name)
+  end
+
+  def update
+    if @standby_block.update(standby_block_params)
+      redirect_to admin_conference_standby_blocks_path(@conference), 
+                  notice: 'Standby block was successfully updated.'
+    else
+      @users = User.all.order(:name)
+      render :edit, status: :unprocessable_entity
+    end
+  end
+
+  def destroy
+    @standby_block.destroy
+    redirect_to admin_conference_standby_blocks_path(@conference), 
+                notice: 'Standby block was successfully deleted.'
+  end
+
+  def create_from_suggestion
+    suggestion = @conference.suggest_standby_blocks[params[:suggestion_id].to_i]
+    
+    unless suggestion
+      redirect_to admin_conference_standby_blocks_path(@conference), 
+                  alert: 'Invalid suggestion selected.'
+      return
+    end
+
+    @standby_block = @conference.standby_blocks.build(
+      user_id: params[:user_id],
+      starts_at: suggestion[:starts_at],
+      ends_at: suggestion[:ends_at],
+      notes: "Auto-created from suggestion for #{suggestion[:date].strftime('%B %d, %Y')}"
+    )
+
+    if @standby_block.save
+      redirect_to admin_conference_standby_blocks_path(@conference), 
+                  notice: 'Standby block was successfully created from suggestion.'
+    else
+      redirect_to admin_conference_standby_blocks_path(@conference), 
+                  alert: "Failed to create standby block: #{@standby_block.errors.full_messages.join(', ')}"
+    end
+  end
+
+  private
+
+  def set_conference
+    @conference = Conference.find_by!(slug: params[:conference_slug])
+  end
+
+  def set_standby_block
+    @standby_block = @conference.standby_blocks.find(params[:id])
+  end
+
+  def standby_block_params
+    params.require(:standby_block).permit(:user_id, :starts_at, :ends_at, :notes)
+  end
+
+  def authorize_permission
+    super("manage_assignments")
+  end
+end
\ No newline at end of file
diff --git a/app/controllers/assignments_controller.rb b/app/controllers/assignments_controller.rb
index d36730d0a95ddc4963b6bba2594285f193e026d4..667deaa323992563ac42a5b81c79b71cfddb47f5 100644
--- a/app/controllers/assignments_controller.rb
+++ b/app/controllers/assignments_controller.rb
@@ -6,9 +6,17 @@ class AssignmentsController < ApplicationController
 
   def index
     @assignments = Assignment.joins(session: :conference).where(conferences: { active: true }).joins(:user).order("sessions.starts_at")
-    return unless params[:user_id]
-
-    @assignments = @assignments.where(user_id: params[:user_id])
+    @standby_blocks = StandbyBlock.joins(:conference).where(conferences: { active: true }).includes(:user, :conference).order(:starts_at)
+    
+    if params[:user_id]
+      @assignments = @assignments.where(user_id: params[:user_id])
+      @standby_blocks = @standby_blocks.where(user_id: params[:user_id])
+    end
+    
+    # Create a unified collection for rendering
+    @assignments_and_standby = (@assignments.map { |a| { type: 'assignment', object: a, user: a.user, starts_at: a.session.starts_at } } +
+                               @standby_blocks.map { |sb| { type: 'standby_block', object: sb, user: sb.user, starts_at: sb.starts_at } })
+                               .sort_by { |item| item[:starts_at] }
   end
 
   def create
@@ -77,6 +85,9 @@ class AssignmentsController < ApplicationController
     @user = User.find(params[:user_id])
     # Filter assignments to only include those from active conferences
     @active_assignments = @user.assignments.joins(session: :conference).where(conferences: { active: true }).includes(:session, session: [:conference, :stage])
+    
+    # Filter standby blocks to only include those from active conferences
+    @active_standby_blocks = @user.standby_blocks.joins(:conference).where(conferences: { active: true }).includes(:conference)
 
     # Include candidates if feature flag is enabled
     if include_candidate_sessions?
@@ -150,6 +161,28 @@ class AssignmentsController < ApplicationController
           end
         end
 
+        # Add standby blocks from active conferences
+        @user.standby_blocks.joins(:conference).where(conferences: { active: true }).each do |standby_block|
+          desc = [
+            "🛡️ STANDBY BLOCK - You are on standby for translation needs",
+            "Conference: #{standby_block.conference.name}",
+            "Notes: #{standby_block.notes}" 
+          ].compact.reject(&:blank?)
+
+          event = Icalendar::Event.new
+          event.dtstart = Icalendar::Values::DateTime.new(standby_block.starts_at, tzid: standby_block.conference.time_zone || "UTC")
+          event.dtend = Icalendar::Values::DateTime.new(standby_block.ends_at, tzid: standby_block.conference.time_zone || "UTC")
+          event.summary = "[STANDBY] Standby Block @ #{standby_block.conference.name}"
+          event.description = desc.join("\n\n")
+          event.location = standby_block.conference.name
+          event.created = Icalendar::Values::DateTime.new(standby_block.created_at)
+          event.last_modified = Icalendar::Values::DateTime.new(standby_block.updated_at)
+          event.uid = [ standby_block.conference.slug, "standby", standby_block.id ].join("-")
+          event.status = "CONFIRMED"
+          event.append_custom_property("X-ALT-DESC;FMTTYPE=text/html", desc.join("<hr>"))
+          calendar.add_event(event)
+        end
+
         calendar.publish
         headers["Content-Type"] = "text/calendar; charset=UTF-8"
         render plain: calendar.to_ical
diff --git a/app/models/conference.rb b/app/models/conference.rb
index f484095d9b079d2570cd1e62f1a893aed217e9ab..665179af6d42fae3418ac5bc04132eed08a685fb 100644
--- a/app/models/conference.rb
+++ b/app/models/conference.rb
@@ -4,6 +4,7 @@ class Conference < ApplicationRecord
   has_many :stages, dependent: :destroy
   has_many :revision_sets, dependent: :destroy
   has_many :import_histories, dependent: :destroy
+  has_many :standby_blocks, dependent: :destroy
   belongs_to :notification_channel, optional: true
 
   serialize :data, coder: JSON
@@ -83,6 +84,60 @@ class Conference < ApplicationRecord
     (starts_at.to_date..ends_at.to_date)
   end
 
+  def suggest_standby_blocks
+    return [] unless relevant_stages.any?
+
+    suggestions = []
+
+    days.each do |day|
+      # Get sessions for relevant stages on this day
+      day_sessions = sessions.joins(:stage)
+                           .where(stage: relevant_stages)
+                           .where('DATE(sessions.starts_at) = ?', day)
+                           .order(:starts_at)
+
+      next if day_sessions.empty?
+
+      first_session = day_sessions.first
+      last_session = day_sessions.last
+
+      # Calculate total program duration
+      program_start = first_session.starts_at
+      program_end = last_session.ends_at
+      total_duration = ((program_end - program_start) / 1.hour).ceil
+
+      # Suggest block length based on program duration
+      suggested_length = case total_duration
+      when 0..3 then 2.hours
+      when 4..9 then 3.hours
+      when 10..12 then 4.hours
+      else 6.hours
+      end
+
+      # Create blocks to cover the program duration
+      current_time = program_start
+      block_number = 1
+
+      while current_time < program_end
+        block_end = [current_time + suggested_length, program_end].min
+
+        suggestions << {
+          date: day,
+          block_number: block_number,
+          starts_at: current_time,
+          ends_at: block_end,
+          duration_hours: ((block_end - current_time) / 1.hour).round(1),
+          sessions_count: day_sessions.where('starts_at >= ? AND starts_at < ?', current_time, block_end).count
+        }
+
+        current_time = block_end
+        block_number += 1
+      end
+    end
+
+    suggestions
+  end
+
   def to_param
     slug
   end
diff --git a/app/models/standby_block.rb b/app/models/standby_block.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d5c8cf8920df15e40fec88331d737a4e4bae88ec
--- /dev/null
+++ b/app/models/standby_block.rb
@@ -0,0 +1,110 @@
+class StandbyBlock < ApplicationRecord
+  belongs_to :user
+  belongs_to :conference
+
+  validates :starts_at, :ends_at, presence: true
+  validate :no_overlap_with_assignments
+  validate :no_overlap_with_other_standby_blocks
+  validate :within_conference_dates
+  validate :ends_after_starts
+
+  scope :active, -> { where(status: 'active') }
+  scope :current, -> { active.where('starts_at <= ? AND ends_at > ?', Time.current, Time.current) }
+  scope :upcoming, -> { active.where('starts_at > ?', Time.current).order(:starts_at) }
+  scope :for_time_range, ->(start_time, end_time) { active.where('starts_at < ? AND ends_at > ?', end_time, start_time) }
+
+  def self.available_users_at(time)
+    active.where('starts_at <= ? AND ends_at > ?', time, time)
+          .includes(:user)
+          .map(&:user)
+  end
+
+  def duration_minutes
+    (ends_at - starts_at) / 60.0
+  end
+
+  def title
+    "Standby Block"
+  end
+
+  def stage
+    OpenStruct.new(name: "Standby")
+  end
+
+  def assignments
+    [OpenStruct.new(user: user)]
+  end
+
+  def ref_id
+    "standby-#{id}"
+  end
+
+  def session_format
+    "Standby"
+  end
+
+  def language
+    "Various"
+  end
+
+  def description
+    "Availability block for standby translator duties"
+  end
+
+  def url
+    nil
+  end
+
+  def speakers
+    []
+  end
+
+  def filedrop?
+    false
+  end
+
+  def status
+    super || 'active'
+  end
+
+  private
+
+  def no_overlap_with_assignments
+    return if user.blank? || starts_at.blank? || ends_at.blank?
+
+    overlapping = user.assignments.joins(:session)
+                     .where('sessions.starts_at < ? AND sessions.ends_at > ?', ends_at, starts_at)
+    
+    if overlapping.exists?
+      errors.add(:base, "Standby block overlaps with assigned sessions")
+    end
+  end
+
+  def no_overlap_with_other_standby_blocks
+    return if user.blank? || starts_at.blank? || ends_at.blank?
+
+    overlapping = user.standby_blocks.active
+                     .where.not(id: id)
+                     .where('starts_at < ? AND ends_at > ?', ends_at, starts_at)
+    
+    if overlapping.exists?
+      errors.add(:base, "Standby block overlaps with another standby block")
+    end
+  end
+
+  def within_conference_dates
+    return if conference.blank? || starts_at.blank? || ends_at.blank?
+
+    unless starts_at >= conference.starts_at && ends_at <= conference.ends_at
+      errors.add(:base, "Standby block must be within conference dates")
+    end
+  end
+
+  def ends_after_starts
+    return if starts_at.blank? || ends_at.blank?
+
+    if ends_at <= starts_at
+      errors.add(:ends_at, "must be after start time")
+    end
+  end
+end
\ No newline at end of file
diff --git a/app/models/user.rb b/app/models/user.rb
index 540d74f0c0cc59779a5adcb4893459c846ecb80a..ba7e04433b64e5977d8ecabdb848013674da8678 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -2,6 +2,7 @@ class User < ApplicationRecord
   devise :database_authenticatable, :registerable, :rememberable
   has_many :assignments, dependent: :destroy
   has_many :candidates, dependent: :destroy
+  has_many :standby_blocks, dependent: :destroy
 
   has_many :user_roles, dependent: :destroy
   has_many :roles, through: :user_roles
diff --git a/app/views/admin/conferences/show.html.erb b/app/views/admin/conferences/show.html.erb
index bf4c6b16e91a1a5ec82c5b282fc3eb192f511c9c..05b76a3b2b22d59234827924439ad50421f92aec 100644
--- a/app/views/admin/conferences/show.html.erb
+++ b/app/views/admin/conferences/show.html.erb
@@ -74,6 +74,15 @@
             <h3 class="text-sm font-medium text-gray-500 dark:text-gray-400">Assignments</h3>
             <p class="mt-1 text-xl font-semibold text-gray-900 dark:text-gray-200"><%= @conference.sessions.joins(:assignments).count %></p>
           </div>
+          
+          <div class="bg-purple-50 dark:bg-purple-900/20 p-4 rounded-lg">
+            <h3 class="text-sm font-medium text-purple-600 dark:text-purple-400">Standby Blocks</h3>
+            <p class="mt-1 text-xl font-semibold text-purple-800 dark:text-purple-200"><%= @conference.standby_blocks.count %></p>
+            <div class="mt-2">
+              <%= link_to "Manage Standby", admin_conference_standby_blocks_path(@conference), 
+                          class: "text-xs text-purple-600 hover:text-purple-800 dark:text-purple-400 dark:hover:text-purple-300" %>
+            </div>
+          </div>
         </div>
         
         <div class="mt-6">
diff --git a/app/views/admin/standby_blocks/_form.html.erb b/app/views/admin/standby_blocks/_form.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..39e7327c6ec682e466db4a7d481e35f213b7911b
--- /dev/null
+++ b/app/views/admin/standby_blocks/_form.html.erb
@@ -0,0 +1,71 @@
+<%= form_with model: [:admin, @conference, @standby_block], local: true, class: "space-y-6" do |form| %>
+  <% if @standby_block.errors.any? %>
+    <div class="rounded-md bg-red-50 dark:bg-red-900/50 p-4">
+      <div class="flex">
+        <div class="flex-shrink-0">
+          <svg class="h-5 w-5 text-red-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
+            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"></path>
+          </svg>
+        </div>
+        <div class="ml-3">
+          <h3 class="text-sm font-medium text-red-800 dark:text-red-200">
+            There <%= @standby_block.errors.count == 1 ? 'was' : 'were' %> <%= pluralize(@standby_block.errors.count, 'error') %> with your submission:
+          </h3>
+          <div class="mt-2 text-sm text-red-700 dark:text-red-300">
+            <ul role="list" class="list-disc space-y-1 pl-5">
+              <% @standby_block.errors.full_messages.each do |message| %>
+                <li><%= message %></li>
+              <% end %>
+            </ul>
+          </div>
+        </div>
+      </div>
+    </div>
+  <% end %>
+
+  <div class="bg-white dark:bg-gray-800 shadow rounded-lg p-6">
+    <div class="grid grid-cols-1 gap-6">
+      <!-- User Selection -->
+      <div>
+        <%= form.label :user_id, "Translator", class: "block text-sm font-medium text-gray-700 dark:text-gray-300" %>
+        <%= form.select :user_id, 
+                       options_from_collection_for_select(@users, :id, :name, @standby_block.user_id), 
+                       { prompt: "Select a translator..." }, 
+                       { class: "mt-1 block w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 shadow-sm focus:border-blue-500 focus:ring-blue-500" } %>
+      </div>
+
+      <!-- Date and Time -->
+      <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
+        <div>
+          <%= form.label :starts_at, "Start Time", class: "block text-sm font-medium text-gray-700 dark:text-gray-300" %>
+          <%= form.datetime_local_field :starts_at, 
+                                       value: @standby_block.starts_at&.strftime("%Y-%m-%dT%H:%M"),
+                                       class: "mt-1 block w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 shadow-sm focus:border-blue-500 focus:ring-blue-500" %>
+        </div>
+
+        <div>
+          <%= form.label :ends_at, "End Time", class: "block text-sm font-medium text-gray-700 dark:text-gray-300" %>
+          <%= form.datetime_local_field :ends_at, 
+                                       value: @standby_block.ends_at&.strftime("%Y-%m-%dT%H:%M"),
+                                       class: "mt-1 block w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 shadow-sm focus:border-blue-500 focus:ring-blue-500" %>
+        </div>
+      </div>
+
+      <!-- Notes -->
+      <div>
+        <%= form.label :notes, "Notes (optional)", class: "block text-sm font-medium text-gray-700 dark:text-gray-300" %>
+        <%= form.text_area :notes, 
+                          rows: 3,
+                          placeholder: "Any additional notes about this standby block...",
+                          class: "mt-1 block w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 shadow-sm focus:border-blue-500 focus:ring-blue-500" %>
+      </div>
+    </div>
+  </div>
+
+  <div class="flex justify-end space-x-3">
+    <%= link_to "Cancel", admin_conference_standby_blocks_path(@conference), 
+                class: "inline-flex justify-center py-2 px-4 border border-gray-300 dark:border-gray-600 shadow-sm text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" %>
+    <%= form.submit @standby_block.persisted? ? "Update Standby Block" : "Create Standby Block", 
+                   class: "inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" %>
+  </div>
+<% end %>
\ No newline at end of file
diff --git a/app/views/admin/standby_blocks/edit.html.erb b/app/views/admin/standby_blocks/edit.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..36f83287ea16ab5d9913f10c3ed3fdef0745d320
--- /dev/null
+++ b/app/views/admin/standby_blocks/edit.html.erb
@@ -0,0 +1,38 @@
+<div class="container mx-auto px-4 py-8">
+  <div class="mb-6">
+    <nav class="flex" aria-label="Breadcrumb">
+      <ol role="list" class="flex items-center space-x-4">
+        <li>
+          <%= link_to admin_conference_path(@conference), class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" do %>
+            <%= @conference.name %>
+          <% end %>
+        </li>
+        <li>
+          <div class="flex items-center">
+            <svg class="flex-shrink-0 h-5 w-5 text-gray-400" fill="currentColor" viewBox="0 0 20 20">
+              <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
+            </svg>
+            <%= link_to "Standby Blocks", admin_conference_standby_blocks_path(@conference), class: "ml-4 text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+          </div>
+        </li>
+        <li>
+          <div class="flex items-center">
+            <svg class="flex-shrink-0 h-5 w-5 text-gray-400" fill="currentColor" viewBox="0 0 20 20">
+              <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
+            </svg>
+            <span class="ml-4 text-gray-500 dark:text-gray-400">Edit</span>
+          </div>
+        </li>
+      </ol>
+    </nav>
+  </div>
+
+  <div class="mb-8">
+    <h1 class="text-2xl font-bold text-gray-900 dark:text-gray-200">Edit Standby Block</h1>
+    <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+      Modify the standby block assignment for <%= @standby_block.user.name %>.
+    </p>
+  </div>
+
+  <%= render 'form' %>
+</div>
\ No newline at end of file
diff --git a/app/views/admin/standby_blocks/index.html.erb b/app/views/admin/standby_blocks/index.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..4be345e7b0d83655b8c574faaf8586ebfb9ec8b2
--- /dev/null
+++ b/app/views/admin/standby_blocks/index.html.erb
@@ -0,0 +1,148 @@
+<div class="container mx-auto px-4 py-8">
+  <div class="flex justify-between items-center mb-6 header-with-actions">
+    <div>
+      <h1 class="text-2xl font-bold dark:text-gray-200">Standby Blocks</h1>
+      <p class="text-sm text-gray-600 dark:text-gray-400">
+        <%= link_to @conference.name, admin_conference_path(@conference), class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+      </p>
+    </div>
+    <div class="actions">
+      <%= link_to "New Standby Block", new_admin_conference_standby_block_path(@conference), class: "btn btn-primary" %>
+    </div>
+  </div>
+
+  <!-- Suggestions Section -->
+  <% if @suggestions.any? %>
+    <div class="bg-blue-50 dark:bg-blue-900/20 rounded-lg p-6 mb-8">
+      <h2 class="text-lg font-semibold text-blue-900 dark:text-blue-200 mb-4">
+        <svg class="w-5 h-5 inline mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
+          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path>
+        </svg>
+        Suggested Standby Blocks
+      </h2>
+      <p class="text-blue-800 dark:text-blue-300 mb-4">
+        Based on your conference schedule for relevant stages, we suggest the following standby blocks:
+      </p>
+      
+      <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
+        <% @suggestions.each_with_index do |suggestion, index| %>
+          <div class="bg-white dark:bg-gray-800 rounded-lg p-4 border border-blue-200 dark:border-blue-700">
+            <div class="flex justify-between items-start mb-3">
+              <div>
+                <h3 class="font-medium text-gray-900 dark:text-gray-200">
+                  <%= suggestion[:date].strftime("%B %d, %Y") %>
+                </h3>
+                <p class="text-sm text-gray-600 dark:text-gray-400">
+                  Block <%= suggestion[:block_number] %>
+                </p>
+              </div>
+              <span class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-800 dark:text-blue-100">
+                <%= suggestion[:duration_hours] %>h
+              </span>
+            </div>
+            
+            <div class="text-sm text-gray-700 dark:text-gray-300 mb-3">
+              <div><strong>Time:</strong> <%= suggestion[:starts_at].strftime("%H:%M") %> - <%= suggestion[:ends_at].strftime("%H:%M") %></div>
+              <div><strong>Sessions:</strong> <%= suggestion[:sessions_count] %> sessions during this block</div>
+            </div>
+            
+            <%= form_with url: admin_conference_standby_blocks_path(@conference), method: :post, local: true, class: "flex items-center gap-2" do |f| %>
+              <%= f.hidden_field :suggestion_id, value: index %>
+              <%= f.select :user_id, options_from_collection_for_select(@users, :id, :name), 
+                          { prompt: "Select user..." }, 
+                          { class: "text-xs flex-1 rounded border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200" } %>
+              <%= f.submit "Create", 
+                          formaction: create_from_suggestion_admin_conference_standby_blocks_path(@conference),
+                          class: "btn-sm btn-primary text-xs" %>
+            <% end %>
+          </div>
+        <% end %>
+      </div>
+    </div>
+  <% end %>
+
+  <!-- Existing Standby Blocks -->
+  <div class="bg-white dark:bg-gray-800 shadow overflow-hidden rounded-lg">
+    <% if @standby_blocks.any? %>
+      <table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
+        <thead class="bg-gray-50 dark:bg-gray-700">
+          <tr>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">User</th>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Date & Time</th>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Duration</th>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Status</th>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Notes</th>
+            <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Actions</th>
+          </tr>
+        </thead>
+        <tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">
+          <% @standby_blocks.each do |standby_block| %>
+            <tr>
+              <td class="px-6 py-4 whitespace-nowrap">
+                <div class="flex items-center">
+                  <div class="flex-shrink-0">
+                    <%= render partial: 'application/user_avatar', locals: { user: standby_block.user } %>
+                  </div>
+                  <div class="ml-3">
+                    <div class="text-sm font-medium text-gray-900 dark:text-gray-200">
+                      <%= standby_block.user.name %>
+                    </div>
+                  </div>
+                </div>
+              </td>
+              <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-200">
+                <div><%= standby_block.starts_at.strftime("%B %d, %Y") %></div>
+                <div class="text-gray-500 dark:text-gray-400">
+                  <%= standby_block.starts_at.strftime("%H:%M") %> - <%= standby_block.ends_at.strftime("%H:%M") %>
+                </div>
+              </td>
+              <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-200">
+                <%= standby_block.duration_minutes.round %> min
+              </td>
+              <td class="px-6 py-4 whitespace-nowrap">
+                <% case standby_block.status %>
+                <% when 'active' %>
+                  <span class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-100">
+                    Active
+                  </span>
+                <% when 'cancelled' %>
+                  <span class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-red-100 text-red-800 dark:bg-red-800 dark:text-red-100">
+                    Cancelled
+                  </span>
+                <% when 'completed' %>
+                  <span class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300">
+                    Completed
+                  </span>
+                <% end %>
+              </td>
+              <td class="px-6 py-4 text-sm text-gray-500 dark:text-gray-400 max-w-xs truncate">
+                <%= standby_block.notes %>
+              </td>
+              <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
+                <div class="flex space-x-2">
+                  <%= link_to "Edit", edit_admin_conference_standby_block_path(@conference, standby_block), 
+                              class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+                  <%= link_to "Delete", admin_conference_standby_block_path(@conference, standby_block), 
+                              method: :delete,
+                              class: "text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",
+                              confirm: "Are you sure you want to delete this standby block?" %>
+                </div>
+              </td>
+            </tr>
+          <% end %>
+        </tbody>
+      </table>
+    <% else %>
+      <div class="text-center py-12">
+        <svg class="mx-auto h-12 w-12 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
+          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4"></path>
+        </svg>
+        <h3 class="mt-2 text-sm font-medium text-gray-900 dark:text-gray-200">No standby blocks</h3>
+        <p class="mt-1 text-sm text-gray-500 dark:text-gray-400">Get started by creating a new standby block.</p>
+        <div class="mt-6">
+          <%= link_to "New Standby Block", new_admin_conference_standby_block_path(@conference), class: "btn btn-primary" %>
+        </div>
+      </div>
+    <% end %>
+  </div>
+</div>
\ No newline at end of file
diff --git a/app/views/admin/standby_blocks/new.html.erb b/app/views/admin/standby_blocks/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..2240bb2fb22e6d7b654ccf75090234bc136fb3f2
--- /dev/null
+++ b/app/views/admin/standby_blocks/new.html.erb
@@ -0,0 +1,38 @@
+<div class="container mx-auto px-4 py-8">
+  <div class="mb-6">
+    <nav class="flex" aria-label="Breadcrumb">
+      <ol role="list" class="flex items-center space-x-4">
+        <li>
+          <%= link_to admin_conference_path(@conference), class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" do %>
+            <%= @conference.name %>
+          <% end %>
+        </li>
+        <li>
+          <div class="flex items-center">
+            <svg class="flex-shrink-0 h-5 w-5 text-gray-400" fill="currentColor" viewBox="0 0 20 20">
+              <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
+            </svg>
+            <%= link_to "Standby Blocks", admin_conference_standby_blocks_path(@conference), class: "ml-4 text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+          </div>
+        </li>
+        <li>
+          <div class="flex items-center">
+            <svg class="flex-shrink-0 h-5 w-5 text-gray-400" fill="currentColor" viewBox="0 0 20 20">
+              <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
+            </svg>
+            <span class="ml-4 text-gray-500 dark:text-gray-400">New</span>
+          </div>
+        </li>
+      </ol>
+    </nav>
+  </div>
+
+  <div class="mb-8">
+    <h1 class="text-2xl font-bold text-gray-900 dark:text-gray-200">Create New Standby Block</h1>
+    <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+      Assign a translator to be on standby for the specified time period.
+    </p>
+  </div>
+
+  <%= render 'form' %>
+</div>
\ No newline at end of file
diff --git a/app/views/assignments/_listview_date.html.erb b/app/views/assignments/_listview_date.html.erb
index 62711e2df677579df8034c34fa0106890f23b56d..3e5fc3e0184fa8d47914c98107aa9631a7b24164 100644
--- a/app/views/assignments/_listview_date.html.erb
+++ b/app/views/assignments/_listview_date.html.erb
@@ -1,31 +1,56 @@
 <div class="mb-6 <%= Time.parse(date).end_of_day < now ? "past" : "future" %>">
   <h3 class="sticky top-0 z-10 text-lg font-semibold text-gray-700 dark:text-gray-300 mb-3 bg-white dark:bg-gray-800 py-2"><%= date %></h3>
   <ul class="space-y-3">
-    <% assignments_on_date.each do |item| %>
-      <% is_candidate = item.is_a?(Candidate) %>
-      <li class="<%= item.session.starts_at < now ? "past" : "future" %> pl-4 border-l-4 <%= is_candidate ? 'border-yellow-400 dark:border-yellow-600' : 'border-gray-200 dark:border-gray-700' %>">
-        <div class="flex flex-col md:flex-row md:items-center gap-2">
-          <span class="tabular-nums font-medium text-gray-900 dark:text-gray-100 min-w-28">
-            <%= item.session.starts_at.strftime('%H:%M') %> &ndash; <%= item.session.ends_at.strftime('%H:%M') %>
-          </span>
-          <div class="flex-1">
-            <% if is_candidate %>
-              <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 mr-1">
-                CANDIDATE
-              </span>
-            <% end %>
-            <%= render partial: 'shared/session_filedrop', locals: { session: item.session } %>
-            <%= link_to item.session.title, conference_session_path(item.session.conference, item.session), class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
-            <%= render partial: 'shared/session_engelsystem', locals: { session: item.session } %>
-            <span class="text-gray-500 dark:text-gray-400 ml-1">@ <%= item.session.stage.name %></span>
+    <% items_on_date.each do |item_data| %>
+      <% if item_data[:type] == 'assignment' %>
+        <% item = item_data[:object] %>
+        <% is_candidate = item.is_a?(Candidate) %>
+        <li class="<%= item.session.starts_at < now ? "past" : "future" %> pl-4 border-l-4 <%= is_candidate ? 'border-yellow-400 dark:border-yellow-600' : 'border-gray-200 dark:border-gray-700' %>">
+          <div class="flex flex-col md:flex-row md:items-center gap-2">
+            <span class="tabular-nums font-medium text-gray-900 dark:text-gray-100 min-w-28">
+              <%= item.session.starts_at.strftime('%H:%M') %> &ndash; <%= item.session.ends_at.strftime('%H:%M') %>
+            </span>
+            <div class="flex-1">
+              <% if is_candidate %>
+                <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 mr-1">
+                  CANDIDATE
+                </span>
+              <% end %>
+              <%= render partial: 'shared/session_filedrop', locals: { session: item.session } %>
+              <%= link_to item.session.title, conference_session_path(item.session.conference, item.session), class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+              <%= render partial: 'shared/session_engelsystem', locals: { session: item.session } %>
+              <span class="text-gray-500 dark:text-gray-400 ml-1">@ <%= item.session.stage.name %></span>
+            </div>
+            <div class="flex items-center space-x-1">
+              <% item.session.assignments.map(&:user).each do |other_user| %>
+                <%= render partial: 'application/user_avatar', locals: { user: other_user } %>
+              <% end %>
+            </div>
           </div>
-          <div class="flex items-center space-x-1">
-            <% item.session.assignments.map(&:user).each do |other_user| %>
-              <%= render partial: 'application/user_avatar', locals: { user: other_user } %>
-            <% end %>
+        </li>
+      <% elsif item_data[:type] == 'standby_block' %>
+        <% standby_block = item_data[:object] %>
+        <li class="<%= standby_block.starts_at < now ? "past" : "future" %> pl-4 border-l-4 border-purple-400 dark:border-purple-600">
+          <div class="flex flex-col md:flex-row md:items-center gap-2">
+            <span class="tabular-nums font-medium text-gray-900 dark:text-gray-100 min-w-28">
+              <%= standby_block.starts_at.strftime('%H:%M') %> &ndash; <%= standby_block.ends_at.strftime('%H:%M') %>
+            </span>
+            <div class="flex-1">
+              <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200 mr-1">
+                STANDBY
+              </span>
+              <span class="text-gray-900 dark:text-gray-100 font-medium">Standby Block</span>
+              <span class="text-gray-500 dark:text-gray-400 ml-1">@ <%= standby_block.conference.name %></span>
+              <% if standby_block.notes.present? %>
+                <span class="text-gray-600 dark:text-gray-300 ml-2 text-sm">(<%= standby_block.notes %>)</span>
+              <% end %>
+            </div>
+            <div class="flex items-center space-x-1">
+              <%= render partial: 'application/user_avatar', locals: { user: standby_block.user } %>
+            </div>
           </div>
-        </div>
-      </li>
+        </li>
+      <% end %>
     <% end %>
   </ul>
 </div>
diff --git a/app/views/assignments/by_user.html.erb b/app/views/assignments/by_user.html.erb
index 0f3e989325fd1ecd04ae92833f05f4c1bce8568c..e7c6e8550d1e778e0a872ca6be5744243eea3aa4 100644
--- a/app/views/assignments/by_user.html.erb
+++ b/app/views/assignments/by_user.html.erb
@@ -56,21 +56,33 @@
       <div class="block" id="listViewTab" role="tabpanel" aria-labelledby="list-tab">
         <div class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 overflow-auto" style="max-height: calc(100vh - 220px);">
           <% 
-            # Combine assignments and candidates (excluding duplicates)
-            all_items = @active_assignments.to_a
+            # Combine assignments, standby blocks, and candidates
+            all_items = []
+            
+            # Add assignments
+            @active_assignments.each do |assignment|
+              all_items << { type: 'assignment', object: assignment, starts_at: assignment.session.starts_at }
+            end
+            
+            # Add standby blocks
+            @active_standby_blocks.each do |standby_block|
+              all_items << { type: 'standby_block', object: standby_block, starts_at: standby_block.starts_at }
+            end
+            
+            # Add candidates (excluding duplicates)
             if @active_candidates
               assigned_session_ids = @active_assignments.map { |a| a.session_id }
               @active_candidates.each do |candidate|
                 unless assigned_session_ids.include?(candidate.session_id)
-                  all_items << candidate
+                  all_items << { type: 'assignment', object: candidate, starts_at: candidate.session.starts_at }
                 end
               end
             end
             
             # Group by date
-            all_items.sort_by { |item| item.session.starts_at }.group_by { |item| item.session.starts_at.strftime('%Y-%m-%d') }.each do |date, items_on_date| 
+            all_items.sort_by { |item| item[:starts_at] }.group_by { |item| item[:starts_at].strftime('%Y-%m-%d') }.each do |date, items_on_date| 
           %>
-            <%= render partial: 'listview_date', locals: { assignments_on_date: items_on_date, date:, now: } %>
+            <%= render partial: 'listview_date', locals: { items_on_date: items_on_date, date:, now: } %>
           <% end %>
         </div>
       </div>
@@ -92,41 +104,76 @@
               </thead>
               <tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">
                 <% 
-                  # Combine assignments and candidates for table view
-                  all_items = @active_assignments.to_a
+                  # Combine assignments, standby blocks, and candidates for table view
+                  all_items = []
+                  
+                  # Add assignments
+                  @active_assignments.each do |assignment|
+                    all_items << { type: 'assignment', object: assignment, starts_at: assignment.session.starts_at }
+                  end
+                  
+                  # Add standby blocks
+                  @active_standby_blocks.each do |standby_block|
+                    all_items << { type: 'standby_block', object: standby_block, starts_at: standby_block.starts_at }
+                  end
+                  
+                  # Add candidates
                   if @active_candidates
                     assigned_session_ids = @active_assignments.map { |a| a.session_id }
                     @active_candidates.each do |candidate|
                       unless assigned_session_ids.include?(candidate.session_id)
-                        all_items << candidate
+                        all_items << { type: 'assignment', object: candidate, starts_at: candidate.session.starts_at }
                       end
                     end
                   end
                   
-                  all_items.sort_by { |item| item.session.starts_at }.each do |item|
-                    is_candidate = item.is_a?(Candidate)
+                  all_items.sort_by { |item| item[:starts_at] }.each do |item_data|
                 %>
-                  <tr class="<%= item.session.ends_at < Time.now ? "past" : "future" %> <%= is_candidate ? 'bg-yellow-50 dark:bg-yellow-900/20' : '' %>">
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.starts_at.strftime('%Y-%m-%d') %></td>
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.starts_at.strftime('%H:%M') %></td>
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.ends_at.strftime('%H:%M') %></td>
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.stage.name %></td>
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-200">
-                      <% if is_candidate %>
-                        <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 mr-1">
-                          CANDIDATE
+                  <% if item_data[:type] == 'assignment' %>
+                    <% item = item_data[:object] %>
+                    <% is_candidate = item.is_a?(Candidate) %>
+                    <tr class="<%= item.session.ends_at < Time.now ? "past" : "future" %> <%= is_candidate ? 'bg-yellow-50 dark:bg-yellow-900/20' : '' %>">
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.starts_at.strftime('%Y-%m-%d') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.starts_at.strftime('%H:%M') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.ends_at.strftime('%H:%M') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= item.session.stage.name %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-200">
+                        <% if is_candidate %>
+                          <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 mr-1">
+                            CANDIDATE
+                          </span>
+                        <% end %>
+                        <%= render partial: 'shared/session_filedrop', locals: { session: item.session } %>
+                        <%= link_to item.session.title, item.session.url, target: "_blank", class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
+                        <%= render partial: 'shared/session_engelsystem', locals: { session: item.session } %>
+                      </td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
+                        <% item.session.assignments.map(&:user).each do |other_user| %>
+                          <%= render partial: 'application/user_avatar', locals: { user: other_user } %>
+                        <% end %>
+                      </td>
+                    </tr>
+                  <% elsif item_data[:type] == 'standby_block' %>
+                    <% standby_block = item_data[:object] %>
+                    <tr class="<%= standby_block.ends_at < Time.now ? "past" : "future" %> bg-purple-50 dark:bg-purple-900/20">
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= standby_block.starts_at.strftime('%Y-%m-%d') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= standby_block.starts_at.strftime('%H:%M') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400"><%= standby_block.ends_at.strftime('%H:%M') %></td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">Standby</td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-200">
+                        <span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200 mr-1">
+                          STANDBY
                         </span>
-                      <% end %>
-                      <%= render partial: 'shared/session_filedrop', locals: { session: item.session } %>
-                      <%= link_to item.session.title, item.session.url, target: "_blank", class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300" %>
-                      <%= render partial: 'shared/session_engelsystem', locals: { session: item.session } %>
-                    </td>
-                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
-                      <% item.session.assignments.map(&:user).each do |other_user| %>
-                        <%= render partial: 'application/user_avatar', locals: { user: other_user } %>
-                      <% end %>
-                    </td>
-                  </tr>
+                        <span class="font-medium">Standby Block</span>
+                        <% if standby_block.notes.present? %>
+                          <span class="text-gray-600 dark:text-gray-300 ml-2 text-sm">(<%= standby_block.notes %>)</span>
+                        <% end %>
+                      </td>
+                      <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
+                        <%= render partial: 'application/user_avatar', locals: { user: standby_block.user } %>
+                      </td>
+                    </tr>
+                  <% end %>
                 <% end %>
               </tbody>
             </table>
diff --git a/app/views/assignments/index.html.erb b/app/views/assignments/index.html.erb
index 06d829ff23810ce10a9c43b94a712c60c23549fd..2375e7524836d7aaa37cc087f16d84a25e6df65e 100644
--- a/app/views/assignments/index.html.erb
+++ b/app/views/assignments/index.html.erb
@@ -5,18 +5,18 @@
   <p>
     Jump to:
     <ul class="flex flex-row flex-wrap">
-    <% @assignments.group_by(&:user).sort_by { |user, _| user.name }.each_with_index do |(user, assignments), index| %>
+    <% @assignments_and_standby.group_by { |item| item[:user] }.sort_by { |user, _| user.name }.each_with_index do |(user, items), index| %>
       <li>
         <%= link_to user.name, "#" + dom_id(user), class: index == 0 ? "" : "border-l-2 border-gray-300 pl-2 ml-2" %>
       </li>
     <% end %>
     </ul>
   </p>
-  <% @assignments.group_by(&:user).each do |user, assignments| %>
+  <% @assignments_and_standby.group_by { |item| item[:user] }.each do |user, items| %>
     <div class="my-4">
       <h4 class="text-xl my-2" id="<%= dom_id(user) %>"><%= link_to user.name, user_assignments_path(user) %> <span class="font-normal"><%= link_to user_assignments_path(user, format: 'ics') do %><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="ml-2 mb-1 size-4 inline-block stroke-slate-400 fill-slate-400"><path fill-rule="evenodd" d="M5.75 2a.75.75 0 01.75.75V4h7V2.75a.75.75 0 011.5 0V4h.25A2.75 2.75 0 0118 6.75v8.5A2.75 2.75 0 0115.25 18H4.75A2.75 2.75 0 012 15.25v-8.5A2.75 2.75 0 014.75 4H5V2.75A.75.75 0 015.75 2zm-1 5.5c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h10.5c.69 0 1.25-.56 1.25-1.25v-6.5c0-.69-.56-1.25-1.25-1.25H4.75z" clip-rule="evenodd"></path></svg><% end %></span></h4>
-        <% assignments.group_by { |a| a.session.starts_at.strftime('%Y-%m-%d') }.each do |date, assignments_on_date| %>
-          <%= render partial: 'listview_date', locals: { assignments_on_date:, date:, now: } %>
+        <% items.group_by { |item| item[:starts_at].strftime('%Y-%m-%d') }.each do |date, items_on_date| %>
+          <%= render partial: 'listview_date', locals: { items_on_date:, date:, now: } %>
         <% end %>
     </div>
   <% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 7e12222a232a4683cfabce6a4f04e531e2996ad8..4295bd94d7b55108194e585a1e0aad4ad10f561f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -32,6 +32,11 @@ Rails.application.routes.draw do
         patch :update_relevant_stages
         patch :toggle_active
       end
+      resources :standby_blocks do
+        collection do
+          post :create_from_suggestion
+        end
+      end
     end
   end
 
diff --git a/db/migrate/20250525110547_create_standby_blocks.rb b/db/migrate/20250525110547_create_standby_blocks.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4a7f7071770c89ddf8cf4cde8461c9e7d98de014
--- /dev/null
+++ b/db/migrate/20250525110547_create_standby_blocks.rb
@@ -0,0 +1,18 @@
+class CreateStandbyBlocks < ActiveRecord::Migration[8.0]
+  def change
+    create_table :standby_blocks do |t|
+      t.references :user, null: false, foreign_key: true
+      t.references :conference, null: false, foreign_key: true
+      t.datetime :starts_at, null: false
+      t.datetime :ends_at, null: false
+      t.string :status, default: 'active', null: false
+      t.text :notes
+
+      t.timestamps
+    end
+    
+    add_index :standby_blocks, [:user_id, :starts_at]
+    add_index :standby_blocks, [:conference_id, :starts_at]
+    add_index :standby_blocks, :status
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 504627e6f99d209a0a13fb0cc1ed4e9c684f4129..ccb54b34e309fbf56916582c220cb46535a3e743 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[8.0].define(version: 2025_05_24_182451) do
+ActiveRecord::Schema[8.0].define(version: 2025_05_25_110547) do
   create_table "assignments", force: :cascade do |t|
     t.integer "user_id", null: false
     t.integer "session_id", null: false
@@ -360,6 +360,22 @@ ActiveRecord::Schema[8.0].define(version: 2025_05_24_182451) do
     t.index ["ref_id", "conference_id"], name: "index_stages_on_ref_id_and_conference_id", unique: true
   end
 
+  create_table "standby_blocks", force: :cascade do |t|
+    t.integer "user_id", null: false
+    t.integer "conference_id", null: false
+    t.datetime "starts_at", null: false
+    t.datetime "ends_at", null: false
+    t.string "status", default: "active", null: false
+    t.text "notes"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["conference_id", "starts_at"], name: "index_standby_blocks_on_conference_id_and_starts_at"
+    t.index ["conference_id"], name: "index_standby_blocks_on_conference_id"
+    t.index ["status"], name: "index_standby_blocks_on_status"
+    t.index ["user_id", "starts_at"], name: "index_standby_blocks_on_user_id_and_starts_at"
+    t.index ["user_id"], name: "index_standby_blocks_on_user_id"
+  end
+
   create_table "system_settings", force: :cascade do |t|
     t.string "key", null: false
     t.text "value"
@@ -421,6 +437,8 @@ ActiveRecord::Schema[8.0].define(version: 2025_05_24_182451) do
   add_foreign_key "solid_queue_scheduled_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
   add_foreign_key "speakers", "conferences"
   add_foreign_key "stages", "conferences"
+  add_foreign_key "standby_blocks", "conferences"
+  add_foreign_key "standby_blocks", "users"
   add_foreign_key "user_roles", "roles"
   add_foreign_key "user_roles", "users"
 end