Files
davidaragon-portfolio/IMPLEMENTATION-ROADMAP.md
T

301 lines
9.1 KiB
Markdown

# Personal Portfolio Implementation Roadmap
**Project**: davidaragon.impresion3d.pro
**Goal**: Professional portfolio + dev blog for indie builder
**Timeline**: 4 weeks (3 weeks implementation + 1 week content/polish)
**Methodology**: Atomic task decomposition → Parallel implementation → Sequential deployment
---
## Task Dependency Graph
```
Foundation (Week 1)
====================
t_28db7e16: [#29-impl-1] Initialize Astro + Tailwind + TypeScript
└── t_0078b4b3: [#29-impl-2] Content collections (blog + projects schemas)
├── t_0ec36bde: [#29-impl-3] Base layout (Header, Footer, Nav)
│ ├── t_6e85e022: [#29-impl-4] About page ║
│ ├── t_7aa42f76: [#29-impl-5] Homepage (hero + featured) ║
│ ├── t_b7d940a1: [#29-impl-6] Blog pages + RSS ║
│ └── t_26ed02cc: [#29-impl-7] Projects pages ║
└── (All above) ──→ t_66684b8f: [#29-impl-8] Docker deployment
Content & Polish (Week 3-4)
============================
t_c4e23cc8: [#29-impl-9] Blog content (5 posts) ║
t_637198bd: [#29-impl-10] Project case studies (3 projects) ║
t_8f00b91a: [#29-impl-11] SEO optimization (structured data, OG, analytics)
Legend:
║ = Can run in parallel
└── = Must wait for parent
```
---
## Phase Breakdown
### Phase 1: Foundation (Week 1)
**Priority: P1** (all tasks blocking)
| Task ID | Title | Assignee | Est. Time | Blocks |
|---------|-------|----------|-----------|--------|
| t_28db7e16 | Initialize Astro + Tailwind | wh-implementer | 2-3h | ALL |
| t_0078b4b3 | Content collections | wh-implementer | 3-4h | Layouts + Pages |
| t_0ec36bde | Base layout | wh-implementer | 3-4h | All pages |
| t_6e85e022 | About page | wh-implementer | 2-3h | - |
| t_7aa42f76 | Homepage hero | wh-implementer | 3-4h | - |
**Parallelization opportunity**: After #29-impl-3 completes, tasks #29-impl-4, #29-impl-5, #29-impl-6, #29-impl-7 can ALL run simultaneously (4 parallel tracks).
---
### Phase 2: Pages & Features (Week 2)
**Priority: P1-P2**
| Task ID | Title | Assignee | Est. Time | Parallel? |
|---------|-------|----------|-----------|-----------|
| t_b7d940a1 | Blog pages + RSS | wh-implementer | 4-5h | YES ║ |
| t_26ed02cc | Projects pages | wh-implementer | 3-4h | YES ║ |
**Can run in parallel** with #29-impl-4 and #29-impl-5.
---
### Phase 3: Deployment (Week 2-3)
**Priority: P1** (blocks launch)
| Task ID | Title | Assignee | Est. Time | Depends on |
|---------|-------|----------|-----------|------------|
| t_66684b8f | Docker + Nginx + Portainer | wh-implementer | 4-5h | ALL pages (impl-1 through impl-7) |
**Must wait** for all page implementation tasks to complete (can't deploy empty site).
---
### Phase 4: Content Creation (Week 3-4)
**Priority: P2** (nice-to-have for MVP, critical for launch)
| Task ID | Title | Assignee | Est. Time | Parallel? |
|---------|-------|----------|-----------|-----------|
| t_c4e23cc8 | Blog posts (5 articles) | wh-writer | 6-8h | YES ║ |
| t_637198bd | Project case studies (3 projects) | wh-writer | 4-5h | YES ║ |
**Can run in parallel** (different content types, no dependencies).
---
### Phase 5: SEO & Polish (Week 4)
**Priority: P3** (launch enhancement)
| Task ID | Title | Assignee | Est. Time | Depends on |
|---------|-------|----------|-----------|------------|
| t_8f00b91a | SEO optimization | wh-implementer | 2-3h | ALL pages |
---
## Critical Path Analysis
**Longest sequential path** (critical path):
```
impl-1 (3h) → impl-2 (4h) → impl-3 (4h) → impl-8 (5h) = 16 hours
```
**With parallelization**:
```
Week 1: impl-1 (3h) → impl-2 (4h) → impl-3 (4h) = 11h
Week 2: impl-4, impl-5, impl-6, impl-7 in parallel (max 5h)
Week 2: impl-8 (5h)
Week 3-4: impl-9, impl-10 in parallel (max 8h)
Week 4: impl-11 (3h)
Total calendar time: 3-4 weeks
Total sequential hours: 16h (foundation) + 5h (pages) + 5h (deploy) + 8h (content) + 3h (SEO) = 37 hours
With parallelization: ~27 hours of actual work
```
---
## Assignee Profiles
| Profile | Responsibilities | Skills | Tasks |
|---------|------------------|--------|-------|
| **wh-implementer** | Code implementation | Astro, React, Docker, FastAPI | impl-1 through impl-8, impl-11 |
| **wh-writer** | Content creation | Spanish writing, technical writing, SEO | impl-9, impl-10 |
| **wh-leader** | Orchestration | Planning, Gitea issues, monitoring | This task (t_22a3d7db) |
---
## Kanban Board States
All tasks created in **`todo`** state.
Transition rules:
- `todo``ready`: When all parent tasks in `done`
- `ready``running`: Dispatcher assigns to available worker
- `running``done`: Worker calls `kanban_complete(...)`
- `running``blocked`: Worker needs human input
---
## Acceptance Gates
### Gate 1: Foundation Complete (Week 1)
- [ ] Tasks impl-1, impl-2, impl-3 in `done`
- [ ] `npm run dev` starts without errors
- [ ] Tailwind CSS working (test with colored elements)
- [ ] Content collections validated (no schema errors)
- [ ] Header, Footer, Navigation visible
### Gate 2: Pages Complete (Week 2)
- [ ] Tasks impl-4, impl-5, impl-6, impl-7 in `done`
- [ ] All pages accessible (`/`, `/about`, `/blog`, `/projects`)
- [ ] No TypeScript errors
- [ ] No broken links
- [ ] Responsive design works (mobile, tablet, desktop)
### Gate 3: Deployment Ready (Week 2-3)
- [ ] Task impl-8 in `done`
- [ ] Docker image builds successfully
- [ ] Final image size <50MB
- [ ] Health check passes
- [ ] Site accessible at http://localhost:3010
- [ ] Nginx serves static files with gzip compression
### Gate 4: Content Published (Week 3-4)
- [ ] Tasks impl-9, impl-10 in `done`
- [ ] At least 3 blog posts published
- [ ] At least 2 project case studies published
- [ ] All content validates against schemas
- [ ] No typos or grammar errors
### Gate 5: SEO Optimized (Week 4)
- [ ] Task impl-11 in `done`
- [ ] Sitemap generated and accessible
- [ ] robots.txt present
- [ ] Structured data validates (Google Rich Results Test)
- [ ] OG preview looks correct (opengraph.xyz)
- [ ] Analytics configured (if using)
### Gate 6: Production Launch
- [ ] All 11 implementation tasks in `done`
- [ ] All 6 acceptance gates passed
- [ ] Portainer stack deployed to 192.168.1.30:3010
- [ ] HTTPS working via Traefik (davidaragon.impresion3d.pro)
- [ ] DNS pointing to correct server
- [ ] Health check passing
- [ ] Site accessible publicly
---
## Gitea Issue Mapping
All tasks map to **Gitea Issue #29**: "Build personal portfolio with blog and projects showcase"
Task naming convention: `[#29-impl-N] Description`
This allows tracking all work back to the single strategic Gitea issue while maintaining atomic Kanban tasks for execution.
---
## Known Blockers & Mitigations
### Blocker 1: Git Push Authentication
**Status**: BLOCKED
**Impact**: Cannot push commits to GitLab
**Mitigation**:
- Commits created locally (all changes staged)
- Push manually after SSH key configured
- Or: use personal access token with HTTPS
**Resolution needed**: SSH key or GitLab personal access token
### Blocker 2: Real Images (OG, Favicon, Avatar)
**Status**: LOW PRIORITY
**Impact**: Site uses placeholders for images
**Mitigation**:
- Create placeholders in implementation tasks
- Replace with real images before launch
- Can launch with placeholders if needed (not blocking)
**Resolution**: Create professional OG image (1200x630), favicon set, avatar photo
### Blocker 3: Analytics Configuration
**Status**: OPTIONAL
**Impact**: No traffic analytics initially
**Mitigation**:
- Launch without analytics (privacy-first)
- Or: set up self-hosted Plausible later
- Not blocking for MVP
**Resolution**: Optional - configure Plausible after launch
---
## Success Metrics
### Development Metrics
- [ ] 11 tasks completed in 4 weeks
- [ ] Zero P1 bugs at launch
- [ ] <50MB Docker image size
- [ ] >80% test coverage (if tests added)
- [ ] 100% TypeScript strict compliance
### Product Metrics (post-launch)
- Lighthouse Score: >90 (all categories)
- Core Web Vitals: Pass (LCP <2.5s, FID <100ms, CLS <0.1)
- Uptime: >99% (monitor with UptimeRobot)
- Page load: <2s (first contentful paint)
### Content Metrics (Month 1)
- 3-5 blog posts published
- 2-3 project case studies published
- RSS subscribers: goal 50+
- Organic traffic: goal 100+ visitors/month
---
## Post-Launch Roadmap
### Month 1-2: Content Cadence
- Publish 2 blog posts per week
- Update project case studies with metrics
- Add 1-2 more projects (Garage61 API, etc.)
### Month 3-4: Features
- Newsletter signup backend (ConvertKit/Mailchimp)
- Comments system (Giscus/Utterances)
- Search functionality
- Dark/light mode toggle
### Month 5-6: Growth
- Guest posts on Spanish indie blogs
- X (Twitter) thread automation from blog posts
- SEO optimization (internal linking, backlinks)
- Analytics dashboard (public metrics page)
---
## Contact & Support
**Project Owner**: David Aragón (caleidos)
**Primary Agent**: wh-leader (orchestrator)
**Repository**: https://gitlab.impresion3d.pro/root/davidaragon-portfolio
**Deployment**: 192.168.1.30:3010 → davidaragon.impresion3d.pro
**Blockers?** Comment on Kanban task or create Gitea issue.
---
**Generated**: 2026-05-08
**Last Updated**: 2026-05-08
**Status**: ✅ Ready for execution