Grupo de Habilidades de Frameworks Web
Guia completo para construir aplicações web full-stack modernas usando Next.js, Turborepo e RemixIcon.
Visão Geral
Este grupo de habilidades combina três ferramentas poderosas para desenvolvimento web:
Next.js - Framework React com SSR, SSG, RSC e recursos de otimização Turborepo - Sistema de build monorepo de alto desempenho para JavaScript/TypeScript RemixIcon - Biblioteca de ícones com mais de 3.100 ícones em estilo outline e filled
Quando Usar Este Grupo de Habilidades
- Construir novas aplicações web full-stack com React moderno
- Configurar monorepos com múltiplos aplicativos e pacotes compartilhados
- Implementar renderização no lado do servidor e geração estática
- Otimizar o desempenho do build com cache inteligente
- Criar UI consistente com iconografia profissional
- Gerenciar dependências do workspace em vários projetos
- Implantar aplicações prontas para produção com otimização adequada
Guia de Seleção de Stack
Aplicativo Único: Next.js + RemixIcon
Use ao construir um aplicativo independente:
- Sites de comércio eletrônico
- Sites de marketing
- Aplicações SaaS
- Sites de documentação
- Blogs e plataformas de conteúdo
Configuração:
npx create-next-app@latest my-app
cd my-app
npm install remixicon
Monorepo: Next.js + Turborepo + RemixIcon
Use ao construir múltiplos aplicativos com código compartilhado:
- Microfrontends
- Plataformas multi-inquilino
- Ferramentas internas com biblioteca de componentes compartilhada
- Múltiplos apps (web, admin, mobile-web) compartilhando lógica
- Sistema de design com site de documentação
Configuração:
npx create-turbo@latest my-monorepo
# Em seguida, configure apps Next.js no diretório apps/
# Instale remixicon nos pacotes de UI compartilhados
Comparação de Funcionalidades do Framework
| Funcionalidade | Next.js | Turborepo | RemixIcon |
|---|---|---|---|
| Uso Principal | Framework web | Sistema de build | Ícones de UI |
| Melhor Para | Apps SSR/SSG | Monorepos | Iconografia consistente |
| Desempenho | Otimização integrada | Cache e tarefas paralelas | Fontes/SVG leves |
| TypeScript | Suporte completo | Suporte completo | Definições de tipo disponíveis |
Início Rápido
Aplicação Next.js
# Criar novo projeto
npx create-next-app@latest my-app
cd my-app
# Instalar RemixIcon
npm install remixicon
# Importar no layout
# app/layout.tsx
import 'remixicon/fonts/remixicon.css'
# Iniciar desenvolvimento
npm run dev
Monorepo Turborepo
# Criar monorepo
npx create-turbo@latest my-monorepo
cd my-monorepo
# Estrutura:
# apps/web/ - Aplicação Next.js
# apps/docs/ - Site de documentação
# packages/ui/ - Componentes compartilhados com RemixIcon
# packages/config/ - Configurações compartilhadas
# turbo.json - Configuração do pipeline
# Executar todos os apps
npm run dev
# Build de todos os pacotes
npm run build
Integração RemixIcon
// Webfont (HTML/CSS)
<i className="ri-home-line"></i>
<i className="ri-search-fill ri-2x"></i>
// Componente React
import { RiHomeLine, RiSearchFill } from "@remixicon/react"
<RiHomeLine size={24} />
<RiSearchFill size={32} color="blue" />
Navegação de Referências
Referências Next.js:
- Arquitetura App Router - Roteamento, layouts, páginas, rotas paralelas
- Componentes Servidor - Padrões RSC, cliente vs servidor, streaming
- Fetching de Dados - API fetch, cache, revalidação, estados de carregamento
- Otimização - Imagens, fontes, scripts, análise de bundle, PPR
Referências Turborepo:
- Configuração & Setup - Instalação, configuração do workspace, estrutura de pacotes
- Pipelines de Tarefas - Dependências, execução paralela, ordenação de tarefas
- Estratégias de Cache - Cache local, cache remoto, invalidação de cache
Referências RemixIcon:
- Guia de Integração - Instalação, uso, customização, acessibilidade
Padrões e Fluxos de Trabalho Comuns
Padrão 1: Monorepo Full-Stack
my-monorepo/
├── apps/
│ ├── web/ # App Next.js voltado ao cliente
│ ├── admin/ # App Next.js painel admin
│ └── docs/ # Site de documentação
├── packages/
│ ├── ui/ # UI compartilhada com RemixIcon
│ ├── api-client/ # Biblioteca cliente de API
│ ├── config/ # Configurações ESLint, TypeScript
│ └── types/ # Tipos TypeScript compartilhados
└── turbo.json # Pipeline de build
turbo.json:
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "!.next/cache/**", "dist/**"]
},
"dev": {
"cache": false,
"persistent": true
},
"lint": {},
"test": {
"dependsOn": ["build"]
}
}
}
Padrão 2: Biblioteca de Componentes Compartilhados
// packages/ui/src/button.tsx
import { RiLoader4Line } from "@remixicon/react";
export function Button({ children, loading, icon }) {
return (
<button>
{loading ? <RiLoader4Line className="animate-spin" /> : icon}
{children}
</button>
);
}
// apps/web/app/page.tsx
import { Button } from "@repo/ui/button";
import { RiHomeLine } from "@remixicon/react";
export default function Page() {
return <Button icon={<RiHomeLine />}>Home</Button>;
}
Padrão 3: Fetching de Dados Otimizado
// app/posts/[slug]/page.tsx
import { notFound } from "next/navigation";
// Geração estática no momento do build
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map((post) => ({ slug: post.slug }));
}
// Revalidar a cada hora
async function getPost(slug: string) {
const res = await fetch(`https://api.example.com/posts/${slug}`, {
next: { revalidate: 3600 },
});
if (!res.ok) return null;
return res.json();
}
export default async function Post({ params }: { params: { slug: string } }) {
const post = await getPost(params.slug);
if (!post) notFound();
return <article>{post.content}</article>;
}
Padrão 4: Pipeline CI/CD Monorepo
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm install
- run: npx turbo run build test lint
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
Scripts Utilitários
Utilitários Python no diretório scripts/:
nextjs_init.py - Inicializar projeto Next.js com boas práticas turborepo_migrate.py - Converter monorepo existente para Turborepo
Exemplos de uso:
# Inicializar novo app Next.js com TypeScript e configuração recomendada
python scripts/nextjs_init.py --name my-app --typescript --app-router
# Migrar monorepo existente para Turborepo com dry-run
python scripts/turborepo_migrate.py --path ./my-monorepo --dry-run
# Executar testes
cd scripts/tests
pytest
Melhores Práticas
Next.js:
- Padrão para Componentes Servidor, use Componentes Cliente apenas quando necessário
- Implemente estados de carregamento e erro adequados
- Use o componente Image para otimização automática
- Defina metadados apropriados para SEO
- Aproveite estratégias de cache (force-cache, revalidate, no-store)
- Acompanhe as versões de segurança estáveis do Next.js separadamente de mudanças canary. Aplicações de produção devem permanecer em uma linha de versão estável corrigida e evitar pins canary a menos que estejam testando um problema upstream específico.
Turborepo:
- Estruture o monorepo com separação clara (apps/, packages/)
- Defina dependências de tarefas corretamente (^build para topológico)
- Configure outputs para cache adequado
- Ative cache remoto para colaboração em equipe
- Use filtros para executar tarefas apenas em pacotes alterados
RemixIcon:
- Use estilo line para interfaces minimalistas, fill para destaque
- Mantenha alinhamento da grade 24x24 para renderização nítida
- Forneça aria-labels para acessibilidade
- Use currentColor para theming flexível
- Prefira webfonts para múltiplos ícones, SVG para ícones únicos
Recursos
- Next.js: https://nextjs.org/docs/llms.txt
- Turborepo: https://turbo.build/repo/docs
- RemixIcon: https://remixicon.com
Checklist de Implementação
Construindo com esta stack:
- Criar estrutura do projeto (app único ou monorepo)
- Configurar TypeScript e ESLint
- Configurar Next.js com App Router
- Configurar pipeline Turborepo (se monorepo)
- Instalar e configurar RemixIcon
- Implementar roteamento e layouts
- Adicionar estados de carregamento e erro
- Configurar otimização de imagens e fontes
- Configurar padrões de fetching de dados
- Configurar estratégias de cache
- Adicionar rotas de API conforme necessário
- Implementar biblioteca de componentes compartilhada (se monorepo)
- Configurar cache remoto (se monorepo)
- Configurar pipeline CI/CD
- Configurar plataforma de deployment