Nicchon.
Todos os projetos
SistemaEm produção· 2026

App.nicchon.com

Vitrine pessoal de mini-apps com agregador em 3 camadas: embutidos no monorepo, sub-deploys de outros repos, e links externos via MySQL. Painel admin no nicchon.com gerencia o que muda; o resto vive em Git.

Sobre

Antes era um agregador PHP que varria o filesystem do servidor e listava qualquer pasta como link — bagunçado, sem identidade visual, sem distinção entre projeto, configuração e rascunho. Reformulei em 2026 como sistema com 3 tipos de 'coisa' explícitos: mini-apps embutidos (no monorepo), sub-deploys (outros repos entregam direto em /app.nicchon.com/{slug}/) e links externos (cadastrados via painel admin no MySQL). 22 mini-apps históricos consolidados, identidade visual portada de nicchon.com, e redirect 301 do antigo projetos.nicchon.com preservando paths.

Stack

  • PHP 8 (sem framework)
  • MySQL 8
  • HTML + CSS + JS
  • Apache .htaccess
  • GitHub Actions (FTP deploy)
  • Hostgator (shared hosting)
  • Crimson Pro + Inter + JetBrains Mono

Decisões

  • Três tipos de 'coisa' explícitos cada um com seu fluxo de cadastro: mini-app embutido (manifest.json + push), sub-deploy (external-manifests/{slug}.json no monorepo), link externo (painel admin com CRUD MySQL). Single source of truth por tipo.
  • Discovery automática de órfãos: projects.php varre o filesystem do servidor e detecta pastas sem manifest declarado, marcando com badge vermelha 'Sem manifest' + header X-App-Orphans. Impossível esquecer de declarar um sub-deploy novo.
  • Dark mode com paleta consistente com nicchon.com/painel. Toggle via SVG inline + CSS show/hide (sem flash de ícone vazio), CSP-compliant (sem inline onclick — addEventListener no DOMContentLoaded).
  • Anti-FOUC: script inline no <head> aplica data-theme antes do CSS carregar, lendo localStorage. Mesma chave 'app-theme' compartilhada entre agregador e mini-apps PHP individuais — tema viaja com o usuário.
  • Workflow GitHub Actions com dangerous-clean-slate desligado: preserva sub-deploys de outros repos (arthur/ WordPress, convite-naty/ Next.js) durante o deploy do monorepo. Cada repo tem autonomia, só declarar manifesto se quiser aparecer no agregador.
  • Painel admin de links externos no nicchon.com/painel/app-links.php (não no app.nicchon.com): reusa autenticação, sessão e PDO existentes. Não duplica infra de admin.

Desafios técnicos

  • CSP script-src 'self' bloqueava inline onclick — bug invisível (browser falhava silencioso). Solução: addEventListener no DOMContentLoaded em todos os pontos.
  • FTP mirror do servidor antigo travava com SSL EOF a cada N requests — solução: retry agressivo com reconnect por pasta + skip de WordPress pesado (wp-includes, wp-admin).
  • Renomear ~300 arquivos pra kebab-case num filesystem Windows case-insensitive — solução: git config core.ignorecase false + rename em 2 steps quando precisava trocar caps.
  • Recuperar CSS dos 3 calculadores florestais do backup tar.gz após achatamento da hierarquia Cálculo/ na reorganização (os 3 referenciavam um ../css/style.css que tinha sido apagado).