Hydrogen
Commerce primitives for you and your coding agents. Add cart, products, money, and accounts to the framework you already use.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Marketplace onde fotógrafos vendem fotos e vídeos de eventos e clientes encontram os seus por selfie ou número de peito e compram os originais. Pagamento por Pix e cartão, dados hospedados no Brasil. O projeto está na Parte A: o produto inteiro sendo construído com dados de exemplo, atrás de uma camada de dados (src/dados/). As integrações (banco, login real, R2, processamento no servidor, reconhecimento facial e numérico, gateway de pagamento, e-mail e WhatsApp) ficam para a Parte B, quando formos testar com fotos reais. Na troca, só a camada de dados muda; as telas continuam iguais.查看完整 README ↗
Marketplace onde fotógrafos vendem fotos e vídeos de eventos e clientes encontram os seus por selfie ou número de peito e compram os originais. Pagamento por Pix e cartão, dados hospedados no Brasil.
O projeto está na Parte A: o produto inteiro sendo construído com dados de exemplo, atrás de uma camada de dados (src/dados/). As integrações (banco, login real, R2, processamento no servidor, reconhecimento facial e numérico, gateway de pagamento, e-mail e WhatsApp) ficam para a Parte B, quando formos testar com fotos reais. Na troca, só a camada de dados muda; as telas continuam iguais.
O que já funciona:
REKOGNITION_*; rostos de exemplo sem elas)/admin) para gestores: entradas, saídas, receita, vendas, saques e usuários com troca de papelO andamento completo, fase por fase, está em docs/tarefas.md.
Contas de exemplo (senha clicouai123): [email protected] (cliente), [email protected] e [email protected] (fotógrafos) e [email protected] (gestor); todas só fora da produção; lá a equipe entra pelas contas de GESTORES (ver .env.example). Sem DATABASE_URL, fora da produção, o app usa o PGlite: um Postgres em memória, com as mesmas migrações e esses dados de exemplo, recriado a cada início do servidor. Com DATABASE_URL ou POSTGRES_URL (Supabase), os dados ficam no banco; npm run db:migrar aplica as migrações e grava os exemplos num banco vazio, sem as contas com a senha de exemplo, que só existem no PGlite (na produção, só as categorias; ver deploy.md). A dica dessas contas em /entrar só aparece no PGlite e nunca na produção.
Requisitos: Node.js 20.9 ou mais novo e npm.
npm install
npm run dev
Abra http://localhost:3000. Não há banco para configurar na Parte A.
Mercado Pago (opcional): sem credenciais, o pagamento e o saque são simulados. Para testar com o Mercado Pago, copie .env.example para .env.local e preencha as credenciais de teste da aplicação. Com elas:
localhost mesmo sem o webhook;ngrok http 3000) e cadastre https://<túnel>/api/webhooks/mercadopago no evento "Order (Mercado Pago)".Login com Google e reconhecimento facial (opcionais): também no .env.local. Com GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET e APP_URL, aparece o botão "Continuar com Google" (URI de redirecionamento no Google Cloud: {APP_URL}/api/auth/google/callback); e-mails em ADMIN_EMAILS entram como gestores. Com REKOGNITION_REGIAO, REKOGNITION_ACCESS_KEY_ID e REKOGNITION_SECRET_ACCESS_KEY, a busca por selfie usa o Amazon Rekognition (não use os nomes AWS_*, que a Vercel reserva). Detalhes em .env.example.
| Comando | O que faz |
|---|---|
npm run dev | Servidor de desenvolvimento |
npm run build | Build de produção (também confere os tipos) |
npm run start | Sobe o build de produção |
npm run lint | ESLint |
npm run test | Testes (Vitest) das regras de dinheiro e da validação |
npm run typecheck | Gera os tipos de rota do Next e confere os tipos |
npm run format | Formata o código com Prettier |
npm run format:check | Confere a formatação sem alterar arquivos |
npm run exemplos:gerar | Baixa 24 fotos do picsum.photos e gera as prévias e miniaturas de exemplo, com marca d'água, em public/exemplo/ |
As imagens de exemplo já estão no repositório; só é preciso rodar exemplos:gerar de novo se a marca d'água mudar.
Ficam em src/dados/exemplo/: 3 fotógrafos, 5 categorias, 10 eventos e 780 fotos, além de pastas, colaborador, números de peito, cupons, faixas de desconto, pacotes e uma loja. Cada evento exercita uma regra: não listado, com senha (senha de exemplo formatura2026), liberação agendada no passado e no futuro, liberação manual e rascunho. Há também uma foto excluída, uma em processamento e uma com preço individual. As telas nunca importam esses arquivos direto: tudo passa por src/dados/index.ts, que tem as mesmas assinaturas que a implementação com o banco terá e concentra as regras de quem vê o quê.
Next.js 16 (App Router, Cache Components) + TypeScript, Tailwind CSS 4 + shadcn/ui (Base UI), Zod, Sharp e Mercado Pago (Orders e Payouts). Na Parte B entram PostgreSQL com Drizzle, Cloudflare R2, FFmpeg (worker de vídeo), reconhecimento facial e numérico, Inngest, Better Auth, Resend e a API oficial do WhatsApp. Detalhes e motivos em docs/arquitetura.md.
src/
app/
(publico)/ # página inicial, eventos, página do evento, página da foto
components/
galeria/ # cartão de evento, grade de fotos
site/ # cabeçalho e rodapé
ui/ # componentes do shadcn/ui
dados/ # camada de dados usada pelas telas
exemplo/ # implementação com dados de exemplo (Parte A)
lib/ # formatação, validação com Zod, utilitários
servicos/
imagens.ts # prévia e miniatura com marca d'água (Sharp)
scripts/
gerar-exemplos.ts # gera as imagens de exemplo
public/exemplo/ # prévias e miniaturas de exemplo
docs/ # arquitetura, riscos, tarefas, marca, skills
.claude/skills/ # skills do Claude Code usadas no projeto
A estrutura completa planejada, com cliente, painel do fotógrafo, admin, loja própria e API, está em docs/arquitetura.md.
feat(galeria): cria a página da foto. Um commit por mudança lógica.[x] em docs/tarefas.md no mesmo commit.npm run lint, npm run test, npm run format:check e npm run build sem erros.CLAUDE.md da raiz importa o docs/CLAUDE.md.