A portfolio becomes easier to maintain when projects, posts, links, and stack modules are data-driven. That principle shaped every architectural decision in LookADev - from file structure to deployment strategy.
The portfolio and the article archive keep their content in TypeScript modules. That removes the need for a CMS just to edit a project description or publish a post. It does not mean the whole LookADev application has no database or runtime integrations.
For a small archive, a typed object is a useful editing interface: autocomplete catches missing fields and a pull request shows the content diff. Reconsider a CMS when non-technical editors need independent publishing or an approval workflow that Git does not cover.
Separate the shared shell, the page-level lists and the UI primitives. Let cards consume project records and article pages consume the content modules. This keeps a copy edit out of the layout components and gives you one place to inspect the published data.
Keep Portuguese and English titles and bodies together in the publishing workflow. Locale-specific URLs, canonical tags and reciprocal language links must describe the same translated article. A language toggle alone does not make an article bilingual.
The retro 'cartridge' metaphor for project cards wasn't just visual. It informed the data model. Each project has a fileName (like PROJECT_01.CART), a status (LIVE, PUBLIC, EXPERIMENTAL), an accent color, and a caseStudy array with labeled sections. The card component renders differently based on status - live projects get a pulsing indicator, public repos get a GitHub link, experimental projects get a lab badge.
Next.js can generate known content routes ahead of a request. Check the rendering behaviour of the deployed runtime, then measure load time and layout stability on representative devices. Data files and pre-rendering do not guarantee a Lighthouse score or a search ranking.
Keep data separate from presentation so you can sort recent posts, localise titles and produce an article feed from the same records. Those operations still carry a computational cost; the benefit is a smaller maintenance surface and fewer competing copies.
Reference: Next.js Metadata API.