SOMEWHERE
theunpartysomewhere
Location: unparty-app/theunpartysomewhere
Status: Active Development
Primary Purpose: Public-facing web application and content management platform for the UNPARTY ecosystem
Overview
theunpartysomewhere is UNPARTY's flagship web platform - a dynamic blogging and content management system that evolves as content is created. Built on RedwoodJS, it serves as the primary public-facing interface for the UNPARTY ecosystem, enabling creators to share stories, build community, and manage their digital presence.
The platform embodies the UNPARTY philosophy: empowering creators through ownership, privacy, and cost-sensitivity while providing a seamless path from discovery (ABOUT) to creation (BUILD) to sharing (CONNECT).
Tech Stack
- Framework: RedwoodJS 7.7.3 (Full-stack React + GraphQL + Prisma)
- Frontend: React 18 with TypeScript
- Backend: Node.js with GraphQL API
- Database: PostgreSQL via Prisma ORM
- Authentication: Clerk
- Deployment: Vercel
- Styling: Tailwind CSS 3.4
- Rich Content: MDX support with React Quill
- UI Components: Headless UI, Heroicons
- State Management: Redux Toolkit
- Animations: Framer Motion
- Testing: Jest
Key Features
Content Management
- Blog System: Full-featured blogging with posts, comments, and rich text editing
- MDX Support: Write content in Markdown with embedded React components
- Article Management: Create, edit, and publish articles with visual editor
- Stories Platform: Curated content and narrative experiences
Brand Customization
- Dynamic Brand System: Customize brand name, fonts, colors, and icons
- Landing Page Builder: Create personalized landing pages with custom styling
- About Page Management: Configurable about sections with priorities and descriptions
- Theme System: Custom color schemes for card backgrounds, icons, and text
User Experience
- Authentication: Secure user login/signup via Clerk integration
- Role-Based Access: Admin vs. public routes with granular permissions
- Contact Forms: Direct communication channel with site visitors
- Responsive Design: Mobile-first responsive layouts
Developer Experience
- GraphQL API: Type-safe API with auto-generated types
- Hot Reload: Instant feedback during development
- Database Migrations: Managed schema evolution with Prisma
- Code Generation: Automatic scaffolding for models and CRUD operations
Architecture
Code
RedwoodJS Full-Stack Application
├── Web Side (React + TypeScript)
│ ├── Pages (33+ routes)
│ │ ├── Public Routes
│ │ │ ├── HomePage (Landing)
│ │ │ ├── BlogPage (Content)
│ │ │ ├── AboutPage (Info)
│ │ │ ├── ArticlePage (Dynamic content)
│ │ │ ├── StoriesPage (Curated content)
│ │ │ └── MarketplacePage (Coming soon)
│ │ ├── Auth Routes
│ │ │ ├── LoginPage
│ │ │ ├── SignupPage
│ │ │ └── Password Reset
│ │ └── Admin Routes (Protected)
│ │ ├── AdminBuildPage (Build tools)
│ │ ├── AdminAboutPage (Content management)
│ │ ├── BrandPage (Customization)
│ │ └── Post Management (CRUD)
│ ├── Layouts
│ │ ├── UniversalLayout (Main wrapper)
│ │ ├── BlogLayout (Blog-specific)
│ │ ├── StoriesLayout (Stories-specific)
│ │ └── BuildLayout (Admin-specific)
│ ├── Components (100+ reusable components)
│ └── Styling (Tailwind + Custom CSS)
│
├── API Side (GraphQL + Services)
│ ├── GraphQL Schema
│ ├── Services (Business Logic)
│ │ ├── posts (Blog management)
│ │ ├── comments (Discussion)
│ │ ├── users (Authentication)
│ │ ├── contacts (Communication)
│ │ ├── abouts (Page content)
│ │ ├── brandNames (Branding)
│ │ ├── brandDescriptions (Copy)
│ │ ├── brandIcons (Visual identity)
│ │ ├── colors (Theme management)
│ │ ├── landingPages (Marketing)
│ │ └── mdx (Rich content)
│ └── Functions (Serverless endpoints)
│
└── Database (PostgreSQL via Prisma)
├── Models
│ ├── Post (Blog content)
│ ├── Comment (Discussions)
│ ├── User (Authentication)
│ ├── Contact (Messages)
│ ├── About (About sections)
│ ├── BrandName (Brand identity)
│ ├── BrandDescription (Brand copy)
│ ├── BrandIcon (Visual elements)
│ ├── Color (Theme colors)
│ └── LandingPage (Marketing pages)
└── Migrations (Version-controlled schema)Data Flow
Code
User Request
↓
Web Router (RedwoodJS)
↓
Page Component (React)
↓
GraphQL Query/Mutation (Apollo Client)
↓
GraphQL API (RedwoodJS)
↓
Service Layer (Business Logic)
↓
Prisma ORM
↓
PostgreSQL DatabaseIntegration Points
External Services
- Clerk: User authentication and management
- Vercel: Hosting and deployment platform
- PostgreSQL: Database (hosted separately or via Vercel Postgres)
- Vercel Analytics: Usage and performance tracking
Internal Ecosystem
- theunpartyrunway: Cost tracking and development metrics
- theunpartycrawler: Content analytics and intelligence
- theunpartyunppp: Future cross-platform content synchronization
Business Value
ABOUT → Understanding
- Marketing Pages: Clear communication of UNPARTY's mission and values
- Stories Platform: Curated narratives that explain the creator's journey
- Blog System: Educational content and thought leadership
- About Management: Dynamic "about" sections that evolve with the creator
BUILD → Creation
- Admin Panel: Intuitive content management interface
- Brand Customization: Tools to express unique identity
- MDX Support: Technical creators can embed interactive components
- Landing Page Builder: Create custom entry points for different audiences
CONNECT → Sharing
- Public Blog: Share insights and connect with readers
- Comment System: Foster community discussions
- Contact Forms: Direct communication channel
- Social Integration: (Coming soon) Share across platforms
Getting Started
Prerequisites
- Node.js 20.x
- PostgreSQL database
- Yarn package manager
- Clerk account (for authentication)
Installation
bash
# Clone the repository
git clone https://github.com/unparty-app/theunpartysomewhere.git
cd theunpartysomewhere
# Install dependencies
yarn install
# Set up environment variables
cp .env.example .env
# Edit .env with your DATABASE_URL and CLERK_PUBLISHABLE_KEY
# Run database migrations
yarn rw prisma migrate dev
# Start development server
yarn rw devThe application will be available at:
Development Commands
bash
# Start dev server
yarn rw dev
# Run tests
yarn rw test
# Generate types
yarn rw generate types
# Create new pages/components
yarn rw generate page PageName
yarn rw generate component ComponentName
# Database operations
yarn rw prisma studio # Visual database editor
yarn rw prisma migrate dev # Create migration
yarn rw prisma db push # Quick schema sync (prototyping)
# Build for production
yarn rw build
# Deploy to Vercel
yarn rw deployProject Structure
Code
theunpartysomewhere/
├── api/ # Backend (API, services, database)
│ ├── db/
│ │ ├── schema.prisma # Database schema
│ │ └── migrations/ # Version-controlled schema changes
│ └── src/
│ ├── functions/ # Serverless functions
│ ├── graphql/ # GraphQL schema definitions
│ ├── lib/ # Shared utilities
│ └── services/ # Business logic layer
│
├── web/ # Frontend (React app)
│ ├── public/ # Static assets
│ └── src/
│ ├── components/ # Reusable UI components
│ ├── layouts/ # Page layout wrappers
│ ├── pages/ # Route-based pages
│ ├── writing/ # Content files
│ ├── Routes.tsx # Application routing
│ └── App.tsx # Root component
│
├── scripts/ # Build and deployment scripts
├── .redwood/ # RedwoodJS configuration
└── README.md # This fileDatabase Schema
The application uses PostgreSQL with the following core models:
| Model | Purpose | Key Fields |
|---|---|---|
| Post | Blog posts | title, body, comments, createdAt |
| Comment | Post comments | name, body, postId |
| User | Authentication | email, hashedPassword, roles, status |
| Contact | Contact form submissions | name, email, subject, message |
| About | About page sections | title, description, bgColor, textColor |
| BrandName | Brand identity | title, brandFont |
| BrandDescription | Brand copy | description, brandSecondaryFont |
| BrandIcon | Visual elements | icon |
| Color | Theme colors | cardBackground, iconForeground, iconBackground |
| LandingPage | Marketing pages | brandName, primaryColor, secondaryColor |
Relationship to UNPARTY Ecosystem
theunpartysomewhere serves as the public hub of the UNPARTY ecosystem:
As a Product
- Primary web presence for UNPARTY
- Content distribution platform
- Brand showcase and customization tool
- Community engagement platform
As a Development Asset
- Reference implementation for RedwoodJS best practices
- Pattern library for future UNPARTY applications
- Testing ground for new features and experiments
- Data source for analytics (via theunpartycrawler)
As a Business Tool
- Marketing platform (landing pages, about pages)
- Lead generation (contact forms)
- Cost tracking (monitored by theunpartyrunway)
- Performance measurement (Vercel Analytics)
Roadmap
Current Focus (Q4 2025)
- Enhanced brand customization tools
- Improved MDX content workflows
- Mobile-responsive optimizations
- Performance improvements
Planned Features
- Marketplace integration
- Advanced analytics dashboard
- Content versioning and drafts
- Multi-language support
- Social media integration
- Newsletter functionality
- Advanced search and filtering
Long-Term Vision
- Cross-platform content sync (with theunpartyunppp)
- AI-powered content suggestions
- Collaborative editing features
- Plugin/extension system
- White-label platform for other creators
Contributing
This is a private repository for UNPARTY development. If you're part of the team:
- Follow the RedwoodJS contribution guidelines
- Use conventional commits for clear history
- Write tests for new features
- Update documentation with changes
- Request code review before merging
Core Principles
Creator Ownership
- All content belongs to the creator
- Export functionality for data portability
- No platform lock-in
Privacy First
- Minimal data collection
- User-controlled visibility settings
- Transparent data handling
Cost Sensitivity
- Efficient database queries
- Optimized asset delivery
- Serverless architecture for scaling
- Monitored by theunpartyrunway for cost tracking
Architecture Decisions
Why RedwoodJS?
- Integrated backend: GraphQL API and database included
- Type safety: End-to-end TypeScript support
- Developer experience: Excellent tooling and documentation
- Community: Active community and regular updates
- Opinionated structure: Clear patterns reduce decision fatigue
Why Clerk for Auth?
- Low maintenance: Managed authentication service
- Security: Industry-standard best practices
- Flexibility: Customizable user flows
- Integration: First-class RedwoodJS support
Why PostgreSQL?
- Reliability: Battle-tested production database
- Features: Advanced querying and JSON support
- Ecosystem: Excellent Prisma integration
- Scalability: Grows with application needs
Deployment
The application is deployed to Vercel with the following configuration:
Environment Variables (Production)
Code
DATABASE_URL=postgresql://...
CLERK_PUBLISHABLE_KEY=pk_...
NODE_ENV=productionBuild Configuration
- Build command:
yarn rw build - Output directory:
web/dist(web) +api/dist(API) - Node version: 20.x
- Install command:
yarn install
Deployment Workflow
- Push to
mainbranch - Vercel auto-deploys
- Database migrations run automatically
- Health checks verify deployment
Troubleshooting
Common Issues
Database connection errors
bash
# Check DATABASE_URL is set
echo $DATABASE_URL
# Test database connection
yarn rw prisma db pushAuthentication not working
bash
# Verify Clerk key is set
echo $CLERK_PUBLISHABLE_KEY
# Check Clerk dashboard for configurationBuild failures
bash
# Clear cache and reinstall
rm -rf node_modules .redwood
yarn install
yarn rw buildPerformance
Current Metrics (as of 2025-10-29)
- First Contentful Paint: <1.5s
- Time to Interactive: <3s
- Lighthouse Score: 90+ (aim)
- Bundle Size: Optimized with code splitting
Optimization Strategies
- Lazy loading for routes and components
- Image optimization via Vercel
- GraphQL query optimization
- Database indexing on key fields
- CDN for static assets
Security
Authentication
- Clerk handles password hashing and storage
- Session management via Clerk
- Role-based access control (RBAC)
Data Protection
- SQL injection prevention via Prisma
- XSS protection via React
- CSRF tokens on mutations
- Environment variables for secrets
Best Practices
- Regular dependency updates
- Security scanning via GitHub
- Clerk security monitoring
- Production error tracking
Testing Strategy
Unit Tests
- Service layer business logic
- Utility functions
- Component logic (isolated)
Integration Tests
- GraphQL resolvers with database
- API endpoints end-to-end
- Authentication flows
Manual Testing Checklist
- User registration and login
- Post creation and editing
- Comment submission
- Brand customization
- Mobile responsiveness
- Admin panel access control
Documentation
Key Files
README.md(this file) - Project overview and setupapi/db/schema.prisma- Database schema documentationweb/src/Routes.tsx- Application routing map.env.example- Required environment variablesredwood.toml- RedwoodJS configuration
Additional Resources
Related UNPARTY Repositories
Currently Documented in Ecosystem
- theunpartyunppp - iOS/macOS native journaling app
- theunpartyrunway - Development workflow automation
- theunpartycrawler - Analytics intelligence suite
Note: The UNPARTY ecosystem documentation also references theunpartyapp as a web platform repository. The relationship between theunpartyapp and theunpartysomewhere may represent different deployment environments, project phases, or naming conventions within the UNPARTY organization.
Integration Points
- Monitored by theunpartyrunway for cost and velocity tracking
- Analytics processed by theunpartycrawler for user insights
- Future content sync with theunpartyunppp
Maintenance
Last Updated: 2025-10-29
Maintained By: UNPARTY Development Team
Review Frequency: Monthly or with significant changes
Current Status: 🚀 Active Development
Next Milestone: Enhanced brand customization tools
Contact & Support
Primary Platform: https://unparty.app
Repository: https://github.com/unparty-app/theunpartysomewhere
For questions, issues, or contributions, please contact the UNPARTY development team or open an issue in the repository.
License
Proprietary - UNPARTY LLC
All rights reserved.
Let's Get to Building 🎉
This platform is built with the belief that creators deserve tools that respect their ownership, protect their privacy, and remain cost-sensitive. Every feature, every decision, every line of code serves the creator first.