I built ClientDock - a client portal for service providers to manage communications and files without email chaos.
Background: After losing a critical client deliverable in a 200+ email thread, I decided to build a better solution. Most "client portals" are bloated project management tools. I wanted something focused on one thing: making client communication effortless.
Technical Details: - Built with Next.js 15 (App Router) - Deployed on Cloudflare Workers using OpenNext adapter - Cloudflare D1 (SQLite at the edge) for data - NextAuth v5 for authentication - Drizzle ORM for type-safe database operations - React Email and Resend for transactional emails - Stripe for payments
Architecture Decisions: 1. Edge-first: Deployed on Cloudflare Workers for global performance. Every request is handled at the nearest edge location. 2. Type safety: TypeScript throughout, Drizzle ORM for database type safety 3. Internationalization: Built with next-intl from day one for future expansion 4. Modular auth: NextAuth with Drizzle adapter for flexibility
Interesting Challenges: - Adapting Next.js SSR for Cloudflare Workers environment using OpenNext adapter - Managing database migrations with D1 - Implementing granular access controls - Optimizing for edge deployment
Current Status: MVP is complete. Looking for feedback on: - Feature priorities - Pricing strategy - Technical architecture - UX improvements
Open Questions: 1. Should I add real-time collaboration features? 2. How important is mobile app vs responsive web? 3. What's the right pricing model for this space?
The code isn't open source (yet), but happy to discuss technical decisions and share learnings from building on Cloudflare Workers.
Would love your feedback!