diff --git a/app/assets/tailwind/application.css b/app/assets/tailwind/application.css index 53356397..8b60542e 100644 --- a/app/assets/tailwind/application.css +++ b/app/assets/tailwind/application.css @@ -506,6 +506,17 @@ } } +.markdown-sm { + p { + @apply text-sm; + @apply my-2; + } + ul, + ol { + @apply text-sm; + } +} + /* Marksmith editor overrides to match app theme */ @layer components { /* Increase specificity and force overrides against gem utilities */ diff --git a/app/controllers/admin/design_reviews_controller.rb b/app/controllers/admin/design_reviews_controller.rb index bc4b9564..2863382c 100644 --- a/app/controllers/admin/design_reviews_controller.rb +++ b/app/controllers/admin/design_reviews_controller.rb @@ -72,7 +72,7 @@ def index end def show - @project = Project.includes(:design_review_claimed_by).find(params[:id]) + @project = Project.includes(:design_review_claimed_by, design_reviews: :reviewer).find(params[:id]) not_found unless @project had_any_claim = Reviews::ClaimProject.has_any_claim?(reviewer: current_user, type: :design) diff --git a/app/models/project.rb b/app/models/project.rb index fd518bf0..c0c6fdf9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -117,7 +117,7 @@ def self.airtable_sync_field_mappings enum :project_type, { custom: "custom", led: "led" - } + }, prefix: true enum :review_status, { awaiting_idv: "awaiting_idv", diff --git a/app/views/admin/design_reviews/show.html.erb b/app/views/admin/design_reviews/show.html.erb index 24147281..ba881232 100644 --- a/app/views/admin/design_reviews/show.html.erb +++ b/app/views/admin/design_reviews/show.html.erb @@ -28,32 +28,32 @@ <%= render "shared/card" do %> - <% if @project.display_banner %> -
- <%= image_tag url_for(@project.display_banner), class: "w-full h-72 object-cover rounded-lg" %> -
- <% end %> + <% if @project.display_banner %> +
+ <%= image_tag url_for(@project.display_banner), class: "w-full h-72 object-cover rounded-lg" %> +
+ <% end %>

Project #<%= @project.id %>, <%= link_to @project.title, admin_project_path(@project), class: "underline" %>

By <%= render "shared/user_inline", user: @project.user, admin_view: true %> on <%= @project.created_at.strftime("%B %d, %Y") %>

-
- <% if @project.tier.present? %> - <% tier_style = @project.tier == "1" ? "bg-bp-danger text-bp-darker" : (@project.tier == "2" ? "bg-bp-warning text-bp-darker" : (@project.tier == "3" ? "bg-bp-success text-bp-darker" : "bg-bp-dark text-white")) %> -

Tier: <%= @project.tier %>

- <% end %> -
-

Requesting: $<%= sprintf("%.2f", @project.funding_needed_cents / 100.0) %>

- <% hours = (@project.journal_entries.sum(:duration_seconds) / 3600.0).round(1) %> -
-

Type: <%= @project.ysws || "Custom" %>

-

Hours: <%= hours %>h

- <%#

CPH: <%= hours > 0 ? sprintf("$%.2f", (@project.funding_needed_cents / 100.0) / hours) : "–"

%> - <% if @project.ysws == "hackpad" && @project.approx_hour.present? %> -

Self-reported: <%= @project.approx_hour %>h

- <% end %> +
+ <% if @project.tier.present? %> + <% tier_style = @project.tier == "1" ? "bg-bp-danger text-bp-darker" : (@project.tier == "2" ? "bg-bp-warning text-bp-darker" : (@project.tier == "3" ? "bg-bp-success text-bp-darker" : "bg-bp-dark text-white")) %> +

Tier: <%= @project.tier %>

+ <% end %> +
+

Requesting: $<%= sprintf("%.2f", @project.funding_needed_cents / 100.0) %>

+ <% hours = (@project.journal_entries.sum(:duration_seconds) / 3600.0).round(1) %> +
+

Type: <%= @project.ysws || "Custom" %>

+

Hours: <%= hours %>h

+ <%#

CPH: <%= hours > 0 ? sprintf("$%.2f", (@project.funding_needed_cents / 100.0) / hours) : "–"

%> + <% if @project.ysws == "hackpad" && @project.approx_hour.present? %> +

Self-reported: <%= @project.approx_hour %>h

+ <% end %>
@@ -87,41 +87,116 @@ <% end %> <%= render "shared/card" do %>

Previous Reviews

-
+
<% @project.design_reviews.order(created_at: :desc).each do |review| %> -
+
+ border-bp-success + <% elsif review.result == "returned" %> + border-bp-warning + <% elsif review.result == "rejected" %> + border-bp-danger + <% else %> + border-white/60 + <% end %> + + border-2 + ">
- <% if review.invalidated? %> -

OUTDATED

+
+
+ <% if review.invalidated? %> + OUTDATED + <% end %> +
+
+

Reviewed by: <%= render "shared/user_inline", user: review.reviewer, admin_view: true %>

+
+
+ <% if review.result == "approved" %> +

Result: Approved

+ <% elsif review.result == "returned" %> +

Result: Returned

+ <% elsif review.result == "rejected" %> +

Result: Permanently Rejected

+ <% else %> +

Result: Unknown

+ <% end %> + <% local_time = review.created_at.in_time_zone(current_user.timezone_raw || 'UTC') %> +

">Reviewed <%= c_time_ago_in_words(review.created_at) %> ago

+
+
+ + <% if review.hours_override %> +

Hours override: <%= review.hours_override %>

<% end %> - <% if review.admin_review? %> -

ADMIN

+ <% if review.tier_override %> +

Tier override: <%= review.tier_override %>

<% end %> -

Reviewed by: <%= render "shared/user_inline", user: User.find(review.reviewer_id), admin_view: true %>

- <% if review.result == "approved" %> -

Result: Approved

- <% elsif review.result == "returned" %> -

Result: Returned

- <% elsif review.result == "rejected" %> -

Result: Permanently Rejected

- <% else %> -

Result: Unknown

+ <% if review.grant_override_cents %> +

Grant override: $<%= sprintf("%.2f", review.grant_override_cents / 100.0) %>

<% end %> -

Hours override: <%= review.hours_override || "N/A" %>

-

Tier override: <%= review.tier_override || "N/A" %>

-

Grant override: <%= review.grant_override_cents ? "$#{sprintf("%.2f", review.grant_override_cents / 100.0)}" : "N/A" %>

-

Feedback: <%= review.feedback.present? ? review.feedback : "No feedback given" %>

-

Reason: <%= review.reason.present? ? review.reason : "No reason given" %>

-

Reviewed at: <%= review.created_at.strftime("%B %d, %Y at %I:%M %p") %>

-
-
-

Frozen data:

-

Funding: <%= review.frozen_funding_needed_cents.present? ? sprintf("%.2f", review.frozen_funding_needed_cents / 100.0) : "Unknown" %>

-

Tier: <%= review.frozen_tier.present? ? review.frozen_tier : "Unknown" %>

-

Hours: <%= review.frozen_duration_seconds.present? ? review.frozen_duration_seconds / 3600.0 : "Unknown" %>

-

Journal entries: <%= review.frozen_entry_count.present? ? review.frozen_entry_count : "Unknown" %>

-

Note to reviewer: <%= review.frozen_reviewer_note.present? ? review.frozen_reviewer_note : "None" %>

+
+

Feedback:

+ <% if review.feedback.present? %> +
+ <%= sanitize_marksmith_html(Marksmith::Renderer.new(body: review.feedback, base_url: "http://localhost:3000").render) %> +
+ <% else %> +

No feedback given

+ <% end %> +
+
+

Reason:

+ <% if review.reason.present? %> +
+ <%= sanitize_marksmith_html(Marksmith::Renderer.new(body: review.reason, base_url: "http://localhost:3000").render) %> +
+ <% else %> +

No reason given

+ <% end %> +
+ + +
+
+
+

Note to reviewer:

+ <% if review.frozen_reviewer_note.present? %> +
+ <%= sanitize_marksmith_html(Marksmith::Renderer.new(body: review.frozen_reviewer_note, base_url: "http://localhost:3000").render) %> +
+ <% else %> +

No note given

+ <% end %> +
+
+
Funding
+
Tier
+
Hours
+
Journal entries
+
+

$<%= review.frozen_funding_needed_cents.present? ? sprintf("%.2f", review.frozen_funding_needed_cents / 100.0) : "Unknown" %>

+
+
+

<%= review.frozen_tier.present? ? review.frozen_tier : "Unknown" %>

+
+
+

<%= review.frozen_duration_seconds.present? ? review.frozen_duration_seconds / 3600.0 : "Unknown" %>h

+
+
+

<%= review.frozen_entry_count.present? ? review.frozen_entry_count : "Unknown" %>

+
+
+
+
+
+
<% end %>
@@ -131,7 +206,7 @@ <% if @project.reviewer_note.present? %> <%= render "shared/card" do %> -

Note from Author

+

Note to reviewer

<%= @project.reviewer_note %>

<% end %> <% end %> @@ -190,8 +265,8 @@
Show Entire Journal
- <% base_url = Rails.application.routes.default_url_options[:host] || "localhost:3000" %> - <%= sanitize_marksmith_html(Marksmith::Renderer.new(body: @project.generate_journal(true), base_url: "http://#{base_url}").render) %> + <% base_url = Rails.application.routes.default_url_options[:host] || "localhost:3000" %> + <%= sanitize_marksmith_html(Marksmith::Renderer.new(body: @project.generate_journal(true), base_url: "http://#{base_url}").render) %>
@@ -201,7 +276,7 @@ <%= render "shared/card" do %>

Cart Screenshots

-

Requesting: $<%= sprintf("%.2f", @project.funding_needed_cents / 100.0) %>

+

Requesting: $<%= sprintf("%.2f", @project.funding_needed_cents / 100.0) %>

<% if @project.cart_screenshots.attached? %>
@@ -231,47 +306,47 @@
<% end %>
> - <%= form_with model: @design_review, url: admin_design_review_create_path(@project), method: :post, html: { class: "space-y-6" } do |f| %> - <%= hidden_field_tag :ysws_type, params[:ysws_type] if params[:ysws_type].present? %> -
- <%= f.label :hours_override, "Hours Override", class: "block text-xl font-medium" %> - <%= f.number_field :hours_override, step: 0.01, placeholder: "Leave blank to use calculated hours (#{@project.journal_entries.sum(:duration_seconds) / 3600.0})", class: "input px-3 mt-1 block w-full" %> -
- -
- <%= f.label :tier_override, "Tier Override", class: "block text-xl font-medium" %> - <%= f.select :tier_override, Project.tier_options, { include_blank: "Leave blank for default tier (#{@project.tier})" }, class: "input px-3 mt-1 block w-full" %> -
+ <%= form_with model: @design_review, url: admin_design_review_create_path(@project), method: :post, html: { class: "space-y-6" } do |f| %> + <%= hidden_field_tag :ysws_type, params[:ysws_type] if params[:ysws_type].present? %> +
+ <%= f.label :hours_override, "Hours Override", class: "block text-xl font-medium" %> + <%= f.number_field :hours_override, step: 0.01, placeholder: "Leave blank to use calculated hours (#{@project.journal_entries.sum(:duration_seconds) / 3600.0})", class: "input px-3 mt-1 block w-full" %> +
-
- <%= f.label :grant_override_cents, "Grant Override (cents)", class: "block text-xl font-medium" %> - <%= f.number_field :grant_override_cents, placeholder: "Leave blank for default (#{@project.funding_needed_cents})", class: "input px-3 mt-1 block w-full" %> -
+
+ <%= f.label :tier_override, "Tier Override", class: "block text-xl font-medium" %> + <%= f.select :tier_override, Project.tier_options, { include_blank: "Leave blank for default tier (#{@project.tier})" }, class: "input px-3 mt-1 block w-full" %> +
- <% if current_user.admin? %>
- <%= f.label :ysws, "Guide Override", class: "block text-xl font-medium" %> - <%= f.select :ysws, Project.guide_options, { selected: @project.ysws || "none", include_blank: false }, class: "input px-3 mt-1 block w-full" %> + <%= f.label :grant_override_cents, "Grant Override (cents)", class: "block text-xl font-medium" %> + <%= f.number_field :grant_override_cents, placeholder: "Leave blank for default (#{@project.funding_needed_cents})", class: "input px-3 mt-1 block w-full" %>
- <% end %> -
- <%= f.label :reason, "Internal Justification", class: "block text-xl font-medium" %> - <%= f.text_area :reason, rows: 4, placeholder: "Justify your decision (why you approved/denied)", class: "input px-3 mt-1 block w-full", required: false %> -
+ <% if current_user.admin? %> +
+ <%= f.label :ysws, "Guide Override", class: "block text-xl font-medium" %> + <%= f.select :ysws, Project.guide_options, { selected: @project.ysws || "none", include_blank: false }, class: "input px-3 mt-1 block w-full" %> +
+ <% end %> -
- <%= f.label :feedback, "Feedback for author (MANDATORY)", class: "block text-xl font-medium" %> - <%= f.text_area :feedback, rows: 4, placeholder: "Give feedback for the author of the project!", class: "input px-3 mt-1 block w-full", required: true %> -
+
+ <%= f.label :reason, "Internal Justification", class: "block text-xl font-medium" %> + <%= f.text_area :reason, rows: 4, placeholder: "Justify your decision (why you approved/denied)", class: "input px-3 mt-1 block w-full", required: false %> +
-
- <%= f.button "Approve", type: "submit", name: "design_review[result]", value: "approved", class: "btn btn-primary flex-1 bg-bp-success border-bp-success" %> - <%= f.button "Return", type: "submit", name: "design_review[result]", value: "returned", class: "btn btn-primary flex-1 bg-bp-warning border-bp-warning" %> - <%= f.button "Permanently Reject", type: "submit", name: "design_review[result]", value: "rejected", class: "btn btn-primary flex-1 bg-bp-danger border-bp-danger" %> - <%= link_to "Skip", admin_next_design_review_path(after: @project.id, ysws_type: params[:ysws_type]), class: "btn btn-outline flex-1" %> -
- <% end %> +
+ <%= f.label :feedback, "Feedback for author (MANDATORY)", class: "block text-xl font-medium" %> + <%= f.text_area :feedback, rows: 4, placeholder: "Give feedback for the author of the project!", class: "input px-3 mt-1 block w-full", required: true %> +
+ +
+ <%= f.button "Approve", type: "submit", name: "design_review[result]", value: "approved", class: "btn btn-primary flex-1 bg-bp-success border-bp-success" %> + <%= f.button "Return", type: "submit", name: "design_review[result]", value: "returned", class: "btn btn-primary flex-1 bg-bp-warning border-bp-warning" %> + <%= f.button "Permanently Reject", type: "submit", name: "design_review[result]", value: "rejected", class: "btn btn-primary flex-1 bg-bp-danger border-bp-danger" %> + <%= link_to "Skip", admin_next_design_review_path(after: @project.id, ysws_type: params[:ysws_type]), class: "btn btn-outline flex-1" %> +
+ <% end %>
<% end %> \ No newline at end of file diff --git a/app/views/landing/index.html.erb b/app/views/landing/index.html.erb index 52c5259d..f23b2bcf 100644 --- a/app/views/landing/index.html.erb +++ b/app/views/landing/index.html.erb @@ -35,7 +35,7 @@ - + "> @@ -44,9 +44,9 @@ - + - + <%= csrf_meta_tags %> <%= csp_meta_tag %> @@ -76,10 +76,10 @@ - + <%= render "shared/notice" %> - - + +
@@ -106,13 +106,13 @@
- +
- +
- +
@@ -122,7 +122,7 @@
Hack Club presents...
<%= image_tag "blueprint_logo.webp", alt: "Blueprint", class: "mx-auto md:mx-0 w-48 md:w-[28rem] h-auto hidden md:block", fetchpriority: "high", decoding: "async" %> <%= image_tag "blueprint_logo_centered.webp", alt: "Blueprint", class: "w-full max-w-xs mx-auto h-auto md:hidden", fetchpriority: "high", decoding: "async" %> - +
@@ -152,7 +152,7 @@
- +
@@ -231,7 +231,7 @@
- +