--->
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/app/views/content/changelog/_date_changes.html.erb b/app/views/content/changelog/_date_changes.html.erb
new file mode 100644
index 00000000..091f01a7
--- /dev/null
+++ b/app/views/content/changelog/_date_changes.html.erb
@@ -0,0 +1,129 @@
+
+<%
+ # Process the events to get organized change data
+ changed_attributes = Attribute.where(id: events.select { |event| event.content_type == 'Attribute' }.map(&:content_id))
+ changed_fields = AttributeField.where(id: changed_attributes.pluck(:attribute_field_id)).includes([:attribute_category])
+%>
+
+
+ <% events.reverse.each_with_index do |change_event, event_index| %>
+ <%
+ # Skip events without users (old data)
+ next if change_event.user.nil?
+ %>
+
+
+
+
+
+ <% if change_event.user.avatar.attached? %>
+ <%= image_tag change_event.user.avatar, class: "w-full h-full rounded-full object-cover" %>
+ <% else %>
+ person
+ <% end %>
+
\ No newline at end of file
diff --git a/app/views/content/changelog/_header.html.erb b/app/views/content/changelog/_header.html.erb
new file mode 100644
index 00000000..18615a80
--- /dev/null
+++ b/app/views/content/changelog/_header.html.erb
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+ <%= @serialized_content.class_icon %>
+
+
+
+ Your Creative Journey
+
+
+ Every change you've made to <%= @serialized_content.name %>
+
+ <% @change_intensity.each do |week_data| %>
+ <%
+ intensity_level = case week_data[:change_count]
+ when 0 then 'bg-gray-100'
+ when 1..3 then 'bg-green-200'
+ when 4..7 then 'bg-green-400'
+ when 8..15 then 'bg-green-600'
+ else 'bg-green-800'
+ end
+ %>
+
+ <%= longest_streak[:length] %> consecutive days
+ from <%= longest_streak[:start_date].strftime('%B %d') %> to <%= longest_streak[:end_date].strftime('%B %d, %Y') %>
+
+
+
+
+ <% end %>
+
+
+
\ No newline at end of file
diff --git a/app/views/content/changelog/_timeline.html.erb b/app/views/content/changelog/_timeline.html.erb
new file mode 100644
index 00000000..d7bbf97c
--- /dev/null
+++ b/app/views/content/changelog/_timeline.html.erb
@@ -0,0 +1,188 @@
+
+
+
+
+
+
Change Timeline
+
Your creative journey, day by day
+ <% if @paginated_events.total_pages > 1 %>
+
+ Showing page <%= @paginated_events.current_page %> of <%= @paginated_events.total_pages %>
+ (<%= @paginated_events.total_entries %> total changes)
+
+ <% end %>
+
+
+
+
+
+
+
+ <% if @grouped_changes.empty? %>
+
+
+
+ history
+
+
No Changes Yet
+
Start editing your <%= @serialized_content.class_name.downcase %> to see your creative journey unfold here.
+
+ <% else %>
+
+
+ <% @grouped_changes.each_with_index do |group, index| %>
+
+ <%= @serialized_content.name %> was created
+ <% if @content.user.present? %>
+ by <%= link_to @content.user.display_name, @content.user, class: "font-medium text-green-700 hover:text-green-800" %>
+ <% end %>
+
+ <%= distance_of_time_in_words(@content.created_at, Time.current) %> ago
+ (<%= @content.created_at.strftime('%B %d, %Y at %I:%M %p') %>)
+
+
+
+
+
+
+
+
+ <% if @paginated_events.total_pages > 1 %>
+
+
+
+ <% if @paginated_events.previous_page %>
+ <%= link_to url_for(params.permit(:page).merge(page: @paginated_events.previous_page)),
+ class: "flex items-center px-4 py-2 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors text-gray-700" do %>
+ chevron_left
+ Previous
+ <% end %>
+ <% end %>
+
+
+ Page <%= @paginated_events.current_page %> of <%= @paginated_events.total_pages %>
+
+
+ <% if @paginated_events.next_page %>
+ <%= link_to url_for(params.permit(:page).merge(page: @paginated_events.next_page)),
+ class: "flex items-center px-4 py-2 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors text-gray-700" do %>
+ Next
+ chevron_right
+ <% end %>
+ <% end %>
+
+
+
+ <% end %>
+
+
+
\ No newline at end of file
diff --git a/app/views/content/changelog/field_change/_name.html.erb b/app/views/content/changelog/field_change/_name.html.erb
index bb43a455..0bf5f99c 100644
--- a/app/views/content/changelog/field_change/_name.html.erb
+++ b/app/views/content/changelog/field_change/_name.html.erb
@@ -1,14 +1,41 @@
-
\ No newline at end of file
diff --git a/app/views/content/changelog/field_change/_tags.html.erb b/app/views/content/changelog/field_change/_tags.html.erb
index 2e9a7a91..f938fdae 100644
--- a/app/views/content/changelog/field_change/_tags.html.erb
+++ b/app/views/content/changelog/field_change/_tags.html.erb
@@ -1,41 +1,66 @@
-
+ <% if new_value == ContentChangeEvent::BLANK_PLACEHOLDER %>
+ No tags
+ <% elsif new_value == ContentChangeEvent::PRIVATE_PLACEHOLDER %>
+ Private field
+ <% else %>
+
+ <% new_value.split(PageTag::SUBMISSION_DELIMITER).each do |tag| %>
+ <% if user_signed_in? && @content.user == current_user %>
+ <%= link_to send("page_tag_#{@content.class.name.downcase.pluralize}_path", slug: PageTagService.slug_for(tag)),
+ class: "inline-flex items-center px-3 py-1 rounded-full text-sm font-medium bg-green-100 text-green-800 hover:bg-green-200 transition-colors" do %>
+ tag
+ <%= tag %>
+ <% end %>
+ <% else %>
+
+ tag
+ <%= tag %>
+
+ <% end %>
<% end %>
- <% else %>
-
- <% end %>
+
<% end %>
-
\ No newline at end of file
diff --git a/app/views/content/changelog/field_change/_text_area.html.erb b/app/views/content/changelog/field_change/_text_area.html.erb
index bb43a455..3b5f1571 100644
--- a/app/views/content/changelog/field_change/_text_area.html.erb
+++ b/app/views/content/changelog/field_change/_text_area.html.erb
@@ -1,14 +1,74 @@
-
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/content/changelog/field_change/_universe.html.erb b/app/views/content/changelog/field_change/_universe.html.erb
index 01087843..8b87c856 100644
--- a/app/views/content/changelog/field_change/_universe.html.erb
+++ b/app/views/content/changelog/field_change/_universe.html.erb
@@ -1,22 +1,47 @@
-