Solo Market Progress
🚀 SoloMarket Week 2: Building the Launch Platform
What We Shipped This Week
Week 2 was all about building the core launch platform - the features that let makers share their products and get discovered. We shipped 4 major components that transformed SoloMarket from a basic listing site into a full product launch platform.
🎯 The 4 Components
1. Launch Creation Wizard
What it does: Multi-step wizard that guides makers through creating a product launch
Key features:
- Smart launch type selection (Soft Launch vs Big Launch)
- Goal setting and tracking
- Launch timeline planning
- Campaign management interface
Technical highlight: Built a clean multi-step form system with state persistence and validation. If you close the browser mid-creation, your progress is saved.
User impact: Reduces the intimidation of creating a launch from "staring at empty form" to "answer a few questions"
2. Launch Detail Page
What it does: Beautiful showcase page for each individual launch
Key features:
- Product hero section with media gallery
- Maker profile integration
- Launch timeline and milestones
- Social engagement (comments, upvotes)
- Share functionality
Technical highlight: Dynamic route handling with Next.js 13+ App Router, optimized image loading, and real-time engagement updates via Supabase subscriptions
User impact: Gives every product a professional launch page without makers needing design skills
3. Launch Browse Page
What it does: Discovery hub where people find new launches
Key features:
- Grid layout with launch cards
- Filter by launch type, status, category
- Sort by newest, trending, ending soon
- Search functionality
- Responsive design (mobile-first)
Technical highlight: Implemented efficient database queries with proper indexing for fast filtering and sorting. Used Supabase's PostgREST for optimized data fetching.
User impact: Makes product discovery effortless - users can find relevant launches in seconds
4. Notifications System
What it does: Real-time notifications for launch activity
Key features:
- In-app notification center
- Notification badges with unread counts
- Activity feed for launch updates
- Email notification preferences
- Mark as read/unread
Technical highlight: Built a scalable notification architecture using database triggers, real-time subscriptions, and optimistic UI updates
User impact: Keeps makers engaged with their launches and helps build community around products
🏗️ Technical Architecture
Frontend Stack
- Next.js 14 - App Router for modern React architecture
- TypeScript - Type safety across the codebase
- Tailwind CSS - Rapid UI development
- Shadcn UI - Beautiful, accessible component library
Backend Stack
- Supabase - PostgreSQL database with real-time subscriptions
- Row-Level Security (RLS) - Data isolation and security
- Database Triggers - Automated notification generation
- PostgREST - Automatic REST API from database schema
Deployment
- Netlify - Frontend hosting with automatic deployments
- Production URL: https://solomarket.com
- Build time: ~2-3 minutes per deploy
- Auto-deploy on merge to main
💡 Key Learnings This Week
1. The "Set" Bug That Wasn't a Set Bug
The problem: Launch creation was failing with a cryptic "Set is not defined" error in production (but worked fine locally).
The investigation: Spent time diving into Next.js SSR, thinking it was a server/client hydration issue with JavaScript's Set object.
The actual cause: State management logic was using Set incorrectly - had nothing to do with SSR at all.
The lesson: Always reproduce the bug locally before assuming it's environment-specific. Also, error messages can be misleading - dig deeper.
Time saved by root cause analysis: What could have been a "rewrite the state management" turned into a 10-minute fix.
2. Supabase PostgREST Schema Caching
The problem: Added new database columns, but API requests immediately failed with "column not found in schema cache" errors.
The cause: PostgREST caches database schema for performance - new columns aren't visible for 10+ minutes.
The solution: Created RPC functions to bypass the cache entirely for operations using new columns.
Pattern learned:
// ❌ FAILS: Cache doesn't know about new columns yet
const { data } = await supabase.from('listings').insert(listingData)
// ✅ WORKS: RPC bypasses cache
const { data } = await supabase.rpc('insert_listing_direct', {
listing_data: listingData
})
The lesson: Managed platforms have caching layers that can block you even when the database is correct. Always have a bypass strategy.
3. Security-First Development
The principle: Never compromise security for convenience.
Applied this week:
- Kept Supabase RLS policies strict (users can only modify their own launches)
- Used parameterized queries for all database operations
- Validated user input on both client and server
- Implemented proper authentication checks before showing sensitive UI
Result: Zero security incidents, clean security audit, peace of mind.
📊 By The Numbers
- 4 major components shipped
- ~2,500 lines of code written
- 8 database migrations deployed
- 12 new API endpoints (via Supabase RPC functions)
- 0 production incidents this week
- 100% uptime on Netlify
🚧 Challenges & How We Solved Them
Challenge 1: Complex Multi-Step Forms
Problem: Launch creation has many fields - overwhelming as a single form.
Solution: Built a wizard with 4 steps, progress indicator, and state persistence. Each step is focused and achievable.
Challenge 2: Real-Time Updates Without WebSockets
Problem: Need real-time notifications without managing WebSocket infrastructure.
Solution: Leveraged Supabase's real-time subscriptions - database triggers generate events, frontend subscribes to changes. Simple, scalable, no infrastructure to manage.
Challenge 3: Mobile Responsiveness
Problem: Launch pages need to look great on mobile (where most discovery happens).
Solution: Mobile-first design approach with Tailwind's responsive utilities. Tested on actual devices, not just browser DevTools.
🎯 What's Next (Week 3 Preview)
The platform is functional, but now we need to make it feel alive:
- Social features - Following makers, launch activity feeds
- Analytics dashboard - Show makers how their launches are performing
- Email notifications - Complement in-app notifications
- Launch templates - Pre-filled launch types for common products
- Performance optimizations - Image optimization, lazy loading, caching
💭 Reflections
Building in public is about showing the real journey - not just the wins, but the detours and lessons.
This week taught me:
- Slow down to speed up: Root cause analysis saves time versus quick fixes
- Platform limitations are features: Learning Supabase's caching behavior made me a better developer
- Security isn't negotiable: Building it in from the start is easier than retrofitting
The launch platform is now live and functional. Makers can create launches, people can discover them, and the community can engage. That's the foundation.
Now it's time to make it magical.
Want to follow the journey?
- Check out the live platform: https://solomarket.com
- Repo: [Your GitHub repo link]
- Twitter: [Your Twitter handle]
- Next week's update: Coming next [day]
Questions or feedback? Drop a comment - I read and respond to all of them.
Let's build something great together. 🚀