Files
gustavoo-me/README.md
T

193 lines
8.0 KiB
Markdown

# Gustavo Portfolio — Tema WordPress
Tema WordPress clássico para o portfólio e blog de **Gustavo Oliveira** — [gustavoo.me](https://gustavoo.me)
## Screenshot
![Theme Screenshot](wp-content/themes/gustavoo-portfolio/screenshot.png)
## Sobre
Tema WordPress clássico desenvolvido para o portfólio pessoal e blog de Gustavo Oliveira, desenvolvedor Full Stack Sênior. O tema foi construído com foco em performance, acessibilidade e experiência do usuário, utilizando as melhores práticas do WordPress moderno.
## Características
- **Tema Clássico** — Template hierarchy tradicional do WordPress
- **Theme.json** — Configuração completa de estilos via theme.json (cores, tipografia, espaçamento, bordas)
- **Blocos Nativos** — Suporte completo a blocos do Gutenberg
- **Fluent Forms + FluentCRM** — Integração nativa para formulários e newsletter
- **Portfólio de Projetos** — CPT customizado para exibição de projetos
- **Newsletter Widget** — Widget personalizado para FluentCRM
- **SEO Ready** — Estrutura semântica e meta tags otimizadas
- **Performance** — Assets otimizados, fontes variáveis (Inter Variable), lazy loading nativo
## Stack
- **WordPress** 6.5+
- **PHP** 8.1+
- **Theme.json** v3
- **Inter Variable Font** (local, self-hosted)
- **Fluent Forms** + **FluentCRM** (integração via plugin complementar)
- **Docker Compose** para desenvolvimento local
## Estrutura do Tema
```
gustavoo-portfolio/
├── assets/
│ └── fonts/ # Inter Variable Font (woff2)
├── inc/
│ ├── customizer.php # Personalizador do tema
│ ├── defaults.php # Configurações padrão (theme.json fallback)
│ ├── enqueue.php # Assets e estilos
│ ├── forms.php # Integração Fluent Forms
│ ├── setup.php # Configuração do tema
│ ├── template-tags.php # Template tags auxiliares
│ └── widgets.php # Widget Newsletter (FluentCRM)
├── template-parts/ # Partes de template reutilizáveis
├── 404.php
├── archive.php
├── category.php
├── comments.php
├── footer.php
├── front-page.php # Página inicial customizada
├── functions.php # Bootstrap do tema
├── header.php
├── home.php
├── index.php
├── page.php
├── search.php
├── searchform.php
├── sidebar.php
├── single.php
├── screenshot.png # Screenshot do tema (theme.png)
├── style.css # Stylesheet principal (metadados do tema)
└── theme.json # Configuração global de estilos
```
## Plugin Complementar
O tema funciona em conjunto com o plugin **Gustavo Portfolio Core** (`wp-content/plugins/gustavoo-portfolio-core`), que provê:
- **CPT Projetos** — Post type customizado para portfólio
- **Configurações Globais** — Opções de hero, sobre, projetos, blog, contato, newsletter e redes sociais
- **Seeder** — Criação automática de páginas, formulários Fluent Forms e feeds FluentCRM
- **Widget Newsletter** — Widget para exibir formulário de newsletter no sidebar
## Desenvolvimento Local
### Pré-requisitos
O tema e plugin dependem dos seguintes plugins WordPress (instalados e ativados):
- **Fluent Forms** — Formulários de contato e newsletter
- **FluentCRM** — Automação de marketing e newsletter
```bash
# Criar o arquivo de variáveis de ambiente (obrigatório)
cp .env.example .env
# Edite o .env com suas credenciais (senhas do banco, porta, etc.)
# Subir ambiente Docker (instala e configura tudo automaticamente)
docker compose up -d
# Acompanhar a instalação
docker compose logs -f wpcli
# Acessar WordPress
# http://localhost:8080
# Usuário: admin | Senha: admin (definido no .env)
# Instalar dependências (plugins obrigatórios)
# 1. Acesse http://localhost:8080/wp-admin
# 2. Plugins → Adicionar novo → Busque e instale:
# - Fluent Forms
# - FluentCRM
# 3. Ative ambos os plugins
# Logs
docker compose logs -f wordpress
```
### O que acontece a cada `docker compose up`
O serviço `wpcli` roda o `docker/wp-init.sh` e detecta o estado do banco:
**Primeira execução (banco vazio) — instalação**
1. `wp core install` com URL/título/admin definidos no `.env`
2. Pacote de idioma `pt_BR`
3. Instala do WordPress.org os plugins de `WP_EXTRA_PLUGINS` (Post Views Counter, Rank Math SEO, Site Kit, Fluent Forms, FluentCRM, FluentSMTP) — só se faltarem
4. Ativa **todos** os plugins de `wp-content/plugins/` e remove os que o WordPress traz (`akismet`, `hello`)
5. Redis: constantes no `wp-config.php`, plugin, drop-in `object-cache.php` e verificação de conexão
6. Configura o Post Views Counter: conta **posts e páginas**, posição **Manual only**
7. Ativa o tema `gustavoo-portfolio` e remove os temas padrão
8. Executa o seeder do plugin (páginas, formulários, feeds, permalinks, avatar)
Rank Math SEO e Site Kit são apenas instalados e ativados: o wizard e a conexão com o Google são feitos manualmente no painel.
**Execuções seguintes (site já instalado) — atualização**
1. Nada é reinstalado e nenhum dado é apagado
2. Atualiza o **core** e os **plugins ativos** que tiverem versão nova
3. Ativa plugins novos adicionados à pasta `wp-content/plugins/`
4. Reaplica só o que estiver faltando (idioma, Redis, tema, seeder idempotente)
> A configuração do Post Views Counter roda **uma única vez**, na instalação. Se você mudar a posição no painel, ela não é sobrescrita nos próximos boots.
O seeder também aplica, apenas enquanto os valores ainda forem os de instalação nova:
| Ajuste | Valor aplicado |
|---|---|
| Links permanentes | **Dia e nome** — `/ano/mês/dia/slug/` |
| Avatar padrão | **Iniciais** |
Depois de criar permalinks, o `.htaccess` do Apache é regravado na hora — sem isso as URLs novas dariam 404. Se você já tiver escolhido outro permalink ou avatar, sua escolha é mantida.
Tudo o que é do usuário fica em **volumes**, não no container:
| Volume | Conteúdo |
|---|---|
| `db_data` | banco MariaDB — posts, páginas, usuários, opções, formulários |
| `wordpress_data` | core, uploads, plugins e temas instalados |
| `redis_data` | cache de objetos |
`docker compose down` (sem `-v`) preserva tudo; só `down -v` recria do zero. Para pular atualizações numa reinicialização, use `WP_SKIP_UPDATES=1` no `.env`.
> Em produção (VPS), os serviços usam **pastas no host** (`./db_data`, `./wordpress_data`, `./redis_data`) em vez dos volumes nomeados acima — o conteúdo é o mesmo, só muda onde o Docker guarda os arquivos. Essas pastas estão no `.gitignore` e nunca são commitadas.
### Senhas
A senha do banco é gravada **dentro do volume `db_data` na primeira instalação**. Trocar `WORDPRESS_DB_PASSWORD` ou `MARIADB_ROOT_PASSWORD` no `.env` depois disso **não** atualiza o banco — o WordPress perde a conexão (`Error establishing a database connection`) e o setup aborta com erro em vez de reinstalar por cima.
Para voltar ao normal, devolva a senha original no `.env` e reinicie (`docker compose up -d`).
Para trocar a senha de verdade, altere-a nos dois lugares, nessa ordem:
```sh
# 1. No banco em execução (troque NOVA_SENHA pela senha nova):
docker compose exec db mariadb -u root -p"$MARIADB_ROOT_PASSWORD" \
-e "ALTER USER 'wordpress'@'%' IDENTIFIED BY 'NOVA_SENHA'; FLUSH PRIVILEGES;"
# 2. No .env:
WORDPRESS_DB_PASSWORD=NOVA_SENHA
# 3. Reinicie:
docker compose up -d
```
## Deploy
O tema está preparado para deploy em ambientes WordPress padrão (VPS, shared hosting, WP Engine, Kinsta, etc.).
1. Faça o build dos assets se necessário
2. Faça deploy da pasta `wp-content/themes/gustavoo-portfolio/`
3. Ative o tema no painel WordPress
4. Ative o plugin **Gustavo Portfolio Core**
5. Execute o seeder (Configurações → Portfólio → "Executar Seeder") para criar páginas e formulários padrão
## Licença
GNU General Public License v2 ou posterior — mesmo licença do WordPress.
---
**Desenvolvido por [Gustavo Oliveira](https://gustavoo.me)** — Desenvolvedor Full Stack Sênior