Skip to content

Instantly share code, notes, and snippets.

@dantetesta
Created April 30, 2026 13:34
Show Gist options
  • Select an option

  • Save dantetesta/17d0a1301d43fefcc5d8c4678b74b422 to your computer and use it in GitHub Desktop.

Select an option

Save dantetesta/17d0a1301d43fefcc5d8c4678b74b422 to your computer and use it in GitHub Desktop.
PROMPT PRECIFICADOR

{ "project": { "name": "Precifica", "author": "Antitesta", "type": "SaaS de precificação para confeitaria", "description": "Sistema web para ajudar confeiteiras, boleiras, doceiras e pequenos empreendedores da confeitaria a calcular o custo real de seus produtos, definir preços de venda, analisar lucro, margem e viabilidade comercial.", "main_goal": "Criar um sistema simples, bonito, responsivo e funcional para precificação de produtos de confeitaria, rodando em hospedagem comum com cPanel, PHP, MySQL e Tailwind CSS.", "target_audience": [ "Confeiteiras autônomas", "Boleiras", "Doceiras", "Donas de pequenos negócios de doces", "Empreendedores que vendem bolos, tortas, doces, brownies, trufas e produtos artesanais" ], "positioning": "O Precifica ajuda confeiteiras a pararem de vender no escuro, calculando exatamente quanto custa produzir e quanto precisam cobrar para ter lucro." }, "technology_stack": { "backend": "PHP 8+ puro, sem Laravel", "database": "MySQL", "frontend": "HTML, Tailwind CSS via CDN, JavaScript simples", "architecture": "MVC simples e organizado", "hosting_environment": "Hospedagem compartilhada com cPanel", "external_dependencies": { "nodejs": false, "docker": false, "laravel": false, "composer_required": false }, "requirements": [ "O sistema precisa rodar em hospedagem cPanel comum", "Não depender de terminal, build, Node.js ou processos em background", "Usar PHP, MySQL e Tailwind via CDN", "Usar rotas amigáveis sempre que possível", "Usar uma estrutura de arquivos organizada e fácil de manter" ] }, "business_model": { "current_phase": "Lançamento gratuito", "initial_access_rule": { "free_full_access": true, "description": "Inicialmente todos os usuários cadastrados terão 100% das funcionalidades liberadas gratuitamente para validação do produto e captura de leads." }, "future_access_rule": { "free_full_access": false, "free_plan_limit": "1 produto ou receita cadastrada", "paid_plan": "Plano ilimitado com cadastro ilimitado de produtos e receitas", "payment_model": "Pagamento único", "recurring_payment": false }, "plans": [ { "id": "free", "name": "Gratuito", "enabled": true, "initial_behavior": "Acesso completo enquanto FREE_FULL_ACCESS estiver ativo", "future_behavior": "Permitir apenas 1 produto ou receita cadastrada", "product_limit": 1 }, { "id": "unlimited", "name": "Ilimitado", "enabled": true, "behavior": "Permitir cadastro ilimitado de produtos, receitas, ingredientes, embalagens e análises", "product_limit": null } ], "payment_gateway": { "provider": "Pagou.com.br", "status": "Preparar integração", "description": "O sistema deve estar preparado para integração com a Pagou.com.br. A documentação da integração será fornecida depois. Criar serviço isolado para facilitar a implementação.", "flow": [ "Usuário acessa a página de plano", "Usuário clica em assinar plano ilimitado", "Sistema cria uma cobrança na Pagou", "Usuário realiza pagamento", "Pagou envia confirmação via webhook", "Sistema valida o pagamento", "Sistema libera automaticamente o plano ilimitado para o usuário" ] } }, "global_config": { "file": "/config/config.php", "description": "Criar um arquivo de configuração simples para o dono do sistema editar manualmente.", "values": { "APP_NAME": "Precifica", "APP_AUTHOR": "Antitesta", "APP_ENV": "production", "APP_URL": "https://seudominio.com.br", "DB_HOST": "localhost", "DB_NAME": "database_name", "DB_USER": "database_user", "DB_PASS": "database_password", "FREE_FULL_ACCESS": true, "FREE_PRODUCT_LIMIT": 1, "UNLIMITED_PLAN_PRICE": 97.0, "AI_PROVIDER": "groq", "AI_API_KEY": "", "AI_MODEL": "llama-3.3-70b-versatile", "PAGOU_API_KEY": "", "PAGOU_WEBHOOK_SECRET": "", "PAGOU_SUCCESS_URL": "https://seudominio.com.br/app/payment/success", "PAGOU_CANCEL_URL": "https://seudominio.com.br/app/payment/cancel", "SUPPORT_WHATSAPP": "", "ENABLE_MATH_CAPTCHA": true } }, "authentication": { "features": [ "Cadastro de usuário", "Login", "Logout", "Recuperação de senha", "Validação de sessão", "Bloqueio de usuário", "Proteção de páginas privadas", "Separação entre usuário comum e admin master" ], "registration_fields": [ { "name": "name", "label": "Nome", "type": "text", "required": true }, { "name": "email", "label": "E-mail", "type": "email", "required": true, "unique": true }, { "name": "whatsapp", "label": "WhatsApp", "type": "text", "required": true }, { "name": "password", "label": "Senha", "type": "password", "required": true }, { "name": "password_confirmation", "label": "Confirmar senha", "type": "password", "required": true } ], "password_rules": { "minimum_length": 8, "require_hash": true, "hash_function": "password_hash", "verify_function": "password_verify" }, "captcha": { "type": "math", "description": "Usar um captcha matemático simples para evitar spam sem depender do Google reCAPTCHA.", "examples": [ "Quanto é 3 + 5?", "Quanto é 9 - 4?", "Quanto é 2 x 6?" ], "rules": [ "Gerar pergunta matemática simples no backend", "Salvar resposta correta na sessão", "Validar antes de criar cadastro", "Gerar nova pergunta em caso de erro", "Não usar Google reCAPTCHA nesta primeira versão" ] } }, "user_roles": { "roles": [ { "id": "user", "name": "Usuário comum", "permissions": [ "Acessar dashboard próprio", "Cadastrar ingredientes", "Cadastrar embalagens", "Cadastrar custos fixos", "Cadastrar produtos e receitas", "Ver cálculos de preço", "Usar assistente de IA", "Ver plano atual" ] }, { "id": "admin", "name": "Admin master", "permissions": [ "Acessar dashboard administrativo", "Ver todos os usuários", "Ver pagamentos", "Bloquear usuários", "Desbloquear usuários", "Deletar usuários", "Liberar plano ilimitado manualmente", "Remover plano ilimitado", "Editar configurações básicas", "Ver contabilidade básica" ] } ] }, "main_modules": { "user_dashboard": { "route": "/app/dashboard", "description": "Tela inicial do usuário após login.", "cards": [ "Total de produtos cadastrados", "Total de ingredientes cadastrados", "Produto com maior lucro", "Produto com menor margem", "Custo médio dos produtos", "Preço médio sugerido", "Status do plano atual" ], "alerts": [ "Produtos com margem baixa", "Produtos com preço abaixo do ideal", "Usuário gratuito próximo do limite, quando FREE_FULL_ACCESS estiver desativado" ] }, "ingredients": { "route": "/app/ingredients", "description": "Cadastro e gestão de ingredientes usados nas receitas.", "fields": [ "Nome do ingrediente", "Categoria", "Quantidade comprada", "Unidade de compra", "Preço pago", "Unidade base de uso", "Custo por unidade base", "Observações" ], "units": [ "g", "kg", "ml", "l", "unidade" ], "examples": [ { "name": "Leite condensado", "quantity": 395, "unit": "g", "price": 7.5, "calculated_base_cost": "R$ 0,0189 por grama" }, { "name": "Chocolate nobre", "quantity": 1000, "unit": "g", "price": 42.0, "calculated_base_cost": "R$ 0,042 por grama" } ], "actions": [ "Criar ingrediente", "Editar ingrediente", "Excluir ingrediente", "Listar ingredientes", "Buscar ingrediente" ] }, "packagings": { "route": "/app/packagings", "description": "Cadastro de embalagens utilizadas nos produtos.", "fields": [ "Nome da embalagem", "Tipo", "Quantidade comprada", "Preço total pago", "Custo unitário", "Observações" ], "examples": [ { "name": "Caixinha para 4 doces", "quantity": 100, "total_price": 80.0, "unit_cost": 0.8 } ], "actions": [ "Criar embalagem", "Editar embalagem", "Excluir embalagem", "Listar embalagens" ] }, "fixed_costs": { "route": "/app/fixed-costs", "description": "Cadastro de custos fixos mensais do negócio.", "fields": [ "Nome do custo", "Categoria", "Valor mensal", "Observações" ], "categories": [ "Energia", "Gás", "Água", "Aluguel", "Internet", "MEI", "Transporte", "Taxas", "Outros" ], "calculation_rule": "O sistema deve permitir que o usuário informe uma estimativa de produção mensal para ratear o custo fixo por produto ou unidade." }, "products": { "route": "/app/products", "description": "Cadastro de produtos e receitas para precificação.", "fields": [ "Nome do produto", "Categoria", "Descrição", "Rendimento", "Unidade de venda", "Tempo de produção em minutos", "Valor da hora de trabalho", "Margem de lucro desejada", "Taxa de pagamento", "Custo fixo proporcional", "Observações" ], "product_composition": { "ingredients": [ "Selecionar ingrediente cadastrado", "Informar quantidade usada", "Calcular custo automaticamente" ], "packagings": [ "Selecionar embalagem cadastrada", "Informar quantidade usada", "Calcular custo automaticamente" ], "extra_costs": [ "Nome do custo extra", "Valor", "Observação" ] }, "actions": [ "Criar produto", "Editar produto", "Excluir produto", "Duplicar produto", "Ver análise de preço", "Enviar para IA analisar" ] }, "product_templates": { "route": "/app/templates", "description": "Modelos prontos de produtos de confeitaria para facilitar o cadastro.", "templates": [ "Bolo de pote", "Brigadeiro gourmet", "Brownie", "Trufa", "Cone trufado", "Bolo decorado", "Torta doce", "Cupcake", "Donut", "Pão de mel", "Bem-casado", "Palha italiana", "Docinho de festa", "Ovo de Páscoa", "Panetone recheado", "Cookie", "Bombom", "Copo da felicidade", "Pavê no pote", "Caixa de doces finos", "Bento cake", "Bolo vulcão", "Mini pudim", "Mousse no pote", "Cheesecake no pote" ], "behavior": "Ao escolher um template, o sistema cria um produto base com campos pré-preenchidos para o usuário editar." }, "pricing_engine": { "service": "PricingService.php", "description": "Motor de cálculo local em PHP. A IA nunca deve ser responsável pelo cálculo final.", "inputs": [ "Custo dos ingredientes", "Custo das embalagens", "Mão de obra", "Custos fixos rateados", "Custos extras", "Margem desejada", "Taxa de pagamento", "Rendimento" ], "formulas": { "labor_cost": "mao_de_obra = (tempo_em_minutos / 60) * valor_hora", "total_cost": "custo_total = ingredientes + embalagens + mao_de_obra + custos_fixos_rateados + custos_extras", "unit_cost": "custo_unitario = custo_total / rendimento", "price_with_profit": "preco_com_lucro = custo_total / (1 - margem_desejada)", "final_price": "preco_final = preco_com_lucro / (1 - taxa_pagamento)", "profit": "lucro = preco_final - custo_total", "real_margin": "margem_real = lucro / preco_final" }, "outputs": [ "Custo total", "Custo por unidade", "Preço mínimo", "Preço sugerido", "Preço premium", "Lucro estimado", "Margem real", "Alertas de margem baixa", "Resumo do cálculo" ], "price_suggestions": { "minimum_price": "Preço que cobre custos e pequena margem", "suggested_price": "Preço recomendado com margem desejada", "premium_price": "Preço com margem maior para posicionamento premium" } }, "ai_assistant": { "route": "/app/ai", "service": "AiService.php", "description": "Assistente de inteligência artificial para análise comercial, sugestões e textos. A IA não deve fazer os cálculos matemáticos principais.", "provider": "Groq ou outro provedor compatível configurado no config.php", "features": [ "Analisar se o preço está saudável", "Sugerir melhorias de margem", "Sugerir combos de produtos", "Criar descrição de venda", "Criar texto para WhatsApp", "Criar legenda para Instagram", "Explicar para o usuário por que determinado preço é necessário", "Alertar sobre embalagem cara, margem baixa ou custo excessivo" ], "rules": [ "Enviar para a IA apenas dados relevantes do produto", "Não enviar senha nem dados sensíveis", "Registrar logs básicos de uso em ai_logs", "Permitir desativar IA se AI_API_KEY estiver vazia", "Exibir mensagem amigável caso a IA não esteja configurada" ], "example_prompt_to_ai": "Analise este produto de confeitaria com base nos dados calculados pelo sistema. Explique se o preço está saudável, se a margem está adequada e dê sugestões práticas para melhorar o lucro sem perder valor percebido." }, "plan_management": { "service": "PlanService.php", "description": "Serviço responsável por verificar limites do plano gratuito e acesso ilimitado.", "rules": [ "Se FREE_FULL_ACCESS for true, liberar todas as funcionalidades para todos os usuários ativos", "Se FREE_FULL_ACCESS for false e o usuário estiver no plano gratuito, permitir apenas 1 produto cadastrado", "Se o usuário tiver is_unlimited igual a 1, liberar produtos ilimitados", "Se o usuário estiver bloqueado, impedir login e acesso ao painel", "Admin pode liberar ou remover acesso ilimitado manualmente" ] }, "payment_module": { "route": "/app/billing", "service": "PagouService.php", "description": "Módulo preparado para pagamento único via Pagou.com.br.", "features": [ "Página de plano atual", "Botão para assinar plano ilimitado", "Criação de cobrança", "Webhook de confirmação", "Registro de pagamento no banco", "Liberação automática do plano ilimitado" ], "payment_statuses": [ "pending", "paid", "failed", "cancelled", "refunded" ], "webhook_rules": [ "Receber payload da Pagou", "Validar assinatura ou segredo do webhook", "Localizar pagamento pelo ID externo", "Atualizar status do pagamento", "Se status for paid, atualizar usuário para plano ilimitado", "Salvar payload bruto para auditoria" ] }, "admin_dashboard": { "route": "/admin", "description": "Painel administrativo simples para o dono do software.", "access": "Somente usuários com role admin", "pages": [ { "name": "Dashboard", "route": "/admin/dashboard", "features": [ "Total de usuários", "Usuários gratuitos", "Usuários ilimitados", "Usuários bloqueados", "Novos cadastros nos últimos 7 dias", "Pagamentos aprovados", "Receita total", "Receita do mês" ] }, { "name": "Usuários", "route": "/admin/users", "features": [ "Listar usuários", "Buscar por nome, e-mail ou WhatsApp", "Ver plano atual", "Ver status", "Bloquear usuário", "Desbloquear usuário", "Deletar usuário", "Liberar plano ilimitado", "Remover plano ilimitado" ] }, { "name": "Pagamentos", "route": "/admin/payments", "features": [ "Listar pagamentos", "Filtrar por status", "Ver usuário relacionado", "Ver valor", "Ver data", "Ver ID externo da Pagou" ] }, { "name": "Configurações", "route": "/admin/settings", "features": [ "Ativar ou desativar acesso gratuito completo", "Definir limite de produtos do plano grátis", "Definir preço do plano ilimitado", "Editar WhatsApp de suporte", "Ver status da configuração da IA", "Ver status da configuração da Pagou" ] } ] } }, "database": { "type": "MySQL", "connection": "PDO", "charset": "utf8mb4", "tables": { "users": { "description": "Usuários do sistema, incluindo admins e usuários comuns.", "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "name": "VARCHAR(150) NOT NULL", "email": "VARCHAR(180) NOT NULL UNIQUE", "whatsapp": "VARCHAR(50) NOT NULL", "password_hash": "VARCHAR(255) NOT NULL", "role": "ENUM('user','admin') DEFAULT 'user'", "plan": "ENUM('free','unlimited') DEFAULT 'free'", "is_unlimited": "TINYINT(1) DEFAULT 0", "status": "ENUM('active','blocked') DEFAULT 'active'", "last_login_at": "DATETIME NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "password_resets": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "token": "VARCHAR(255) NOT NULL", "expires_at": "DATETIME NOT NULL", "used_at": "DATETIME NULL", "created_at": "DATETIME NOT NULL" } }, "ingredients": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "name": "VARCHAR(150) NOT NULL", "category": "VARCHAR(100) NULL", "purchase_quantity": "DECIMAL(12,4) NOT NULL", "purchase_unit": "VARCHAR(20) NOT NULL", "purchase_price": "DECIMAL(12,2) NOT NULL", "base_unit": "VARCHAR(20) NOT NULL", "base_unit_cost": "DECIMAL(12,6) NOT NULL", "notes": "TEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "packagings": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "name": "VARCHAR(150) NOT NULL", "type": "VARCHAR(100) NULL", "quantity": "DECIMAL(12,2) NOT NULL", "total_price": "DECIMAL(12,2) NOT NULL", "unit_cost": "DECIMAL(12,6) NOT NULL", "notes": "TEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "fixed_costs": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "name": "VARCHAR(150) NOT NULL", "category": "VARCHAR(100) NULL", "monthly_value": "DECIMAL(12,2) NOT NULL", "notes": "TEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "products": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "name": "VARCHAR(180) NOT NULL", "category": "VARCHAR(100) NULL", "description": "TEXT NULL", "yield_quantity": "DECIMAL(12,2) NOT NULL DEFAULT 1", "sale_unit": "VARCHAR(50) NOT NULL DEFAULT 'unidade'", "production_time_minutes": "INT DEFAULT 0", "hourly_labor_value": "DECIMAL(12,2) DEFAULT 0", "desired_margin": "DECIMAL(6,4) DEFAULT 0.5", "payment_fee": "DECIMAL(6,4) DEFAULT 0", "fixed_cost_allocation": "DECIMAL(12,2) DEFAULT 0", "notes": "TEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "product_ingredients": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "product_id": "INT NOT NULL", "ingredient_id": "INT NOT NULL", "quantity_used": "DECIMAL(12,4) NOT NULL", "unit_used": "VARCHAR(20) NOT NULL", "calculated_cost": "DECIMAL(12,4) NOT NULL" } }, "product_packagings": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "product_id": "INT NOT NULL", "packaging_id": "INT NOT NULL", "quantity_used": "DECIMAL(12,4) NOT NULL", "calculated_cost": "DECIMAL(12,4) NOT NULL" } }, "product_extra_costs": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "product_id": "INT NOT NULL", "name": "VARCHAR(150) NOT NULL", "value": "DECIMAL(12,2) NOT NULL", "notes": "TEXT NULL" } }, "product_price_snapshots": { "description": "Histórico dos cálculos feitos para cada produto.", "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "product_id": "INT NOT NULL", "ingredients_cost": "DECIMAL(12,2) NOT NULL", "packagings_cost": "DECIMAL(12,2) NOT NULL", "labor_cost": "DECIMAL(12,2) NOT NULL", "fixed_cost": "DECIMAL(12,2) NOT NULL", "extra_cost": "DECIMAL(12,2) NOT NULL", "total_cost": "DECIMAL(12,2) NOT NULL", "unit_cost": "DECIMAL(12,2) NOT NULL", "minimum_price": "DECIMAL(12,2) NOT NULL", "suggested_price": "DECIMAL(12,2) NOT NULL", "premium_price": "DECIMAL(12,2) NOT NULL", "estimated_profit": "DECIMAL(12,2) NOT NULL", "real_margin": "DECIMAL(6,4) NOT NULL", "created_at": "DATETIME NOT NULL" } }, "payments": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "provider": "VARCHAR(50) DEFAULT 'pagou'", "provider_payment_id": "VARCHAR(180) NULL", "amount": "DECIMAL(12,2) NOT NULL", "status": "ENUM('pending','paid','failed','cancelled','refunded') DEFAULT 'pending'", "paid_at": "DATETIME NULL", "raw_response": "LONGTEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } }, "ai_logs": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "user_id": "INT NOT NULL", "product_id": "INT NULL", "action": "VARCHAR(100) NOT NULL", "prompt": "LONGTEXT NULL", "response": "LONGTEXT NULL", "created_at": "DATETIME NOT NULL" } }, "admin_logs": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "admin_id": "INT NOT NULL", "action": "VARCHAR(180) NOT NULL", "target_user_id": "INT NULL", "details": "TEXT NULL", "created_at": "DATETIME NOT NULL" } }, "settings": { "columns": { "id": "INT AUTO_INCREMENT PRIMARY KEY", "setting_key": "VARCHAR(100) NOT NULL UNIQUE", "setting_value": "TEXT NULL", "created_at": "DATETIME NOT NULL", "updated_at": "DATETIME NULL" } } } }, "routes": { "public": [ { "method": "GET", "path": "/", "description": "Landing page simples do Precifica" }, { "method": "GET", "path": "/login", "description": "Tela de login" }, { "method": "POST", "path": "/login", "description": "Processar login" }, { "method": "GET", "path": "/register", "description": "Tela de cadastro com captcha matemático" }, { "method": "POST", "path": "/register", "description": "Processar cadastro" }, { "method": "GET", "path": "/forgot-password", "description": "Recuperar senha" } ], "user_private": [ "/app/dashboard", "/app/ingredients", "/app/packagings", "/app/fixed-costs", "/app/products", "/app/products/create", "/app/products/edit/{id}", "/app/products/view/{id}", "/app/templates", "/app/ai/analyze/{product_id}", "/app/billing", "/app/account", "/logout" ], "admin_private": [ "/admin", "/admin/dashboard", "/admin/users", "/admin/users/block/{id}", "/admin/users/unblock/{id}", "/admin/users/delete/{id}", "/admin/users/grant-unlimited/{id}", "/admin/users/remove-unlimited/{id}", "/admin/payments", "/admin/settings" ], "webhooks": [ { "method": "POST", "path": "/webhook/pagou", "description": "Receber notificações de pagamento da Pagou" } ] }, "file_structure": { "root": [ "/public", "/app", "/config", "/routes", "/storage" ], "details": { "/public": [ "index.php", ".htaccess", "/assets/css", "/assets/js", "/assets/img" ], "/app/Controllers": [ "AuthController.php", "DashboardController.php", "IngredientController.php", "PackagingController.php", "FixedCostController.php", "ProductController.php", "TemplateController.php", "AiController.php", "BillingController.php", "AdminController.php", "WebhookController.php" ], "/app/Models": [ "User.php", "Ingredient.php", "Packaging.php", "FixedCost.php", "Product.php", "Payment.php", "Setting.php" ], "/app/Services": [ "PricingService.php", "PlanService.php", "AiService.php", "PagouService.php", "CaptchaService.php", "AuthService.php" ], "/app/Views": [ "/layouts", "/auth", "/dashboard", "/ingredients", "/packagings", "/fixed-costs", "/products", "/templates", "/billing", "/account", "/admin" ], "/config": [ "config.php", "database.php" ], "/routes": [ "web.php" ], "/storage": [ "/logs", "/cache" ] } }, "ui_ux": { "style": "Moderno, limpo, premium, simples e responsivo", "visual_direction": [ "Interface clara e objetiva", "Foco em usabilidade para pessoas não técnicas", "Dashboard com cards grandes e fáceis de entender", "Cores suaves, visual confiável e profissional", "Mobile-first", "Sidebar no desktop", "Menu colapsável ou navegação inferior no mobile" ], "suggested_colors": { "primary": "#7C3AED", "secondary": "#F59E0B", "background": "#F8FAFC", "text": "#111827", "success": "#16A34A", "danger": "#DC2626", "warning": "#F97316" }, "components": [ "Sidebar", "Topbar", "Cards de indicadores", "Tabelas responsivas", "Formulários em etapas", "Botões grandes", "Alertas visuais", "Badges de plano", "Modais de confirmação", "Loading simples" ], "language": "Português brasileiro", "tone": "Simples, acolhedor e direto" }, "security": { "requirements": [ "Usar PDO com prepared statements", "Nunca concatenar SQL com dados do usuário", "Usar password_hash e password_verify", "Proteger formulários com CSRF token", "Validar sessão em todas as páginas privadas", "Separar permissões de user e admin", "Impedir acesso de usuários bloqueados", "Validar propriedade dos dados por user_id", "Sanitizar saída HTML com htmlspecialchars", "Não expor erros técnicos em produção", "Salvar logs básicos em storage/logs" ], "csrf": { "enabled": true, "description": "Todos os formulários POST devem usar token CSRF salvo na sessão." }, "math_captcha": { "enabled": true, "use_on": [ "Cadastro", "Recuperação de senha" ] } }, "development_rules": { "important": [ "Criar o sistema completo em PHP puro com MySQL e Tailwind via CDN", "Não usar Laravel", "Não usar Node.js", "Não depender de Composer obrigatoriamente", "Criar código organizado em MVC simples", "Criar SQL completo do banco de dados", "Criar arquivo config.php editável", "Criar painel do usuário", "Criar painel admin master", "Criar sistema de planos já preparado", "Criar integração Pagou isolada em PagouService.php", "Criar integração IA isolada em AiService.php", "Criar captcha matemático simples", "Criar sistema responsivo e bonito com Tailwind", "Garantir que o sistema rode em cPanel" ], "deliverables": [ "Estrutura completa de pastas", "Arquivo SQL de instalação", "Arquivos PHP principais", "Layout base com Tailwind", "Cadastro e login funcionando", "Dashboard do usuário", "CRUD de ingredientes", "CRUD de embalagens", "CRUD de custos fixos", "CRUD de produtos e receitas", "Motor de cálculo de preço", "Histórico de cálculo", "Painel administrativo", "Módulo de planos", "Estrutura de pagamento Pagou", "Estrutura de IA", "Captcha matemático", "Documentação básica de instalação em cPanel" ] }, "installation_instructions": { "target": "cPanel", "steps": [ "Criar banco de dados MySQL no cPanel", "Criar usuário do banco e vincular ao banco", "Importar arquivo install.sql pelo phpMyAdmin", "Enviar os arquivos do projeto para public_html ou subpasta desejada", "Editar /config/config.php com dados do banco", "Configurar APP_URL com o domínio correto", "Acessar /register para criar usuário comum", "Criar manualmente o primeiro admin no banco ou fornecer script de criação de admin", "Testar login, cadastro e dashboard", "Configurar chave de IA quando disponível", "Configurar Pagou quando documentação e chave forem fornecidas" ] }, "success_criteria": [ "Usuário consegue se cadastrar com captcha matemático", "Usuário consegue fazer login e acessar o painel", "Usuário consegue cadastrar ingredientes", "Usuário consegue cadastrar embalagens", "Usuário consegue cadastrar custos fixos", "Usuário consegue criar um produto de confeitaria", "Sistema calcula custo total, custo por unidade, preço sugerido e lucro", "Usuário consegue ver alertas de margem baixa", "Admin consegue ver usuários cadastrados", "Admin consegue bloquear, desbloquear, deletar e liberar plano ilimitado", "Sistema respeita FREE_FULL_ACCESS quando ativo ou inativo", "Estrutura da Pagou está preparada", "Estrutura da IA está preparada", "Sistema roda em hospedagem cPanel" ], "final_instruction_to_ai_developer": "Desenvolva o projeto Precifica completo conforme este PRD JSON. Priorize simplicidade, compatibilidade com cPanel, segurança básica, organização de código e uma experiência visual bonita e fácil para confeiteiras. O sistema deve ser funcional desde a primeira versão, com plano gratuito liberado inicialmente, mas já preparado para plano ilimitado pago no futuro." }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment