Skip to content

Quality pass for Table Seating Planner, Travel Itinerary, Homework Grader, and Blog App listings - #688

Open
lucaslyl wants to merge 7 commits into
mainfrom
tsp-top-4-quality-fixes
Open

Quality pass for Table Seating Planner, Travel Itinerary, Homework Grader, and Blog App listings#688
lucaslyl wants to merge 7 commits into
mainfrom
tsp-top-4-quality-fixes

Conversation

@lucaslyl

@lucaslyl lucaslyl commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Quality pass over four catalog listings, driven by the grading rubric. One commit per listing.

Linear: CS-12416 (tracking) — CS-12415 TSP · CS-12417 Travel Itinerary · CS-12419 Homework Grader · CS-12418 Blog App

Table Seating Planner (1162602)

Dietary field, assigned-seat wording, 11px label floor, spec gaps.

Travel Itinerary (cfed3a5)

  • Per-stop estimated cost + TRIP BUDGET total bar (black receipt-style, currency selector); est. label separated from the amount
  • Theme pin fix (mint button bug) with --primary-foreground pairing; airbnb Theme card removed (default pin already is that look); Tropic Lagoon + Midnight Voyager themes linked to examples
  • Contrast audit fixes: 14 hardcoded white surfaces -> --c-card chain (1.25:1 -> 13.4:1 on dark themes), category-colored text via color-mix (5.3:1+); gradients flattened to accent
  • 4 hero-first screenshots, instance cleanup

Homework Grader (242b6b5)

  • Per-question AI feedback (GradeField.questionFeedbacks + skill prompt + per-question FEEDBACK blocks); isGradeConsistent() gates every score display; structural changes clear the grade
  • Isolated-is-the-app: add/edit/remove questions inline, two-tap delete, empty states, A–F enum grade editor, redundant Feedback tab and sidebar CTA removed
  • Theming (--c-* semantic chains, pin, 11 gradients flattened) + container-query responsiveness
  • fresh-assignment empty example, Math example rewritten (5 questions with targeted feedback), Spec readMes, 4 screenshots

Blog App (29a8a20)

  • New Post button fixed (read the ref from the actual CardTypeFilter; dropped a write to a nonexistent relationship)
  • Theming overhaul: blog-defaults.gts single source (was 6 copies), ~150 semantic token pairings, :root Google-Fonts leak scoped to .blog-scope, default pin, 3 Theme cards — linked themes now actually re-skin the app; dark-theme chip contrast fix
  • Container-query responsive front page (old mobile rules targeted a selector that didn't exist); inline editing everywhere; empty states; dead modules removed (user/review-blog/slot-canvas/related); poll destroy guards
  • Packaged into 7af9aa-blog-app/: 15 Specs (8 had pre-move ./ module refs that broke listing install — now ../), CardListing with examples/supportingCards/screenshots/thumbnail

Verification

  • Live-verified in dev host: theme reskins, contrast audits (both dark themes), container-query stacking at narrow widths, AI grading round-trip, listing install/remix spec resolution
  • eslint + prettier + ember-template-lint green across all four listings

🤖 Generated with Claude Code

lucaslyl and others added 4 commits August 3, 2026 13:35
…ording, 11px labels, spec gaps)

linear: https://linear.app/cardstack/issue/CS-12415/table-seating-planner-top-4-quality-fixes-dietary-field-assigned

## summary:
- Guest.dietary = containsMany(DietaryField) (8-option enum in utils DIETARY_OPTIONS): multi-select chips on the guest isolated view, dietary line on the embedded row, example data on 3 guests; all 10 Guest/Host instances normalized (photo attribute present, relative ../guest module refs)
- AI seat-arranger sees dietary: arrangeWithAI parties payload carries per-party dietary labels; skill prompt rules dietary is a secondary constraint used only when the user asks (relationship closeness stays primary)
- "Assigned" wording unified: 7 user-visible seated/unseat strings in tsp.gts switched to assigned/unassign, consistent with table.gts
- 11px label floor: 12 tag/label classes in tsp.gts + .g-vip in guest.gts bumped from 8-10px
- Field order for UX: fullName/photo re-declared on Guest/Host to hoist identity to the top of the edit form (subclass fields render before inherited); computed title last, Host gains 'Unnamed Host' title fallback
- Spec gaps: new Specs for CategoryField, RoleField, DietaryField; Person spec gains linkedExamples; Guest spec readMe documents dietary; CardListing specs 27 -> 30

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
linear: https://linear.app/cardstack/issue/CS-12417/travel-itinerary-budget-tracking-per-stop-and-trip-total

## summary:
- ItineraryStop.estimatedCost (NumberField) + trip-level currency (base CurrencyField) + computed estimatedTotalCost; TRIP BUDGET bar in isolated (black receipt-style strip, amount + 'estimated total' sub-label, compact currency select), per-stop ~$N chips in the list and embedded rows; switching currency relabels only (AI conversion noted as follow-up on the ticket)
- Themeless default pin (.ti-default-theme) added to isolated + fitted: fixes the app-default mint --primary leaking into the empty-state CTA (white-on-mint contrast bug); every accent fill now pairs with --primary-foreground
- Dark-theme contrast pass: 14 hardcoded white backgrounds -> var(--c-card) chain; category-colored text blended 38% toward foreground via color-mix (1.25:1 -> 5.3-13.4:1); 3 accent gradients flattened to solid accent (accent-dark literal didn't follow themes)
- Themes: airbnb Theme card removed (default pin covers it); new Tropic Lagoon (teal/coral) + Midnight Voyager (dark navy/gold) linked to the Paris and Malaysia examples and listed under supportingCards; Bali hero + fresh-trip stay themeless
- Example world: new fresh-trip empty instance (5th example, proves the designed empty state); 20/23 stops carry authored costs; instances normalized (relative module refs, USD currency)
- Packaging: 4 step-flow screenshots 800x600 hero-first (01-hero-budget, 02-empty-trip, 03-edit-stop-cost, 04-plan-with-ai) wired to images.0-3, stale screenshots removed; ai tag added; 14 empty Spec readMes written (components, ItineraryStop field, 8 utils, shared map-render)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
linear: https://linear.app/cardstack/issue/CS-12419/homework-grader-per-question-ai-feedback

## summary:
- GradeField.questionFeedbacks (containsMany Markdown, index-aligned with questionPoints); grading-skill prompt requires a same-length array and keeps overallFeedback to a brief summary; per-question FEEDBACK block under each question card; verified with a real grading round-trip
- Data integrity: exported isGradeConsistent() pure fn gates polling and every score/feedback display; adding/removing a question clears the grade outright (stale per-question data leaked onto new questions); points/feedback stay on GradeField so AI grading never rewrites the questions array
- Isolated-is-the-app: add/remove questions from isolated (two-tap armed delete), per-question edit toggle with a compact QuestionField edit template (Question + Max points; no isAnswered/answer/title), new questions open in author mode, zero-question empty state, link-a-skill hint, grade button hidden with no questions, Answers Updated toast only on real answer mutations of a graded assignment, duplicate sidebar re-grade CTA and the redundant Feedback tab removed (3 tabs -> 2), alert() -> dismissible error banner
- GradeField custom edit template; overallGrade is an A-F enum matching the skill's grading scale; Score Breakdown / overview list show question excerpts, cards use positional 'Question N' titles
- Theming: --c-* tokens chained to semantic vars (color-mix shades), hw-default-theme pin on isolated + fitted, 14 white-text pairings -> --primary-foreground, 11 gradients flattened, light surfaces tokenized
- Responsiveness via container queries on the card's own width: score hero stacks <560px (breakdown full-width), Feedback Summary stacks, sidebar becomes a top strip <640px
- Packaging: fresh-assignment empty example (hero-first order), Math example rewritten as 5 arithmetic questions (20/25, B, per-question feedback), cardTitles set, GradeField/QuestionField Spec readMes written, fabricated readMe section removed, 4 step-flow screenshots 800x600 hero-first

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
linear: https://linear.app/cardstack/issue/CS-12418/blog-app-listing-quality-pass-no-seo-feature

## summary:
- New Post fixed: createCard reads the ref from filter.type/cardRef (was reading a CardTypeFilter as an on-filter and writing a nonexistent blog relationship, so the button always threw)
- Theming: new blog-defaults.gts as the single source of default tokens (was copy-pasted 6x); every --blog-* var chained to semantic theme vars with literal fallbacks (~150 pairings); :root global injection (leaking Google Fonts @import into the whole host) scoped to .blog-scope; blog-default-theme pin on portal + post; linked Theme cards now actually re-skin the app; 3 Theme cards (modern-magazine linked to Ramped, warm-editorial, neon-brutalist); lead category chip text fixed dark on its fixed white pill (was theme-foreground -> invisible on dark themes)
- Responsiveness: hero/recent/picks sections driven by container queries on the card's own width (the old .hero-list mobile rules targeted a selector that never existed in the template)
- Isolated-is-the-app: categories/authors/cover/body inline-editable with placeholders, Publish button on unpublished lead, empty states for all four zero-result sections; duplicate figure caption removed (featured-image field already renders credit + caption)
- Dead code: user/review-blog/slot-canvas/related-posts modules and helper duplicates removed
- Leaks/perf: all polls get destroy guards + timeouts, wordCount computeVia fixed, invalid CSS fixed
- Packaging: moved into 7af9aa-blog-app/ (games stay in the package), 15 Specs with readMes -- 8 had pre-move './' module refs that resolved against Spec/ and broke listing install ("Error reading file .../Spec/games/game"), now '../'; CardListing with 2 examples + 3 theme supportingCards + app tag; 4 step-flow screenshots 800x600 hero-first (front page, post reader, picks/latest, neon-brutalist reskin) wired to images.0-3; listing thumbnail

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Staging Submissions Preview

This PR's content is pushed to the staging submissions realm: https://realms-staging.stack.cards/submissions/

Changed listings:

Changed folders:

  • 25f2fc-homework-grader/
  • 41e20f-wedding-table-seating-planner/
  • 7af9aa-blog-app/
  • c7eda3-travel-itinerary-planner/

Updated at 2026-08-04 04:45:31 UTC for commit 7bdb3ab. Shared realm: only this PR's changed files are pushed; files touched by multiple PRs reflect whichever pushed last, and deleted files are not removed.

@lucaslyl
lucaslyl requested a review from a team August 3, 2026 14:52
@lucaslyl lucaslyl self-assigned this Aug 3, 2026
richardhjtan and others added 3 commits August 4, 2026 00:40
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- All 12 screenshots for Travel Itinerary, Homework Grader, and Blog App recaptured at the standard geometry (1240x1028 viewport, .stack-item-content crop) so no workspace chrome, stack headers, or AI panel appear in frame; Blog App thumbnail regenerated the same way
- Travel Itinerary frame 4 is now the Midnight Voyager themed Malaysia example (the old frame showed the assistant panel, which the crop standard excludes; the Plan with AI button stays visible in frames 1-3); Homework Grader frame 4 is the Math overview with the Re-grade button as the in-card AI keyframe
- Travel Itinerary and Homework Grader summaries rewritten from component-speak to the problem -> signature interaction / "Open the demo" narrative shape; Blog App summary polished (Writer's Picks explained, category filters mentioned)
- Restore the four shared-module specs (sort, card-list, grid, contact-link) and their listing links: the install plan copies exactly the spec-referenced modules, so without them a remixed BlogApp module could not resolve its imports; every local import of every spec'd module is spec-covered again (19 linked specs)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants