Turn your daily thoughts into tradeable coins on Base
111words is a Farcaster MiniApp that transforms daily writing into ERC-20 coins using Zora's Coins v4 SDK. Write, mint, and trade your creative expression on the blockchain.
Every day, users write between 100-300 words about anything - thoughts, stories, insights, or creative expression. Each piece of writing becomes a unique ERC-20 coin that can be traded on Zora's marketplace.
- Daily Creativity: Encourages consistent creative expression
- Monetized Writing: Your words become tradeable assets
- Community Building: Discover and trade others' creative coins
- Streak Rewards: Build writing streaks for increasing coin value
- 111 Legend Status: Write 111+ words to achieve special recognition
- Clean, distraction-free writing experience
- Real-time word counter with progress indicator
- 100-300 word target range
- Instant feedback and validation
- Real ERC-20 coins minted on Base network
- IPFS metadata storage with full writing content
- Unique coin symbols based on username and streak
- Dynamic naming reflecting writing journey
- Rich metadata with word count, streak day, and creation date
- Personal writing statistics
- Current streak tracking
- Total coins and words written
- Recent coin previews
- Achievement badges
- Share to Farcaster with custom share pages
- Beautiful share pages with full writing content and market data
- Trading integration via Zora marketplace
- MiniApp installation prompts for user retention
- Live market data from Zora SDK
- Direct trading links to Zora marketplace
- Coin details pages with full writing content
- Community discovery (coming soon)
- Next.js 15 - React framework with App Router
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- Neobrutalist Design - Bold, distinctive UI
- Zora Coins v4 SDK - ERC-20 coin creation and trading
- Wagmi - React hooks for Ethereum
- Viem - TypeScript Ethereum library
- Base Network - Layer 2 for fast, cheap transactions
- @neynar/react - Farcaster MiniApp framework
- Farcaster Frame Connector - Wallet integration
- MiniApp Manifest - Proper app registration
- Supabase - PostgreSQL database with real-time features
- IPFS via Pinata - Decentralized metadata storage
- Row Level Security - Secure data access
- Vercel - Serverless deployment and hosting
- Environment Management - Secure API key handling
- Node.js 18+ and npm
- Supabase account
- Pinata account (for IPFS)
- Zora API key
- Farcaster account for testing
- Clone the repository
git clone https://github.com/yourusername/111words.git
cd 111words- Install dependencies
npm install- Set up environment variables
cp .env.example .env.localFill in your environment variables:
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# IPFS Storage
PINATA_JWT=your_pinata_jwt_token
# Zora SDK
ZORA_API_KEY=your_zora_api_key
# MiniApp Configuration
NEXT_PUBLIC_MINI_APP_NAME="111words"
NEXT_PUBLIC_MINI_APP_DESCRIPTION="Turn your daily thoughts into tradeable coins"
NEXT_PUBLIC_MINI_APP_BUTTON_TEXT="Start Writing"
NEXT_PUBLIC_MINI_APP_PRIMARY_CATEGORY="social"
NEXT_PUBLIC_MINI_APP_TAGS="writing,creativity,coins"
# Deployment
NEXT_PUBLIC_URL=https://your-domain.vercel.app
MINI_APP_FID=your_farcaster_fid
MINI_APP_MNEMONIC=your_wallet_mnemonic- Set up the database
Run the SQL schema from documentation/111words-sql-query.md in your Supabase dashboard:
-- Create users table
CREATE TABLE users (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
fid BIGINT UNIQUE NOT NULL,
username TEXT,
display_name TEXT,
pfp_url TEXT,
current_streak INTEGER DEFAULT 0,
total_coins INTEGER DEFAULT 0,
total_words INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Create writings table
CREATE TABLE writings (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID REFERENCES users(id) NOT NULL,
fid BIGINT NOT NULL,
content TEXT NOT NULL,
word_count INTEGER NOT NULL,
streak_day INTEGER NOT NULL,
coin_address TEXT,
coin_symbol TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Add indexes and RLS policies
-- (See full schema in documentation/)- Configure Pinata for IPFS
- Create account at pinata.cloud
- Generate API key with Files: CREATE, READ permissions
- Add JWT token to environment variables
- Get Zora API Key
- Create account on Zora
- Navigate to Developer Settings
- Create API key and add to environment variables
- Run the development server
npm run devVisit http://localhost:3000 to see the app running.
- Deploy to Vercel
npm run build
# Deploy to Vercel via GitHub integration or CLI- Test the MiniApp
- Open Farcaster (Warpcast)
- Navigate to your deployed URL
- The app should authenticate automatically
- Try writing and minting a coin
- Open the MiniApp in Farcaster
- Write your thoughts (100-300 words)
- Click "Create Coin" to mint your ERC-20 token
- Share your coin to Farcaster or view details
- Build your streak by writing daily
- Trade coins on Zora marketplace
import { createWritingCoin } from './lib/coins'
const result = await createWritingCoin({
content: "Your writing content...",
wordCount: 150,
streakDay: 5,
userFid: 12345,
userAddress: "0x...",
username: "writer",
totalCoins: 4
}, walletClient, publicClient)import { getCoin } from '@zoralabs/coins-sdk'
const coinData = await getCoin({
address: "0x...",
chain: 8453 // Base
})import { createWritingAndUpdateUser } from './lib/supabase'
const result = await createWritingAndUpdateUser({
fid: 12345,
content: "Writing content...",
word_count: 150,
streak_day: 5,
coin_address: "0x...",
coin_symbol: "WRITE5"
})- User writes in the interface
- Metadata created with writing content
- IPFS upload via Pinata API
- Coin minted on Base using Zora SDK
- Database updated with coin details
- Success screen shows coin info and sharing options
src/app/miniapp.tsx- Main application logicsrc/lib/coins.ts- Coin creation and Zora SDK integrationsrc/lib/supabase.ts- Database operationssrc/components/writing-interface.tsx- Writing UIsrc/components/stats-panel.tsx- User dashboardsrc/app/share/[address]/- Coin detail pages
- users - Farcaster user profiles and stats
- writings - Individual writing pieces and coin data
- Atomic operations - Consistent updates via stored procedures
- Connect GitHub repository to Vercel
- Add environment variables in Vercel dashboard
- Deploy - automatic builds on push to main
The app automatically generates a signed manifest for Farcaster MiniApp registration:
// Manifest available at /.well-known/farcaster.json
{
"accountAssociation": { /* signed with your wallet */ },
"frame": {
"version": "1",
"name": "111words",
"iconUrl": "https://your-domain.vercel.app/icon.png",
"homeUrl": "https://your-domain.vercel.app"
}
}- Bold borders and high contrast
- Playful shadows and button interactions
- Bright color palette with clear hierarchy
- Accessible design with excellent readability
- Minimal friction - Write and mint in seconds
- Clear feedback - Always know what's happening
- Progressive enhancement - Works with or without wallet
- Mobile-first - Optimized for Farcaster mobile
- Writing interface and coin minting
- Farcaster authentication
- Basic user dashboard
- Share pages with market data
- Enhanced stats panel with clickable coins
- Community discovery feed
- Search and filtering
- User profiles and following
- Writing prompts and challenges
- Collaborative writing
- NFT artwork generation
- Advanced trading features
- Analytics dashboard
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Use TypeScript for type safety
- Follow existing naming conventions
- Add JSDoc comments for public functions
- Keep components small and focused
This project is licensed under the MIT License - see the LICENSE file for details.
- Zora for the incredible Coins v4 SDK
- Farcaster for the MiniApp framework
- Base for fast and affordable transactions
- Supabase for the excellent developer experience
- Vercel for seamless deployment
- Documentation: Check the
/documentationfolder - Issues: Create a GitHub issue
- Community: Join our Farcaster channel
- Email: support@111words.app
Built with β€οΈ for the Zora Coinathon 2025
Transform your words into value. Start writing today.
