othavi0/emach-dashboard

★ 0Forks 1TypeScriptGitHub ↗Compare

README

emach-dashboard

Dashboard interno + base para futuro ecomerce BR. Monorepo Bun + Turborepo. Auth dual (Better Auth) sobre Supabase Postgres.

Para agentes/IA: o guia canônico de stack, regras, design e workflows é CLAUDE.md no root. Sistema visual completo em DESIGN.md.

Stack

  • Runtime: Bun 1.3 (workspaces + catalog)
  • Build: Turborepo 2.10 (TUI)
  • Frontend: Next 16 + React 19 (apps/web, port 3001)
  • UI: shadcn/ui + Tailwind 4 + Base UI React (packages/ui)
  • DB: PostgreSQL via Supabase + Drizzle ORM (packages/db)
  • Auth: Better Auth 1.6 — instância dashboard em packages/auth/src/dashboard.ts (convite-only, ADR-0013); instância ecommerce vive no repo ecommerce (ADR-0004)
  • Env validation: @t3-oss/env-core + Zod (packages/env)
  • Lint/format: Biome 2.4.15 + Ultracite (bun fix)
  • Storage: Supabase Storage (tool-images bucket) para imagens de produtos
  • Design system: Industrial-workshop warm-dark + coral, Barlow Condensed caixa-alta em h1, dark-mode único, AAA (ver DESIGN.md)

Getting Started

bun install

Database Setup

PostgreSQL + Drizzle ORM via Supabase.

  1. Provisionar Postgres (Supabase ou local).
  2. Popular apps/web/.env a partir de apps/web/.env.example (inclui DATABASE_URL + NEXT_PUBLIC_SUPABASE_*).
  3. Aplicar schema (push-only — ver ADR-0006):
bun db:sync                                  # drizzle-kit push + triggers + RLS
# ⛔ não rode db:seed-demo: o banco é único (dev = prod), e o seed trunca tudo

Servidor de desenvolvimento:

bun dev:web    # apenas web em :3001 (preferido)
bun dev        # todos os apps em paralelo (Turbo TUI)

Abrir http://localhost:3001.

UI Customization

Primitives shadcn/ui ficam em packages/ui.

  • Tokens de design + globals: packages/ui/src/styles/globals.css
  • Componentes shared: packages/ui/src/components/*
  • shadcn aliases: packages/ui/components.json + apps/web/components.json

Adicionar primitives shared (rodar da raiz):

npx shadcn@latest add accordion dialog popover sheet table -c packages/ui

Import:

import { Button } from "@emach/ui/components/button";

Blocks específicos do app: rodar shadcn CLI dentro de apps/web (não em packages/ui).

Lint / Format

  • bun check — dry-run (Ultracite check; falha se houver issue)
  • bun fix — aplica fixes automáticos (também roda como PostToolUse hook)

Project Structure

emach-dashboard/
├── apps/
│   └── web/                         # Next 16 dashboard (port 3001)
│       └── src/app/dashboard/{tools,categories,suppliers,branches,stock,promotions,orders,separacao,shipping,reviews,customers,users,site,dev-preview,sem-acesso}
├── packages/
│   ├── ui/                          # shadcn/ui primitives + globals.css
│   ├── auth/                        # Better Auth dashboard: dashboard.ts (ecommerce no repo ecommerce — ADR-0004)
│   ├── db/                          # Drizzle schema + createDb factory + scripts
│   ├── email/                       # E-mails transacionais (Resend)
│   ├── env/                         # Zod-validated env (@t3-oss/env-core)
│   └── config/                      # tsconfig.base.json compartilhado
├── docs/
│   ├── adr/                         # Decisões arquiteturais (índice em docs/adr/README.md)
│   ├── agents/                      # Guias de consumo de domínio/issues p/ agentes
│   ├── integration/admin-ecommerce.md
│   └── storage-buckets.md
├── scripts/
│   ├── clean.sh
│   ├── remove-tool-image-bg.py
│   └── sync-fork.sh
├── CLAUDE.md                        # Guia canônico para Claude Code
├── DESIGN.md                        # Sistema visual industrial-workshop dark + coral + condensada
├── PRODUCT.md                       # Register product + personality + anti-references
└── .mcp.json                        # MCP servers: supabase, shadcn, next-devtools, better-auth

Available Scripts

Script Função
bun dev Inicia todos os apps em paralelo (Turbo TUI)
bun dev:web Inicia apenas o web (port 3001)
bun build Build de todos os apps
bun check-types tsc --noEmit em todos os workspaces
bun check Ultracite check (lint/format dry-run; falha se issue)
bun fix Ultracite fix (aplica auto-format)
bun db:sync drizzle-kit push + triggers + RLS (push-only — ADR-0006)
bun db:push Só o schema Drizzle (sem triggers/RLS)
bun db:studio UI inspetora de tabelas (drizzle-kit)
bun --cwd packages/db db:apply-sql Aplica src/sql/{triggers,rls}.sql (triggers + RLS deny-all, idempotente)
bun --cwd packages/db db:seed-demo ⛔ Trunca e repopula o banco único (dev = prod); só com autorização
bun --cwd packages/db db:reset-demo ⛔ Trunca as tabelas demo no banco único; só com autorização
bun --cwd packages/db db:seed-test-orders ⛔ Insere pedidos de teste no banco único (dev = prod); só com autorização
bun --cwd packages/db db:seed-ready-to-ship ⛔ Insere pedidos prontos para envio no banco único; só com autorização
bun --cwd packages/db db:unseed-ready-to-ship ⛔ Apaga pedidos EM-TEST-91* e devolve o estoque no banco único; só com autorização
bun verify check-types + check + testes de apps/web
bun --cwd apps/web test Vitest de apps/web (test:watch para modo watch)
bun --cwd packages/db test Vitest de packages/db
bun guard:forms ast-grep scan (regras de formulário)
bun guard:forms:test Testes das regras do guard:forms
bun doctor react-doctor (diagnóstico de React)
bun sync:fork Sincroniza o fork (scripts/sync-fork.sh); sync:fork:dry só simula
bun clean Remove node_modules + caches Turbo/Next
bun clean-all Como clean, sem confirmação e limpando o cache do bun
bun clean-dry Mostra o que clean removeria, sem apagar

Contributors

othavi0larissa04alvesnoctuacore

Issues