# 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