How latifahsan/la-portfolio works
LA Portfolio is a portfolio CMS and public website: an administrator manages published content and site settings in the protected dashboard; the public site reads that content, accepts contact messages, and offers an AI chat grounded in published CMS material. The graph preserves the documented project, gallery, blog, media, inbox, analytics, audit, notifications, SEO, and recycle-bin capabilities. Relationships for unsampled routes and feature actions are limited to documented behavior; not every runtime call could be verified from the supplied excerpts.
Main entry points: prisma.ts Portfolio Database · route.ts Chat API · dashboard Dashboard · contact-form.tsx Contact Form
Components 31
Public Website
- Public Pages
src/app/(public) - Contact Form
src/components/public/contact-form.tsx - Chat Widget
src/components/ai-chat/chat-widget.tsx
Admin CMS
- Dashboard
src/app/(dashboard)/dashboard - Admin Login
src/features/auth/actions.ts - Content Manager
src/features/content-crud/content-manager.tsx - Site Settings
src/features/settings/actions.ts - Media Library
src/features/media/actions.ts - Inbox
src/features/inbox/actions.ts - Recycle Bin
src/features/recycle-bin/actions.ts - Analytics
src/features/analytics/actions.ts
Content Services
- Published Content
src/lib/public-content - Contact Actions
src/features/contact/actions.ts - Generic CRUD
src/lib/content/generic-actions.ts - Content Modules
src/features - Projects, Gallery, Blog
src/features
Data And Integrations
- Supabase Auth
src/lib/supabase/server.ts - Route Protection
src/middleware.ts - Supabase Storage
src/lib/supabase/server.ts - Audit Log
src/lib/audit/log.ts - Notifications
src/lib/notifications/notify.ts - Portfolio Database
src/lib/prisma.ts
AI Assistant
- Chat API
src/app/api/ai/chat/route.ts - Published Context
src/lib/ai/context-builder.ts - Prompt Builder
src/lib/ai/prompt-builder.ts - AI Settings
src/lib/ai/settings.ts - Rate Limit
src/lib/ai/rate-limit.ts - Gemini Client
src/lib/ai/gemini-client.ts
Other components
- Visitor
- Google Gemini
- Contact Sender
Connections 35
- Visitor → Public Pages: visits
- Public Pages → Published Content: reads published
- Published Content → Portfolio Database: queries
- Visitor → Contact Form: submits
- Contact Form → Contact Actions: calls
- Contact Actions → Portfolio Database: stores message
- Contact Sender → Contact Form: submits
- Visitor → Admin Login: signs in
- Admin Login → Supabase Auth: authenticates
- Route Protection → Supabase Auth: checks session
- Route Protection → Dashboard: protects routes
- Dashboard → Content Manager: renders CMS
- Content Manager → Generic CRUD: invokes CRUD
- Generic CRUD → Portfolio Database: reads and writes
- Content Modules → Generic CRUD: binds actions
- Projects, Gallery, Blog → Portfolio Database: manages content
- Site Settings → Portfolio Database: reads and writes
- Media Library → Supabase Storage: uploads files
- Media Library → Portfolio Database: records media
- Inbox → Portfolio Database: manages messages
- Recycle Bin → Portfolio Database: restores records
- Analytics → Portfolio Database: aggregates views
- Dashboard → Audit Log: records activity
- Dashboard → Notifications: dispatches alerts
- Visitor → Chat Widget: asks
- Chat Widget → Chat API: sends chat
- Chat API → Rate Limit: checks quota
- Chat API → AI Settings: loads settings
- AI Settings → Portfolio Database: reads settings
- Chat API → Published Context: loads context
- Published Context → Portfolio Database: queries published
- Chat API → Prompt Builder: builds instructions
- Chat API → Gemini Client: requests client
- Gemini Client → Google Gemini: calls model
- Chat API → Chat Widget: streams reply