A modern, open-source platform for creating and sharing professional profiles. Built with Next.js, TypeScript, and Prisma.
- Professional Profiles: Create and customize your professional profile
- Experience Timeline: Showcase your work experience and projects
- Social Integration: Connect with other professionals and share updates
- Project Showcase: Display your portfolio projects with rich media support
- Real-time Updates: Engage with your network through posts and interactions
- Multi-platform Contact: Integrated contact methods (Twitter, LinkedIn, GitHub, etc.)
- Framework: Next.js 14
- Language: TypeScript
- Database: PostgreSQL with Prisma ORM
- Authentication: Clerk
- Styling: Tailwind CSS with Radix UI
- File Upload: uploadthing
- State Management: Zustand
- Form Handling: React Hook Form with Zod
- Node.js 18+
- PostgreSQL database (Recommended: Neon.tech)
- Clerk account for authentication
- Uploadthing account for file uploads
-
Create Neon Database
- Visit neon.tech
- Create new project
- Copy connection strings (DATABASE_URL and DIRECT_URL)
-
Configure Database URLs
DATABASE_URL="postgres://user:pass@host/db?sslmode=require" DIRECT_URL="postgres://user:pass@host/db?sslmode=require"
-
Create Uploadthing Account
- Visit uploadthing.com
- Create new project
- Copy API keys
-
Configure API
// app/api/uploadthing/core.ts import { createUploadthing, type FileRouter } from 'uploadthing/next'; const f = createUploadthing(); export const ourFileRouter = { imageUploader: f({ image: { maxFileSize: '4MB' } }) .middleware(async ({ req }) => { return { userId: req.userId }; }) .onUploadComplete(async ({ metadata, file }) => { return { fileUrl: file.url }; }), } satisfies FileRouter;
- Create Clerk Application
- Visit Clerk Dashboard
- Create new application
- Configure OAuth (GitHub, Google)
- Set up webhooks
Detailed authentication setup in AUTHENTICATION.md
-
Clone the repository
git clone https://github.com/shahfarzane/whoami.page.git cd whoami.page
-
Install dependencies
npm install # or bun install
-
Set up environment variables
cp .env.example .env
-
Set up the database
npx prisma generate npx prisma db push
-
Run the development server
npm run dev # or bun dev
# Database
DATABASE_URL="postgresql://..."
DIRECT_URL="postgresql://..."
# Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="pk_..."
CLERK_SECRET_KEY="sk_..."
CLERK_WEBHOOK_SECRET="whsec_..."
# File Upload
UPLOADTHING_SECRET="sk_..."
UPLOADTHING_APP_ID="..."
# OAuth
GITHUB_CLIENT_ID="..."
GITHUB_CLIENT_SECRET="..."
GOOGLE_CLIENT_ID="..."
GOOGLE_CLIENT_SECRET="..."
whoami.page/
├── app/ # Next.js app directory
├── components/ # Reusable components
├── context/ # React context providers
├── hooks/ # Custom React hooks
├── lib/ # Utility functions
├── prisma/ # Database schema
├── providers/ # Higher-order components
├── public/ # Static files
├── store/ # State management
├── styles/ # Global styles
└── types/ # TypeScript types
Key models include:
- User: Professional profile information
- Projects: Portfolio projects showcase
- UserExperience: Work experience timeline
- Posts: Social updates and interactions
- ContactMethod: Multiple contact platforms
The application can be deployed on:
Common issues and solutions:
-
Database Connection
- Check connection strings
- Verify SSL settings
- Ensure proper permissions
-
Authentication
- Verify OAuth callback URLs
- Check environment variables
- Validate webhook endpoints
-
File Upload
- Check file size limits
- Verify API keys
- Confirm proper CORS settings
For support:
- Open an issue
- Check documentation
- Join discussions
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing
) - Commit changes (
git commit -m 'Add amazing feature'
) - Push to branch (
git push origin feature/amazing
) - Open Pull Request
- Non-commercial: AGPL-3.0 License
- Commercial: Commercial License
Built with ❤️ by @shahfarzane