diff --git a/IMPLEMENTATION-ROADMAP.md b/IMPLEMENTATION-ROADMAP.md new file mode 100644 index 0000000..3de5645 --- /dev/null +++ b/IMPLEMENTATION-ROADMAP.md @@ -0,0 +1,300 @@ +# 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