Sanctius
E-commerce de vestuário sacro católico em produção. Estética Apple-style, checkout dual (API + wa.me), hosting compartilhado barato.

Sanctius é a marca de vestuário sacro do meu sócio Mikael Cayron — proposta de 'Alta Tecnologia da Fé', minimalismo de luxo, cada peça tratada como obra. A construção técnica é minha: arquitetura pragmática Next.js 15 export estático + CodeIgniter 4 + Shield + MySQL no mesmo subdomínio Hostgator shared, com .htaccess roteando /api/*. Decisão consciente pra hosting barato funcionar sem servidor Node em produção. Vendor sobe via FTP.
- Next.js 15
- React
- TypeScript
- Tailwind
- CodeIgniter 4
- Shield
- MySQL
- Framer Motion
- Embla Carousel
- Zustand
- Fuse.js
- Stack pragmática anti-Vercel-anti-Laravel — Next estático + CI4 + Shield + MySQL no mesmo subdomínio Hostgator shared. Hosting compartilhado funciona, vendor sobe via FTP.
- Checkout dual: API REST cria pedido real (status pending, código SAN-XXXX sequencial, reserva transacional de estoque, idempotência via cache 10min, rate limit 5/min/IP, auto-cancel pending >30min com devolução de estoque) E em paralelo gera wa.me com mensagem pré-formatada.
- Camada de dados desacoplada do dia 1 — lib/api/client.ts + lib/domain/types.ts permitiram o front desenvolver contra mocks tipados antes do CI4 existir.
- Hardening de segurança em camada própria sobre o Shield — brute-force (5 falhas/IP/5min → ban 1h em cache), detecção de IP novo por user, honeypot via set404Override em CI4, geolocalização ipinfo.io, alertas WhatsApp com dedup.
- Headers de segurança completos via .htaccess — HSTS preload, CSP detalhada, X-Frame, Referrer-Policy, Permissions-Policy + bloqueio de .env, .git, .ssh, etc.
- Carrinho headless em Zustand + storytelling com Framer Motion + busca fuzzy via Fuse.js — sem dependência de plataforma e-commerce SaaS.
- Cálculo de frete via Melhor Envio v2 que pode falhar: cache de 1h + fallback de tabela regional por 1º dígito do CEP quando token falha. Checkout nunca trava por falha externa.
- Honeypot em hosting compartilhado: rewrite no Apache + set404Override em CI4 capturando wp-admin/.env/.git/phpmyadmin com resposta 200 fake plausível.
- Vendor PHP sem SSH/Composer no servidor: bootstrap pinado do appstarter 4.5.6 via composer create-project + rsync --ignore-existing, depois deploy via FTP.
- CR-1 documentado: rota /api/install/migrate?token=... removida em auditoria — endpoint de migration via URL é red flag clássico.