From 55f4523698bc06efd3b3ea8c1ab73905636441b5 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 23:52:34 +0000 Subject: [PATCH 1/2] Implement theme tag system with AI generation and filtering - Integrated spatie/laravel-tags for theme categorization. - Removed legacy 'categories' JSON column from themes table. - Created TagsSeeder with 40+ themes mapped to relevant style tags. - Updated AiService to generate description and style tags in one request. - Updated ThemeObserver to automate tag assignment on creation. - Updated ThemesController to support tag-based filtering. - Updated frontend search and display components to use tags. - Updated TypeScript types and added feature tests. Co-authored-by: claudemyburgh <6057076+claudemyburgh@users.noreply.github.com> --- .../skills/inertia-react-development/SKILL.md | 524 --------------- .../skills/inertia-react-development/SKILL.md | 524 --------------- AGENTS.md | 9 +- CLAUDE.md | 9 +- GEMINI.md | 9 +- app/Concerns/HasTheme.php | 3 +- app/Http/Controllers/ThemesController.php | 77 ++- app/Models/Theme.php | 6 +- app/Observers/ThemeObserver.php | 17 +- app/Services/AiService.php | 30 +- boost.json | 1 - composer.json | 3 +- composer.lock | 231 ++++++- .../2026_05_15_205036_create_tag_tables.php | 36 + ...5116_drop_categories_from_themes_table.php | 28 + database/seeders/TagsSeeder.php | 70 ++ package-lock.json | 508 +++----------- ...ss-DoJAX6VF.js => animate-css-DM5zQeFt.js} | 2 +- .../{app-D-vicK8G.js => app-BNQh8pIH.js} | 4 +- public/build/assets/app-DwgJtLjQ.css | 2 - public/build/assets/app-s3x23oVj.css | 2 + ...nce-Q-DCdirr.js => appearance-BaDYKMPo.js} | 2 +- ...xLBbFtI.js => appearance-tabs-GtZRWYFx.js} | 2 +- .../{badge-CwqcICCo.js => badge-B9Sw2ZqT.js} | 2 +- .../{card-DKcStgZy.js => card-BrQ_1jvH.js} | 2 +- public/build/assets/check-C2XNrpN9.js | 1 + public/build/assets/check-Ca_c-YNO.js | 1 - public/build/assets/chevron-down-B76swLof.js | 1 + public/build/assets/chevron-down-CoSL9KKC.js | 1 - ...onfirm--yrvSaph.js => confirm-CLsk9TSZ.js} | 2 +- ...a1tEA4.js => confirm-password-B4UJ_SZK.js} | 2 +- .../{copy-BjG4bJZV.js => copy-CPnk8GZz.js} | 2 +- ...{create-DxP5Uf72.js => create-CvWBZ6o3.js} | 2 +- ...oard-C4SCw9KM.js => dashboard-C2OlAAFY.js} | 2 +- ...{dialog-Ct7sXtDE.js => dialog-DP1YV9ik.js} | 2 +- .../{dist-B4chxNyp.js => dist-BF5j3CN_.js} | 2 +- .../{fonts-DcT3sjnK.js => fonts-Citmb68Z.js} | 2 +- ...jNYfimq.js => forgot-password-B-bPt_Vx.js} | 2 +- ...{github-pNLnk6hO.js => github-C3dLPZq6.js} | 2 +- ...al-D5sszaKt.js => glow-radial-CXWKqGB3.js} | 2 +- ...ack-kQkVzWmw.js => glow-stack-BF6k2Wsu.js} | 2 +- .../{heart-CYy4CIZJ.js => heart-BdhgUHrB.js} | 2 +- .../{home-D20i1LCG.js => home-Q3K6nTqE.js} | 2 +- ...or-B5H7YoXv.js => input-error-DB3u6aXA.js} | 2 +- .../{label-DvK0MGa6.js => label-vzyHiF-f.js} | 2 +- ...-BLIDZqFl.js => loader-circle-B9DMPXWd.js} | 2 +- .../{login-IkPFTi8Z.js => login-CL0D4n-6.js} | 2 +- ...ut-iiWhK4Wa.js => main-layout-DoyraoeM.js} | 2 +- ...js => main-registry-installer-DijJU1rf.js} | 2 +- ...sword-CmI5dXfk.js => password-D_dpqQuB.js} | 2 +- ...DDDsytAg.js => password-input-DZIz2Cgp.js} | 2 +- ...4fw.js => placeholder-pattern-DLzMEPCe.js} | 2 +- public/build/assets/pricing-DsZD2a0s.js | 1 - public/build/assets/pricing-wzsxXu33.js | 1 + ...rofile-CzNhDgMT.js => profile-BnMEmQrC.js} | 2 +- ...ister-C277iz2D.js => register-CoVsSTAm.js} | 2 +- ...D0pH2Hv-.js => reset-password-g87_RVaF.js} | 2 +- ...urity-DLKqRKDF.js => security-D8D9qPJ2.js} | 2 +- ...{select-BrXsEqf5.js => select-QiB--xhU.js} | 2 +- .../{show-ClwAgayG.js => show-BJ6SahdX.js} | 6 +- ...lite-p7FpGb-e.js => socialite-BcdDJg96.js} | 2 +- ...pinner-BtRfbqVC.js => spinner-D7wLMoLV.js} | 2 +- ...n-DZat287F.js => subscription--RdIbCb7.js} | 2 +- ...n-ChmDDyXr.js => subscription-BnhkJWD-.js} | 2 +- .../{sun-BteWPlYp.js => sun-CnLYbLif.js} | 2 +- ...link-Z658BxWM.js => text-link-D0RQgsER.js} | 2 +- public/build/assets/themes-Cg9HbCZ6.js | 1 - public/build/assets/themes-D-YkXS0Z.js | 1 + ...xg.js => two-factor-challenge-CUwg_c1V.js} | 2 +- ...-DFVcSkn1.js => use-clipboard-BdaxVVrC.js} | 2 +- ...4BT.js => use-two-factor-auth-B0gpqk-4.js} | 2 +- ...n-43yx43IR.js => verification-DELWPsUu.js} | 2 +- ...l-BnAvfn2D.js => verify-email-DNvlDss4.js} | 2 +- public/build/manifest.json | 392 +++++------ .../layouts/main/theme/main-theme-search.tsx | 34 +- resources/js/pages/themes/index.tsx | 10 +- resources/js/pages/themes/show.tsx | 6 +- resources/js/routes/animate-css/index.ts | 89 +-- resources/js/routes/appearance/index.ts | 89 +-- resources/js/routes/boost/index.ts | 57 +- resources/js/routes/cashier/index.ts | 57 +- resources/js/routes/fonts/index.ts | 89 +-- resources/js/routes/index.ts | 513 +++++++------- resources/js/routes/login/index.ts | 57 +- resources/js/routes/password/confirm/index.ts | 57 +- resources/js/routes/password/index.ts | 497 +++++++------- resources/js/routes/profile/index.ts | 249 +++---- resources/js/routes/register/index.ts | 57 +- resources/js/routes/sanctum/index.ts | 89 +-- resources/js/routes/security/index.ts | 89 +-- resources/js/routes/socialite/index.ts | 202 +++--- resources/js/routes/storage/index.ts | 98 +-- resources/js/routes/storage/local/index.ts | 84 +-- resources/js/routes/subscription/index.ts | 268 ++++---- resources/js/routes/themes/index.ts | 356 +++++----- resources/js/routes/two-factor/index.ts | 626 +++++++++--------- resources/js/routes/two-factor/login/index.ts | 57 +- resources/js/routes/user-password/index.ts | 75 +-- resources/js/routes/verification/index.ts | 255 +++---- resources/js/types/registry.ts | 8 +- resources/js/types/theme.ts | 4 +- tests/Feature/AiDescriptionTest.php | 15 +- 102 files changed, 2922 insertions(+), 3752 deletions(-) delete mode 100644 .agents/skills/inertia-react-development/SKILL.md delete mode 100644 .claude/skills/inertia-react-development/SKILL.md create mode 100644 database/migrations/2026_05_15_205036_create_tag_tables.php create mode 100644 database/migrations/2026_05_15_205116_drop_categories_from_themes_table.php create mode 100644 database/seeders/TagsSeeder.php rename public/build/assets/{animate-css-DoJAX6VF.js => animate-css-DM5zQeFt.js} (99%) rename public/build/assets/{app-D-vicK8G.js => app-BNQh8pIH.js} (99%) delete mode 100644 public/build/assets/app-DwgJtLjQ.css create mode 100644 public/build/assets/app-s3x23oVj.css rename public/build/assets/{appearance-Q-DCdirr.js => appearance-BaDYKMPo.js} (83%) rename public/build/assets/{appearance-tabs-sxLBbFtI.js => appearance-tabs-GtZRWYFx.js} (90%) rename public/build/assets/{badge-CwqcICCo.js => badge-B9Sw2ZqT.js} (91%) rename public/build/assets/{card-DKcStgZy.js => card-BrQ_1jvH.js} (96%) create mode 100644 public/build/assets/check-C2XNrpN9.js delete mode 100644 public/build/assets/check-Ca_c-YNO.js create mode 100644 public/build/assets/chevron-down-B76swLof.js delete mode 100644 public/build/assets/chevron-down-CoSL9KKC.js rename public/build/assets/{confirm--yrvSaph.js => confirm-CLsk9TSZ.js} (82%) rename public/build/assets/{confirm-password-Bma1tEA4.js => confirm-password-B4UJ_SZK.js} (76%) rename public/build/assets/{copy-BjG4bJZV.js => copy-CPnk8GZz.js} (71%) rename public/build/assets/{create-DxP5Uf72.js => create-CvWBZ6o3.js} (87%) rename public/build/assets/{dashboard-C4SCw9KM.js => dashboard-C2OlAAFY.js} (93%) rename public/build/assets/{dialog-Ct7sXtDE.js => dialog-DP1YV9ik.js} (98%) rename public/build/assets/{dist-B4chxNyp.js => dist-BF5j3CN_.js} (74%) rename public/build/assets/{fonts-DcT3sjnK.js => fonts-Citmb68Z.js} (94%) rename public/build/assets/{forgot-password-CjNYfimq.js => forgot-password-B-bPt_Vx.js} (83%) rename public/build/assets/{github-pNLnk6hO.js => github-C3dLPZq6.js} (83%) rename public/build/assets/{glow-radial-D5sszaKt.js => glow-radial-CXWKqGB3.js} (98%) rename public/build/assets/{glow-stack-kQkVzWmw.js => glow-stack-BF6k2Wsu.js} (97%) rename public/build/assets/{heart-CYy4CIZJ.js => heart-BdhgUHrB.js} (72%) rename public/build/assets/{home-D20i1LCG.js => home-Q3K6nTqE.js} (99%) rename public/build/assets/{input-error-B5H7YoXv.js => input-error-DB3u6aXA.js} (84%) rename public/build/assets/{label-DvK0MGa6.js => label-vzyHiF-f.js} (92%) rename public/build/assets/{loader-circle-BLIDZqFl.js => loader-circle-B9DMPXWd.js} (50%) rename public/build/assets/{login-IkPFTi8Z.js => login-CL0D4n-6.js} (95%) rename public/build/assets/{main-layout-iiWhK4Wa.js => main-layout-DoyraoeM.js} (99%) rename public/build/assets/{main-registry-installer-B_mlygi6.js => main-registry-installer-DijJU1rf.js} (99%) rename public/build/assets/{password-CmI5dXfk.js => password-D_dpqQuB.js} (95%) rename public/build/assets/{password-input-DDDsytAg.js => password-input-DZIz2Cgp.js} (96%) rename public/build/assets/{placeholder-pattern-DAbh34fw.js => placeholder-pattern-DLzMEPCe.js} (91%) delete mode 100644 public/build/assets/pricing-DsZD2a0s.js create mode 100644 public/build/assets/pricing-wzsxXu33.js rename public/build/assets/{profile-CzNhDgMT.js => profile-BnMEmQrC.js} (94%) rename public/build/assets/{register-C277iz2D.js => register-CoVsSTAm.js} (88%) rename public/build/assets/{reset-password-D0pH2Hv-.js => reset-password-g87_RVaF.js} (85%) rename public/build/assets/{security-DLKqRKDF.js => security-D8D9qPJ2.js} (96%) rename public/build/assets/{select-BrXsEqf5.js => select-QiB--xhU.js} (99%) rename public/build/assets/{show-ClwAgayG.js => show-BJ6SahdX.js} (79%) rename public/build/assets/{socialite-p7FpGb-e.js => socialite-BcdDJg96.js} (96%) rename public/build/assets/{spinner-BtRfbqVC.js => spinner-D7wLMoLV.js} (70%) rename public/build/assets/{subscription-DZat287F.js => subscription--RdIbCb7.js} (95%) rename public/build/assets/{subscription-ChmDDyXr.js => subscription-BnhkJWD-.js} (92%) rename public/build/assets/{sun-BteWPlYp.js => sun-CnLYbLif.js} (88%) rename public/build/assets/{text-link-Z658BxWM.js => text-link-D0RQgsER.js} (88%) delete mode 100644 public/build/assets/themes-Cg9HbCZ6.js create mode 100644 public/build/assets/themes-D-YkXS0Z.js rename public/build/assets/{two-factor-challenge-uvf-eUxg.js => two-factor-challenge-CUwg_c1V.js} (92%) rename public/build/assets/{use-clipboard-DFVcSkn1.js => use-clipboard-BdaxVVrC.js} (96%) rename public/build/assets/{use-two-factor-auth-B2AMY4BT.js => use-two-factor-auth-B0gpqk-4.js} (99%) rename public/build/assets/{verification-43yx43IR.js => verification-DELWPsUu.js} (95%) rename public/build/assets/{verify-email-BnAvfn2D.js => verify-email-DNvlDss4.js} (84%) diff --git a/.agents/skills/inertia-react-development/SKILL.md b/.agents/skills/inertia-react-development/SKILL.md deleted file mode 100644 index e440560..0000000 --- a/.agents/skills/inertia-react-development/SKILL.md +++ /dev/null @@ -1,524 +0,0 @@ ---- -name: inertia-react-development -description: "Develops Inertia.js v3 React client-side applications. Activates when creating React pages, forms, or navigation; using ,