Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d8e8317
Feature/anonimizar proyectos timeline (#63)
GMNAPI Jan 19, 2026
36d8261
fix(portfolio): resolve merge conflicts and apply Gemini review sugge…
GMNAPI Jan 19, 2026
949123a
feat(portfolio): update CV files (#66)
GMNAPI Mar 12, 2026
1a08cfb
feat(portfolio): add LlarJove project with ia-chatbots category (#65)
GMNAPI Mar 12, 2026
7df65f3
feat(projects): redesign section with compact cards and detail modal …
GMNAPI Mar 12, 2026
f7f877e
feat(skills): redesign section with compact cards and detail modal
GMNAPI Mar 12, 2026
bce73b3
fix(skills): improve hover overlay progress bar contrast
GMNAPI Mar 12, 2026
f4ce2ce
feat(lab): blog, i18n es/en/fr, homepage
DevFBI Mar 12, 2026
b4f3717
Merge feature/lab-blog-i18n: blog, i18n es/en/fr
DevFBI Mar 12, 2026
b6fe784
fix(lab): use absolute paths in intro links for trailingSlash
DevFBI Mar 12, 2026
619017c
fix(lab): absolute paths in intro for trailingSlash
DevFBI Mar 12, 2026
3a07240
Merge intro link fix
DevFBI Mar 12, 2026
2dc88c6
fix(lab): remove fr locale, set trailingSlash false for routing
DevFBI Mar 12, 2026
7526cef
Merge lab: remove fr, trailingSlash false
DevFBI Mar 12, 2026
e080e3a
feat(lab): add complete EN translations for blog, docs and homepage
GMNAPI Mar 12, 2026
f77117a
style(skills): fix Prettier formatting in SkillModal
GMNAPI Mar 12, 2026
df2cea8
ci: remove uploadArtifacts from Lighthouse action to fix artifact API…
GMNAPI Mar 12, 2026
4fc3b7d
Merge pull request #69 from GMNAPI/feature/lab-i18n-en-translations
GMNAPI Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Auto detect text files and perform LF normalization
* text=auto eol=lf

# Force LF for all text files
*.js text eol=lf
*.jsx text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.json text eol=lf
*.md text eol=lf
*.mdx text eol=lf
*.css text eol=lf
*.scss text eol=lf
*.html text eol=lf
*.svg text eol=lf
*.xml text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.sh text eol=lf
*.env text eol=lf
*.env.* text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf
.prettierrc text eol=lf
.eslintrc text eol=lf
Dockerfile text eol=lf

# Binary files (don't modify)
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.webp binary
*.avif binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.pdf binary
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@ jobs:
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'pull_request'
continue-on-error: true
permissions:
actions: write

steps:
- name: Checkout code
Expand Down Expand Up @@ -190,7 +193,6 @@ jobs:
with:
urls: |
http://localhost:3000
uploadArtifacts: true
temporaryPublicStorage: true

- name: Stop production server
Expand Down Expand Up @@ -235,6 +237,8 @@ jobs:
runs-on: ubuntu-latest
needs: [lint, typecheck, test, build]
if: always()
permissions:
pull-requests: write

steps:
- name: Check job status
Expand Down
118 changes: 59 additions & 59 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,59 +1,59 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
coverage/
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
# AI
CLAUDE.md
# Personal files
gptPrompt.md
# Temporary files and helpers
/temp
# Monorepo
.turbo
# Docusaurus
.docusaurus
apps/lab/build
apps/lab/.docusaurus
apps/lab/node_modules
# Next.js
apps/portfolio/.next
apps/portfolio/build
apps/portfolio/node_modules
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz

# testing
coverage/

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

# AI
CLAUDE.md

# Personal files
gptPrompt.md

# Temporary files and helpers
/temp

# Monorepo
.turbo

# Docusaurus
.docusaurus
apps/lab/build
apps/lab/.docusaurus
apps/lab/node_modules

# Next.js
apps/portfolio/.next
apps/portfolio/build
apps/portfolio/node_modules
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
24
24
27 changes: 27 additions & 0 deletions apps/lab/blog/2025-03-12-bienvenida-al-blog-lab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
slug: bienvenida-al-blog-lab
title: Bienvenida al Blog de Lab
authors: [angel]
tags: [typescript, nextjs]
date: 2025-03-12
---

# Bienvenida al Blog de Lab

Bienvenido al blog técnico del Lab de DevPortfolio. Este espacio está pensado para compartir experimentos, aprendizajes y documentación de desarrollo.

## ¿Qué encontrarás aquí?

- **Tutoriales** sobre tecnologías del stack actual (Next.js, TypeScript, Docusaurus)
- **Reflexiones** sobre arquitectura, patrones y buenas prácticas
- **Cómo hacer** (how-tos) y guías prácticas
- **Experimentos** con nuevas herramientas o enfoques

## El stack del proyecto

El monorepo DevPortfolio combina:

- **Portfolio**: Next.js 15, React 19, Tailwind, Framer Motion
- **Lab**: Docusaurus 2.4 para documentación y este blog

Siéntete libre de explorar las [Guías](/docs/intro) para documentación más estructurada sobre arquitectura, i18n y testing.
32 changes: 16 additions & 16 deletions apps/lab/blog/tags.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
facebook:
label: Facebook
permalink: /facebook
description: Facebook tag description
typescript:
label: TypeScript
permalink: /typescript
description: Artículos sobre TypeScript y tipado estático

hello:
label: Hello
permalink: /hello
description: Hello tag description
nextjs:
label: Next.js
permalink: /nextjs
description: Contenido sobre Next.js y React Server Components

docusaurus:
label: Docusaurus
permalink: /docusaurus
description: Docusaurus tag description
devops:
label: DevOps
permalink: /devops
description: CI/CD, Docker, despliegues y automatización

hola:
label: Hola
permalink: /hola
description: Hola tag description
clean-architecture:
label: Clean Architecture
permalink: /clean-architecture
description: Patrones, capas y estructura de proyectos
6 changes: 3 additions & 3 deletions apps/lab/docs/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ Este es mi espacio de documentación técnica y experimentación, donde comparto

Documentación detallada sobre los patrones y estrategias de arquitectura utilizados en mis proyectos:

- **[Clean Architecture](./guides/clean-architecture)**: Implementación de arquitectura limpia en 3 capas con Next.js
- **[Testing Strategy](./guides/testing-strategy)**: Estrategia de testing con Vitest y React Testing Library
- **[i18n Patterns](./guides/i18n-patterns)**: Patrones de internacionalización con next-intl
- **[Clean Architecture](/docs/guides/clean-architecture)**: Implementación de arquitectura limpia en 3 capas con Next.js
- **[Testing Strategy](/docs/guides/testing-strategy)**: Estrategia de testing con Vitest y React Testing Library
- **[i18n Patterns](/docs/guides/i18n-patterns)**: Patrones de internacionalización con next-intl

### ✍️ Blog Técnico

Expand Down
11 changes: 6 additions & 5 deletions apps/lab/docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const config = {

url: 'https://desenvolupadormaster.vercel.app',
baseUrl: '/',
trailingSlash: false,

organizationName: 'GMNAPI',
projectName: 'devportfolio-lab',
Expand Down Expand Up @@ -70,7 +71,7 @@ const config = {
position: 'left',
label: 'Guías',
},
// { to: '/blog', label: 'Blog', position: 'left' }, // Disabled: no blog posts yet
{ to: '/blog', label: 'Blog', position: 'left' },
{
type: 'localeDropdown',
position: 'right',
Expand All @@ -92,10 +93,10 @@ const config = {
label: 'Guías',
to: '/docs/intro',
},
// {
// label: 'Blog',
// to: '/blog',
// }, // Disabled: no blog posts yet
{
label: 'Blog',
to: '/blog',
},
],
},
{
Expand Down
36 changes: 36 additions & 0 deletions apps/lab/i18n/en/code.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,40 @@
{
"homepage.tagline": {
"message": "Technical experiments, skills, and development documentation",
"description": "Homepage hero tagline"
},
"homepage.button.guides": {
"message": "View Guides",
"description": "Homepage primary CTA button"
},
"homepage.button.blog": {
"message": "Go to Blog",
"description": "Homepage secondary CTA button"
},
"homepage.feature.guides.title": {
"message": "Guides",
"description": "Homepage feature card title for Guides"
},
"homepage.feature.guides.description": {
"message": "Documentation on Clean Architecture, testing, and i18n patterns for Next.js and TypeScript projects.",
"description": "Homepage feature card description for Guides"
},
"homepage.feature.blog.title": {
"message": "Blog",
"description": "Homepage feature card title for Blog"
},
"homepage.feature.blog.description": {
"message": "Technical articles, experiments, and case studies on development, SaaS, and DevOps.",
"description": "Homepage feature card description for Blog"
},
"homepage.feature.portfolio.title": {
"message": "Portfolio",
"description": "Homepage feature card title for Portfolio"
},
"homepage.feature.portfolio.description": {
"message": "Production projects, skills, and contact. The main CV linked to this Lab.",
"description": "Homepage feature card description for Portfolio"
},
"theme.ErrorPageContent.title": {
"message": "This page crashed.",
"description": "The title of the fallback page when the page crashed"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
slug: bienvenida-al-blog-lab
title: Welcome to the Lab Blog
authors: [angel]
tags: [typescript, nextjs]
date: 2025-03-12
---

# Welcome to the Lab Blog

Welcome to the technical blog of the DevPortfolio Lab. This space is designed for sharing experiments, learnings, and development documentation.

## What will you find here?

- **Tutorials** on technologies in the current stack (Next.js, TypeScript, Docusaurus)
- **Reflections** on architecture, patterns, and best practices
- **How-tos** and practical guides
- **Experiments** with new tools or approaches

## The project stack

The DevPortfolio monorepo combines:

- **Portfolio**: Next.js 15, React 19, Tailwind, Framer Motion
- **Lab**: Docusaurus 2.4 for documentation and this blog

Feel free to explore the [Guides](/en/docs/intro) for more structured documentation on architecture, i18n, and testing.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "Artículos recientes",
"message": "Recent articles",
"description": "The label for the left sidebar"
}
}
16 changes: 6 additions & 10 deletions apps/lab/i18n/en/docusaurus-plugin-content-docs/current.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
"message": "Next",
"description": "The label for version current"
},
"sidebar.guidesSidebar.category.Tutorial - Basics": {
"message": "Tutorial - Basics",
"description": "The label for category Tutorial - Basics in sidebar guidesSidebar"
"sidebar.guidesSidebar.category.Guías de Arquitectura": {
"message": "Architecture Guides",
"description": "The label for category Guías de Arquitectura in sidebar guidesSidebar"
},
"sidebar.guidesSidebar.category.Tutorial - Basics.link.generated-index.description": {
"message": "5 minutes to learn the most important Docusaurus concepts.",
"description": "The generated-index page description for category Tutorial - Basics in sidebar guidesSidebar"
},
"sidebar.guidesSidebar.category.Tutorial - Extras": {
"message": "Tutorial - Extras",
"description": "The label for category Tutorial - Extras in sidebar guidesSidebar"
"sidebar.guidesSidebar.category.Guías de Arquitectura.link.generated-index.description": {
"message": "Detailed guides on Clean Architecture, Testing, and i18n in DevPortfolio.",
"description": "The generated-index page description for Architecture Guides"
}
}
Loading
Loading