Gerador de Ideias de Startup

Um gerador de ideias de startup que utiliza a API do Gemini para fornecer sugestões criativas com base na entrada do usuário.

Índice

Tecnologias Utilizadas

  • Backend: Node.js, Express
  • Frontend: HTML, CSS, JavaScript
  • API: Gemini API (Google Cloud)

Instalação

Pré-requisitos

Certifique-se de ter o Node.js e o Git instalados em sua máquina.

Passos para Instalação

  1. Clone o repositório:

    git clone https://github.com/username/repo.git
    cd repo
    
  2. Instale as dependências do backend:

     cd backend
     npm install
    
  3. Crie um arquivo .env na pasta backend e adicione sua chave da API:

     GEMINI_API_KEY=your_actual_api_key_here
    
  4. Inicie o servidor:

     node server.js
    
  5. Abra o frontend em um navegador:

     Acesse http://localhost:3000.
    

Uso

  1. Digite sua ideia no campo de texto.

  2. Clique no botão "Gerar Ideia".

  3. A resposta gerada será exibida abaixo.

Estrutura do Projeto

/project-root
│
├── /backend # Código do servidor
│ ├── server.js # Código principal do servidor
│ ├── .env # Variáveis de ambiente (não deve ser versionado)
│ └── package.json # Dependências do projeto
│
├── /frontend # Código do cliente
│ ├── index.html # Estrutura HTML da aplicação
│ ├── styles.css # Estilos da aplicação
│ └── script.js # Lógica JavaScript da aplicação
│
└── .gitignore # Arquivos a serem ignorados pelo Git

Código

Exemplo de Código (Backend)

const express = require("express");
const axios = require("axios");
const cors = require("cors");
require("dotenv").config();

const app = express();
const PORT = process.env.PORT || 3000;

app.use(cors());
app.use(express.json());

app.post("/generate-idea", async (req, res) => {
const userInput = req.body.input?.trim() || "Gere uma ideia de startup inovadora";
const jsonPayload = {
contents: [{ parts: [{ text: userInput }] }],
};

try {
const response = await axios.post(
  `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${process.env.GEMINI_API_KEY}`,
  jsonPayload,
  { headers: { "Content-Type": "application/json" } }
);
res.status(200).json(response.data);
} catch (error) {
res.status(500).json({ error: "Failed to generate content" });
}
});

app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

Exemplo de Código (Frontend)

document.getElementById("generateButton").addEventListener("click", async () => {
const userInput = document.getElementById("userInput").value;

try {
const response = await fetch("http://localhost:3000/generate-idea", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ input: userInput }),
});

const data = await response.json();
if (response.ok) {
  const generatedIdea = data.candidates.content;
  document.getElementById("result").innerText = generatedIdea.parts.map(part => part.text).join('');
} else {
  document.getElementById("result").innerText = `Erro ao gerar ideia: ${data.error || 'Erro desconhecido.'}`;
}
} catch (error) {
console.error("Error:", error);
document.getElementById("result").innerText = "Erro: Ocorreu um problema ao gerar a ideia.";
}
});

Boas Práticas

-Versionamento: Use um sistema de controle de versão como Git.

-Documentação: Mantenha a documentação atualizada.

-Segurança: Nunca exponha chaves da API ou credenciais.

Segurança

Proteção do .env:

-Adicione o arquivo .env ao .gitignore para evitar que suas credenciais sejam versionadas.

GitHub Secrets:

-Armazene chaves sensíveis como segredos no GitHub se estiver usando GitHub Actions.

Contribuição

Contribuições são bem-vindas! Sinta-se à vontade para abrir uma issue ou enviar um pull request.

Melhores Práticas na Documentação

  1. Clareza e Concisão: Use uma linguagem clara e evite jargões desnecessários.
  2. Estrutura Lógica: Organize a documentação em seções lógicas com um índice para facilitar a navegação.
  3. Exemplos Práticos: Inclua exemplos de código e uso para ajudar os usuários a entender como utilizar o projeto.
  4. Atualização Regular: Mantenha a documentação atualizada conforme o projeto evolui.