From ca33ffe6a73b46e3ce0688d3ec3e7096520bb89b Mon Sep 17 00:00:00 2001 From: Ana Pamponet Date: Thu, 17 Oct 2024 06:54:46 -0300 Subject: [PATCH] Commit update project --- .env | 1 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 ++ .idea/resumocast_ailabs.iml | 11 ++ .idea/vcs.xml | 6 + .idea/workspace.xml | 80 +++++++++++ README.md | 58 ++++++++ app.py | 55 +++++++ requirements.txt | 3 + static/scripts.js | 10 ++ static/style.css | 135 ++++++++++++++++++ templates/index.html | 28 ++++ 13 files changed, 408 insertions(+) create mode 100644 .env create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/resumocast_ailabs.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 README.md create mode 100644 app.py create mode 100644 requirements.txt create mode 100644 static/scripts.js create mode 100644 static/style.css create mode 100644 templates/index.html diff --git a/.env b/.env new file mode 100644 index 0000000..ac99666 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +OPENAI_API_KEY='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' \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..db8786c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..6e12720 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/resumocast_ailabs.iml b/.idea/resumocast_ailabs.iml new file mode 100644 index 0000000..d6823a6 --- /dev/null +++ b/.idea/resumocast_ailabs.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..f18b423 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "customColor": "", + "associatedIndex": 4 +} + + + + + + + + + + + + + + + + + + + + 1729093141132 + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fad57d4 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Gerador de Ideias de Startups + +Este projeto usa a API do ChatGPT para gerar conceitos inovadores de startups com base em descrições fornecidas pelos usuários. + +## Instalação + +1. Clone o repositório: + ```bash + git clone https://github.com/marceloc4rdoso/ailabs.git + +2. Criação do Ambiente Virtual: + ```bash + python3 -m venv venv + source venv/bin/activate # No Windows: venv\Scripts\activate +3. Estrutura do Projeto: + ```bash + projeto_startup/ + ├── .env (deve ser inserido com sua api key) + ├── app.py + ├── README.md + ├── requirements.txt + ├── static/ + │ └── img + │ └── scripts.js + │ └── style.csss + ├── templates/ + └── index.html + +4. Arquivo .env: No arquivo .env, armazene sua chave de API: + ```bash + OPENAI_API_KEY='sua_openai_api_key_aqui' +5. Inicie a aplicação: + ```bash + python app.py +6. Acesse a aplicação em http://localhost:5001 + + +### OBS.: **Requisitos e Considerações** +- **Chave da API**: Certifique-se de manter a chave da OpenAI em local seguro (como um arquivo `.env`). +- **Limites de uso**: A API da OpenAI tem limites de uso, por isso é importante monitorar o uso de tokens. + +### **Manual de uso** +Acesse a página principal e insira um conceito ou área para a qual deseja gerar uma ideia de startup. +Clique em "Gerar Ideia" e aguarde a sugestão. + +### Desenvolvedores +#### Licença +Este projeto está licenciado sob a MIT License. +#### Como Usar +Contribuição +Contribuições são bem-vindas! Sinta-se à vontade para abrir uma issue ou enviar um pull request. +#### Caso necessite + ```bash + ### Passo 5: Adicionar `requirements.txt` + Gere o `requirements.txt` para que outros possam instalar as dependências com facilidade: + ```bash + pip freeze > requirements.txt + diff --git a/app.py b/app.py new file mode 100644 index 0000000..e4e1dd7 --- /dev/null +++ b/app.py @@ -0,0 +1,55 @@ +import os +from flask import Flask, request, render_template, jsonify +from dotenv import load_dotenv +from openai import OpenAI + +# Carregar variáveis de ambiente do arquivo .env +load_dotenv() + +client = OpenAI( + api_key = os.getenv("OPENAI_API_KEY") +) + +app = Flask(__name__) + +@app.route('/') +def home(): + return render_template('index.html') + +@app.route('/gerar_ideia', methods=['POST']) +def gerar_ideia(): + input_usuario = request.form.get('input') + # Chamada à API do ChatGPT + try: + # Definindo o contexto do tema + tema = '''Gerar ideias inovadoras para startups com o auxilio da expertise dos profissionais da ResumoCast. + oferecendo cursos, programas de buildagem e outras iniciativas educativas, + todas projetadas para impulsionar o desenvolvimento pessoal e profissional. + Com anos de experiência e um histórico comprovado no ecossistema empreendedor, + a ResumoCast Ventures se estabeleceu como uma referência no mercado, + ajudando a moldar a próxima geração de líderes empresariais no Brasil. + Para gerar ideias inovadoras para startups, + é essencial observar problemas cotidianos e identificar lacunas que ainda não foram resolvidas ou que podem ser abordadas de maneira mais eficiente. + A pesquisa de tendências emergentes, como novas tecnologias ou mudanças no comportamento dos consumidores, pode inspirar soluções criativas. + Conversar com potenciais usuários e entender suas dores também é uma excelente maneira de descobrir oportunidades inexploradas. Além disso, + colaborar com profissionais de diferentes áreas pode gerar insights únicos ao combinar conhecimentos diversos. Por fim, + estar disposto a experimentar e ajustar ideias com base em feedback real é fundamental para transformar conceitos inovadores em startups de sucesso. + ''' + + response = client.chat.completions.create( + model="gpt-4o-mini-2024-07-18", + messages=[ + {"role": "system", "content": tema}, # Definindo o tema na mensagem do sistema + {"role": "user", "content": f"Crie uma ideia de startup baseada no seguinte input: {input_usuario}"} + ], + max_tokens=150 + ) + + ideia = response['choices'][0]['message']['content'] + return jsonify({"ideia": ideia}) + + except Exception as e: + return jsonify({"error": str(e)}) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5001, debug=True) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ee8cd27 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +flask +openai~=1.51.2 +python-dotenv~=1.0.1 \ No newline at end of file diff --git a/static/scripts.js b/static/scripts.js new file mode 100644 index 0000000..bba555d --- /dev/null +++ b/static/scripts.js @@ -0,0 +1,10 @@ +document.getElementById('formulario').onsubmit = async function (e) { + e.preventDefault(); + const formData = new FormData(this); + const response = await fetch('/gerar_ideia', { + method: 'POST', + body: formData + }); + const data = await response.json(); + document.getElementById('resultado').innerText = data.ideia || data.error; +} diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..d3cb484 --- /dev/null +++ b/static/style.css @@ -0,0 +1,135 @@ +/* Estilo básico para o corpo */ +body { + font-family: Arial, sans-serif; + background-color: #f0f0f0; + color: #333; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + height: 100vh; +} +/* Estilo para o cabeçalho */ +header { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: #FF7043; + padding: 10px; + width: 100%; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); +} + +/* Estilo para a logomarca */ +.logo { + width: 80px; + height: 80px; + padding: 5px; + object-fit: contain; + border-radius: 15px; +} + +/* Estilo para o título no cabeçalho */ +header h1 { + color: white; + font-size: 24px; + font-weight: bold; + margin-top: 5px; + text-align: center; +} + +/* Estilo para o título */ +h1 { + text-align: center; + padding: 20px; + color: #FF7043; + margin: 20px auto; + max-width: 90%; + font-size: 2.5rem; +} + +/* Estilo para o formulário */ +form { + background-color: white; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 50%; + padding: 20px; + border-radius: 10px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); + text-align: center; +} + + +/* Estilo para o textarea */ +textarea { + width: 50%; + max-width: 400px; + padding: 10px; + margin-bottom: 20px; + border: 1px solid #ccc; + border-radius: 10px; + font-size: 16px; + resize: none; + margin-bottom: 20px; +} + +/* Estilo do botão */ +button { + background-color: #FF5722; + color: white; + padding: 10px; + border: none; + border-radius: 5px; + font-size: 16px; + cursor: pointer; + width: 30%; +} + +button:hover { + background-color: #E64A19; +} + +/* Estilo para o resultado */ +#resultado { + display: flex; + flex-direction: column; + width: 50%; + padding: 10px; + background-color: #f9f9f9; + margin-top: 20px; + border-radius: 10px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); + text-align: center; + font-style: italic; + color: #FF7043; +} +/* Estilo para o rodapé */ +footer { + width: 100%; + background-color: #E65100; + color: white; + text-align: left; + padding: 10px; + position: fixed; + bottom: 0; + left: 0; + box-shadow: 0px -4px 6px rgba(0, 0, 0, 0.1); + font-size: 14px; +} + +/* Tornar a página responsiva */ +@media (max-width: 600px) { + form { + width: 90%; + } + + #resultado { + width: 90%; + } +} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..3e1280f --- /dev/null +++ b/templates/index.html @@ -0,0 +1,28 @@ + + + + + + + + Gerador de Ideias para Startups - ResumoCast + + +
+ +

Gerador de Ideias para Startups

+
+

Sou um assistente que ajuda a criar conceitos de startups.

+
+ + +
+
+ + + + + +