Review Stack
vanillasky/reviewStackFreeBlock
Two or more real attributed reviews, ratings, or quotes that should appear as social proof together. Requires real quote/source content.
See it running
Open the demo on vanillasky
vanillasky.ai/docs/components/reviewStackInstall it
npx shadcn@latest add https://vanillasky.ai/r/reviewStack.jsonSource
1/**2 * social-review-stack — stacked review cards with staggered spring entrance.3 *4 * Converted from Remotion AppStoreReviews. Three review cards stacked with5 * slight rotations, each sliding in with a spring delay. Gold star ratings,6 * dark cards on dark background.7 *8 * Block structure (docs/blocks.md):9 * background — SceneBackground (brand gradient / Pexels media + scrims)10 * hero — ReviewStack primitive (the card stack IS the scene; no11 * separate caption slot — review titles carry the text)12 */1314import type { VariableField } from "../video-config";15import type { SceneTemplateProps } from "./types";16import { resolveTokens } from "../theme";17import { SceneBackground, mediaBackgroundSchemaFields, mediaBackgroundDefaults } from "./scene-background";18import { ReviewStack } from "../primitives/social/ReviewStack";1920/** Build reviews array from individual variable fields */21function buildReviews(variables: Record<string, unknown>): { title: string; body: string; author: string }[] {22 const reviews: { title: string; body: string; author: string }[] = [];23 for (let i = 1; i <= 3; i++) {24 const title = String(variables[`review${i}Title`] || "");25 if (!title) continue;26 reviews.push({27 title,28 body: String(variables[`review${i}Body`] || ""),29 author: String(variables[`review${i}Author`] || ""),30 });31 }32 return reviews;33}3435export const socialReviewStackSchema: Record<string, VariableField> = {36 review1Title: {37 type: "string",38 label: "Review 1 — Title",39 default: "Life changing app",40 required: true,41 description: "Headline of the first review",42 },43 review1Body: {44 type: "string",45 label: "Review 1 — Body",46 default: "Been using this for a month and can't imagine going back",47 description: "Body text of the first review",48 },49 review1Author: {50 type: "string",51 label: "Review 1 — Author",52 default: "Sarah M.",53 description: "Author name for the first review",54 },55 review2Title: {56 type: "string",57 label: "Review 2 — Title",58 default: "Best in class",59 required: true,60 description: "Headline of the second review",61 },62 review2Body: {63 type: "string",64 label: "Review 2 — Body",65 default: "Finally an app that just works. No bloat, no nonsense.",66 description: "Body text of the second review",67 },68 review2Author: {69 type: "string",70 label: "Review 2 — Author",71 default: "Mike R.",72// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from vanillasky
All 33 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Bar ChartbarChart | vanillasky | Blocks | Free | 1 dep · 8 files | |
| Before AfterbeforeAfter | vanillasky | Blocks | Free | 1 dep · 7 files | |
| Big NumberbigNumber | vanillasky | Blocks | Free | 1 dep · 8 files | |
| Brand MessagebrandMessage | vanillasky | Blocks | Free | 1 dep · 6 files | |
| Card ListcardList | vanillasky | Blocks | Free | 1 dep · 8 files | |
| Chat MessengerchatMessenger | vanillasky | Blocks | Free | 1 dep · 6 files | |
| Chat WhatsappchatWhatsapp | vanillasky | Blocks | Free | 1 dep · 6 files | |
| Code EditorcodeEditor | vanillasky | Blocks | Free | 1 dep · 7 files |
