{"id":30851268,"url":"https://github.com/d3vlopes/curso-em-texto","last_synced_at":"2026-05-08T09:32:57.675Z","repository":{"id":312015871,"uuid":"1036901148","full_name":"d3vlopes/curso-em-texto","owner":"d3vlopes","description":"Curso em Texto é uma plataforma gratuita e open source de cursos em formato textual. Com objetivo de oferecer um aprendizado profundo e de qualidade,  oferecendo cursos para diversas áreas.","archived":false,"fork":false,"pushed_at":"2025-10-02T20:58:32.000Z","size":475,"stargazers_count":14,"open_issues_count":14,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-02T22:29:00.865Z","etag":null,"topics":["fastify","nextjs","open-source","turborepo","typescript"],"latest_commit_sha":null,"homepage":"https://curso-em-texto-frontend.vercel.app","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/d3vlopes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-12T18:48:50.000Z","updated_at":"2025-10-02T21:08:33.000Z","dependencies_parsed_at":"2025-10-06T07:32:09.168Z","dependency_job_id":null,"html_url":"https://github.com/d3vlopes/curso-em-texto","commit_stats":null,"previous_names":["d3vlopes/curso-em-texto"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/d3vlopes/curso-em-texto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3vlopes%2Fcurso-em-texto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3vlopes%2Fcurso-em-texto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3vlopes%2Fcurso-em-texto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3vlopes%2Fcurso-em-texto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d3vlopes","download_url":"https://codeload.github.com/d3vlopes/curso-em-texto/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3vlopes%2Fcurso-em-texto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32774845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["fastify","nextjs","open-source","turborepo","typescript"],"created_at":"2025-09-07T07:00:53.179Z","updated_at":"2026-05-08T09:32:57.665Z","avatar_url":"https://github.com/d3vlopes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Curso em Texto\n\nO **Curso em Texto** é uma plataforma de cursos livres em formato textual, que incentiva a leitura e o aprendizado profundo.\n\nA proposta é resgatar a essência do aprendizado escrito — direto, acessível e fácil de manter — sem depender de vídeos longos, edição complexa ou custos altos de produção.\n\nAcreditamos que toda pessoa tem algo de valioso para **ensinar** e algo novo para **aprender**.\n\n---\n\n**Conteúdo**\n\n- [Stack](#stack)\n- [Começando](#começando)\n- [Configurando upstream](#configurando-upstream)\n- [Configuração do projeto](#configuração-do-projeto)\n  - [Pré-requisitos](#pré-requisitos)\n  - [Baixar e configurar Docker](#baixar-e-configurar-docker)\n  - [Configurar variáveis de ambiente](#configurar-variáveis-de-ambiente)\n  - [Instalar dependências](#instalar-dependências)\n  - [Subir Docker](#subir-docker)\n  - [Executar migrations](#executar-migrations)\n  - [Iniciando o servidor de desenvolvimento](#iniciando-o-servidor-de-desenvolvimento)\n  - [Testando rota de exemplo](#testando-rota-de-exemplo)\n- [Trabalhando com workspaces](#trabalhando-com-workspaces)\n  - [Executar comandos apenas em um workspace](#executar-comandos-apenas-em-um-workspace)\n  - [Instalando dependências](#instalando-dependências)\n  - [Rodando o Storybook](#rodando-o-storybook)\n  - [Comandos úteis por workspace](#comandos-úteis-por-workspace)\n- [Design](#design)\n  - [Layout](#layout)\n  - [UX](#ux)\n- [Roadmap](#roadmap)\n- [Comunidade](#comunidade)\n- [Contribuindo](#contribuindo)\n\n## Stack\n\n- [Next.js](https://nextjs.org)\n- [Node.js](https://nodejs.org)\n- [TypeScript](https://www.typescriptlang.org)\n- [Fastify](https://fastify.dev)\n- [Drizzle ORM](https://orm.drizzle.team)\n- [PostgreSQL](https://www.postgresql.org)\n- [Docker](https://www.docker.com)\n- [Turborepo](https://turborepo.com)\n- [Tailwind CSS](https://tailwindcss.com)\n- [Storybook](https://storybook.js.org)\n- [Vitest](https://vitest.dev)\n- [Zod](https://zod.dev)\n- [Swagger](https://swagger.io)\n- [Scalar](https://scalar.com)\n\n## Começando\n\n1. **Faça o fork no GitHub:**\n   - Clique no botão \"Fork\" no canto superior direito\n   - Selecione sua conta para criar o fork\n\n2. **Clone seu fork localmente:**\n   ```bash\n   git clone https://github.com/SEU_USUARIO/curso-em-texto.git\n   cd curso-em-texto\n   ```\n\n## Configurando upstream\n\n1. **Adicione o repositório original como upstream:**\n\n   ```bash\n   git remote add upstream https://github.com/d3vlopes/curso-em-texto.git\n   ```\n\n2. **Verifique os remotes configurados:**\n\n   ```bash\n   git remote -v\n   ```\n\n## Configuração do projeto\n\n### Pré-requisitos\n\n- Node.js \u003e= 22\n- Docker\n\n### Baixar e configurar Docker\n\nBaixe e configure o [Docker](https://www.docker.com) conforme seu sistema operacional.\n\n### Configurar variáveis de ambiente\n\nCopie o arquivo `.env.example` e renomeie para `.env` no diretório `apps/backend/` e adicione o seguinte valores nas variáveis:\n\n```bash\n# apps/backend/.env\nPOSTGRES_USER=\"admin\"\nPOSTGRES_PASSWORD=\"admin\"\nPOSTGRES_DB=\"curso-em-texto\"\nDATABASE_URL=\"postgresql://admin:admin@localhost:5432/curso-em-texto?schema=public\"\n```\n\n### Instalar dependências\n\n```bash\n# Instalar todas as dependências do monorepo\nnpm install\n```\n\n### Subir Docker\n\n```bash\nnpm run docker\n```\n\n### Executar migrations\n\n```bash\nnpm run --workspace=backend db:migrate\n```\n\n### Iniciando o servidor de desenvolvimento\n\n```bash\nnpm run dev\n```\n\nEsse comando vai iniciar tanto o frontend como o backend do projeto utilizndo o [Turborepo](https://turborepo.com).\n\n- O backend estará rodando em [http://localhost:8000/docs](http://localhost:8000/docs)\n- O frontend estará rodando em [http://localhost:3000](http://localhost:3000)\n\n### Testando rota de exemplo\n\n1. Faça download do [Insomnia](https://insomnia.rest/download)\n2. Faça uma requisição `Post` no Insomnia para a URL `http://localhost:8000/api/example/create`, conforme a imagem abaixo\n\n\u003cimg width=\"1292\" height=\"1040\" alt=\"image\" src=\"https://github.com/user-attachments/assets/bb2ee9ce-31d5-4d79-98d5-be3594fd66f9\" /\u003e\n\n\u003e [!TIP]\n\u003e Se tudo estiver certo, você deve receber status 201.\n\n## Trabalhando com workspaces\n\nEste projeto usa [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) para gerenciar o monorepo.\n\n### Executar comandos apenas em um workspace\n\n```bash\n# Iniciar apenas o backend\nnpm run dev --workspace=backend\n\n# Iniciar apenas o frontend\nnpm run dev --workspace=frontend\n```\n\n### Instalando dependências\n\n```bash\n# Instala o axios apenas no backend\nnpm i axios --workspace=backend\n\n# Instala o axios apenas no frontend\nnpm i axios --workspace=frontend\n\n```\n\n### Rodando o Storybook\n\n\u003e [!CAUTION]\n\u003e Os componentes devem ser desenvolvidos utilizando o ambiente do Storybook.\n\n1. Rode o comando `npm run storybook --workspace=frontend`\n2. Acesse [http://localhost:6006](http://localhost:6006)\n\n### Comandos úteis por workspace\n\n**Backend:**\n\n```bash\n# Desenvolvimento\nnpm run dev --workspace=backend\n\n# Banco de dados\nnpm run db:studio --workspace=backend  # Interface web do Drizzle\nnpm run db:generate --workspace=backend  # Gerar migrações\nnpm run db:migrate --workspace=backend   # Executar migrações\n\n# Testes\nnpm run test --workspace=backend        # Roda todos os testes\nnpm run test:watch --workspace=backend   # Roda os testes em modo watch\n```\n\n**Frontend:**\n\n```bash\n# Desenvolvimento\nnpm run dev --workspace=frontend\n\n# Inicia o ambiente de desenvolvimento do Storybook\nnpm run storybook --workspace=frontend\n\n# Testes\nnpm run test --workspace=frontend       # Roda todos os testes unitários\nnpm run test:watch --workspace=frontend   # Roda os testes em modo watch\n```\n\n## Design\n\n### Layout\n\nVocê pode visualizar o layout do projeto, [clicando aqui](https://www.figma.com/design/7bvEFe5ypInZvsdiOSczq3/Curso-em-Texto?node-id=2-11\u0026p=f\u0026t=pn4kGbEaY2j3roqB-0).\n\n### UX\n\n- [Briefing](https://goldenrod-pen-c7d.notion.site/Briefing-17b51b86f4bf80fba551fff3c176d6d7)\n- [Desk Research](https://goldenrod-pen-c7d.notion.site/Desk-Research-24a51b86f4bf8096a7d3cea5b2e68040)\n- [Matriz CSD](https://goldenrod-pen-c7d.notion.site/Matriz-CSD-24a51b86f4bf802881f2e4f08fc7a1d3)\n- [Benchmarking](https://goldenrod-pen-c7d.notion.site/Benchmarking-24a51b86f4bf8015a9afc293340cc972)\n- [Personas](https://goldenrod-pen-c7d.notion.site/Personas-24a51b86f4bf801a889ff115cec1ea0b)\n- [Jornada do usuário](https://drive.google.com/drive/folders/1LFlmLHRH-NydIzghxb28Kvr0X1UE_xGK)\n- [Pesquisa com possíveis usuários](https://goldenrod-pen-c7d.notion.site/Pesquisa-com-poss-veis-usu-rios-24b51b86f4bf80ab9fe7de34832c9a15)\n- [Sitemap](https://goldenrod-pen-c7d.notion.site/Sitemap-24b51b86f4bf805fb194f94bf2c8c6a7)\n- [User flow](https://goldenrod-pen-c7d.notion.site/User-flow-24b51b86f4bf80d49685dc828dae5d4c)\n- [Mapa de funcionalidades](https://goldenrod-pen-c7d.notion.site/Funcionalidades-24b51b86f4bf80f7a314ea2d403e6d4f)\n\n## Roadmap\n\n### Em desenvolvimento\n\n- [ ] [Sistema de autenticação](https://github.com/d3vlopes/curso-em-texto/milestone/1)\n  - Cadastro e login de usuários.\n  - Integração com OAuth (Google e GitHub).\n  - Rules.\n- [ ] [Criação de cursos](https://github.com/d3vlopes/curso-em-texto/milestone/3)\n  - CRUD de cursos (título, descrição, tags).\n  - Editor de conteúdo em texto.\n  - Organização em capítulos e lições.\n     \n  ### Planejado \n- [ ] **Perfil de usuário**\n  - Informações básicas (nome, bio, redes sociais).\n  - Avatar do usuário.\n- [ ] **Sistema de curadoria de cursos**\n  - Aprovação e bloqueio de cursos.\n  - Destaque de cursos recomendados.\n- [ ] **Sistema de denúncias**\n  - Denúncia de conteúdo inadequado.\n  - Revisão de denúncias pela equipe.\n- [ ] **Sistema de anotações**\n  - Usuário pode criar notas pessoais dentro das lições.\n- [ ] **Sistema de favoritos**\n  - Salvar cursos/lessons para ver depois.\n- [ ] **Busca avançada**\n  - Busca por cursos, lições e autores.\n- [ ] **Gamificação**\n  - Sistema de pontos/reputação para autores.\n  - Badges para contribuidores ativos.\n- [ ] **Sistema de recompensa para criadores de cursos**\n  - Troca de pontos por recompensas.\n- [ ] **Comentários e feedback**\n  - Espaço de comentários em cursos e lições.\n  - Votação em comentários (upvote/downvote).\n\n## Comunidade\n\nFaça parte da nossa comunidade no [Discord](https://discord.gg/55e3kf6DPv).\n\n## Contribuindo\n\nQuer nos ajudar? [Clique aqui](CONTRIBUTING.md) e saiba como começar.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3vlopes%2Fcurso-em-texto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd3vlopes%2Fcurso-em-texto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3vlopes%2Fcurso-em-texto/lists"}