diff --git a/PRD-cms-functionality.md b/PRD-cms-functionality.md index 34482b1..a63a783 100644 --- a/PRD-cms-functionality.md +++ b/PRD-cms-functionality.md @@ -47,9 +47,17 @@ CREATE TABLE projects ( CREATE TABLE posts ( id SERIAL PRIMARY KEY, slug VARCHAR(255) UNIQUE NOT NULL, - title VARCHAR(255) NOT NULL, - content JSONB NOT NULL, -- BlockNote JSON format + post_type VARCHAR(50) NOT NULL, -- blog, microblog, link, photo, album + title VARCHAR(255), -- Optional for microblog posts + content JSONB, -- BlockNote JSON for blog/microblog, optional for others excerpt TEXT, + + -- Type-specific fields + link_url VARCHAR(500), -- For link posts + link_description TEXT, -- For link posts + photo_id INTEGER REFERENCES photos(id), -- For photo posts + album_id INTEGER REFERENCES albums(id), -- For album posts + featured_image VARCHAR(500), tags JSONB, -- Array of tags status VARCHAR(50) DEFAULT 'draft', @@ -85,6 +93,15 @@ CREATE TABLE photos ( exif_data JSONB, caption TEXT, display_order INTEGER DEFAULT 0, + + -- Individual publishing support + slug VARCHAR(255) UNIQUE, -- Only if published individually + title VARCHAR(255), -- Optional title for individual photos + description TEXT, -- Longer description when published solo + status VARCHAR(50) DEFAULT 'draft', + published_at TIMESTAMP, + show_in_photos BOOLEAN DEFAULT true, -- Show in photos page when published solo + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); @@ -404,13 +421,112 @@ const handleImageUpload = async (file) => { - [ ] Individual content pages - [ ] SEO meta tags -## Open Questions -1. Should Albums have a "featured" flag for homepage display? -2. Do we want version history for content? -3. Should photos support individual publishing vs entire albums? -4. How should we handle project case study layouts (templates)? -5. Do we need scheduled publishing? -6. Should Universe support different post types (link posts, quotes)? +## Design Decisions + +Based on requirements discussion: + +1. **Albums**: No featured flag needed +2. **Version History**: Nice-to-have feature for future implementation +3. **Photo Publishing**: Individual photos can be published separately from albums +4. **Project Templates**: Defer case study layout templates for later phase +5. **Scheduled Publishing**: Not needed initially +6. **RSS Feeds**: Required for all content types (projects, posts, photos) +7. **Post Types**: Universe will support multiple post types: + - **Blog Post**: Title + long-form BlockNote content + - **Microblog**: No title, short-form BlockNote content + - **Link Post**: URL + optional commentary + - **Photo Post**: Single photo + caption + - **Album Post**: Reference to photo album + +## Phased Implementation Plan + +### Phase 1: Database & Infrastructure Setup +- [ ] Set up PostgreSQL on Railway +- [ ] Create all database tables with updated schema +- [ ] Set up Prisma ORM with models +- [ ] Configure Cloudinary account and API keys +- [ ] Create base API route structure +- [ ] Implement database connection utilities +- [ ] Set up error handling and logging + +### Phase 2: Media Management System +- [ ] Create media upload endpoint with Cloudinary integration +- [ ] Implement image processing pipeline (multiple sizes) +- [ ] Build media library API endpoints +- [ ] Create media association tracking system +- [ ] Implement EXIF data extraction for photos +- [ ] Add bulk upload endpoint for photos +- [ ] Create media usage tracking queries + +### Phase 3: Admin Foundation +- [ ] Create admin layout component +- [ ] Build admin navigation with content type switcher +- [ ] Implement admin authentication (basic for now) +- [ ] Create reusable form components +- [ ] Build data table component for list views +- [ ] Add loading and error states +- [ ] Create media library modal component + +### Phase 4: Posts System (All Types) +- [ ] Create BlockNote Svelte wrapper component +- [ ] Implement custom image block for BlockNote +- [ ] Build post type selector UI +- [ ] Create blog/microblog post editor +- [ ] Build link post form +- [ ] Create photo post selector +- [ ] Build album post selector +- [ ] Implement post CRUD APIs +- [ ] Add auto-save functionality +- [ ] Create post list view in admin + +### Phase 5: Projects System +- [ ] Build project form with all metadata fields +- [ ] Create technology tag selector +- [ ] Implement featured image picker +- [ ] Build gallery manager with drag-and-drop ordering +- [ ] Add optional BlockNote editor for case studies +- [ ] Create project CRUD APIs +- [ ] Build project list view with thumbnails +- [ ] Add project ordering functionality + +### Phase 6: Photos & Albums System +- [ ] Create album management interface +- [ ] Build bulk photo uploader with progress +- [ ] Implement drag-and-drop photo ordering +- [ ] Add individual photo publishing UI +- [ ] Create photo/album CRUD APIs +- [ ] Build photo metadata editor +- [ ] Implement album cover selection +- [ ] Add "show in universe" toggle for albums + +### Phase 7: Public Display Updates +- [ ] Replace static Work page with dynamic data +- [ ] Update project detail pages +- [ ] Build Universe mixed feed component +- [ ] Create different card types for each post type +- [ ] Update Photos page with dynamic albums/photos +- [ ] Implement individual photo pages +- [ ] Add Universe post detail pages +- [ ] Ensure responsive design throughout + +### Phase 8: RSS Feeds & Final Polish +- [ ] Implement RSS feed for projects +- [ ] Create RSS feed for Universe posts +- [ ] Add RSS feed for photos/albums +- [ ] Implement combined RSS feed +- [ ] Add OpenGraph meta tags +- [ ] Optimize image loading and caching +- [ ] Add search functionality to admin +- [ ] Performance optimization pass +- [ ] Final testing on Railway + +### Future Enhancements (Post-Launch) +- [ ] Version history system +- [ ] More robust authentication +- [ ] Project case study templates +- [ ] Advanced media organization (folders/tags) +- [ ] Analytics integration +- [ ] Backup system ## Success Metrics - Can create and publish any content type within 2-3 minutes @@ -419,4 +535,5 @@ const handleImageUpload = async (file) => { - No accidental data loss (auto-save works reliably) - Page load performance remains fast (<2s) - Admin interface works well on tablet/desktop -- Media uploads show progress and handle failures gracefully \ No newline at end of file +- Media uploads show progress and handle failures gracefully +- RSS feeds update automatically with new content \ No newline at end of file