{"id":30897368,"url":"https://github.com/9d8dev/wrk","last_synced_at":"2025-09-09T00:08:05.034Z","repository":{"id":303658226,"uuid":"977275326","full_name":"9d8dev/wrk","owner":"9d8dev","description":"Portfolios for Creatives \u0026\u0026 Open Source Dribbble Alternative","archived":false,"fork":false,"pushed_at":"2025-08-05T16:10:42.000Z","size":6336,"stargazers_count":10,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-07T00:34:02.252Z","etag":null,"topics":["dribbble-alternative","multi-tenant","nextjs","portfolio","portfolio-maker"],"latest_commit_sha":null,"homepage":"https://wrk.so","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/9d8dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-03T20:25:50.000Z","updated_at":"2025-08-16T05:37:40.000Z","dependencies_parsed_at":"2025-08-05T17:57:04.209Z","dependency_job_id":null,"html_url":"https://github.com/9d8dev/wrk","commit_stats":null,"previous_names":["wiiip/wrk","9d8dev/wrk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/9d8dev/wrk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9d8dev%2Fwrk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9d8dev%2Fwrk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9d8dev%2Fwrk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9d8dev%2Fwrk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/9d8dev","download_url":"https://codeload.github.com/9d8dev/wrk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9d8dev%2Fwrk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274231123,"owners_count":25245684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dribbble-alternative","multi-tenant","nextjs","portfolio","portfolio-maker"],"created_at":"2025-09-09T00:08:03.979Z","updated_at":"2025-09-09T00:08:05.012Z","avatar_url":"https://github.com/9d8dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wrk.so - Modern Portfolio Platform for Creatives\n\nWrk.so is a Next.js 15 portfolio platform that enables creatives to build stunning online portfolios with custom domains, multiple grid layouts, and professional features.\n\n## ✨ Key Features\n\n### Core Portfolio Features\n\n- **Custom Username URLs** - Get your personalized portfolio at `wrk.so/yourname`\n- **Multiple Grid Layouts** - Choose from masonry, standard, minimal, or square layouts\n- **Drag-and-Drop Reordering** - Easily organize your projects with intuitive controls\n- **Project Showcases** - Rich media galleries with detailed descriptions\n- **Contact Forms** - Built-in lead generation and management system\n\n### Pro Features ($12/month)\n\n- **Custom Domains** - Use your own domain (e.g., `yourname.com`)\n- **Unlimited Projects** - No limits on your creative showcase\n- **Priority Support** - Get help when you need it\n- **Advanced Analytics** - Deep insights into your portfolio performance\n- **Remove Branding** - Complete white-label experience\n\n### Technical Highlights\n\n- **Blazing Fast** - Built with Next.js 15 and Turbopack\n- **Type-Safe** - Full TypeScript with Zod validation\n- **Modern Auth** - OAuth (GitHub/Google) + email/password with Better Auth\n- **Optimized Media** - Automatic image optimization with Sharp\n- **Real-time Updates** - ISR with aggressive cache revalidation\n- **Analytics** - PostHog + Vercel Analytics integration\n\n## 🛠 Tech Stack\n\n- **Framework:** Next.js 15.4.0 (App Router) with Turbopack\n- **Language:** TypeScript 5.8.3 with React 19\n- **Database:** PostgreSQL (Neon serverless) with Drizzle ORM\n- **Authentication:** Better Auth v1.2.9\n- **Styling:** Tailwind CSS v4 with Shadcn/ui components\n- **File Storage:** R2/S3 compatible storage\n- **Payments:** Polar for subscriptions\n- **Analytics:** PostHog + Vercel Analytics\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js 18+\n- pnpm package manager\n- PostgreSQL database (we recommend Neon)\n- R2/S3 bucket for media storage\n\n### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd wrk\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   pnpm install\n   ```\n\n3. **Set up environment variables**\n\n   ```bash\n   cp .env.example .env.local\n   ```\n\n   Fill in your `.env.local` with required values:\n   - Database connection string\n   - Authentication secrets\n   - OAuth credentials (GitHub/Google)\n   - R2/S3 storage credentials\n   - See CLAUDE.md for complete list\n\n4. **Set up the database**\n\n   ```bash\n   pnpm db:generate  # Generate migrations\n   pnpm db:migrate   # Apply migrations\n   ```\n\n5. **Start the development server**\n\n   ```bash\n   pnpm dev\n   ```\n\n   Visit `http://localhost:3000` to see your local instance.\n\n## 📝 Development Commands\n\n```bash\npnpm dev          # Start development server\npnpm build        # Build for production\npnpm start        # Start production server\npnpm lint         # Run linting\npnpm db:generate  # Generate DB migrations\npnpm db:migrate   # Apply DB migrations\n```\n\n## 🏗 Project Structure\n\n```\n/app              # Next.js App Router pages\n├── (admin)/      # Admin dashboard (protected)\n├── (auth)/       # Authentication pages\n├── (public)/     # Public portfolio pages\n└── api/          # API routes\n\n/components       # React components\n├── admin/        # Admin-specific components\n├── profile/      # Portfolio components\n└── ui/          # Shadcn/ui primitives\n\n/lib             # Core utilities\n├── actions/      # Server Actions\n├── data/        # Data fetching\n└── utils/       # Helper functions\n\n/db              # Database\n├── schema.ts    # Drizzle schema\n└── migrations/  # Migration files\n```\n\n## 🔐 Authentication\n\nWrk.so uses Better Auth with:\n\n- GitHub OAuth\n- Google OAuth\n- Email/password\n- Magic links\n- Session-based authentication (30-day duration)\n- Reserved username protection\n\n## 🎨 Customization\n\n### Grid Layouts\n\nChoose from multiple professional layouts:\n\n- **Masonry** - Pinterest-style variable heights\n- **Standard** - Clean, uniform grid\n- **Minimal** - Focus on content\n- **Square** - Instagram-style layout\n\n### Themes\n\nCustomize colors, typography, and spacing through the admin dashboard.\n\n## 📊 Analytics\n\nBuilt-in analytics with:\n\n- Page view tracking\n- User journey events\n- Custom domain attribution\n- Privacy-first approach\n- Ad-blocker bypass\n\n## 🚢 Deployment\n\nWrk.so is optimized for deployment on Vercel:\n\n1. Push to GitHub\n2. Import to Vercel\n3. Add environment variables\n4. Deploy!\n\nCustom domains are automatically configured through the Vercel API.\n\n## 📄 License\n\nAGPL-3.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9d8dev%2Fwrk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F9d8dev%2Fwrk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9d8dev%2Fwrk/lists"}