diff --git a/Backend/Migrations/20260630062401_RefreshLiveDemoPublicContent.Designer.cs b/Backend/Migrations/20260630062401_RefreshLiveDemoPublicContent.Designer.cs
new file mode 100644
index 0000000..4f39062
--- /dev/null
+++ b/Backend/Migrations/20260630062401_RefreshLiveDemoPublicContent.Designer.cs
@@ -0,0 +1,1620 @@
+//
+using System;
+using Backend.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Backend.Migrations
+{
+ [DbContext(typeof(AwardsDbContext))]
+ [Migration("20260630062401_RefreshLiveDemoPublicContent")]
+ partial class RefreshLiveDemoPublicContent
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.11")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Backend.Domain.AdminAuditEntry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ActionType")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("AdminTwitchUserId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("CreatedFromIp")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("EntityType")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("MetadataJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Summary")
+ .IsRequired()
+ .HasMaxLength(240)
+ .HasColumnType("character varying(240)");
+
+ b.Property("UserAgent")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.HasKey("Id");
+
+ b.ToTable("AdminAuditEntries");
+ });
+
+ modelBuilder.Entity("Backend.Domain.ArchivedWinner", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Category")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Subcategory")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("WinnerName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("WinnerUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("Year")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Year", "Category", "Subcategory")
+ .IsUnique();
+
+ b.ToTable("ArchivedWinners");
+ });
+
+ modelBuilder.Entity("Backend.Domain.AwardResult", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CandidateId")
+ .HasColumnType("integer");
+
+ b.Property("CategoryId")
+ .HasColumnType("integer");
+
+ b.Property("CategoryName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CandidateId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("SeasonId", "CategoryId")
+ .IsUnique();
+
+ b.ToTable("Results");
+ });
+
+ modelBuilder.Entity("Backend.Domain.Candidate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AcceptanceNote")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("AcceptanceStatus")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(30)
+ .HasColumnType("character varying(30)")
+ .HasDefaultValue("open");
+
+ b.Property("CategoryId")
+ .HasColumnType("integer");
+
+ b.Property("ChannelSlug")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("ClipCompilationPlatform")
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)");
+
+ b.Property("ClipCompilationTitle")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.Property("ClipCompilationUrl")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ClipEmbedStatus")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(30)
+ .HasColumnType("character varying(30)")
+ .HasDefaultValue("unchecked");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("NominationTally")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0);
+
+ b.Property("Platform")
+ .IsRequired()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("StreamerIdentityId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("SeasonId");
+
+ b.HasIndex("StreamerIdentityId");
+
+ b.ToTable("Candidates");
+ });
+
+ modelBuilder.Entity("Backend.Domain.Category", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("GroupName")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("MaxNomineesPerUser")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("Slug")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SortOrder")
+ .HasColumnType("integer");
+
+ b.Property("ViewerRangeMax")
+ .HasColumnType("integer");
+
+ b.Property("ViewerRangeMin")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SeasonId", "Slug")
+ .IsUnique();
+
+ b.ToTable("Categories");
+ });
+
+ modelBuilder.Entity("Backend.Domain.ClipSubmission", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CandidateId")
+ .HasColumnType("integer");
+
+ b.Property("CategoryId")
+ .HasColumnType("integer");
+
+ b.Property("ClipUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("CreatedFromIp")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("Creator")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("Platform")
+ .IsRequired()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)");
+
+ b.Property("ReviewNote")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReviewedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ReviewedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)");
+
+ b.Property("SubmittedByTwitchId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CandidateId");
+
+ b.HasIndex("SeasonId", "Status");
+
+ b.ToTable("ClipSubmissions");
+ });
+
+ modelBuilder.Entity("Backend.Domain.Nomination", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AvgViewers")
+ .HasColumnType("integer");
+
+ b.Property("CandidateId")
+ .HasColumnType("integer");
+
+ b.Property("CandidateText")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("CategoryGroupName")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)")
+ .HasDefaultValue("");
+
+ b.Property("CategoryId")
+ .HasColumnType("integer");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("FollowersGained")
+ .HasColumnType("integer");
+
+ b.Property("HoursStreamed")
+ .HasColumnType("integer");
+
+ b.Property("HoursWatched")
+ .HasColumnType("integer");
+
+ b.Property("PeakViewers")
+ .HasColumnType("integer");
+
+ b.Property("ResolvedChannel")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("ResolvedPlatform")
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)");
+
+ b.Property("ReviewNote")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReviewedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ReviewedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)");
+
+ b.Property("StreamUrl")
+ .HasMaxLength(300)
+ .HasColumnType("character varying(300)");
+
+ b.Property("StreamerIdentityId")
+ .HasColumnType("integer");
+
+ b.Property("SubmittedByTwitchId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SuggestedCategoryId")
+ .HasColumnType("integer");
+
+ b.Property("TrackerCheckedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("TrackerStatus")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasDefaultValue("pending");
+
+ b.Property("TrackingFlagsJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.Property("TrackingReviewNote")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("TrackingReviewStatus")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(30)
+ .HasColumnType("character varying(30)")
+ .HasDefaultValue("clear");
+
+ b.Property("TrackingReviewedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("TrackingReviewedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CandidateId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("StreamerIdentityId");
+
+ b.HasIndex("SuggestedCategoryId");
+
+ b.HasIndex("SeasonId", "Status");
+
+ b.HasIndex("SeasonId", "CategoryGroupName", "Status");
+
+ b.HasIndex("SeasonId", "StreamerIdentityId", "CategoryGroupName");
+
+ b.ToTable("Nominations");
+ });
+
+ modelBuilder.Entity("Backend.Domain.RiskFlag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("CreatedFromIp")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("MetadataJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ReviewNote")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReviewedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ReviewedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("Severity")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)");
+
+ b.Property("Source")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)");
+
+ b.Property("Summary")
+ .IsRequired()
+ .HasMaxLength(240)
+ .HasColumnType("character varying(240)");
+
+ b.Property("TwitchUserId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("UserAgent")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SeasonId");
+
+ b.ToTable("RiskFlags");
+ });
+
+ modelBuilder.Entity("Backend.Domain.Season", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CurrentPhase")
+ .IsRequired()
+ .HasMaxLength(60)
+ .HasColumnType("character varying(60)");
+
+ b.Property("IsCommunityOnly")
+ .HasColumnType("boolean");
+
+ b.Property("IsCurrent")
+ .HasColumnType("boolean");
+
+ b.Property("IsDemo")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(160)
+ .HasColumnType("character varying(160)");
+
+ b.Property("NominationEndsAt")
+ .HasColumnType("date");
+
+ b.Property("NominationStartsAt")
+ .HasColumnType("date");
+
+ b.Property("ReviewEndsAt")
+ .HasColumnType("date");
+
+ b.Property("ReviewStartsAt")
+ .HasColumnType("date");
+
+ b.Property("ShowDate")
+ .HasColumnType("date");
+
+ b.Property("ShowStartsAt")
+ .HasColumnType("time without time zone");
+
+ b.Property("SubcategoryTemplatesJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.Property("VotingEndsAt")
+ .HasColumnType("date");
+
+ b.Property("VotingStartsAt")
+ .HasColumnType("date");
+
+ b.Property("WinnersPublishedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("WinnersPublishedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("WorkflowRulesJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.Property("Year")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Year")
+ .IsUnique();
+
+ b.ToTable("Seasons");
+ });
+
+ modelBuilder.Entity("Backend.Domain.ShowactApplication", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ArtistName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("ContactDiscord")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("ContactEmail")
+ .IsRequired()
+ .HasMaxLength(180)
+ .HasColumnType("character varying(180)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("CreatedFromIp")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("FieldResponsesJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("PerformanceType")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("PlatformUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReferenceUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReviewNote")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("ReviewedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ReviewedByTwitchId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)");
+
+ b.Property("TechnicalNotes")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("UserAgent")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SeasonId", "Status");
+
+ b.ToTable("ShowactApplications");
+ });
+
+ modelBuilder.Entity("Backend.Domain.SiteSettings", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AwardsSectionDescription")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("AwardsSectionTitle")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ClipAdminMenuVisible")
+ .HasColumnType("boolean");
+
+ b.Property("ClipReviewEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("ClipSubmissionDisabledMessage")
+ .IsRequired()
+ .HasMaxLength(240)
+ .HasColumnType("character varying(240)");
+
+ b.Property("ClipSubmissionsEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("ContactContent")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ContactUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("DemoLoginDisplayName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("DemoLoginEmail")
+ .IsRequired()
+ .HasMaxLength(180)
+ .HasColumnType("character varying(180)");
+
+ b.Property("DemoLoginEnabled")
+ .HasColumnType("boolean");
+
+ b.Property("DemoLoginManagedByDatabase")
+ .HasColumnType("boolean");
+
+ b.Property("DemoLoginPasswordHash")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("DemoLoginPasswordSalt")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("DemoLoginTwitchUserId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("FaqJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("HostArtistName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("HostDisplayName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("HostImageContentType")
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("HostImageData")
+ .HasColumnType("bytea");
+
+ b.Property("HostImageUpdatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("HostTagline")
+ .IsRequired()
+ .HasMaxLength(160)
+ .HasColumnType("character varying(160)");
+
+ b.Property("ImprintContent")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ImprintUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("MaintenanceMessage")
+ .IsRequired()
+ .HasMaxLength(600)
+ .HasColumnType("character varying(600)");
+
+ b.Property("MaintenanceModeEnabled")
+ .HasColumnType("boolean");
+
+ b.Property("MaintenanceTitle")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("NewsletterUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("NominationLinkBlacklistJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.Property("PrivacyEmail")
+ .IsRequired()
+ .HasMaxLength(160)
+ .HasColumnType("character varying(160)");
+
+ b.Property("PrivacyPolicyContent")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("PrivacyPolicyUpdatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("PrivacyPolicyUpdatedBy")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("RiskRulesJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SessionIdleTimeoutHours")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(3);
+
+ b.Property("ShareDiscordUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ShareXUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ShowactApplicationDisabledMessage")
+ .IsRequired()
+ .HasMaxLength(240)
+ .HasColumnType("character varying(240)");
+
+ b.Property("ShowactApplicationEndsAt")
+ .HasColumnType("date");
+
+ b.Property("ShowactApplicationStartsAt")
+ .HasColumnType("date");
+
+ b.Property("ShowactApplicationsEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("ShowactFormSchemaJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ShowactsContent")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("");
+
+ b.Property("ShowactsUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("SocialLinksJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SponsorsContent")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SponsorsUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("SponsorsVisible")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("StreamBannerCompletedButtonLabel")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("StreamBannerCompletedButtonUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("StreamBannerCompletedEyebrow")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("StreamBannerCompletedText")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("StreamBannerCompletedTitle")
+ .IsRequired()
+ .HasMaxLength(160)
+ .HasColumnType("character varying(160)");
+
+ b.Property("StreamBannerEyebrow")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("StreamBannerLiveButtonLabel")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("StreamBannerLiveButtonUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("StreamBannerLockedButtonLabel")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("StreamBannerText")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("StreamBannerTitle")
+ .IsRequired()
+ .HasMaxLength(160)
+ .HasColumnType("character varying(160)");
+
+ b.Property("StreamBannerUseCompletedContent")
+ .HasColumnType("boolean");
+
+ b.Property("SubcategoriesSectionDescription")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SubcategoriesSectionTitle")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TrackingReviewNotes")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TrackingRulesJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.Property("TwitchAuthManagedByDatabase")
+ .HasColumnType("boolean");
+
+ b.Property("TwitchClientId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("TwitchClientSecret")
+ .IsRequired()
+ .HasMaxLength(180)
+ .HasColumnType("character varying(180)");
+
+ b.Property("TwitchRedirectUri")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("TwitchScope")
+ .IsRequired()
+ .HasMaxLength(300)
+ .HasColumnType("character varying(300)");
+
+ b.Property("ViewerStatsProviderBaseUrl")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("character varying(400)");
+
+ b.Property("WorkflowRulesJson")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("[]");
+
+ b.HasKey("Id");
+
+ b.ToTable("SiteSettings");
+ });
+
+ modelBuilder.Entity("Backend.Domain.Sponsor", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("IsVisible")
+ .HasColumnType("boolean");
+
+ b.Property("LogoUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("SeasonId")
+ .HasColumnType("integer");
+
+ b.Property("SortOrder")
+ .HasColumnType("integer");
+
+ b.Property("Tier")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("character varying(80)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("WebsiteUrl")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SeasonId", "IsVisible", "SortOrder");
+
+ b.ToTable("Sponsors");
+ });
+
+ modelBuilder.Entity("Backend.Domain.StreamerIdentity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("LastResolvedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Login")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("NormalizedKey")
+ .IsRequired()
+ .HasMaxLength(180)
+ .HasColumnType("character varying(180)");
+
+ b.Property("Platform")
+ .IsRequired()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)");
+
+ b.Property("ProfileUrl")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedKey")
+ .IsUnique();
+
+ b.ToTable("StreamerIdentities");
+ });
+
+ modelBuilder.Entity("Backend.Domain.TeamMember", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("BoundTwitchDisplayName")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("BoundTwitchUserId")
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("CreatedByTwitchId")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("character varying(120)");
+
+ b.Property("IsActive")
+ .HasColumnType("boolean");
+
+ b.Property