9.1 KiB
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 indoneready→running: Dispatcher assigns to available workerrunning→done: Worker callskanban_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 devstarts 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