Skip to content

Latest commit

 

History

History
101 lines (73 loc) · 4.02 KB

File metadata and controls

101 lines (73 loc) · 4.02 KB

Roadmap — Portfolio

Evolution view for the portfolio, aligned with Clean Architecture, DDD, i18n, and Supabase.


Index


Completed Sprints

Core (Sprint 0)

  • Either pattern (Left, Right, left, right)
  • Base classes: Entity, ValueObject, AggregateRoot
  • Validator with chain of responsibility
  • Migrated test runner to Vitest

Domain (Sprint 1)

  • Value Objects: Slug, Name, Url, LocalizedText, DateRange, Email
  • Entities: Project, Experience, Profile, Skill, ContactMessage
  • Repository interfaces: IProjectRepository, IExperienceRepository, IProfileRepository
  • User, Role, IUserRepository, UnauthorizedError (Identity context)

Infrastructure (Sprint 2)

  • Prisma schema (Project, Experience, Skill, Profile, User)
  • Repositories: PrismaProjectRepository, PrismaExperienceRepository, PrismaProfileRepository, PrismaUserRepository
  • DI container (makeContainer, getContainer)
  • Email adapter (ResendEmailService)
  • Migrations and seed

Application (Sprint 2–3)

  • Use cases: GetPublishedProjects, GetFeaturedProjects, GetProjectBySlug
  • Use cases: GetExperiences, GetProfile, GetProfessionalValues
  • Use case: SendContactMessage
  • Use cases: GetCurrentUser, EnsureAdmin
  • DTOs for all implemented contexts

Presentation — apps/site (Sprint 3–5)

  • i18n (next-intl): pt-BR, en-US, es
  • Pages: Home, Projects, Projects/[slug], About, Login, Admin
  • error.tsx per route segment
  • Locale middleware (next-intl)
  • Contact form with validation (React Hook Form + Zod)

Design System — @repo/ui (Sprint 6+)

  • Badge component with variants
  • Button with appearance variants
  • SectionHeader
  • TextRich with Markdown + Mermaid diagram support (React.lazy, client-side rendering)
  • OG image generation (/og route with @vercel/og)

MVP Round 2 — In Planning

Items required before MVP launch, using Paul Scanlon's portfolio as a reference.

  • Styling review — Figma round to identify what needs to be finished and changed in components
  • Realistic data — seeds updated with production-representative content
  • i18n in coreLocalizedText VO implemented in @repo/core; use cases resolve locale via .get(locale)
  • Remove hardcoded texts — fixed strings in @repo/core should use localizable messages
  • Move admin to a dedicated app — extract /{locale}/login and /{locale}/admin to apps/admin
  • General code review — quality pass before launch

Post-MVP

  • Blog (apps/blog) — BlogPost, Tag, public API, listing and detail pages (design spec). Post-MVP items deferred from the initial launch:
    • /archives page — reverse-chronological listing grouped by year
    • Tag index pages (/blog/[locale]/tag/[tag])
    • "Recently updated" and "Trending tags" sidebar widgets
    • Sticky table of contents on post pages (heading extraction + scroll-spy)
    • Reading-time estimate on post pages
    • Comments, newsletter, reading analytics
  • IAuthenticationGateway — pluggable Supabase gateway, authSubject, EnsureAppUserForAuthSession
  • Dedicated backend — REST API in a separate repository; apps/site remains a pure SSG consumer
  • Playwright E2E — end-to-end tests for critical flows
  • CI/CD — re-enable GitHub Actions when the plan allows runners

Continuous Improvements

  • Validation: Zod in APIs and row decoding; gradual migration to Zod in forms
  • Errors: complete ERROR_MESSAGE with es; standardize codes and HTTP mapping
  • Tests: coverage for use cases and repositories (local DB)
  • Documentation: keep docs/ in sync with decisions and code