-
Notifications
You must be signed in to change notification settings - Fork 378
Enable Shakapacker early hints #687
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 17 commits
8731438
a810cca
9fca254
eb1b3be
9930aaf
395b7a4
58f9d8e
8082229
0104fb1
56d2a68
b6255d5
4eed1fe
9d7d4a0
5a85c1c
d46f274
493fc04
eea187f
2a51d9a
b8f46a1
a4edfdb
4beedac
4ad6d60
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1 @@ | ||
| web: bundle exec puma -C config/puma.rb | ||
| web: bundle exec thrust bin/rails server |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -16,6 +16,73 @@ export default class Footer extends BaseComponent { | |||||||||||||||||||||||||||||||||||||||||||||||
| <div className="w-16 h-16 bg-[url('../images/twitter_64.png')]" /> | ||||||||||||||||||||||||||||||||||||||||||||||||
| Rails On Maui on Twitter | ||||||||||||||||||||||||||||||||||||||||||||||||
| </a> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="mt-6 pt-6 border-t border-neutral-700 text-sm text-neutral-400"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex flex-col gap-3"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex items-center gap-2"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <svg className="w-4 h-4 text-green-400" fill="currentColor" viewBox="0 0 20 20"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <path | ||||||||||||||||||||||||||||||||||||||||||||||||
| fillRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" | ||||||||||||||||||||||||||||||||||||||||||||||||
| clipRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </svg> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <span> | ||||||||||||||||||||||||||||||||||||||||||||||||
| Powered by{' '} | ||||||||||||||||||||||||||||||||||||||||||||||||
| <a | ||||||||||||||||||||||||||||||||||||||||||||||||
| href="https://github.com/basecamp/thruster" | ||||||||||||||||||||||||||||||||||||||||||||||||
| className="text-blue-400 hover:text-blue-300 underline" | ||||||||||||||||||||||||||||||||||||||||||||||||
| target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
| rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||||||||
| Thruster HTTP/2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| </a>{' '} | ||||||||||||||||||||||||||||||||||||||||||||||||
| for optimized performance | ||||||||||||||||||||||||||||||||||||||||||||||||
| </span> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex flex-wrap gap-x-4 gap-y-2 ml-6"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex items-center gap-1.5"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <svg className="w-3.5 h-3.5 text-emerald-400" fill="currentColor" viewBox="0 0 20 20"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <path | ||||||||||||||||||||||||||||||||||||||||||||||||
| fillRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" | ||||||||||||||||||||||||||||||||||||||||||||||||
| clipRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </svg> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <span className="text-xs">HTTP/2 Enabled</span> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex items-center gap-1.5"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <svg className="w-3.5 h-3.5 text-emerald-400" fill="currentColor" viewBox="0 0 20 20"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <path | ||||||||||||||||||||||||||||||||||||||||||||||||
| fillRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" | ||||||||||||||||||||||||||||||||||||||||||||||||
| clipRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </svg> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <span className="text-xs">Early Hints</span> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex items-center gap-1.5"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <svg className="w-3.5 h-3.5 text-emerald-400" fill="currentColor" viewBox="0 0 20 20"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <path | ||||||||||||||||||||||||||||||||||||||||||||||||
| fillRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" | ||||||||||||||||||||||||||||||||||||||||||||||||
| clipRule="evenodd" | ||||||||||||||||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </svg> | ||||||||||||||||||||||||||||||||||||||||||||||||
| <span className="text-xs"> | ||||||||||||||||||||||||||||||||||||||||||||||||
| Hosted on{' '} | ||||||||||||||||||||||||||||||||||||||||||||||||
| <a | ||||||||||||||||||||||||||||||||||||||||||||||||
| href="https://shakacode.controlplane.com" | ||||||||||||||||||||||||||||||||||||||||||||||||
| className="text-blue-400 hover:text-blue-300 underline" | ||||||||||||||||||||||||||||||||||||||||||||||||
| target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
| rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||||||||
| Control Plane | ||||||||||||||||||||||||||||||||||||||||||||||||
| </a> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </span> | ||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+73
to
+83
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "Hosted on Control Plane" claim may not be accurate for all deployments. This footer claims the app is hosted on Control Plane, but this app can be deployed to multiple platforms (Heroku, VPS, etc.) as documented in the README. Hardcoding a deployment-specific claim could be misleading. Consider either:
-<span className="text-xs">
- Hosted on{' '}
- <a
- href="https://shakacode.controlplane.com"
- className="text-blue-400 hover:text-blue-300 underline"
- target="_blank"
- rel="noopener noreferrer"
- >
- Control Plane
- </a>
-</span>
+<span className="text-xs">
+ Supports{' '}
+ <a
+ href="https://shakacode.controlplane.com"
+ className="text-blue-400 hover:text-blue-300 underline"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ Control Plane
+ </a>
+ {' '}hosting
+</span>📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||
| </footer> | ||||||||||||||||||||||||||||||||||||||||||||||||
| ); | ||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
Extract repeated SVG checkmark icon to reduce duplication.
The same checkmark SVG icon is repeated 4 times (lines 22-28, 44-50, 54-60, 64-70). This violates DRY principles and makes maintenance harder.
Consider extracting to a reusable component:
Then use it throughout:
🤖 Prompt for AI Agents