feat(catalog): add tool showcase carousels#104
Merged
Conversation
Signed-off-by: Justin Levine <20596508+jal-co@users.noreply.github.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.
What
tool-alpha-2Why
Tool listings need creator-controlled presentation rather than relying on fragile Open Graph images. They also need catalog-native discovery and pricing context without implying that Modulora handles checkout.
How
Uploads use the existing Modulora R2 media binding. Submission accepts only immutable image URLs under the signed-in user’s exact R2 prefix, validates UUID-shaped object paths, and confirms every object exists before creating a review version. Existing approved tool listings remain compatible and use their mirrored Open Graph image or domain fallback until resubmitted.
Pricing is display/filter metadata only; visits and checkout remain external. Tools appear in the top-level Tools category and retain subcategories such as Utilities.
Tour
packages/db/src/schema.tsand migration0034_many_longshot.sqladd showcase URLs and pricing metadata. The large snapshot is generated Drizzle metadata.apps/web/src/routes/api/upload-tool-image.ts,lib/tool-showcase.ts, andlib/tool-listings.tsimplement authenticated storage and fail-closed ownership/existence validation.components/tool-listing-editor.tsxadds upload, ordering, removal, and pricing controls.components/tool-image-carousel.tsxprovides the reusable accessible carousel; catalog/detail/dashboard/review surfaces consume it.routes/components.index.tsxadds Tools and Freemium filters plus tool pricing labels.tool-alpha-2describe the updated submission/review contract.Testing
pnpm --filter @modulora/db typecheckpnpm --filter web typecheckpnpm --filter web test(82 passed, 9 credentialed integration tests skipped)pnpm --filter web buildpnpm --filter web build-storybookgit diff --checkdrizzle-kit push --force; confirmed both production columns existScreenshots
/tmp/tool-showcase-editor.png/tmp/tool-category-pricing-card.png/tmp/tool-carousel-final.png