{"id":25855574,"url":"https://github.com/mathrb22/nlw-mastery-upload-ai","last_synced_at":"2025-03-01T17:19:11.940Z","repository":{"id":195404085,"uuid":"691320003","full_name":"mathrb22/nlw-mastery-upload-ai","owner":"mathrb22","description":"Aplicação que possibilita realizar upload de videos e por meio de IA, criar automaticamente títulos chamativos e descrições com uma boa indexação.","archived":false,"fork":false,"pushed_at":"2024-02-11T15:42:36.000Z","size":30390,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-02-11T16:49:53.906Z","etag":null,"topics":["ai","chatgpt","fastify","gpt-3","ia","next","next-level-week","nlw-ai","nlw-ia","nodejs","openai-api","prisma","prompts","radix-ui","react","tailwindcss","typescript","vite","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mathrb22.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-09-14T00:14:26.000Z","updated_at":"2023-10-30T17:34:59.000Z","dependencies_parsed_at":"2024-02-11T16:45:12.565Z","dependency_job_id":"9651846e-e04f-4c24-a011-f1085226a782","html_url":"https://github.com/mathrb22/nlw-mastery-upload-ai","commit_stats":null,"previous_names":["mathrb22/nlw-mastery-upload-ai"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathrb22%2Fnlw-mastery-upload-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathrb22%2Fnlw-mastery-upload-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathrb22%2Fnlw-mastery-upload-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathrb22%2Fnlw-mastery-upload-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mathrb22","download_url":"https://codeload.github.com/mathrb22/nlw-mastery-upload-ai/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241396909,"owners_count":19956441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chatgpt","fastify","gpt-3","ia","next","next-level-week","nlw-ai","nlw-ia","nodejs","openai-api","prisma","prompts","radix-ui","react","tailwindcss","typescript","vite","zod"],"created_at":"2025-03-01T17:19:11.499Z","updated_at":"2025-03-01T17:19:11.919Z","avatar_url":"https://github.com/mathrb22.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\".github/assets/icon-upload-ai.png\" alt=\"Ícone de um robô para representação do projeto upload.ai\" style=\"height: 85px\"\u003e\n\u003ch1\u003eupload.ai\u003c/h1\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n   \u003ca href=\"https://github.com/mathrb22\"\u003e\n      \u003cimg alt=\"Made by mathrb22\" src=\"https://img.shields.io/badge/made%20by-mathrb22-yellow\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/mathrb22/nlw-mastery-upload-ai/commits/main\"\u003e\n      \u003cimg alt=\"GitHub Last Commit\" src=\"https://img.shields.io/github/last-commit/mathrb22/nlw-mastery-upload-ai\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/mathrb22/nlw-mastery-upload-ai/issues\"\u003e\n      \u003cimg alt=\"GitHub Issues\" src=\"https://img.shields.io/github/issues/mathrb22/nlw-mastery-upload-ai\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/mathrb22/nlw-mastery-upload-ai/pulls\"\u003e\n      \u003cimg alt=\"Pull Requests Welcome\" src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/mathrb22/nlw-mastery-upload-ai/blob/main/LICENSE\"\u003e\n      \u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/mathrb22/nlw-mastery-upload-ai\"\u003e\n   \u003c/a\u003e\n\u003c/div\u003e\n\n\u003c/br\u003e\n\u003cdiv align=\"center\"\u003e\n\n[**Sobre**](#-sobre) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Objetivo**](#-objetivo) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Features**](#-features) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Demonstração**](#-demonstração) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Tecnologias e ferramentas**](#-tecnologias-e-ferramentas) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Organização do projeto**](#-organização-do-projeto) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Instalação e execução**](#-instalação-e-execução) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Como contribuir**](#-como-contribuir) \u0026nbsp;\u0026nbsp;**|**\u0026nbsp;\u0026nbsp;\n[**Licença**](#-licença)\n\n\u003c/div\u003e\n\n## 📃 Sobre\n\n\u003cimg alt=\"upload.ai\" src=\".github/assets/upload.ai2.png\" width=\"100%\"/\u003e\n\n**Upload.ai** é o projeto desenvolvido durante a trilha Mastery da **Next Level Week IA**, um evento online produzido pela [**Rocketseat**](https://github.com/Rocketseat).\n\nTrata-se de uma aplicação que possibilita realizar upload de videos e por meio de IA, criar automaticamente títulos chamativos e descrições com um boa indexação.\n\n## 🎯 Objetivo\n\nO objetivo central do **Upload.ai** é criar uma plataforma que permita aos usuários realizar o upload de vídeos e, por meio de **IA** (Inteligência Artificial), gerar automaticamente títulos chamativos e descrições otimizadas para esses vídeos. Esta aplicação visa simplificar o processo de criação de conteúdo de vídeo e melhorar a visibilidade dos vídeos na web.\n\nO projeto **Upload.ai** possui muitas aplicações práticas. Ele poderá ajudar criadores de conteúdo, profissionais de marketing, educadores online e empresas de mídia a melhorar a visibilidade e o desempenho de vídeos online, economizando tempo na criação de títulos e descrições atraentes e otimizadas para mecanismos de busca.\n\n## ✨ Features\n\n- [x] Upload de vídeos;\n- [x] Conversão de vídeo para áudio utilizando o [**ffmpeg.wasm**](https://ffmpegwasm.netlify.app/);\n- [x] Transcrição de áudio utilizando o [**Whisper (ASR - Automatic Speech Recognition)**](https://openai.com/research/whisper) da OpenAI;\n- [x] Customização dos prompts;\n- [x] Geração de resumo da transcrição utilizando o modelo GPT-3 da OpenAI;\n- [x] Geração de títulos chamativos utilizando o modelo GPT-3 da OpenAI;\n- [x] Geração de descrições otimizadas para SEO utilizando o modelo GPT-3 da OpenAI;\n- [x] Flexibilidade para definir a temperatura (nível de aleatoriedade) dos resultados gerados (0-1);\n- [x] Cópia dos resultados gerados pela IA para a área de transferência.\n\n## 💻 Demonstração\n\nhttps://github.com/mathrb22/nlw-mastery-upload-ai/assets/62413443/e7f4d886-dc36-4885-ad58-3ccbf0b4b031\n\n## 🚀 Tecnologias e ferramentas\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd style=\"font-weight: bold\"\u003eFront-end (web)\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://reactjs.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eReact\u003c/a\u003e,\n        \u003ca href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTypeScript\u003c/a\u003e,\n        \u003ca href=\"https://tailwindcss.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTailwindCSS\u003c/a\u003e,\n        \u003ca href=\"https://vitejs.dev/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eVite.js\u003c/a\u003e,\n        \u003ca href=\"https://radix-ui.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eRadix UI\u003c/a\u003e,\n        \u003ca href=\"https://ui.shadcn.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eShadcn/ui\u003c/a\u003e,\n        \u003ca href=\"https://ffmpegwasm.netlify.app/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003effmpeg.wasm\u003c/a\u003e,\n        \u003ca href=\"https://axios-http.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAxios\u003c/a\u003e,\n        \u003ca href=\"https://www.npmjs.com/package/ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eVercel AI SDK\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd style=\"font-weight: bold\"\u003eBack-end (API)\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://nodejs.org/en/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eNode.js\u003c/a\u003e,\n        \u003ca href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTypeScript\u003c/a\u003e,\n        \u003ca href=\"https://www.prisma.io/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ePrisma\u003c/a\u003e,\n        \u003ca href=\"https://www.fastify.io/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eFastify\u003c/a\u003e,\n        \u003ca href=\"https://zod.dev/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eZod\u003c/a\u003e,\n        \u003ca href=\"https://www.sqlite.org/index.html\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSQLite\u003c/a\u003e,\n        \u003ca href=\"https://www.npmjs.com/package/openai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenAI Node API\u003c/a\u003e,\n        \u003ca href=\"https://www.npmjs.com/package/ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eVercel AI SDK\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## 📂 Organização do projeto\n\nEste repositório é dividido em dois principais diretórios:\n\n- **api**: Contém o código-fonte do back-end.\n- **web**: Contém o código-fonte do front-end.\n\n## 🔧 Instalação e execução\n\nPara baixar o código-fonte do projeto em sua máquina, primeiramente terá que ter instalado o [**Git**](https://git-scm.com/).\nCom o Git instalado, em seu terminal execute o seguinte comando:\n\n```bash\ngit clone https://github.com/mathrb22/nlw-mastery-upload-ai.git\n```\n\nPara instalar as dependências e executar o projeto terá que ter instalado em sua máquina o [**node.js**](https://nodejs.org/en/), que vem acompanhado do npm.\n\n\u003e Nesse projeto foi utilizado o [**pnpm**](https://pnpm.io/), que busca economizar espaço em disco e acelerar a instalação de pacotes devido à sua abordagem de armazenamento de dependências compartilhado.\n\n### Front-end (Web)\n\nAcesse a pasta do projeto:\n\n```bash\ncd web\n```\n\nInstale as dependências usando **pnpm** ou **npm**:\n\n```bash\n# pnpm\npnpm install\n\n# npm\nnpm install\n```\n\nExecutar o projeto:\n\n```bash\n# pnpm\npnpm run dev\n\n# npm\nnpm run dev\n```\n\nA aplicação estará disponível em http://localhost:5173. Você poderá acessá-la a partir do seu navegador.\n\n### Back-end (API)\n\nAcesse a pasta do projeto:\n\n```bash\ncd api\n```\n\nInstale as dependências usando **pnpm** ou **npm**:\n\n```bash\n# pnpm\npnpm install\n\n# npm\nnpm install\n```\n\nCrie o arquivo .env com as variáveis de ambiente necessárias:\n\n```bash\nDATABASE_URL=\"file:./dev.db\"\nOPENAI_KEY=\"sua OpenAI key\"\n```\n\nRode o comando a seguir para gerar o client do Prisma:\n\n```bash\n# pnpm\npnpm prisma generate\n\n# npm\nnpm prisma generate\n```\n\nExecute as migrations do banco de dados:\n\n```bash\n# pnpm\npnpm prisma migrate dev\n\n# npm\nnpm prisma migrate dev\n```\n\nExecute o projeto:\n\n```bash\n# pnpm\npnpm run dev\n\n# npm\nnpm run dev\n```\n\nO servidor estará disponível em http://localhost:3333.\n\n## 💡 Como contribuir\n\n- Faça um **_fork_** desse repositório;\n- Crie um **branch** para a sua feature: `git checkout -b minha-feature`;\n- Faça um **commit** com suas alterações: `git commit -m 'feat: Minha nova feature'`;\n- Faça um **push** para o seu branch: `git push origin minha-feature`;\n- Faça um **pull request** com sua feature;\n\nPull requests são sempre bem-vindos. Em caso de dúvidas ou sugestões, crie uma _**issue**_ ou entre em contato comigo.\n\n## 📝 Licença\n\n\u003ca href=\"https://github.com/mathrb22/nlw-mastery-upload-ai/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/mathrb22/nlw-mastery-upload-ai\"\u003e\n\u003c/a\u003e\n\nEsse projeto está sob a licença **MIT**. Veja o arquivo _**LICENSE**_ para mais detalhes.\n\n---\n\nDesenvolvido com 💚 por \u003ca href=\"https://github.com/mathrb22/\"\u003emathrb22\u003c/a\u003e\n\n\u003cdiv style=\"display: flex;\"\u003e\n  \u003ca href=\"https://www.linkedin.com/in/matheus-ribeiro-dev\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/-LinkedIn-%230077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" style=\"margin-right: 2vw\" target=\"_blank\"\u003e\u003c/a\u003e\n  \u003ca href=\"mailto:math.ribeiro.dev@gmail.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white\" alt=\"Gmail\" style=\"margin-right: 2vw\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathrb22%2Fnlw-mastery-upload-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmathrb22%2Fnlw-mastery-upload-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathrb22%2Fnlw-mastery-upload-ai/lists"}