Neste tutorial prático, você vai construir um gerador de treinos personalizado funcional usando Python e HTML em apenas 30 minutos. Descubra como criar aplicativo com ChatGPT do absoluto zero, sem precisar escrever uma única linha de código por conta própria, usando comandos diretos e precisos.
O que você vai precisar
- Uma conta ativa na plataforma da OpenAI para obter sua chave de API de desenvolvedor.
- O interpretador do Python instalado no seu computador para rodar a aplicação localmente.
- Um editor de código como o Visual Studio Code ou qualquer editor de texto de sua preferência instalado no computador.
- Tempo estimado: 30 minutos.
- Custo aproximado: US$ 5.00 de créditos mínimos na plataforma de desenvolvimento para realizar milhares de testes com o modelo inteligente.
Passo a passo
-
Instale o Python no seu sistema operacional
O Python funciona como o motor do seu servidor local que vai processar as requisições do sistema. Acesse o site oficial de documentação do Python e faça o download da versão estável mais recente para o seu sistema operacional.
Durante o processo de instalação no Windows, marque a caixa de seleção que diz “Add Python to PATH” antes de clicar no botão de confirmação. No macOS ou Linux, execute o instalador padrão ou utilize o gerenciador de pacotes padrão para instalar a linguagem no computador.
Abra o console de comandos ou terminal do seu sistema operacional e digite o comando de verificação para certificar que o ambiente de execução está pronto.
python --versionVocê deve ver na tela a confirmação da versão instalada exibindo um texto como “Python 3.11.x” ou “Python 3.12.x” sem erros de comando inválido.
-
Gere as credenciais de acesso no painel da OpenAI
Para o servidor fazer consultas inteligentes, você precisa gerar uma chave de comunicação com os servidores externos. Faça o login no painel de desenvolvedores da OpenAI usando o seu navegador web.
Navegue até o menu lateral esquerdo, clique no item de menu “API keys” e depois clique no botão central “Create new secret key”. Nomeie o seu novo token de acesso com o termo “gerador-treino” no campo de identificação e clique no botão verde para gerar.
Copie imediatamente o código gerado que começa com os caracteres “sk-proj-“, pois o sistema oculta essa informação permanentemente após o fechamento da janela do navegador.
Você deve ver na tela uma caixa de diálogo exibindo a sua chave secreta única junto ao botão verde com o rótulo “Copy”.
-
Organize a estrutura de pastas do projeto
O framework que gerencia o servidor exige uma organização rígida de arquivos para localizar as telas visuais do usuário. Crie uma pasta vazia em qualquer diretório do seu computador e nomeie essa pasta como “meu-app”.
Entre nessa pasta recém-criada e configure um arquivo de texto com o nome de “.env”, um arquivo com o nome de “app.py” e uma subpasta com o nome exato de “templates”. Dentro da subpasta “templates”, crie o arquivo visual do usuário com o nome de “index.html” para estruturar a página segundo as diretrizes da MDN Web Docs.
Abra o arquivo “.env” no seu editor de texto, cole a linha de configuração apresentada abaixo e substitua o valor após o sinal de igual pelo seu token secreto copiado no passo anterior.
OPENAI_API_KEY=sk-proj-insira_sua_chave_secreta_aqui_sem_espacos PORT=5000Você deve ver na tela a janela do explorador de arquivos exibindo a pasta “meu-app” contendo os dois arquivos de configuração na raiz e a pasta “templates” com o arquivo “index.html” guardado internamente.
-
Peça para o ChatGPT gerar as rotas e a interface visual
Abra o chat com o assistente virtual no seu navegador para solicitar as instruções de código sem precisar digitar nenhum termo técnico manualmente. O prompt correto deve especificar as versões das ferramentas para evitar códigos desatualizados.
Copie o texto estruturado apresentado abaixo e envie para a caixa de diálogo do assistente de inteligência artificial. Entendendo como criar aplicativo com ChatGPT, você ganha autonomia para prototipar ideias de sistemas rapidamente.
Crie um aplicativo web usando Flask em Python que funciona como um gerador de treinos físicos. O arquivo "app.py" deve carregar a chave de API do arquivo ".env" usando a biblioteca python-dotenv. O código do "app.py" deve instanciar o cliente oficial da OpenAI usando "client = OpenAI()" e chamar o modelo "gpt-4o-mini" por meio de "client.chat.completions.create". O formulário de entrada no arquivo "templates/index.html" deve pedir Idade, Objetivo e Frequência Semanal usando Tailwind CSS via CDN. O resultado do treino gerado pelo modelo inteligente deve ser renderizado diretamente na mesma página HTML abaixo do formulário de envio usando o filtro "| safe" do Flask.Você deve ver na tela duas divisões de código distintas geradas pelo assistente, uma rotulada como código de controle para o arquivo “app.py” e outra de estrutura para o arquivo “templates/index.html”.
-
Preencha os arquivos do servidor com o código gerado
Abra o arquivo “app.py” na raiz do seu projeto usando o seu editor de texto de preferência e cole as linhas de controle de rotas que lidam com o envio do formulário e chamada do modelo de processamento.
import os from flask import Flask, render_template, request from openai import OpenAI from dotenv import load_dotenv load_dotenv() app = Flask(__name__) client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) @app.route("/", methods=["GET", "POST"]) def index(): treino = None if request.method == "POST": idade = request.form.get("idade") objetivo = request.form.get("objetivo") dias = request.form.get("dias") prompt_comando = f"Escreva um plano de treino para uma pessoa de {idade} anos focada em {objetivo} que treina {dias} dias na semana. Use formatação HTML pura com tags p, h3, ul e li para estruturar a resposta sem usar blocos markdown." resposta = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "Você é um personal trainer profissional especialista em musculação."}, {"role": "user", "content": prompt_comando} ] ) treino = resposta.choices[0].message.content return render_template("index.html", treino=treino) if __name__ == "__main__": app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)Abra o arquivo “index.html” localizado na pasta “templates” e cole a estrutura visual responsável por exibir os campos do formulário na tela do navegador do usuário.
<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Gerador de Treinos Inteligente</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-gray-900 text-white min-h-screen flex items-center justify-center p-4"> <div class="bg-gray-800 p-8 rounded-2xl shadow-lg max-w-md w-full border border-gray-700"> <h1 class="text-2xl font-bold mb-6 text-indigo-400 text-center">Monte seu Treino IA</h1> <form method="POST" class="space-y-4"> <div> <label class="block text-sm font-medium mb-1">Sua Idade</label> <input type="number" name="idade" required class="w-full bg-gray-750 border border-gray-600 rounded-lg p-2.5 text-white focus:ring-2 focus:ring-indigo-500 outline-none"> </div> <div> <label class="block text-sm font-medium mb-1">Qual seu objetivo?</label> <select name="objetivo" class="w-full bg-gray-700 border border-gray-600 rounded-lg p-2.5 text-white focus:ring-2 focus:ring-indigo-500 outline-none"> <option value="Hipertrofia">Hipertrofia (Massa Magra)</option> <option value="Emagrecimento">Emagrecimento (Perda de Gordura)</option> <option value="Resistencia">Resistência Muscular</option> </select> </div> <div> <label class="block text-sm font-medium mb-1">Frequência semanal</label> <select name="dias" class="w-full bg-gray-700 border border-gray-600 rounded-lg p-2.5 text-white focus:ring-2 focus:ring-indigo-500 outline-none"> <option value="3">3 dias por semana</option> <option value="4">4 dias por semana</option> <option value="5">5 dias por semana</option> </select> </div> <button type="submit" class="w-full bg-indigo-600 hover:bg-indigo-500 py-3 rounded-lg font-semibold transition shadow-md">Gerar Ficha de Treino</button> </form> {% if treino %} <div class="mt-8 p-4 bg-gray-850 rounded-xl border border-indigo-500/30 text-gray-200"> <h2 class="text-xl font-bold text-indigo-300 mb-3">Ficha de Treino Recomendada:</h2> <div class="space-y-2">{{ treino | safe }}</div> </div> {% endif %} </div> </body> </html>Você deve ver na tela o editor exibindo ambos os arquivos devidamente salvos e com o código identado corretamente nos painéis internos de trabalho.
-
Instale os pacotes de controle e inicie o servidor
Para o interpretador entender as bibliotecas importadas no topo do arquivo do servidor, você precisa instalar os pacotes auxiliares no computador. Gerencie essa instalação usando o utilitário de instalação padrão de dependências do ecossistema.
Abra a janela do terminal de comandos apontando para a pasta “meu-app” onde os seus códigos estão salvos e execute as instruções sequenciais indicadas abaixo.
pip install flask openai python-dotenv python app.pyVocê deve ver na tela o terminal de comandos exibindo as mensagens de carregamento de dependências e confirmando a inicialização da aplicação com a frase “Running on http://127.0.0.1:5000”.
-
Preencha os campos e teste o sistema gerado
Com o servidor rodando em segundo plano no seu computador, o ambiente local de testes já pode receber dados do usuário. Use o navegador para simular a requisição de um usuário real.
Abra o navegador de sua preferência no computador, acesse a barra de endereços do navegador e digite o endereço local gerado pelo terminal para exibir a tela do formulário.
http://127.0.0.1:5000Você deve ver na tela o formulário estilizado em tons de cinza e azul escuro contendo as opções de preenchimento de treino e o botão de envio ativo.
Erros mais comuns
Durante a execução do seu projeto, podem surgir falhas de digitação ou de credenciais que travam o terminal. Conheça as falhas mais recorrentes mapeadas em desenvolvimento local.
Cota de API esgotada ou falta de saldo na OpenAI: Acontece quando a conta de desenvolvimento não possui créditos adicionados para consumir o processamento do modelo gpt-4o-mini.
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
Porta do servidor ocupada por outra aplicação: Ocorre quando outro servidor local ou programa de comunicação do sistema já está escutando na porta padrão 5000 da sua rede local.
OSError: [Errno 98] Address already in use
Pasta de modelos visuais nomeada de forma incorreta: O Flask lança uma exceção quando o arquivo index.html não é encontrado na pasta com o nome exato exigido pela biblioteca.
jinja2.exceptions.TemplateNotFound: index.html
Quanto custa
O desenvolvimento local da aplicação é totalmente gratuito. Você não paga licenças para programar ou executar o Python e o framework Flask no seu computador.
O consumo da API cobra frações de centavos por requisição feita. O plano pago mais barato de créditos na plataforma de desenvolvedor exige uma recarga mínima em torno de US$ 5.00. Confira sempre na página de preços oficial da OpenAI, pois os valores de tokens de entrada e de saída mudam com frequência.
Para hospedar essa automação online na internet para outras pessoas acessarem através de plataformas como Render ou Railway, o custo inicial dos servidores de nuvem varia entre US$ 5.00 e US$ 7.00 mensais na categoria básica.
Perguntas frequentes
Como coloco esse aplicativo na loja de aplicativos para outras pessoas baixarem?
Para disponibilizar o sistema nas lojas da Google e Apple, você precisa adaptar a interface para funcionar como um aplicativo nativo usando estruturas como Apache Cordova ou Capacitor. Você também pode publicar a página na internet usando servidores em nuvem e configurar as marcações de Progressive Web App para os usuários salvarem o atalho do site no celular.
É possível criar um aplicativo de filmes ou player de música com essa mesma técnica?
Sim, você pode alterar o fluxo do servidor e substituir o prompt do robô para processar informações de outras mídias. Para que o seu sistema puxe sinopses ou arquivos reais de áudio, você precisará instruir o chat a integrar o seu código Python com bases públicas de metadados de mídia.
Dá para usar o ChatGPT para desenvolver um aplicativo de jogos interativos?
Sim, você pode criar jogos de RPG baseados em texto, perguntas e respostas ou salas de escape dinâmicas. O modelo inteligente deve receber o histórico das jogadas nas mensagens do sistema e decidir quais serão os próximos desafios visuais impressos no seu arquivo HTML local de retorno.
Como transformar esse protótipo em sistemas profissionais com banco de dados e login?
Você precisa pedir ao assistente para reescrever o código do arquivo principal integrando uma biblioteca de banco de dados relacional como o SQLite ou PostgreSQL. Também deve ser configurado um sistema de registro e autenticação segura de sessões como a extensão Flask-Login para manter os perfis de cada usuário protegidos.
Como lidar com segurança de dados ao integrar APIs financeiras semelhantes às do aplicativo caixa?
Para realizar qualquer operação que envolva dados sensíveis de usuários ou transações bancárias, você nunca deve salvar as credenciais diretamente no arquivo HTML acessível pelo navegador. O processamento deve ocorrer estritamente em segundo plano, no código do servidor rodando no arquivo principal, utilizando variáveis de ambiente seguras para a proteção das credenciais corporativas.
Conclusão
Seguindo este tutorial, você aprendeu a colocar no ar uma aplicação web funcional conectada a um cérebro digital altamente potente sem digitar comandos complexos. O processo mostra que o entendimento de arquitetura básica de sistemas permite criar produtos digitais funcionais focados em qualquer nicho de mercado.
Se você conseguiu rodar o gerador no seu computador ou se teve alguma dúvida sobre como estruturar a sua ideia de sistema, deixe o seu comentário no campo abaixo e vamos conversar sobre as novas possibilidades.
Leia também
Receba um tutorial de automação por semana
Toda terça, um passo a passo testado por mim e o prompt exato que usei. Sem enrolação, sem spam.