Planning Doc Phase II
California Forever Theme - Next Phase
Total Development Hours: 35 hrs Focus: Development items only (design handled separately) Quote Reference: Google Sheets
Live Site Development Rules
All Phase II features are hidden from public until explicitly launched.
Visibility Strategy by Feature
| Feature | Hide Method | Launch Action |
|---|---|---|
| Blog/Press Archive | No nav link; direct URL only; posts set to Private or Draft | Add to nav, publish posts |
| Blog/Press Singles | Posts stay Draft/Private until ready | Publish posts |
| Pledge Page | Page set to Private; admin-only access | Publish page, add CTAs |
| Press Kit | Page set to Private | Publish page, add nav link |
| New Modules | Only added to Private/Draft pages for testing | Deploy to live pages |
Development Guidelines
- No nav changes until feature is approved for launch
- New pages start as Private (visible to logged-in admins only)
- Test posts/content as Drafts - don't publish until ready
- New CPTs registered with
'public' => falseor'publicly_queryable' => falseinitially - Archive URLs won't be indexed if no posts are public
- Keep existing pages untouched - don't add new modules to live pages until approved
Pre-Launch Checklist (per feature)
- [ ] Client approval received
- [ ] Content finalized
- [ ] QA on staging/local complete
- [ ] Change page status from Private → Published
- [ ] Add navigation links
- [ ] Update any CTAs/buttons pointing to feature
- [ ] Verify no 404s or broken links
Design Resources
Figma designs available for all Phase II features.
- Access: Figma MCP tool or screenshots provided by user
- Mockups folder:
/Users/edowns/.claude/project-notes/california-forever/Phase_2_mockups/ - Content from designs: Use visible titles, copy, labels as filler content
Available Mockups
| File | Feature |
|---|---|
Blog.png |
Blog/Press archive page |
Blog Single.png |
Blog single post template |
Blog post module.png |
Recent Articles module (placeable anywhere) |
In the Media.png |
Full In the Media page |
In the media module.png |
"What others are saying" module |
Press Kit.png |
Press Kit page with accordion sections |
Living.png |
Break Ground 2026 / Pledge page |
pledge_form.png |
Pledge form detail |
About-Popup.png |
Team member bio popup |
Content Plan
Rule: If real content isn't available, Claude provides filler. Ask if unsure. Rule: Extract filler content from Figma designs when available.
Content Status by Feature
| Feature | Content Needed | Source | Status |
|---|---|---|---|
| Blog Posts | Initial posts | Extract from mockups + californiaforever.com | Ready |
| Press Releases | Sample press releases | californiaforever.com | Ready |
| Legacy Migration | 9 posts | californiaforever.com (existing site) | ✅ Source confirmed |
| Pledge Letter | Full letter text | Mockup has placeholder | Use mockup text |
| Pledge Signers CSV | ~100 initial signers | Client | TBD |
| Press Kit Files | PDFs, images, documents | Client | TBD |
| Press Kit Copy | Section descriptions | Mockup (Logos, Renderings, Maps, B-Roll, Team) | Ready |
| "What Others Are Saying" | Quotes with attribution | Mockup has real quotes | Ready |
| Team "Why I'm Working" | Quote per team member | Optional field, use mockup example | Ready |
1. Blog & Press Releases
Dev Hours: 11 hrs
Design Reference
Mockups: Blog.png, Blog Single.png, Blog post module.png
Archive Page: - Page title: "Blog" (single archive with filter tabs) - Filter tabs: All | Press Releases | Blog ✅ CONFIRMED - Mixed grid layout with featured + standard cards - Cards show: category label, title, date, read time, excerpt, featured image - "Next Page" pagination
Single Post: - Large title, date, featured image - Long-form content area - Share button with social links (Facebook, X, LinkedIn, copy link) ✅ CONFIRMED - "Recent blogs" section at bottom (3 cards + "See all")
Blog Post Module (placeable anywhere): - Title: "Recent Articles" with "See All" button - 3 cards - mixed format (some with images, some text-only) - Can filter by category ✅ CONFIRMED - Note: Need to handle posts with/without featured images gracefully
Architecture Decision ✅ CONFIRMED
Using: Native WordPress post CPT with custom taxonomy for Blog vs Press Release
- Combined archive with filter tabs
- Single template shared by both (Press Release = same as Blog single)
Development Tasks
1.1 Setup & Architecture
- [ ] Create custom taxonomy
article_typewith terms: "Blog", "Press Release" - [ ] Register taxonomy in
inc/custom-post-types.phpor similar
1.2 Archive Page (4 hrs)
- [ ] Create
archive.phptemplate - [ ] Archive header with "Blog" title
- [ ] Filter tabs UI (All / Press Releases / Blog)
- [ ] AJAX or URL-based filtering
- [ ] Post card component (image, category label, title, date, read time, excerpt)
- [ ] Mixed grid layout (featured + standard sizing)
- [ ] "Next Page" pagination
1.3 Single Template (4 hrs)
- [ ] Create
single.phptemplate - [ ] Hero area with title, date
- [ ] Featured image (full width)
- [ ] Content area with typography styles
- [ ] Social share buttons (Facebook, X/Twitter, LinkedIn, Copy link)
- [ ] "Recent blogs" section at bottom
1.4 Blog Post Module (NEW)
- [ ] Create ACF module
blog_postsorrecent_articles - [ ] Fields: title, category filter (optional), manual post selection (optional)
- [ ] Display 3 posts with mixed card format
- [ ] Handle posts with/without images
- [ ] "See All" button linking to archive
- [ ] Mobile responsive layout
1.5 Content Migration (2 hrs)
- [ ] Scrape/copy 9 posts from californiaforever.com
- [ ] Create posts with proper formatting
- [ ] Set featured images
- [ ] Assign taxonomy terms
Sample Content (from mockups)
| Type | Title |
|---|---|
| Press Release | California Forever welcomes Jim Wunderman as Head of Public Affairs |
| Press Release | Formal Application Submitted for the Suisun Expansion Project |
| Blog | California Forever unveils the Solano Foundry |
| Press Release | Our letter to the Solano County Administrator re: timeline |
| Blog | Gen. Mike Minihan (Ret.) Joins California Forever as Senior Advisor |
| Blog | Year in review, new website, and moving to CaliforniaForever.com |
2. In the Media (Existing CPT Enhancement)
Dev Hours: 5 hrs
Design Reference
Mockups: In the Media.png, In the media module.png
In the Media Page: - Title: "In the media" - Intro quote block at top - Grid of quote cards from publications - Each card: quote text, source logo, person name/title - Links to original articles ✅ CONFIRMED - "Next Page" pagination
"What Others Are Saying" Module: - Title: "What others are saying" with "See all" button - 3-column grid of quote cards - Company logos (NAIA, Netgear, Serve Robotics, UC Berkeley, etc.) - "Read more" button (expand or link to full page) - Can pull from media CPT OR manual curation ✅ CONFIRMED (Mixed)
Architecture Decision
Using: Existing media CPT (needs investigation when site is running) - "In the Media" page displays media CPT entries - "What Others Are Saying" module can pull from CPT or be manually curated - Each quote links to source article
Development Tasks
2.1 Investigate Existing Media CPT
- [ ] Review current media CPT structure when site is running
- [ ] Document existing fields and usage
- [ ] Determine what needs to be added/modified
2.2 In the Media Page Template
- [ ] Create page template or use ACF modules
- [ ] Intro quote block styling
- [ ] Quote card grid layout
- [ ] Source logo field (or auto-fetch from URL?)
- [ ] Link to original article
- [ ] Pagination
2.3 "What Others Are Saying" Module
- [ ] Create ACF module
what_others_are_saying - [ ] Fields: title, source (CPT query OR manual entries), "See all" link
- [ ] Quote card styling with logo
- [ ] "Read more" functionality
- [ ] Responsive 3-column → 1-column layout
3. Break Ground 2026 Pledge
Dev Hours: 10 hrs
Design Reference
Mockups: Living.png, pledge_form.png
Page Layout: - Hero: "Let's build California" with intro text - "Join the call to break ground" section with form - Signatory count display (e.g., "3,512 Signatories") - Supporters grid showing approved signers - CTA banner at bottom
Form Fields (from mockup): ✅ CONFIRMED - First name (required) - Last name (required) - Organization name (optional) - Position (optional) - Email* (required) - Note: "Submissions are reviewed before being added to the public list" - Share buttons (Facebook, X, LinkedIn, Copy link)
Supporters Display: - Grid format: "Name of Person" / "Name of Company" - Load More button ✅ CONFIRMED
Architecture Decision ✅ CONFIRMED
- Form: Gravity Forms → creates CPT entry (pending status)
- Storage: CPT
pledge_signerwith approval workflow - Display: Supporters module showing approved entries
- Count: Reusable ACF module for signatory count
- Thank You: Simple confirmation page ✅ CONFIRMED
Development Tasks
3.1 Custom Post Type Setup
- [ ] Register CPT
pledge_signer(public => false) - [ ] Fields: first_name, last_name, organization, position, email, date_signed
- [ ] Meta field:
approval_status(pending/approved/rejected) - [ ] Admin columns: Name, Organization, Status, Date
- [ ] Quick edit approve/reject actions
3.2 Gravity Form Build
- [ ] Create "Break Ground Pledge" form
- [ ] Fields: First name, Last name, Organization, Position, Email*
- [ ] Anti-spam: Honeypot + reCAPTCHA v3
- [ ]
gform_after_submissionhook → createpledge_signerCPT (pending) - [ ] Admin notification on new submission
- [ ] Redirect to Thank You page
3.3 Moderation Workflow (2 hrs)
- [ ] Custom admin list view for pending signers
- [ ] Bulk approve action
- [ ] Quick approve/reject row actions
- [ ] Status filter (Pending / Approved / Rejected)
3.4 Page Build (6 hrs)
- [ ] "Break Ground 2026" page with ACF modules
- [ ] Hero module with intro text
- [ ] Pledge letter content section
- [ ] Form embed section with Gravity Forms shortcode
- [ ] Signatory count display (with count)
- [ ] Supporters grid module:
- [ ] Query approved
pledge_signerposts - [ ] Display: "First Last" / "Organization"
- [ ] "Load More" button (AJAX)
- [ ] CTA banner at bottom
- [ ] Simple "Thank You" confirmation page
3.5 Signatory Count Module (NEW) ✅ CONFIRMED
- [ ] Reusable ACF module for displaying count anywhere
- [ ] Query: count of approved
pledge_signerposts - [ ] Display: "X,XXX Signatories" with styling
- [ ] Cache count for performance
3.6 CSV Import (1 hr)
- [ ] WP-CLI import script
- [ ] Parse CSV columns: First Name, Last Name, Organization, Position
- [ ] Create as approved
pledge_signerposts - [ ] Handle duplicates
4. Press Kit
Dev Hours: 5 hrs
Design Reference
Mockup: Press Kit.png
Page Layout: - Title: "Press Kit" - Subtitle: "To contact our press team, please email press@californiaforever.com" - Accordion sections with thumbnail previews: - Logos - Renderings - Maps - B-Roll - Team - Each section expands to show grid of downloadable files ✅ CONFIRMED
Development Tasks
4.1 ACF Module Setup
- [ ] Create
group_module_press_kit.json - [ ] Contact info fields (email, intro text)
- [ ] Sections repeater:
- Section title
- Section thumbnail/preview image
- Downloads repeater:
- File upload
- Title
- Optional description
4.2 Module Template (5 hrs)
- [ ] Create
inc/modules/page_modules/press_kit.php - [ ] Accordion UI with expand/collapse
- [ ] Thumbnail preview for collapsed state
- [ ] Expanded: grid of downloadable files
- [ ] File card: icon, title, file size, download button
- [ ] Auto-detect file type for icon (PDF, ZIP, JPG, MP4, etc.)
- [ ] Responsive layout
4.3 Styling
- [ ] Accordion expand/collapse animation
- [ ] File type icons (Font Awesome)
- [ ] Download button styling
- [ ] Mobile accordion behavior
5. Phase 1 Cleanup
Dev Hours: 4 hrs
Design Reference
Mockups: In the media module.png (What Others Are Saying), About-Popup.png (Team popup)
5.1 "What Others Are Saying" Section (2 hrs)
Covered in Section 2 - "What Others Are Saying" module
5.2 Team Member Popup (2 hrs) ✅ CONFIRMED
Applies to: All team members
Popup Content: - Photo (left side) - Name + Title - Bio paragraph - "Why I am working on this project" section (OPTIONAL) ✅ CONFIRMED - Close button (X)
Implementation:
- GLightbox inline content popup
- Add ACF fields to existing team/people CPT or module:
- bio (textarea/WYSIWYG) - likely exists
- why_working (textarea) - NEW, optional field
- Trigger: click on team member card
- Style popup content to match mockup
Development Tasks
5.2.1 ACF Field Updates
- [ ] Add
why_workingfield to team member fields (optional) - [ ] Verify
biofield exists
5.2.2 Popup Implementation
- [ ] Add GLightbox data attributes to team cards
- [ ] Create hidden popup content container per team member
- [ ] Style popup layout (photo left, content right)
- [ ] Conditionally show "Why I am working" section
- [ ] Mobile popup styling
Summary
| Section | Dev Hrs | Key Deliverables |
|---|---|---|
| Blog & Press Releases | 11 | Taxonomy, archive, single, blog module, migration |
| In the Media | 5 | Page template, "What Others Are Saying" module |
| Break Ground 2026 Pledge | 10 | CPT, Gravity Form, moderation, supporters module, count module |
| Press Kit | 5 | Accordion press kit module |
| Phase 1 Cleanup | 4 | Team member popup with optional "Why" field |
| Total | 35 |
Resolved Questions ✅
| Question | Answer |
|---|---|
| Blog/Press architecture | Combined archive with filter tabs, native posts + taxonomy |
| Press Release single template | Same as Blog single |
| Share functionality | Social platform links (Facebook, X, LinkedIn, Copy) |
| Supporters pagination | Load More button |
| Pledge form fields | First name, Last name, Organization, Position, Email* |
| Signatory count | Reusable ACF module |
| Thank You page | Simple confirmation |
| Media quotes linking | Link to original articles |
| "What Others Are Saying" source | Mixed - can pull from CPT or manual curation |
| Press Kit expanded view | Grid of downloadable files |
| Team popup scope | All team members |
| Team "Why I'm working" field | Optional |
| Legacy content source | californiaforever.com |
Open Questions
- Blog module card layout: How to handle posts with/without images in the 3-card module? (Need design input)
- Pledge signers CSV: When will initial CSV be provided? What columns exactly?
- Press kit files: When will client provide organized assets?
- Media CPT: Need to investigate existing structure when site is running
Dependencies
| Task | Blocked By |
|---|---|
| Media CPT work | Site running (DB connection) |
| Pledge CSV import | CSV file from client |
| Press kit build | Asset files from client |
| Legacy migration | Access to californiaforever.com content |
Prioritized Build Order
Recommended Sequence
| Priority | Feature | Hours | Rationale |
|---|---|---|---|
| 1 | Blog & Press Releases | 11 | Foundation for content; no blockers; high visibility |
| 2 | Team Popup (Phase 1) | 2 | Quick win; enhances existing feature; low risk |
| 3 | Pledge Infrastructure | 8 | CPT + form + moderation can be built without CSV |
| 4 | In the Media + Module | 5 | Depends on investigating existing media CPT |
| 5 | Signatory Count Module | 1 | Quick add after pledge CPT exists |
| 6 | Pledge CSV Import | 1 | Blocked by client CSV delivery |
| 7 | Press Kit | 5 | Can build structure; needs client files to populate |
| 8 | "What Others Are Saying" | 2 | After media CPT investigation complete |
Why This Order?
- Blog first - Most visible deliverable, unblocks content entry, proves out post architecture
- Team popup - 2-hour quick win while blog is fresh in mind
- Pledge early - Complex feature, better to build infrastructure before CSV arrives
- Media after site running - Need to investigate existing CPT structure
- Press Kit last - Dependent on client asset delivery
Git Commit Strategy
Branch Structure
main
└── feature/phase-2-development
├── Commits for each completed task
└── Merge to main when feature group is complete
Commit Cadence
Commit after completing each discrete task:
| Task Type | Commit Example |
|---|---|
| New CPT/taxonomy | Add article_type taxonomy for blog/press categorization |
| New template | Add blog archive template with filter tabs |
| New module | Add blog_posts ACF module for curated article display |
| ACF field changes | Add why_working field to team member ACF group |
| Bug fix/refinement | Fix mobile layout for blog card grid |
| Content migration | Import 9 legacy posts from californiaforever.com |
Commit Message Format
[Feature Area] Brief description
- Bullet point details if needed
- Reference to planning doc section
Phase II: Blog & Press Releases (Section 1)
Before Each Commit
- [ ] Code works locally
- [ ] No PHP errors/warnings
- [ ] Tailwind compiled if CSS changed
- [ ] ACF JSON exported if fields changed
Session Log
| Date | Work Completed |
|---|---|
| 2026-01-06 | Initial planning doc created, mockups reviewed, Q&A completed |
| 2026-01-06 to 01-08 | Blog system, Pledge system, Press Kit built; Phase 2 merged to main |
| 2026-01-08 | In the Media: ACF fields, export/import scripts, archive template; 22 mentions imported |
| 2026-01-08 | In the Media: Masonry layout with Pattern A/B alternating, medium/full card variants complete |
| 2026-01-09 | In the Media: AJAX load more, card rendering refactor, documentation |
| 2026-01-09 | Team Popup: GLightbox popup, ACF fields (bio, why_working, linkedin_url), LinkedIn button styling |
Progress Tracker
Overall Progress
[████████████████████] 100% (35/35 hrs)
Phase 2 complete.
By Feature
| Feature | Status | Progress | Hours |
|---|---|---|---|
| 1. Blog & Press Releases | ✅ Complete | ██████████ 100% | 11/11 |
| 2. In the Media | ✅ Complete | ██████████ 100% | 5/5 |
| 3. Pledge Page | ✅ Complete | ██████████ 100% | 10/10 |
| 4. Press Kit | ✅ Complete | ██████████ 100% | 5/5 |
| 5. Phase 1 Cleanup | ✅ Complete | ██████████ 100% | 4/4 |
Task Checklist
1. Blog & Press Releases (11 hrs) ✅ COMPLETE
⚠️ PRE-PRODUCTION: Remove fake/filler posts before launch
⚠️ DESIGN UPDATE: Client revised designs - additional categories need to be implemented
Setup & Architecture
- [x] Create article_type taxonomy
- [x] Register taxonomy in theme
Archive Page (4 hrs)
- [x] Create home.php template (WordPress blog archive)
- [x] Archive header
- [x] Filter tabs UI
- [x] Post card component (reusable templates in template-parts/blog/)
- [x] Grid layout (featured + standard)
- [x] Pagination
Single Template (4 hrs)
- [x] Create single.php template
- [x] Hero area with title/date
- [x] Featured image
- [x] Content area
- [x] Social share buttons
- [x] "Recent blogs" section
Blog Post Module
- [x] Create recent_articles ACF module
- [x] Category filter field
- [x] 3-card display
- [x] Handle posts with/without images (excerpt shows for small cards)
- [x] "See All" button
Content Migration (2 hrs) - [x] Import legacy posts - [x] Set featured images - [x] Assign taxonomy terms - [x] Created filler posts for testing
TODO: Design Updates - [ ] Implement additional categories from revised designs
2. In the Media (5 hrs) ✅ COMPLETE
Infrastructure (Done)
- [x] Review existing media CPT structure
- [x] Create ACF field group (acf-json/group_media_mention.json)
- [x] Export testimonials from pages (content-import/export-testimonials.php)
- [x] Import to CPT (content-import/import-media-mentions.php)
- [x] 22 media mentions imported
Archive Template (Done)
- [x] Create archive-media_mention.php
- [x] Quote card grid (4 variants: person, press, org, simple)
- [x] Pagination
- [x] Masonry layout with Pattern A/B alternating rows
- [x] Medium and full-width card variants
- [x] Design refinements complete
- [x] AJAX "Load More" functionality
- [x] Card rendering refactored into reusable components
- [x] Documentation (docs/IN-THE-MEDIA.md)
"What Others Are Saying" Module - [x] Create ACF module - [x] Quote card styling (reuse archive cards) - [x] Mixed source support (CPT + manual)
3. Break Ground 2026 Pledge (10 hrs) ✅ COMPLETE
⚠️ DESIGN UPDATE: Client revised designs - need to implement updated designs
CPT Setup
- [x] Register pledge_signer CPT (inc/post-types/pledge-signers.php)
- [x] Add meta fields
- [x] Admin columns
- [x] Approve/reject actions
Gravity Form - [x] Create form - [x] Form → CPT hook - [x] Admin notification - [x] Thank You redirect
Moderation Workflow (2 hrs) - [x] Pending signers view - [x] Bulk approve - [x] Status filters
Page Build (6 hrs)
- [x] Create page with modules (Pledge page ID: 1885)
- [x] Hero section
- [x] Pledge letter content
- [x] Form embed (pledge_form module)
- [x] Supporters grid with Load More (supporters_grid module)
- [x] CTA banner
- [x] Thank You page (ID: 1886)
Signatory Count Module
- [x] Create reusable module (signatory_count)
- [x] Query approved count
- [x] Styling
CSV Import (1 hr)
- [x] Create import script (content-import/import-pledge-signers.php)
- [x] Test with sample data
- [x] Additional batches imported
TODO: Design Updates - [ ] Implement revised designs from client
4. Press Kit (5 hrs) ✅ COMPLETE
⚠️ CONTENT NEEDED: Client needs to enter real content (PDFs, images, documents)
ACF Setup - [x] Create module field group - [x] Sections repeater - [x] Downloads repeater
Template
- [x] Create press_kit.php module
- [x] Accordion UI
- [x] File grid when expanded
- [x] File type icons
- [x] Download buttons
5. Phase 1 Cleanup (4 hrs) ✅ COMPLETE
"What Others Are Saying" (2 hrs) - [x] (Covered in Section 2)
Team Popup (2 hrs) ✅ COMPLETE
- [x] Add enable_popup toggle field
- [x] Add bio textarea field
- [x] Add why_working ACF field (optional)
- [x] Add linkedin_url field
- [x] GLightbox popup implementation
- [x] Popup styling (matches feature_cards pattern)
- [x] LinkedIn button overlay on profile image
- [x] Close button with proper styling
- [x] Mobile layout
Legend
| Symbol | Meaning |
|---|---|
| 🔲 | Not Started |
| 🔄 | In Progress |
| ✅ | Complete |
| ⏸️ | Blocked |
| [ ] | Task pending |
| [x] | Task complete |