How krishnatiwari005/myportfolio works
This is a portfolio website with a Supabase-backed content-management portal. Visitors browse portfolio sections and a resume; the admin workflow requests an email OTP, verifies it into a Supabase session, then manages portfolio content. Contact submissions are stored and may trigger an email notification. The README is only the default Next.js starter, so capabilities are inferred from the source tree and database types; unsampled page and manager implementations limit certainty about their exact data wiring.
Main entry points: AdminPanel.tsx Admin panel · admin Content managers · client.ts Supabase client · PortfolioClient.tsx Portfolio client
Components 22
Public portfolio
- Portfolio page
app/page.tsx - Portfolio client
components/portfolio/PortfolioClient.tsx - Portfolio sections
components/portfolio - Resume page
app/resume/page.tsx - Resume viewer
components/portfolio/ResumeViewer.tsx - Contact form
components/portfolio/Contact.tsx
Admin CMS
- Admin panel
components/auth/AdminPanel.tsx - Content managers
components/admin - OTP flow UI
hooks/useOtpFlow.ts - Admin auth state
hooks/useAdminAuth.ts
Backend services
- Send OTP
app/api/auth/send-otp/route.ts - Verify OTP
app/api/auth/verify-otp/route.ts - Contact endpoint
app/api/contact/route.ts - Revalidation endpoint
app/api/revalidate/route.ts - Gmail SMTP
Content and storage
- Supabase client
lib/supabase/client.ts - Content queries
lib/supabase/queries.ts - Supabase database
- Supabase Auth
- Supabase Storage
Other components
- Visitor
- Admin
Connections 27
- Visitor → Portfolio page: opens
- Portfolio page → Portfolio client: renders
- Portfolio client → Content queries: loads content
- Content queries → Supabase client: queries through
- Supabase client → Supabase database: reads
- Portfolio client → Portfolio sections: renders
- Visitor → Resume page: opens
- Resume page → Resume viewer: renders
- Visitor → Contact form: submits message
- Contact form → Contact endpoint: posts message
- Contact endpoint → Supabase database: stores message
- Contact endpoint → Gmail SMTP: sends notification
- Admin → Admin panel: opens
- Admin panel → OTP flow UI: starts sign-in
- OTP flow UI → Send OTP: requests code
- Send OTP → Supabase database: manages codes
- Send OTP → Gmail SMTP: emails code
- OTP flow UI → Verify OTP: submits code
- Verify OTP → Supabase database: checks code
- Verify OTP → Supabase Auth: generates link
- Admin panel → Admin auth state: tracks session
- Admin auth state → Supabase client: uses auth
- Admin panel → Content managers: opens management
- Content managers → Supabase client: reads and writes
- Content managers → Supabase Storage: uploads assets
- Content managers → Revalidation endpoint: requests refresh
- Revalidation endpoint → Portfolio page: revalidates path