Skip to content

devlulcas/coatiquati

Repository files navigation

COATIQUATI - Quase uma rede social, sempre uma ferramenta de aprendizado

CoatiQuati é uma rede social de compartilhamento de conhecimento, onde você pode compartilhar seus conhecimentos com o mundo e aprender com a comunidade.

A ideia do CoatiQuati é ser uma ferramenta de aprendizado com trilhas e tópicos de estudo criados por professores que servem como administradores da plataforma.

Futuramente pretendo adicionar funcionalidades que dão ainda mais liberadade aos estudantes, como a possibilidade de criar trilhas de estudo e tópicos de estudo sem a necessidade de ser um professor.

Tudo por aqui é gratuito, sem anúncios e sem rastreamento de dados. Apesar que talvez eu adicione alguma forma de analytics para saber como as pessoas estão utilizando a plataforma, mas pretendo ser transparente sobre isso e procurar uma plataforma de analytics que respeite a privacidade dos usuários.

EXECUTANDO O PROJETO

Pré-requisitos

Instalação

  1. Clone o repositório

    git clone https://github.com/devlulcas/coatiquati.git
  2. Instale as dependências

     pnpm install
  3. Crie um arquivo .env.local na raiz do projeto e adicione as seguintes variáveis de ambiente

     cp .env.example .env.local
  4. Altere as variáveis de ambiente no arquivo .env.local com as suas credenciais da AWS, banco de dados e etc.

  • AWS_ACCESS_KEY_ID = Chave de acesso de um usuário IAM com permissões de acesso ao S3 e SES da AWS
  • AWS_SECRET_ACCESS_KEY = Chave secreta de um usuário IAM com permissões de acesso ao S3 e SES da AWS
  • AWS_REGION = Região da AWS
  • AWS_BUCKET_NAME = Nome do bucket do S3 ({prod|dev|staging}-{domaintld}-{version}-{nanoid})
  • DATABASE_URL = URL de conexão com o banco de dados (libsql://{database}-{user}.turso.io ou http://127.0.0.1:8080)
  • DATABASE_AUTH_TOKEN = Token de conexão com o banco de dados (Não é necessário para o banco de dados local)

Para gerar o banco de dados local instale a CLI do Turso e execute turso dev --db-file dev.db ou simplesmente pnpm db:summon

  1. Execute as migrations

     pnpm run db:migrate
  2. Inicie o servidor

     pnpm dev
  3. Acesse o servidor em http://localhost:3000

CLI

Administrador

  • pnpm cli:manage - Inicia o gerenciador do CoatiQuati

Atualmente o gerenciador do CoatiQuati só suporta a criação de contas e alteração de privilégios de usuário.

manage cli

Banco de dados

  • pnpm db:summon - Inicia o banco de dados local
  • pnpm db:destroy - Destrói o banco de dados local
  • pnpm db:generate - Cria uma nova migration
  • pnpm db:migrate - Executa as migrations
  • pnpm db:push - Altera o banco de dados sem criar migrations, usar somente em dev
  • pnpm db:pull - Puxa a estrutura do banco de dados

Trocando AWS SES por outro serviço de envio de e-mails

  1. Altere o arquivo src/env.ts e remova as checagens das variáveis de ambiente AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY e AWS_REGION (ou mantenha as variáveis de ambiente e altere o valor delas para as credenciais do serviço de envio de e-mails que você deseja utilizar se ele for compatível com o SES, talvez seja necessário mantê-las caso vá usar o S3 da AWS)

  2. Altere o arquivo /src/modules/email/lib/mail.ts e crie uma nova função que seja compatível com a interface MailTransporterFactory e altere a condição export const mailer para retornar a função que você criou

Desde que sua implementação seja compatível com a interface MailTransporterFactory você pode usar qualquer serviço de envio de e-mails que desejar.

Trocando AWS S3 por outro serviço de armazenamento de arquivos

Warning

O serviço de armazenamento de arquivos deve ser compatível com o S3 da AWS. Se você deseja usar um serviço de armazenamento de arquivos que não seja compatível com o S3 da AWS você deve alterar o código fonte do projeto para que ele seja compatível com o serviço de armazenamento de arquivos que você deseja utilizar.

Essa seção ainda não está pronta, alterações serão feitas em breve após o código ser refatorado para ser compatível com outros serviços de armazenamento de arquivos.

Adicionando login com redes sociais

Para isso talvez seja necessário alterar o código fonte do projeto, pois o projeto atualmente só suporta login com e-mail, usuário e senha.

Você provavelmente terá que alterar o banco de dados também.

Para implementar essa funcionalidade você pode acessar a documentação da biblioteca de autenticacão que o projeto utiliza Lucia e ver um exemplo no github

LICENÇA

MIT License

Seja livre colega! 🚀

CONTATO

Lucas Alves Rego no Linkedin lucasrego.tech no meu site

Funcionalidades futuras

  • Adicionar login com redes sociais (Bluesky? - No momento não vai rolar fazer isso)
  • Adicionar suporte a outros serviços de armazenamento de arquivos (Basta implementar outros adaptadores)
  • Suporte a criação de conteúdo com markdown, além do WYSIWYG
  • Suporte a upload de LaTeX para papéis científicos
  • Suporte a upload de arquivos de áudio para micro-podcasts
  • Suporte a upload de arquivos PDF para artigos científicos e livros (com visualizador de PDF)
  • Sistema de tags para categorizar conteúdo

Prioridades

  • Suporte a criação de contas de administrador via CLI
  • Acessibilidade: Fonte para dislexia
  • Ajustes na edição de conteúdo (auto-save, marcação de conteúdo como editado, rascunho local)
  • Nova tela de perfil com informações sobre o usuário
  • Permitir que professores adicionem "prompts" para os alunos escreverem sobre
  • Sinalizar conteúdo inapropriado para remoção
  • Denunciar usuários por comportamento inadequado
  • Feed de amigos (seguindo) cronológico
  • Acessibilidade: Alto contraste (dark mode)
  • Feed "Para você" com base no seu histórico de leitura, tags favoritas, upvotes, downvotes e comentários
  • Ferramenta: Pomodoro
  • Ferramenta/Conteúdo: Flashcards
  • Ferramenta/Conteúdo: Quiz
  • Ferramenta/Conteúdo/Conteúdo: Integração com o Excalidraw
  • Ferramenta: Anotações
  • Grupos de estudo
  • Ferramenta: Calendário de estudos

Algoritmo de recomendação de conteúdo para o feed "Para você"

O algoritmo de recomendação de conteúdo para o feed "Para você" será baseado em um sistema de recomendação colaborativo com filtragem colaborativa baseada em itens.

Ainda preciso estudar mais sobre a implementação desse algoritmo, mas a ideia é que a sua rede de amigos, tags favoritas, upvotes, downvotes e comentários sejam usados para recomendar conteúdo para você.

TensorFlow.js parece ser uma boa opção para implementar esse algoritmo.

Mais sobre as ferramentas utilizadas

Banco de dados

Diagrama do banco de dados