mirror of
https://github.com/System-End/hackatime.git
synced 2026-04-19 19:55:16 +00:00
Temporarily disable weekly summaries (#1012)
* Bit of SEO stuff + disable weekly summaries for now * Update bundle
This commit is contained in:
parent
66f928ca24
commit
afb7e260e8
10 changed files with 85 additions and 55 deletions
59
Gemfile.lock
59
Gemfile.lock
|
|
@ -77,7 +77,7 @@ GEM
|
||||||
securerandom (>= 0.3)
|
securerandom (>= 0.3)
|
||||||
tzinfo (~> 2.0, >= 2.0.5)
|
tzinfo (~> 2.0, >= 2.0.5)
|
||||||
uri (>= 0.13.1)
|
uri (>= 0.13.1)
|
||||||
addressable (2.8.8)
|
addressable (2.8.9)
|
||||||
public_suffix (>= 2.0.2, < 8.0)
|
public_suffix (>= 2.0.2, < 8.0)
|
||||||
ast (2.4.3)
|
ast (2.4.3)
|
||||||
autotuner (1.1.0)
|
autotuner (1.1.0)
|
||||||
|
|
@ -94,7 +94,7 @@ GEM
|
||||||
bindex (0.8.1)
|
bindex (0.8.1)
|
||||||
bootsnap (1.23.0)
|
bootsnap (1.23.0)
|
||||||
msgpack (~> 1.2)
|
msgpack (~> 1.2)
|
||||||
brakeman (8.0.2)
|
brakeman (8.0.4)
|
||||||
racc
|
racc
|
||||||
builder (3.3.0)
|
builder (3.3.0)
|
||||||
bullet (8.1.0)
|
bullet (8.1.0)
|
||||||
|
|
@ -141,7 +141,7 @@ GEM
|
||||||
drb (2.2.3)
|
drb (2.2.3)
|
||||||
dry-cli (1.4.1)
|
dry-cli (1.4.1)
|
||||||
ed25519 (1.4.0)
|
ed25519 (1.4.0)
|
||||||
erb (6.0.1)
|
erb (6.0.2)
|
||||||
erb_lint (0.9.0)
|
erb_lint (0.9.0)
|
||||||
activesupport
|
activesupport
|
||||||
better_html (>= 2.0.1)
|
better_html (>= 2.0.1)
|
||||||
|
|
@ -179,14 +179,14 @@ GEM
|
||||||
ffi (>= 1.15.5)
|
ffi (>= 1.15.5)
|
||||||
rake
|
rake
|
||||||
flamegraph (0.9.5)
|
flamegraph (0.9.5)
|
||||||
flipper (1.3.6)
|
flipper (1.4.0)
|
||||||
concurrent-ruby (< 2)
|
concurrent-ruby (< 2)
|
||||||
flipper-active_record (1.3.6)
|
flipper-active_record (1.4.0)
|
||||||
activerecord (>= 4.2, < 9)
|
activerecord (>= 4.2, < 9)
|
||||||
flipper (~> 1.3.6)
|
flipper (~> 1.4.0)
|
||||||
flipper-ui (1.3.6)
|
flipper-ui (1.4.0)
|
||||||
erubi (>= 1.0.0, < 2.0.0)
|
erubi (>= 1.0.0, < 2.0.0)
|
||||||
flipper (~> 1.3.6)
|
flipper (~> 1.4.0)
|
||||||
rack (>= 1.4, < 4)
|
rack (>= 1.4, < 4)
|
||||||
rack-protection (>= 1.5.3, < 5.0.0)
|
rack-protection (>= 1.5.3, < 5.0.0)
|
||||||
rack-session (>= 1.0.2, < 3.0.0)
|
rack-session (>= 1.0.2, < 3.0.0)
|
||||||
|
|
@ -283,11 +283,14 @@ GEM
|
||||||
net-smtp
|
net-smtp
|
||||||
marcel (1.1.0)
|
marcel (1.1.0)
|
||||||
matrix (0.4.3)
|
matrix (0.4.3)
|
||||||
|
mcp (0.7.1)
|
||||||
|
json-schema (>= 4.1)
|
||||||
memory_profiler (1.1.0)
|
memory_profiler (1.1.0)
|
||||||
mini_magick (5.3.1)
|
mini_magick (5.3.1)
|
||||||
logger
|
logger
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
minitest (6.0.1)
|
minitest (6.0.2)
|
||||||
|
drb (~> 2.0)
|
||||||
prism (~> 1.5)
|
prism (~> 1.5)
|
||||||
msgpack (1.8.0)
|
msgpack (1.8.0)
|
||||||
multipart-post (2.4.1)
|
multipart-post (2.4.1)
|
||||||
|
|
@ -406,8 +409,8 @@ GEM
|
||||||
activesupport (>= 5.0.0)
|
activesupport (>= 5.0.0)
|
||||||
minitest
|
minitest
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.6.2)
|
rails-html-sanitizer (1.7.0)
|
||||||
loofah (~> 2.21)
|
loofah (~> 2.25)
|
||||||
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
||||||
railties (8.1.2)
|
railties (8.1.2)
|
||||||
actionpack (= 8.1.2)
|
actionpack (= 8.1.2)
|
||||||
|
|
@ -436,7 +439,7 @@ GEM
|
||||||
rspec-expectations (3.13.5)
|
rspec-expectations (3.13.5)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.13.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-mocks (3.13.7)
|
rspec-mocks (3.13.8)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.13.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-rails (8.0.3)
|
rspec-rails (8.0.3)
|
||||||
|
|
@ -459,10 +462,11 @@ GEM
|
||||||
rswag-ui (2.17.0)
|
rswag-ui (2.17.0)
|
||||||
actionpack (>= 5.2, < 8.2)
|
actionpack (>= 5.2, < 8.2)
|
||||||
railties (>= 5.2, < 8.2)
|
railties (>= 5.2, < 8.2)
|
||||||
rubocop (1.84.2)
|
rubocop (1.85.0)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (~> 3.17.0.2)
|
language_server-protocol (~> 3.17.0.2)
|
||||||
lint_roller (~> 1.1.0)
|
lint_roller (~> 1.1.0)
|
||||||
|
mcp (~> 0.6)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.3.0.2)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
|
@ -504,10 +508,10 @@ GEM
|
||||||
rexml (~> 3.2, >= 3.2.5)
|
rexml (~> 3.2, >= 3.2.5)
|
||||||
rubyzip (>= 1.2.2, < 4.0)
|
rubyzip (>= 1.2.2, < 4.0)
|
||||||
websocket (~> 1.0)
|
websocket (~> 1.0)
|
||||||
sentry-rails (6.3.1)
|
sentry-rails (6.4.0)
|
||||||
railties (>= 5.2.0)
|
railties (>= 5.2.0)
|
||||||
sentry-ruby (~> 6.3.1)
|
sentry-ruby (~> 6.4.0)
|
||||||
sentry-ruby (6.3.1)
|
sentry-ruby (6.4.0)
|
||||||
bigdecimal
|
bigdecimal
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
logger
|
logger
|
||||||
|
|
@ -530,13 +534,13 @@ GEM
|
||||||
activejob (>= 7.2)
|
activejob (>= 7.2)
|
||||||
activerecord (>= 7.2)
|
activerecord (>= 7.2)
|
||||||
railties (>= 7.2)
|
railties (>= 7.2)
|
||||||
sqlite3 (2.9.0-aarch64-linux-gnu)
|
sqlite3 (2.9.1-aarch64-linux-gnu)
|
||||||
sqlite3 (2.9.0-aarch64-linux-musl)
|
sqlite3 (2.9.1-aarch64-linux-musl)
|
||||||
sqlite3 (2.9.0-arm-linux-gnu)
|
sqlite3 (2.9.1-arm-linux-gnu)
|
||||||
sqlite3 (2.9.0-arm-linux-musl)
|
sqlite3 (2.9.1-arm-linux-musl)
|
||||||
sqlite3 (2.9.0-arm64-darwin)
|
sqlite3 (2.9.1-arm64-darwin)
|
||||||
sqlite3 (2.9.0-x86_64-linux-gnu)
|
sqlite3 (2.9.1-x86_64-linux-gnu)
|
||||||
sqlite3 (2.9.0-x86_64-linux-musl)
|
sqlite3 (2.9.1-x86_64-linux-musl)
|
||||||
sshkit (1.25.0)
|
sshkit (1.25.0)
|
||||||
base64
|
base64
|
||||||
logger
|
logger
|
||||||
|
|
@ -579,17 +583,16 @@ GEM
|
||||||
vite_rails (3.0.20)
|
vite_rails (3.0.20)
|
||||||
railties (>= 5.1, < 9)
|
railties (>= 5.1, < 9)
|
||||||
vite_ruby (~> 3.0, >= 3.2.2)
|
vite_ruby (~> 3.0, >= 3.2.2)
|
||||||
vite_ruby (3.9.2)
|
vite_ruby (3.9.3)
|
||||||
dry-cli (>= 0.7, < 2)
|
dry-cli (>= 0.7, < 2)
|
||||||
logger (~> 1.6)
|
logger (~> 1.6)
|
||||||
mutex_m
|
mutex_m
|
||||||
rack-proxy (~> 0.6, >= 0.6.1)
|
rack-proxy (~> 0.6, >= 0.6.1)
|
||||||
zeitwerk (~> 2.2)
|
zeitwerk (~> 2.2)
|
||||||
web-console (4.2.1)
|
web-console (4.3.0)
|
||||||
actionview (>= 6.0.0)
|
actionview (>= 8.0.0)
|
||||||
activemodel (>= 6.0.0)
|
|
||||||
bindex (>= 0.4.0)
|
bindex (>= 0.4.0)
|
||||||
railties (>= 6.0.0)
|
railties (>= 8.0.0)
|
||||||
webmock (3.26.1)
|
webmock (3.26.1)
|
||||||
addressable (>= 2.8.0)
|
addressable (>= 2.8.0)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,9 @@ class DocsController < InertiaController
|
||||||
# Docs are publicly accessible - no authentication required
|
# Docs are publicly accessible - no authentication required
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@page_title = "Hackatime Docs - Setup Guides for 75+ Code Editors & IDEs"
|
||||||
|
@meta_description = "Get started with Hackatime in minutes. Step-by-step setup guides for VS Code, JetBrains, vim, Neovim, Sublime Text, and 70+ more editors and IDEs."
|
||||||
|
|
||||||
render inertia: "Docs/Index", props: {
|
render inertia: "Docs/Index", props: {
|
||||||
popular_editors: POPULAR_EDITORS,
|
popular_editors: POPULAR_EDITORS,
|
||||||
all_editors: ALL_EDITORS
|
all_editors: ALL_EDITORS
|
||||||
|
|
|
||||||
|
|
@ -129,8 +129,8 @@ class StaticPagesController < InertiaController
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_homepage_seo_content
|
def set_homepage_seo_content
|
||||||
@page_title = @og_title = @twitter_title = "Hackatime - See How Much You Code"
|
@page_title = @og_title = @twitter_title = "Hackatime - Track How Much You Code | Free & Open Source"
|
||||||
@meta_description = @og_description = @twitter_description = "Free and open source. Works with VS Code, JetBrains IDEs, vim, emacs, and 70+ other editors. Built and made free for teenagers by Hack Club."
|
@meta_description = @og_description = @twitter_description = "Free and open-source coding time tracker. Works with VS Code, JetBrains, vim, emacs, and 70+ editors. Built by Hack Club for teenage developers."
|
||||||
@meta_keywords = "coding time tracker, programming stats, open source time tracker, hack club coding tracker, free time tracking, code statistics, high school programming, coding analytics"
|
@meta_keywords = "coding time tracker, programming stats, open source time tracker, hack club coding tracker, free time tracking, code statistics, high school programming, coding analytics"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,27 +2,29 @@ class WeeklySummaryEmailJob < ApplicationJob
|
||||||
queue_as :literally_whenever
|
queue_as :literally_whenever
|
||||||
|
|
||||||
def perform(reference_time = Time.current)
|
def perform(reference_time = Time.current)
|
||||||
now_utc = reference_time.utc
|
# See https://hackclub.slack.com/archives/D083UR1DR7V/p1772321709715969
|
||||||
return unless send_window?(now_utc)
|
|
||||||
|
|
||||||
User.where(weekly_summary_email_enabled: true).find_each do |user|
|
# now_utc = reference_time.utc
|
||||||
recipient_email = user.email_addresses.order(:id).pick(:email)
|
# return unless send_window?(now_utc)
|
||||||
next if recipient_email.blank?
|
|
||||||
|
|
||||||
user_timezone = ActiveSupport::TimeZone[user.timezone] || ActiveSupport::TimeZone["UTC"]
|
# User.where(weekly_summary_email_enabled: true).find_each do |user|
|
||||||
user_now = now_utc.in_time_zone(user_timezone)
|
# recipient_email = user.email_addresses.order(:id).pick(:email)
|
||||||
ends_at_local = user_now.beginning_of_week(:monday)
|
# next if recipient_email.blank?
|
||||||
starts_at_local = ends_at_local - 1.week
|
|
||||||
|
|
||||||
WeeklySummaryMailer.weekly_summary(
|
# user_timezone = ActiveSupport::TimeZone[user.timezone] || ActiveSupport::TimeZone["UTC"]
|
||||||
user,
|
# user_now = now_utc.in_time_zone(user_timezone)
|
||||||
recipient_email: recipient_email,
|
# ends_at_local = user_now.beginning_of_week(:monday)
|
||||||
starts_at: starts_at_local.utc,
|
# starts_at_local = ends_at_local - 1.week
|
||||||
ends_at: ends_at_local.utc
|
|
||||||
).deliver_now
|
# WeeklySummaryMailer.weekly_summary(
|
||||||
rescue StandardError => e
|
# user,
|
||||||
Rails.logger.error("Weekly summary email failed for user #{user.id}: #{e.class} #{e.message}")
|
# recipient_email: recipient_email,
|
||||||
end
|
# starts_at: starts_at_local.utc,
|
||||||
|
# ends_at: ends_at_local.utc
|
||||||
|
# ).deliver_now
|
||||||
|
# rescue StandardError => e
|
||||||
|
# Rails.logger.error("Weekly summary email failed for user #{user.id}: #{e.class} #{e.message}")
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
<html lang="en" class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
||||||
<head>
|
<head>
|
||||||
<title><%= @page_title || content_for(:title) || 'Hackatime' %></title>
|
<title><%= @page_title || content_for(:title) || 'Hackatime - Free & Open Source Coding Time Tracker' %></title>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
|
@ -158,6 +158,7 @@
|
||||||
<%#= tag.link rel: "manifest", href: pwa_manifest_path(format: :json) %>
|
<%#= tag.link rel: "manifest", href: pwa_manifest_path(format: :json) %>
|
||||||
|
|
||||||
<%= favicon_link_tag asset_path('favicon.png'), type: 'image/png' %>
|
<%= favicon_link_tag asset_path('favicon.png'), type: 'image/png' %>
|
||||||
|
<link rel="apple-touch-icon" href="<%= asset_path('favicon.png') %>">
|
||||||
|
|
||||||
<script defer data-domain="hackatime.hackclub.com" src="https://plausible.io/js/script.file-downloads.hash.js"></script>
|
<script defer data-domain="hackatime.hackclub.com" src="https://plausible.io/js/script.file-downloads.hash.js"></script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
<html lang="en" class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
||||||
<head>
|
<head>
|
||||||
<title><%= @title %> - Hackatime</title>
|
<title><%= @title %> - Hackatime</title>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
<html lang="en" class="<%= Rails.env == 'production' ? 'production' : 'development' %>" data-theme="<%= current_theme %>">
|
||||||
<head>
|
<head>
|
||||||
<title><%= @page_title || content_for(:title) || 'Hackatime' %></title>
|
<title><%= @page_title || content_for(:title) || 'Hackatime - Free & Open Source Coding Time Tracker' %></title>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
|
@ -149,6 +149,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= favicon_link_tag asset_path('favicon.png'), type: 'image/png' %>
|
<%= favicon_link_tag asset_path('favicon.png'), type: 'image/png' %>
|
||||||
|
<link rel="apple-touch-icon" href="<%= asset_path('favicon.png') %>">
|
||||||
|
|
||||||
<% if include_external_scripts %>
|
<% if include_external_scripts %>
|
||||||
<script defer data-domain="hackatime.hackclub.com" src="https://plausible.io/js/script.file-downloads.hash.js"></script>
|
<script defer data-domain="hackatime.hackclub.com" src="https://plausible.io/js/script.file-downloads.hash.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<priority>1.0</priority>
|
<priority>1.0</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://hackatime.hackclub.com/leaderboard</loc>
|
<loc>https://hackatime.hackclub.com/leaderboards</loc>
|
||||||
<lastmod><%= Date.current.iso8601 %></lastmod>
|
<lastmod><%= Date.current.iso8601 %></lastmod>
|
||||||
<changefreq>hourly</changefreq>
|
<changefreq>hourly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
|
|
@ -18,4 +18,22 @@
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.7</priority>
|
<priority>0.7</priority>
|
||||||
</url>
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://hackatime.hackclub.com/signin</loc>
|
||||||
|
<lastmod><%= Date.current.iso8601 %></lastmod>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://hackatime.hackclub.com/wakatime-alternative</loc>
|
||||||
|
<lastmod><%= Date.current.iso8601 %></lastmod>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.7</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://hackatime.hackclub.com/extensions</loc>
|
||||||
|
<lastmod><%= Date.current.iso8601 %></lastmod>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.6</priority>
|
||||||
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,8 @@ Rails.application.routes.draw do
|
||||||
get "/auth/close_window", to: "sessions#close_window", as: :close_window
|
get "/auth/close_window", to: "sessions#close_window", as: :close_window
|
||||||
delete "signout", to: "sessions#destroy", as: "signout"
|
delete "signout", to: "sessions#destroy", as: "signout"
|
||||||
|
|
||||||
|
get "/leaderboard", to: redirect("/leaderboards", status: 301)
|
||||||
|
|
||||||
resources :leaderboards, only: [ :index ] do
|
resources :leaderboards, only: [ :index ] do
|
||||||
get :entries, on: :collection
|
get :entries, on: :collection
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ Allow: /
|
||||||
# Important pages for crawling
|
# Important pages for crawling
|
||||||
Allow: /docs
|
Allow: /docs
|
||||||
Allow: /docs/*
|
Allow: /docs/*
|
||||||
Allow: /leaderboard
|
Allow: /leaderboards
|
||||||
|
|
||||||
# Disallow private/internal pages
|
# Disallow private/internal pages
|
||||||
Disallow: /my/
|
Disallow: /my/
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue