Here's a comprehensive README.md for your project, My Profile, which integrates Next.js 15, TypeScript, Clerk, Supabase, and Cloudinary:
My Profile is a platform that enables users to authenticate, create, and share personalized profiles. Each profile can include a photo, description, name, social media links, and a selectable theme.
-
User Authentication: Secure sign-in and sign-up using Clerk.
-
Dashboard: Post-authentication, users are redirected to
/dashboardto manage their profiles. -
Profile Creation:
- Upload a profile photo (limited to one per profile).
- Add a name, description, and social media links.
- Choose from at least three available themes.
-
Multiple Profiles: Users can create multiple profiles under a single account.
-
Unique Slugs: Each profile is assigned a unique, user-editable slug for sharing.
-
Public Profile Pages: Accessible via
https://<your-domain>/<slug>, displaying the user's information. -
SEO Optimization: Dynamic meta tags based on user-provided data enhance search engine visibility.
-
Social Sharing: Open Graph tags ensure rich previews when profiles are shared on social media platforms.(Clerk)
- Frontend: Next.js 15 with TypeScript.
- Authentication: Clerk.
- Database: Supabase (PostgreSQL).
- Image Storage: Cloudinary.(LinkedIn)
-
Clone the Repository:
git clone https://github.com/yourusername/my-profile.git cd my-profile -
Install Dependencies:
npm install
-
Configure Environment Variables: Create a
.env.localfile in the root directory and add the following:NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name CLOUDINARY_API_KEY=your_cloudinary_api_key CLOUDINARY_API_SECRET=your_cloudinary_api_secret NEXT_PUBLIC_CLERK_SIGN_IN_FORCE_REDIRECT_URL=/dashboard NEXT_PUBLIC_CLERK_SIGN_UP_FORCE_REDIRECT_URL=/dashboard
-
Run the Development Server:
npm run dev
The application will be available at http://localhost:3000.
my-profile/
├── app/
│ ├── dashboard/
│ │ └── page.tsx
│ ├── [slug]/
│ │ └── page.tsx
│ └── layout.tsx
├── components/
│ ├── ProfileForm.tsx
│ ├── ThemeSelector.tsx
│ └── ...
├── lib/
│ ├── supabaseClient.ts
│ ├── cloudinary.ts
│ └── ...
├── styles/
│ └── globals.css
├── .env.local
├── next.config.js
├── package.json
└── README.md
- Clerk Integration: Utilizes Clerk's React components and hooks for seamless authentication.
- Redirection: Upon successful sign-in or sign-up, users are redirected to the
/dashboardroute.
-
Single Image Constraint: Each profile is limited to one photo.
-
Upload Process:
- Images are uploaded to Cloudinary using their API.
- The returned URL is stored in Supabase and used to display the image on the profile page.
- Dynamic Meta Tags: Each profile page generates meta tags based on the user's name, description, and photo.
- Open Graph Integration: Ensures rich link previews when profiles are shared on platforms like Facebook and Twitter.
- Uniqueness: Slugs are unique identifiers for profiles.
- Editability: Users can edit their profile slugs, with real-time validation to ensure uniqueness.
- Access: Profiles are accessible via
https://<your-domain>/<slug>.
This project is licensed under the MIT License.
Feel free to customize this README.md further to match your project's specific details and requirements.