Update PRD
This commit is contained in:
parent
75974f1750
commit
322427c118
1 changed files with 127 additions and 10 deletions
|
|
@ -47,9 +47,17 @@ CREATE TABLE projects (
|
||||||
CREATE TABLE posts (
|
CREATE TABLE posts (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
slug VARCHAR(255) UNIQUE NOT NULL,
|
slug VARCHAR(255) UNIQUE NOT NULL,
|
||||||
title VARCHAR(255) NOT NULL,
|
post_type VARCHAR(50) NOT NULL, -- blog, microblog, link, photo, album
|
||||||
content JSONB NOT NULL, -- BlockNote JSON format
|
title VARCHAR(255), -- Optional for microblog posts
|
||||||
|
content JSONB, -- BlockNote JSON for blog/microblog, optional for others
|
||||||
excerpt TEXT,
|
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),
|
featured_image VARCHAR(500),
|
||||||
tags JSONB, -- Array of tags
|
tags JSONB, -- Array of tags
|
||||||
status VARCHAR(50) DEFAULT 'draft',
|
status VARCHAR(50) DEFAULT 'draft',
|
||||||
|
|
@ -85,6 +93,15 @@ CREATE TABLE photos (
|
||||||
exif_data JSONB,
|
exif_data JSONB,
|
||||||
caption TEXT,
|
caption TEXT,
|
||||||
display_order INTEGER DEFAULT 0,
|
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
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -404,13 +421,112 @@ const handleImageUpload = async (file) => {
|
||||||
- [ ] Individual content pages
|
- [ ] Individual content pages
|
||||||
- [ ] SEO meta tags
|
- [ ] SEO meta tags
|
||||||
|
|
||||||
## Open Questions
|
## Design Decisions
|
||||||
1. Should Albums have a "featured" flag for homepage display?
|
|
||||||
2. Do we want version history for content?
|
Based on requirements discussion:
|
||||||
3. Should photos support individual publishing vs entire albums?
|
|
||||||
4. How should we handle project case study layouts (templates)?
|
1. **Albums**: No featured flag needed
|
||||||
5. Do we need scheduled publishing?
|
2. **Version History**: Nice-to-have feature for future implementation
|
||||||
6. Should Universe support different post types (link posts, quotes)?
|
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
|
## Success Metrics
|
||||||
- Can create and publish any content type within 2-3 minutes
|
- 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)
|
- No accidental data loss (auto-save works reliably)
|
||||||
- Page load performance remains fast (<2s)
|
- Page load performance remains fast (<2s)
|
||||||
- Admin interface works well on tablet/desktop
|
- Admin interface works well on tablet/desktop
|
||||||
- Media uploads show progress and handle failures gracefully
|
- Media uploads show progress and handle failures gracefully
|
||||||
|
- RSS feeds update automatically with new content
|
||||||
Loading…
Reference in a new issue