howdy-jekyll-theme 1.0.0

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.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/AGENTS.md +49 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE +21 -0
  5. data/README.md +431 -0
  6. data/_includes/analytics.html +19 -0
  7. data/_includes/blog-pagination.html +31 -0
  8. data/_includes/comments.html +46 -0
  9. data/_includes/dark-mode-toggle.html +18 -0
  10. data/_includes/head.html +137 -0
  11. data/_includes/hero-carousel.html +80 -0
  12. data/_includes/logo.html +5 -0
  13. data/_includes/navigation.html +24 -0
  14. data/_includes/newsletter.html +10 -0
  15. data/_includes/share-buttons.html +70 -0
  16. data/_includes/social-links.html +37 -0
  17. data/_includes/toc.html +29 -0
  18. data/_layouts/autopage_collection.html +43 -0
  19. data/_layouts/blog.html +42 -0
  20. data/_layouts/default.html +86 -0
  21. data/_layouts/home.html +5 -0
  22. data/_layouts/page.html +33 -0
  23. data/_layouts/post.html +76 -0
  24. data/_layouts/project.html +61 -0
  25. data/_plugins/sort_projects.rb +6 -0
  26. data/_plugins/user_colors.rb +68 -0
  27. data/_posts/2026-01-01-beyond-pixels.md +21 -0
  28. data/_posts/2026-01-02-collaboration.md +25 -0
  29. data/_posts/2026-01-03-design-feeling.md +25 -0
  30. data/_posts/2026-01-04-finding-inspiration.md +25 -0
  31. data/_posts/2026-01-05-freebies.md +35 -0
  32. data/_posts/2026-01-06-ux-research-methods.md +25 -0
  33. data/_posts/2026-01-07-color-theory.md +25 -0
  34. data/_posts/2026-01-08-responsive-design.md +25 -0
  35. data/_posts/2026-01-09-web-performance.md +25 -0
  36. data/_posts/2026-01-10-mobile-first.md +25 -0
  37. data/_posts/2026-04-15-crafting-visual-hierarchy.md +27 -0
  38. data/_posts/2026-04-16-building-design-systems.md +27 -0
  39. data/_posts/2026-04-18-accessibility-matters.md +25 -0
  40. data/_posts/2026-04-19-motion-design.md +29 -0
  41. data/_posts/2026-04-20-typography-basics.md +25 -0
  42. data/_posts/2026-04-22-product-design-best-practices.md +239 -0
  43. data/_projects/atlas.md +26 -0
  44. data/_projects/luminous.md +26 -0
  45. data/_projects/nova.md +31 -0
  46. data/_projects/osaka.md +26 -0
  47. data/_sass/_base.scss +181 -0
  48. data/_sass/_components.scss +767 -0
  49. data/_sass/_dark-mode.scss +39 -0
  50. data/_sass/_layout.scss +1033 -0
  51. data/_sass/_typography.scss +394 -0
  52. data/_sass/_user-colors.scss +1 -0
  53. data/_sass/_variables.scss +165 -0
  54. data/about.md +62 -0
  55. data/assets/css/main.scss +10 -0
  56. data/assets/css/swiper-bundle.min.css +13 -0
  57. data/assets/fonts/ChaumontScript-Regular.otf +0 -0
  58. data/assets/fonts/DMSans-Italic-Variable.ttf +0 -0
  59. data/assets/fonts/DMSans-Variable.ttf +0 -0
  60. data/assets/illustrations/analytics.svg +218 -0
  61. data/assets/illustrations/business-strategy.svg +161 -0
  62. data/assets/illustrations/designer.svg +267 -0
  63. data/assets/illustrations/email.svg +123 -0
  64. data/assets/illustrations/friends-taking-selfie.svg +189 -0
  65. data/assets/illustrations/launch.svg +230 -0
  66. data/assets/illustrations/love-animals.svg +83 -0
  67. data/assets/illustrations/meeting.svg +292 -0
  68. data/assets/illustrations/mobile-shopping.svg +113 -0
  69. data/assets/illustrations/online-shopping.svg +148 -0
  70. data/assets/illustrations/oops-something-went-wrong.svg +97 -0
  71. data/assets/illustrations/podcast.svg +199 -0
  72. data/assets/illustrations/presentation.svg +138 -0
  73. data/assets/illustrations/programmer.svg +240 -0
  74. data/assets/illustrations/task-management.svg +174 -0
  75. data/assets/illustrations/tasks-complete.svg +161 -0
  76. data/assets/illustrations/travel-booking-hotel.svg +214 -0
  77. data/assets/illustrations/video-call.svg +178 -0
  78. data/assets/images/apple-touch-icon.png +0 -0
  79. data/assets/images/favicon-dark.png +0 -0
  80. data/assets/images/favicon-light.png +0 -0
  81. data/assets/images/howdy-theme-dark.png +0 -0
  82. data/assets/images/howdy-theme-light.png +0 -0
  83. data/assets/images/og-image.png +0 -0
  84. data/assets/js/hero-carousel.js +36 -0
  85. data/assets/js/mobile-nav.js +62 -0
  86. data/assets/js/swiper-bundle.min.js +13 -0
  87. data/assets/js/swiper-bundle.min.js.map +1 -0
  88. data/assets/js/theme-toggle.js +54 -0
  89. data/assets/resume.pdf +683 -0
  90. data/contact.md +74 -0
  91. data/howdy-jekyll-theme.gemspec +25 -0
  92. data/lib/howdy-jekyll-theme.rb +19 -0
  93. metadata +245 -0
data/contact.md ADDED
@@ -0,0 +1,74 @@
1
+ ---
2
+ layout: page
3
+ title: "Contact"
4
+ subtitle: "Let's chat"
5
+ hero_image: /assets/illustrations/email.svg
6
+ ---
7
+
8
+ <section class="contact-section">
9
+ {% if site.contact.intro %}
10
+ <p class="contact-intro">{{ site.contact.intro }}</p>
11
+ {% endif %}
12
+
13
+ {% if site.contact.methods %}
14
+ <div class="contact-info" style="margin-top: 48px;">
15
+ {% for method in site.contact.methods %}
16
+ <div class="contact-item">
17
+ <p class="contact-label">{{ method.label }}</p>
18
+ {% if method.type == "email" %}
19
+ <p class="contact-value"><a href="mailto:{{ method.value }}">{{ method.value }}</a></p>
20
+ {% elsif method.type == "schedule" %}
21
+ <p class="contact-value"><a href="{{ method.url }}" target="_blank" rel="noopener noreferrer">{{ method.value }}<svg class="contact-arrow" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M6 3L11 8L6 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></a></p>
22
+ {% else %}
23
+ <p class="contact-value">{{ method.value }}</p>
24
+ {% endif %}
25
+ </div>
26
+ {% endfor %}
27
+ </div>
28
+ {% endif %}
29
+
30
+ {% if site.contact.response_time %}
31
+ <p class="contact-response-time">{{ site.contact.response_time }}</p>
32
+ {% endif %}
33
+
34
+ {% if site.contact.form.enabled %}
35
+ {% assign form = site.contact.form %}
36
+ <div class="contact-form-wrapper">
37
+ <h2 class="contact-form-title">{{ form.title }}</h2>
38
+ <form
39
+ class="contact-form"
40
+ action="{% if form.action %}{{ form.action }}{% else %}mailto:{{ site.email }}{% endif %}"
41
+ method="POST"
42
+ {% unless form.action %}enctype="text/plain"{% endunless %}
43
+ >
44
+ <div class="form-row">
45
+ <div class="form-group">
46
+ <label for="contact-name" class="sr-only">{{ form.name_placeholder }}</label>
47
+ <input type="text" id="contact-name" name="name" placeholder="{{ form.name_placeholder }}" required>
48
+ </div>
49
+ <div class="form-group">
50
+ <label for="contact-email" class="sr-only">{{ form.email_placeholder }}</label>
51
+ <input type="email" id="contact-email" name="email" placeholder="{{ form.email_placeholder }}" required>
52
+ </div>
53
+ </div>
54
+ <div class="form-group">
55
+ <label for="contact-message" class="sr-only">{{ form.message_placeholder }}</label>
56
+ <textarea id="contact-message" name="message" rows="5" placeholder="{{ form.message_placeholder }}" required></textarea>
57
+ </div>
58
+ <button type="submit" class="btn btn-secondary">{{ form.button_text }}</button>
59
+ </form>
60
+ </div>
61
+ {% endif %}
62
+
63
+ {% if site.contact.faq.enabled and site.contact.faq.items %}
64
+ <div class="contact-faq">
65
+ <h2 class="contact-faq-title">Frequently asked</h2>
66
+ {% for item in site.contact.faq.items %}
67
+ <details class="faq-item">
68
+ <summary class="faq-question">{{ item.question }}</summary>
69
+ <div class="faq-answer">{{ item.answer }}</div>
70
+ </details>
71
+ {% endfor %}
72
+ </div>
73
+ {% endif %}
74
+ </section>
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "howdy-jekyll-theme"
3
+ spec.version = "1.0.0"
4
+ spec.authors = ["Kyle Greenan"]
5
+ spec.email = ["kyle@howdyitskyle.com"]
6
+
7
+ spec.summary = "A clean and modern Jekyll theme for personal websites and portfolios"
8
+ spec.description = "Howdy is a clean and modern Jekyll theme designed for personal websites and portfolios. Features both light and dark themes, responsive layout, elegant typography, and support for projects and blog."
9
+ spec.homepage = "https://howdyitskyle.github.io/howdy-jekyll-theme"
10
+ spec.license = "MIT"
11
+ spec.required_ruby_version = ">= 3.0"
12
+
13
+ spec.files = Dir["_layouts/**/*", "_includes/**/*", "_sass/**/*", "_plugins/**/*", "assets/**/*", "_projects/**/*", "_posts/**/*", "lib/**/*", "*.md", "*.gemspec", "Gemfile", "LICENSE", "*.otf", "*.ico"]
14
+ spec.require_paths = ["lib"]
15
+
16
+ spec.add_runtime_dependency "jekyll", ">= 3.9"
17
+ spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.8.0"
18
+ spec.add_runtime_dependency "jekyll-feed", "~> 0.17"
19
+ spec.add_runtime_dependency "jekyll-sitemap", "~> 1.4"
20
+ spec.add_runtime_dependency "jekyll-paginate-v2", "~> 3.0"
21
+
22
+ spec.add_development_dependency "bundler", ">= 2.4"
23
+ spec.add_development_dependency "rake", "~> 13.0"
24
+ spec.add_development_dependency "html-proofer", "~> 5.0"
25
+ end
@@ -0,0 +1,19 @@
1
+ require "jekyll"
2
+ require "pathname"
3
+
4
+ module Howdy
5
+ class Theme
6
+ def self.root
7
+ Pathname.new(File.expand_path("..", __dir__))
8
+ end
9
+ end
10
+ end
11
+
12
+ Jekyll::Hooks.register :site, :after_init do |site|
13
+ # Add theme paths to Jekyll's lookup
14
+ theme_root = Howdy::Theme.root
15
+
16
+ site.layouts_path = theme_root.join("_layouts").to_s
17
+ site.includes_load_paths << theme_root.join("_includes").to_s
18
+ site.sass.paths << theme_root.join("_sass").to_s
19
+ end
metadata ADDED
@@ -0,0 +1,245 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: howdy-jekyll-theme
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kyle Greenan
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: jekyll
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '3.9'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '3.9'
26
+ - !ruby/object:Gem::Dependency
27
+ name: jekyll-seo-tag
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 2.8.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: jekyll-feed
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.17'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.17'
54
+ - !ruby/object:Gem::Dependency
55
+ name: jekyll-sitemap
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.4'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.4'
68
+ - !ruby/object:Gem::Dependency
69
+ name: jekyll-paginate-v2
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: bundler
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '2.4'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '2.4'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rake
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '13.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '13.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: html-proofer
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '5.0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '5.0'
124
+ description: Howdy is a clean and modern Jekyll theme designed for personal websites
125
+ and portfolios. Features both light and dark themes, responsive layout, elegant
126
+ typography, and support for projects and blog.
127
+ email:
128
+ - kyle@howdyitskyle.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - AGENTS.md
134
+ - Gemfile
135
+ - LICENSE
136
+ - README.md
137
+ - _includes/analytics.html
138
+ - _includes/blog-pagination.html
139
+ - _includes/comments.html
140
+ - _includes/dark-mode-toggle.html
141
+ - _includes/head.html
142
+ - _includes/hero-carousel.html
143
+ - _includes/logo.html
144
+ - _includes/navigation.html
145
+ - _includes/newsletter.html
146
+ - _includes/share-buttons.html
147
+ - _includes/social-links.html
148
+ - _includes/toc.html
149
+ - _layouts/autopage_collection.html
150
+ - _layouts/blog.html
151
+ - _layouts/default.html
152
+ - _layouts/home.html
153
+ - _layouts/page.html
154
+ - _layouts/post.html
155
+ - _layouts/project.html
156
+ - _plugins/sort_projects.rb
157
+ - _plugins/user_colors.rb
158
+ - _posts/2026-01-01-beyond-pixels.md
159
+ - _posts/2026-01-02-collaboration.md
160
+ - _posts/2026-01-03-design-feeling.md
161
+ - _posts/2026-01-04-finding-inspiration.md
162
+ - _posts/2026-01-05-freebies.md
163
+ - _posts/2026-01-06-ux-research-methods.md
164
+ - _posts/2026-01-07-color-theory.md
165
+ - _posts/2026-01-08-responsive-design.md
166
+ - _posts/2026-01-09-web-performance.md
167
+ - _posts/2026-01-10-mobile-first.md
168
+ - _posts/2026-04-15-crafting-visual-hierarchy.md
169
+ - _posts/2026-04-16-building-design-systems.md
170
+ - _posts/2026-04-18-accessibility-matters.md
171
+ - _posts/2026-04-19-motion-design.md
172
+ - _posts/2026-04-20-typography-basics.md
173
+ - _posts/2026-04-22-product-design-best-practices.md
174
+ - _projects/atlas.md
175
+ - _projects/luminous.md
176
+ - _projects/nova.md
177
+ - _projects/osaka.md
178
+ - _sass/_base.scss
179
+ - _sass/_components.scss
180
+ - _sass/_dark-mode.scss
181
+ - _sass/_layout.scss
182
+ - _sass/_typography.scss
183
+ - _sass/_user-colors.scss
184
+ - _sass/_variables.scss
185
+ - about.md
186
+ - assets/css/main.scss
187
+ - assets/css/swiper-bundle.min.css
188
+ - assets/fonts/ChaumontScript-Regular.otf
189
+ - assets/fonts/DMSans-Italic-Variable.ttf
190
+ - assets/fonts/DMSans-Variable.ttf
191
+ - assets/illustrations/analytics.svg
192
+ - assets/illustrations/business-strategy.svg
193
+ - assets/illustrations/designer.svg
194
+ - assets/illustrations/email.svg
195
+ - assets/illustrations/friends-taking-selfie.svg
196
+ - assets/illustrations/launch.svg
197
+ - assets/illustrations/love-animals.svg
198
+ - assets/illustrations/meeting.svg
199
+ - assets/illustrations/mobile-shopping.svg
200
+ - assets/illustrations/online-shopping.svg
201
+ - assets/illustrations/oops-something-went-wrong.svg
202
+ - assets/illustrations/podcast.svg
203
+ - assets/illustrations/presentation.svg
204
+ - assets/illustrations/programmer.svg
205
+ - assets/illustrations/task-management.svg
206
+ - assets/illustrations/tasks-complete.svg
207
+ - assets/illustrations/travel-booking-hotel.svg
208
+ - assets/illustrations/video-call.svg
209
+ - assets/images/apple-touch-icon.png
210
+ - assets/images/favicon-dark.png
211
+ - assets/images/favicon-light.png
212
+ - assets/images/howdy-theme-dark.png
213
+ - assets/images/howdy-theme-light.png
214
+ - assets/images/og-image.png
215
+ - assets/js/hero-carousel.js
216
+ - assets/js/mobile-nav.js
217
+ - assets/js/swiper-bundle.min.js
218
+ - assets/js/swiper-bundle.min.js.map
219
+ - assets/js/theme-toggle.js
220
+ - assets/resume.pdf
221
+ - contact.md
222
+ - howdy-jekyll-theme.gemspec
223
+ - lib/howdy-jekyll-theme.rb
224
+ homepage: https://howdyitskyle.github.io/howdy-jekyll-theme
225
+ licenses:
226
+ - MIT
227
+ metadata: {}
228
+ rdoc_options: []
229
+ require_paths:
230
+ - lib
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '3.0'
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubygems_version: 4.0.9
243
+ specification_version: 4
244
+ summary: A clean and modern Jekyll theme for personal websites and portfolios
245
+ test_files: []