howdy-jekyll-theme 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e5fe3f63665dc591e58b9ff6a57b5656b2a538ea7ff26eb2a575514d2a1db1b
4
- data.tar.gz: 5a2a87e1f35d519013abe2e6c1dc722574c71bec65039a6c953f3db911629434
3
+ metadata.gz: 5fa6da0bec711a5951bd7ef3bb51909676fc336943db32fcd24ce4432890f7a9
4
+ data.tar.gz: 5ab762db73a45da22594709f5cd2d4aec482727ddd6a46f38324ca324f22e1db
5
5
  SHA512:
6
- metadata.gz: 96872e77ddd36759fa876672c4be696bc1763f84cf8ed8da91ddfae4286a2f2ea53c1c74af21fbbe07c17661a216600e8018e634a9765c762ffef4de148ec523
7
- data.tar.gz: 202609b75773017be7e56f38117732d96cf80e9fd5a44f8e4fcdc70bb6bc23a210abbc48ab334cbe603ec2bb7922f1ee5cecf4cb7fd1b145bb6fe9f40bfe5202
6
+ metadata.gz: c89d70bb104087bfe6a31c07f0b3162529941e6e75e8aba829f60b9744809780e8cddf2a037f6f40e181f099e1d7e31a76b6f52f3dcfaa77ad28aa6feccae9cb
7
+ data.tar.gz: 96237235b3b296ade916747c5ef9c2787a16e34d53ee27286d670c99e779e15fda844eec5d5bc4bef3865bf02a1ea8f51d4955731a71e502e2b0fa0a303e5b03
data/AGENTS.md CHANGED
@@ -11,7 +11,9 @@ A gem-based Jekyll theme (`howdy-jekyll-theme`, v1.0.0) for personal sites and p
11
11
  | Setup | `bundle config --local path .bundle && bundle install` |
12
12
  | Dev server | `bundle exec jekyll serve` → http://localhost:4000 |
13
13
  | Build gem | `gem build howdy-jekyll-theme.gemspec` |
14
- | Install local gem | `gem install ./howdy-jekyll-theme-1.0.0.gem` |
14
+ | Push gem | `gem push howdy-jekyll-theme-1.0.0.gem` (requires API key) |
15
+ | Playwright tests | `npm test` |
16
+ | Install npm deps | `npm install` |
15
17
 
16
18
  ## Architecture
17
19
 
@@ -42,8 +44,19 @@ blog/ — Blog index page (pagination entry)
42
44
  lib/ — Gem entry point (Jekyll hook)
43
45
  ```
44
46
 
47
+ ## CI/CD
48
+
49
+ - **Workflow**: `.github/workflows/ci.yml` — validate → test → lighthouse + playwright (parallel) → deploy
50
+ - **Playwright** runs inside `mcr.microsoft.com/playwright:v1.60.0` Docker container — browsers pre-installed, no CDN download needed
51
+ - **Ruby native gems** in the Playwright container need `apt-get install -y build-essential ruby-dev libyaml-0-2` before `ruby/setup-ruby`
52
+ - **Deploy** builds with `JEKYLL_ENV=production bundle exec jekyll build --baseurl "/howdy-jekyll-theme"` (repo name is the base path)
53
+ - **GitHub Pages** is enabled with "Deploy from workflow" (not the default Jekyll builder)
54
+ - **GitHub secret** `GEM_HOST_API_KEY` is set for CI gem publishing
55
+
45
56
  ## Gotchas
46
57
 
47
58
  - The `_config.yml` excludes `Gemfile`, `Gemfile.lock`, `*.gemspec`, `README.md`, `LICENSE` from the Jekyll build — do not put content there expecting it to render.
48
59
  - Font files (Inter, Chaumont Script, Fragment Mono) in `assets/fonts/` are licensed; verify licensing before redistributing.
49
60
  - The `.bundle/` directory contains vendored gems — do not edit files inside it.
61
+ - When deploying to a GitHub Pages project site, build with `--baseurl "/repository-name"` so asset paths resolve correctly.
62
+ - The Playwright Docker container is based on Ubuntu 22.04 — Ruby native gems that need C compilation require `build-essential` and `ruby-dev`.
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  > A clean, modern, and minimalist Jekyll theme for personal websites and portfolios.
4
4
 
5
- [![Gem Version](https://img.shields.io/badge/gem-v1.0.0-blue)](https://rubygems.org/gems/howdy-jekyll-theme)
5
+ [![Gem Version](https://badge.fury.io/rb/howdy-jekyll-theme.svg)](https://rubygems.org/gems/howdy-jekyll-theme)
6
+ [![Gem Downloads](https://img.shields.io/gem/dt/howdy-jekyll-theme)](https://rubygems.org/gems/howdy-jekyll-theme)
6
7
  [![CI](https://github.com/howdyitskyle/howdy-jekyll-theme/actions/workflows/ci.yml/badge.svg)](https://github.com/howdyitskyle/howdy-jekyll-theme/actions/workflows/ci.yml)
7
8
  [![Jekyll](https://img.shields.io/badge/jekyll-%E2%89%A53.9-008a1e)](https://jekyllrb.com/)
8
9
  [![Ruby](https://img.shields.io/badge/ruby-%E2%89%A53.0-red)](https://www.ruby-lang.org/)
data/_includes/head.html CHANGED
@@ -122,7 +122,6 @@
122
122
  .hero-content,
123
123
  .content-area > *,
124
124
  .company-logos,
125
- .stats,
126
125
  .hero-carousel,
127
126
  .logo-overlay {
128
127
  opacity: 0;
@@ -77,4 +77,6 @@
77
77
  </div>
78
78
  <div class="hero-carousel__dots"></div>
79
79
  </div>
80
+ <script src="{{ '/assets/js/swiper-bundle.min.js' | relative_url }}"></script>
81
+ <script src="{{ '/assets/js/hero-carousel.js' | relative_url }}"></script>
80
82
  {% endif %}
@@ -11,8 +11,6 @@
11
11
 
12
12
  <script src="{{ '/assets/js/theme-toggle.js' | relative_url }}"></script>
13
13
  <script src="{{ '/assets/js/mobile-nav.js' | relative_url }}"></script>
14
- <script src="{{ '/assets/js/swiper-bundle.min.js' | relative_url }}"></script>
15
- <script src="{{ '/assets/js/hero-carousel.js' | relative_url }}"></script>
16
14
 
17
15
  <!-- Analytics -->
18
16
  {% include analytics.html %}
data/_sass/_base.scss CHANGED
@@ -156,14 +156,6 @@ select:focus-visible {
156
156
  }
157
157
  }
158
158
 
159
- // Container fills the main wrapper
160
- .container {
161
- width: 100%;
162
- height: 100%;
163
- padding: 0;
164
- margin: 0;
165
- }
166
-
167
159
  // Accessibility: Reduced motion support
168
160
  @media (prefers-reduced-motion: reduce) {
169
161
  *,
@@ -19,16 +19,6 @@
19
19
  border: 2px solid transparent;
20
20
  min-height: 44px;
21
21
 
22
- &.btn-primary {
23
- background-color: var(--howdy-text-primary);
24
- color: var(--howdy-bg-white);
25
-
26
- &:hover {
27
- background-color: var(--howdy-accent-green);
28
- color: var(--howdy-bg-white);
29
- }
30
- }
31
-
32
22
  &.btn-secondary {
33
23
  background-color: transparent;
34
24
  color: var(--howdy-text-primary);
data/_sass/_layout.scss CHANGED
@@ -437,7 +437,7 @@ body.loaded .projects-grid {
437
437
  flex: none;
438
438
  place-content: flex-start;
439
439
  align-items: stretch;
440
- gap: var(--howdy-content-gap-xxl);
440
+ row-gap: 32px;
441
441
  width: 100%;
442
442
  max-width: 720px;
443
443
  height: min-content;
@@ -448,28 +448,23 @@ body.loaded .projects-grid {
448
448
 
449
449
  @media (max-width: $howdy-xl) {
450
450
  max-width: none;
451
- gap: var(--howdy-content-gap-xl);
452
451
  padding: 56px var(--howdy-content-area-padding-xl) var(--howdy-content-area-padding-xl-bottom);
453
452
  }
454
453
 
455
454
  @media (max-width: $howdy-lg) {
456
- gap: var(--howdy-content-gap-lg);
457
455
  padding: 0 var(--howdy-content-area-padding-lg) var(--howdy-content-area-padding-lg-bottom);
458
456
  }
459
457
 
460
458
  @media (max-width: $howdy-md) {
461
459
  padding: 0 var(--howdy-content-area-padding-md) var(--howdy-content-area-padding-md-bottom);
462
- gap: var(--howdy-content-gap-md);
463
460
  }
464
461
 
465
462
  @media (max-width: $howdy-sm) {
466
463
  padding: 0 var(--howdy-content-area-padding-sm) var(--howdy-content-area-padding-sm-bottom);
467
- gap: var(--howdy-content-gap-sm);
468
464
  }
469
465
 
470
466
  @media (max-width: $howdy-xs) {
471
467
  padding: 0 var(--howdy-content-area-padding-xs) var(--howdy-content-area-padding-xs-bottom);
472
- gap: var(--howdy-content-gap-xs);
473
468
  }
474
469
  }
475
470
 
@@ -564,40 +559,6 @@ body.loaded .projects-grid {
564
559
  }
565
560
  }
566
561
 
567
- // Header (navigation area)
568
- .site-header {
569
- display: flex;
570
- flex-flow: row;
571
- flex: none;
572
- place-content: center space-between;
573
- align-items: center;
574
- width: 100%;
575
- height: min-content;
576
- padding: 0 0 0 var(--howdy-spacing-sm);
577
- position: relative;
578
- transition: var(--howdy-transition);
579
-
580
- @media (max-width: $howdy-xl) {
581
- justify-content: space-between;
582
- gap: 0;
583
- padding: 0;
584
- }
585
-
586
- @media (max-width: $howdy-lg) {
587
- flex-wrap: wrap;
588
- justify-content: flex-start;
589
- gap: var(--howdy-header-gap-lg);
590
- }
591
-
592
- @media (max-width: $howdy-md) {
593
- gap: var(--howdy-header-gap-md);
594
- }
595
-
596
- @media (max-width: $howdy-sm) {
597
- gap: var(--howdy-header-gap-sm);
598
- }
599
- }
600
-
601
562
  // Logo
602
563
  .site-logo {
603
564
  text-decoration: none;
@@ -830,24 +791,6 @@ html.nav-open .nav-overlay {
830
791
  transition: var(--howdy-transition);
831
792
  }
832
793
 
833
- // Badge (Now booking)
834
- .badge {
835
- display: inline-block;
836
- padding: 8px 16px;
837
- background-color: var(--howdy-bg-green-tint);
838
- color: var(--howdy-accent-green);
839
- border-radius: var(--howdy-radius-full);
840
- font-weight: 500;
841
- font-size: 14px;
842
- letter-spacing: 0.01em;
843
- transition: var(--howdy-transition);
844
-
845
- @media (max-width: $howdy-sm) {
846
- font-size: 12px;
847
- padding: 6px 12px;
848
- }
849
- }
850
-
851
794
  // Company logos section
852
795
  .company-logos {
853
796
  width: 100%;
@@ -906,16 +849,6 @@ html.nav-open .nav-overlay {
906
849
  }
907
850
  }
908
851
 
909
- .logo-item {
910
- flex-shrink: 0;
911
- font-family: var(--howdy-font-primary);
912
- font-size: 14px;
913
- font-weight: 500;
914
- color: var(--howdy-text-muted);
915
- letter-spacing: 0.06em;
916
- text-transform: uppercase;
917
- }
918
-
919
852
  @keyframes scroll {
920
853
  0% {
921
854
  transform: translateX(0);
@@ -925,33 +858,6 @@ html.nav-open .nav-overlay {
925
858
  }
926
859
  }
927
860
 
928
- // Stats section
929
- .stats {
930
- text-align: center;
931
- padding: var(--howdy-spacing-lg) 0;
932
-
933
- .stat-number {
934
- font-family: var(--howdy-font-primary);
935
- font-weight: 900;
936
- font-size: 48px;
937
- color: var(--howdy-text-primary);
938
- transition: var(--howdy-transition);
939
-
940
- @media (max-width: $howdy-md) {
941
- font-size: 36px;
942
- }
943
-
944
- @media (max-width: $howdy-sm) {
945
- font-size: 28px;
946
- }
947
- }
948
-
949
- .stat-label {
950
- @extend .body-large !optional;
951
- color: var(--howdy-text-secondary);
952
- }
953
- }
954
-
955
861
  // Hero carousel
956
862
  .hero-carousel {
957
863
  position: relative;
@@ -3,7 +3,7 @@
3
3
  @use "variables" as *;
4
4
 
5
5
  // Heading 1 — fluid responsive sizing
6
- h1, .h1 {
6
+ h1 {
7
7
  font-family: var(--howdy-font-primary);
8
8
  font-weight: 600;
9
9
  line-height: 1.2;
@@ -196,42 +196,11 @@ p, .body-regular {
196
196
  letter-spacing: 0.01em; // Required for small text (11-13px range)
197
197
  }
198
198
 
199
- // Button/Label text
200
- .label-text {
201
- font-family: var(--howdy-font-primary);
202
- font-weight: 600;
203
- font-size: 15px;
204
- line-height: 1.2em;
205
- letter-spacing: 0.02em; // Required for UI labels/buttons
206
- transition: var(--howdy-transition);
207
- }
208
-
209
- // Centered text
210
- .text-center {
211
- text-align: center;
212
- }
213
-
214
199
  // Muted text (gray)
215
200
  .text-muted {
216
201
  color: var(--howdy-text-muted);
217
202
  }
218
203
 
219
- // Script font for logo
220
- .script-text {
221
- font-family: 'Chaumont Script', 'Style Script', cursive;
222
- font-weight: 400;
223
- font-size: 32px;
224
- letter-spacing: 0.02em;
225
-
226
- @media (max-width: $howdy-md) {
227
- font-size: 28px;
228
- }
229
-
230
- @media (max-width: $howdy-sm) {
231
- font-size: 24px;
232
- }
233
- }
234
-
235
204
  // Code
236
205
  code {
237
206
  font-family: var(--howdy-font-mono);
@@ -26,11 +26,6 @@ document.addEventListener('DOMContentLoaded', () => {
26
26
  prevSlideMessage: 'Previous slide',
27
27
  nextSlideMessage: 'Next slide',
28
28
  },
29
- on: {
30
- slideChange: () => {
31
- document.body.classList.add('loaded');
32
- },
33
- },
34
29
  });
35
30
  });
36
31
  });
@@ -53,10 +53,5 @@
53
53
  window.howdyNavIsClosing = function() {
54
54
  return navClosing;
55
55
  };
56
-
57
- window.howdyNavIsOpen = function() {
58
- return root.classList.contains('nav-open');
59
- };
60
-
61
56
  updateNav();
62
57
  })();
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "howdy-jekyll-theme"
3
- spec.version = "1.0.0"
3
+ spec.version = "1.0.2"
4
4
  spec.authors = ["Kyle Greenan"]
5
5
  spec.email = ["kyle@howdyitskyle.com"]
6
6
 
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.require_paths = ["lib"]
15
15
 
16
16
  spec.add_runtime_dependency "jekyll", ">= 3.9"
17
- spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.8.0"
17
+ spec.add_runtime_dependency "jekyll-seo-tag", ">= 2.8", "< 2.10"
18
18
  spec.add_runtime_dependency "jekyll-feed", "~> 0.17"
19
19
  spec.add_runtime_dependency "jekyll-sitemap", "~> 1.4"
20
20
  spec.add_runtime_dependency "jekyll-paginate-v2", "~> 3.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: howdy-jekyll-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Greenan
@@ -27,16 +27,22 @@ dependencies:
27
27
  name: jekyll-seo-tag
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '2.8'
33
+ - - "<"
31
34
  - !ruby/object:Gem::Version
32
- version: 2.8.0
35
+ version: '2.10'
33
36
  type: :runtime
34
37
  prerelease: false
35
38
  version_requirements: !ruby/object:Gem::Requirement
36
39
  requirements:
37
- - - "~>"
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '2.8'
43
+ - - "<"
38
44
  - !ruby/object:Gem::Version
39
- version: 2.8.0
45
+ version: '2.10'
40
46
  - !ruby/object:Gem::Dependency
41
47
  name: jekyll-feed
42
48
  requirement: !ruby/object:Gem::Requirement