feat(cli): include simple.css in generated layout.cfm by default#2369
Merged
feat(cli): include simple.css in generated layout.cfm by default#2369
Conversation
Fresh `wheels new` apps now ship with a CDN link to simple.css (https://simplecss.org/) in app/views/layout.cfm, giving scaffolded views a clean modern look out of the box without any markup changes. Wheels' form helpers (textField, startFormTag, etc.) already emit semantic HTML, so the change is invisible to the rest of the framework. Why simple.css and not a fuller component kit: - Classless — zero markup changes, no class soup. The tutorial chapters introducing models / Turbo / auth don't have to also teach styling. - 6KB single file from a CDN. No build step, no npm, no JS dependency. - One line in layout.cfm; users can remove or replace it trivially. For users who want a richer kit, the `wheels-basecoat` package (shadcn/ui-quality components, Tailwind-based) is the natural next step — a follow-up PR will add a bonus tutorial chapter walking through its install and usage. Also updates Part 1 of the Build a Blog tutorial. The previous "On Hotwire and Basecoat" Aside referenced Basecoat as something "that arrives as a package later in the tutorial when you actually need it" — that arrival never happened in chapters 2-7. Replaces it with a factual "On styling" Aside that points to the simple.css link in the generated layout, plus a separate "On Turbo" note that matches chapter 4's actual CDN-script-tag approach. Verified end-to-end on a fresh VM: wheels new simplecss-test cd simplecss-test && wheels start curl localhost:8080/ # => HTML contains: # <link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css"> curl -I https://cdn.simplecss.org/simple.min.css # => HTTP/2 200 Existing apps are unaffected — layout.cfm is only emitted by `wheels new`, never re-written on upgrade. Other inaccurate basecoat references in the tutorial index, chapter 3, and chapter 7 will be corrected in the bonus-chapter follow-up PR (which actually delivers basecoat), since fixing them in isolation here would leave the index pointing at nothing. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced Apr 29, 2026
bpamiri
added a commit
that referenced
this pull request
Apr 29, 2026
#2372) PR #2369 made simple.css the actual default styling and corrected chapter 1's misleading "Basecoat arrives later" Aside. Three other places in the tutorial still claimed basecoat is part of the main flow even though chapters 2-7 never install or use it. This PR reconciles those references with what the tutorial actually delivers. Changes (3 files, 6 lines): - tutorial/index.mdx * description: drop "Basecoat" from the intro blurb * tech-stack list: replace "Styling: Basecoat UI ... arrives via the basecoat package" with the truth — simple.css is the default in the generated layout, basecoat is an optional post-tutorial upgrade. Also reframe the Hotwire bullet to match how Part 4 actually wires Turbo (CDN script tag, not the hotwire package — that's still aspirational at 4.0). * Part 3 row: change "Activate Hotwire and Basecoat" to "Tour the generated files and meet Wheels' package system". Chapter 3 actually does the latter; it never activates either package. - tutorial/02-first-model.mdx * "What's next" block: replace the false promise that Part 3 will activate Hotwire and Basecoat with what Part 3 really does — tour the package system + first look at Hotwire ahead of Part 4 where Turbo Frames land for real. - tutorial/07-testing-deploying.mdx * "What you built" recap: replace "Full CRUD scaffold with Basecoat styling" with "Full CRUD scaffold rendered with simple.css default styling and Turbo Drive page transitions". The reader did not, in fact, build with Basecoat. Chapter 3's package catalog (which lists hotwire, basecoat, sentry as examples) stays unchanged — that section describes the package system generically and is factually correct. Chapter 1's Aside (added in PR #2369) is the canonical word on the styling default. A bonus chapter walking through `wheels packages install wheels-basecoat` is planned as a follow-up PR. Today's runtime can't install the package end-to-end (the BuildInfo version-detection bug fixed in PR #2368 is also breaking the package wheelsVersion compatibility check, and the `wheels packages install` subcommand has a separate routing issue that drops to LuCLI's installer instead of the Wheels module's). Once #2368 propagates to a brew snapshot and the install path is verified end-to-end, the bonus chapter follows. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fresh
wheels newapps now ship with simple.css linked fromapp/views/layout.cfm, so scaffolded views render with a clean, modern look out of the box — no markup changes, no build step, no class soup.<h1>,<input>,<button>(Times New Roman + browser defaults)Why simple.css and not a fuller component kit
Discussed and chosen over
wheels-basecoatfor the default because:layout.cfm. The comment above it mentionswheels packages install wheels-basecoatas the natural next step for users who want components.wheels-basecoatis still the right choice for users who want shadcn/ui-quality components, but it earns its own optional bonus chapter in a follow-up PR — both because installing it is itself a meaningful Wheels lesson (the package system) and because dropping it into the tutorial main path would dilute every chapter that follows.Files
cli/lucli/templates/app/app/views/layout.cfm— adds the<link>and a comment block explaining what it is and how to swap.web/sites/guides/src/content/docs/v4-0-0-snapshot/start-here/tutorial/01-hello-wheels.mdx— replaces the existing "On Hotwire and Basecoat" Aside with a factual "On styling" + "On Turbo" pair. The old Aside claimed Basecoat would arrive as a package later in the tutorial; that never happened in chapters 2-7. The new Aside points at the simple.css link as the actual default and atwheels-basecoat(linked to its repo) as the post-tutorial upgrade path.What's NOT in this PR
The tutorial has a handful of other places that reference Basecoat as if it were already part of the main flow:
tutorial/index.mdx— "Styling: Basecoat UI on scaffolded forms and views. Arrives via thebasecoatpackage."tutorial/02-first-model.mdx— "you'll also activate the Hotwire and Basecoat packages"tutorial/03-crud-scaffold.mdx— chapter description claims to "Activate Hotwire and Basecoat"tutorial/07-testing-deploying.mdx— recap claims "Full CRUD scaffold with Basecoat styling"These will be fixed in the bonus-chapter follow-up PR that actually delivers the basecoat content. Fixing them here would leave the index pointing at no chapter; fixing them in the follow-up keeps the change coherent (a chapter that delivers basecoat goes in alongside the references that now point at it).
Verification
End-to-end verified on a fresh VM:
Existing apps are unaffected —
layout.cfmis only emitted bywheels new, never rewritten on framework upgrade.Test plan
wheels new <app>produces alayout.cfmcontaining the simple.css link<link>line returns to the previous unstyled behaviorFollow-up
08-bonus-basecoat.mdx— install viawheels packages install wheels-basecoat, servebasecoat.min.css, swap the simple.css link for#basecoatIncludes()#, convert the post show + comment form to useuiCard()/uiField()/uiButton(). Will also clean up the stale Basecoat references inindex.mdx, ch.2, ch.3, ch.7 (now backed by an actual chapter to point at).