This is a portfolio website with a custom admin interface built using Next.js, Supabase, and Tailwind CSS. The admin interface allows you to manage blog posts, projects, page content, and social links.
- Dashboard: Overview of content statistics and quick actions
- Blog Management: Create, edit, and delete blog posts with tags
- Project Management: Create, edit, and delete projects with technologies
- Page Content: Edit landing page and about page content
- Social Links: Manage social media links and icons
- Authentication: Secure login system using Supabase Auth
- Modern, responsive design with Tailwind CSS
- Blog posts with markdown support
- Project showcase with technology tags
- Dynamic content management
- SEO optimized
- Frontend: Next.js 15, React 19, TypeScript
- Backend: Supabase (PostgreSQL, Auth, Storage)
- Styling: Tailwind CSS
- Deployment: Vercel (recommended)
- Node.js 18+ and pnpm
- Supabase account
- Git
git clone <your-repo-url>
cd portfolio-website-2025
cd frontend
pnpm install- Create a new Supabase project at supabase.com
- Get your project URL and anon key from the API settings
- Run the database migrations:
cd backend-supabase
supabase init
supabase start
supabase db resetCreate a .env.local file in the frontend directory:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keyFor local development with Supabase:
npm install -g supabasecd frontend
pnpm devThe admin interface will be available at http://localhost:3000/admin
The application uses the following main tables:
blog_posts: Blog post content and metadatablog_post_images: Images associated with blog postsblog_post_tags: Many-to-many relationship between posts and tagsproject_posts: Project information and metadataproject_post_images: Images associated with projectsproject_post_technologies: Many-to-many relationship between projects and technologieslanding_page_content: Landing page content and hero imageabout_page_content: About page content and profile imagesocial_links: Social media links and iconstags: Blog post tagstechnologies: Project technologies
- Navigate to
/admin/login - Sign in with your Supabase user credentials
- You'll be redirected to the admin dashboard
- Create: Navigate to
/admin/blogs/new - Edit: Click "Edit" on any blog post in the list
- Delete: Click "Delete" on any blog post (with confirmation)
- Publish: Toggle the "Publish this post" checkbox
- Create: Navigate to
/admin/projects/new - Edit: Click "Edit" on any project in the list
- Delete: Click "Delete" on any project (with confirmation)
- Publish: Toggle the "Publish this project" checkbox
- Landing Page: Edit header, description, sub-headers, and hero image
- About Page: Edit title, content, and profile image
- Add: Click "Add Link" to create new social media links
- Edit: Modify display name, icon shortcode, and URL
- Remove: Click "Remove" to delete social links
The admin interface uses Tailwind CSS. You can customize the styling by modifying the classes in the components.
- Create new database tables in Supabase
- Add corresponding types in
frontend/src/lib/supabase/client.ts - Create new admin pages and components
- Update the navigation in
AdminNavbar.tsx
Currently, the interface supports image URLs. For file uploads, you can integrate Supabase Storage:
// Example file upload
const { data, error } = await supabase.storage
.from("images")
.upload("path/to/file.jpg", file);- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy automatically on push to main branch
Make sure to set these in your deployment platform:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
- Row Level Security (RLS): Enable RLS on your Supabase tables
- Authentication: Use Supabase Auth for secure admin access
- Environment Variables: Never commit sensitive keys to version control
- CORS: Configure CORS settings in Supabase for production domains
- Supabase Connection Error: Check your environment variables
- Authentication Issues: Ensure your Supabase user has the correct permissions
- Database Errors: Run
supabase db resetto reset the database schema
- Check the Supabase documentation
- Review the Next.js documentation
- Check the Tailwind CSS documentation
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the MIT License.