A modern, mobile-first IP licensing marketplace with a Tinder-like swipe interface powered by Story Protocol. Discover, like, and license IP assets with smooth animations and an intuitive user experience.
- Tinder-style card swiping - Smooth, gesture-based IP discovery
- Swipe left to skip - Pass on assets that don't interest you
- Swipe right to like - Save IP assets to your favorites
- Tap to view details - Open full IP asset information
- Undo last swipe - Made a mistake? No problem!
- Spring animations - Buttery smooth Framer Motion animations
- Filter by type - Image, Music, Text, Video
- Filter by collection - Color Cats, Sigma Music, PizzaDAO, WTF Freg
- Filter by license - Free or Paid
- Sort options - Newest, Popular, Price (Low/High)
- Multiple license types - Personal, Commercial, Remix
- Transparent pricing - See costs upfront
- Web3 wallet integration - ConnectKit for seamless connection
- Transaction tracking - View on Story Protocol explorer
- License management - Track all your acquired licenses
- Glass morphism design - Modern, sleek interface
- Responsive layout - Mobile-first, works everywhere
- Dark theme - Easy on the eyes
- Toast notifications - Instant feedback
- Loading states - Never wonder what's happening
- Empty states - Helpful guidance when content is missing
- Next.js 14 - App Router for modern React applications
- TypeScript - Type safety throughout
- Tailwind CSS - Utility-first styling
- Framer Motion - Smooth animations and gestures
- @use-gesture/react - Advanced gesture handling
- wagmi v2 - React hooks for Ethereum
- viem - TypeScript Ethereum library
- ConnectKit - Beautiful wallet connection
- @story-protocol/core-sdk - Story Protocol integration
- Zustand - Simple state management
- TanStack Query - Powerful data fetching
- sonner - Beautiful toast notifications
- lucide-react - Clean, consistent icons
- Node.js 18+ and npm/yarn/pnpm
- A WalletConnect Project ID (Get one here)
-
Clone the repository
git clone https://github.com/yourusername/storyboard.git cd storyboard -
Install dependencies
npm install # or yarn install # or pnpm install
-
Set up environment variables
cp .env.example .env
Edit
.envand add your WalletConnect Project ID:NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=your_project_id_here
-
Run the development server
npm run dev # or yarn dev # or pnpm dev
-
Open your browser Navigate to http://localhost:3000
storyboard/
├── src/
│ ├── app/ # Next.js App Router pages
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Home page (Swipe interface)
│ │ ├── likes/ # Likes page
│ │ └── licenses/ # My Licenses page
│ ├── components/
│ │ ├── swipe/ # Swipe card components
│ │ ├── modals/ # Modal components
│ │ ├── filters/ # Filter components
│ │ ├── navigation/ # Navigation components
│ │ ├── providers/ # Context providers
│ │ └── ui/ # Reusable UI components
│ ├── store/ # Zustand stores
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utilities and constants
│ ├── data/ # Mock data
│ └── types/ # TypeScript types
├── public/ # Static assets
└── ...config files
This project is built on Story Protocol Odyssey Testnet:
- Chain ID: 1315
- RPC URL: https://aeneid.storyrpc.io
- Explorer: https://aeneid.storyscan.xyz
- Portal: https://aeneid.explorer.story.foundation
- User discovers IP assets through swipe interface
- User selects license type (Personal, Commercial, Remix)
- User connects wallet via ConnectKit
- Transaction is submitted to Story Protocol
- License is minted and tracked on-chain
- User can download/access licensed content
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run type-check- Run TypeScript type checking
The project includes 15 mock IP assets across different categories:
- Images: Color Cats, PizzaDAO, WTF Freg collections
- Music: Sigma Music collection
- Various license types: Free, 0.01 IP - 0.4 IP
- Metadata: Views, likes, tags, creator info
In production, replace mock data with real Story Protocol IP assets using the SDK.
Edit src/lib/constants.ts:
export const COLLECTIONS = [
{ value: 'all', label: 'All Collections' },
{ value: 'Your Collection', label: 'Your Collection' },
// ... add more
]Edit tailwind.config.js:
colors: {
primary: '#FF6B35', // Story Orange
accent: '#7C3AED', // Purple
success: '#10B981', // Green
// ... customize
}Edit src/lib/constants.ts:
export const SWIPE_THRESHOLD = 100 // Pixels to trigger swipe
export const SWIPE_ROTATION_MULTIPLIER = 0.15
export const SPRING_CONFIG = { stiffness: 300, damping: 30 }- Push your code to GitHub
- Import project on Vercel
- Add environment variables
- Deploy!
Build the project:
npm run buildThe output will be in .next folder. Deploy using any Node.js hosting service.
The current implementation uses mock transactions for demo purposes. To integrate with real Story Protocol:
-
Install the SDK (already included):
npm install @story-protocol/core-sdk
-
Update
src/hooks/useStoryProtocol.ts:import { StoryClient } from '@story-protocol/core-sdk' const client = new StoryClient({ wallet: walletClient, chainId: 1315, })
-
Implement real licensing:
const result = await client.license.mintLicense({ ipId, licenseTermsId, amount: 1 })
Refer to Story Protocol Docs for detailed integration.
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
- Lighthouse Score: 90+
- First Contentful Paint: < 1.5s
- Smooth 60fps animations
- Optimized images with Next.js Image
- Code splitting with Next.js
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Story Protocol - IP infrastructure
- ConnectKit - Wallet connection UI
- Framer Motion - Animation library
- Vercel - Hosting platform
For questions or support:
- Open an issue on GitHub
- Join Story Protocol Discord
- Read the Story Protocol Docs
Built with ❤️ on Story Protocol