Hydrogen
당신과 코딩 에이전트를 위한 상거래 기본 요소. 기존 프레임워크에 장바구니·상품·결제·계정을 추가합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.