Lexicon: um aplicativo móvel nativo personalizável para o seu site Discourse

Olá a todos,

Gostaria de passar rapidamente por aqui para mencionar que acabei de abrir o código de um projeto chamado Lexicon junto com alguns colegas meus.

É um aplicativo nativo para dispositivos móveis, pré-construído e personalizável, desenvolvido sobre a API do Discourse. Criamos para ajudar a integrar rapidamente recursos de discussão e mensagens em outros projetos móveis nativos.

Foi muito prazeroso construir este projeto, principalmente devido ao grande trabalho realizado antecipadamente pela equipe principal do Discourse e pela comunidade ao longo dos anos.

Capturas de tela estão disponíveis na introdução.

Quem tem perfil mais técnico pode conferir nosso Guia Rápido, que permitirá navegar neste site do Discourse enquanto testa o aplicativo!

Não hesitem em entrar em contato se tiverem dúvidas, comentários ou sugestões.

Obrigado,
Ryan

P.S. Não tinha certeza de qual seria a melhor categoria para postar isso. Sintam-se à vontade para reatribuir se houver uma mais adequada.

58 curtidas

Agradecemos muito pela documentação clara, especialmente sobre a arquitetura. Mal posso esperar para testar localmente!

Notificações push | :cross_mark::hammer: Em desenvolvimento

Há alguma previsão para isso?

8 curtidas

Isso é incrível, @RyanKF! Em qual direção os novos desenvolvedores devem ajudar em primeiro lugar? Tenho alguma experiência com aplicativos móveis em React.

3 curtidas

Isso é muito legal. Parece que está sob a licença MIT?

1 curtida

Oh, isso deveria ser um cliente nativo do Discourse como o Fig? Se for, eu realmente gostei! :grinning:

4 curtidas

O Fig parece ótimo! Parece que eles realmente acertaram ao criar uma experiência nativa do iOS para o Discourse.

Algumas diferenças que consigo notar…

Suporte a Tablets

O Fig tem um suporte muito bom para tablets. Nós ainda não tratamos disso.

Aplicativo de Site Único

Semelhante ao Discourse Mobile, o Fig adotou a abordagem de “gerenciador de sites”, permitindo que você adicione vários sites do Discourse para navegar. O Lexicon é mais focado em produzir um aplicativo individual, possivelmente com marca branca, para um site do Discourse.

O próprio Lexicon não é um Aplicativo

Além disso, o Lexicon é mais um “modelo de aplicativo” que você pode pegar, personalizar e publicar na App Store ou Google Play por conta própria. O Fig fornece um aplicativo já publicado.

Oferta Premium

O Fig tem uma oferta premium para alguns recursos. O Lexicon não tem oferta premium.

O único ponto em que o dinheiro entraria em jogo seria se você não tivesse ninguém para ajudar na integração, personalização ou publicação do Lexicon. Nesse caso, ficaríamos felizes em conversar sobre como engajar conosco.

Dito isso, sei que muitos usuários deste site são técnicos ou semitecnicos, então espero que a documentação seja detalhada o suficiente para orientar muitas pessoas nesse processo sem necessidade de suporte adicional.

Tecnologias e Suporte a Dispositivos

Estou fazendo uma suposição aqui, mas parece que o Fig construiu seu aplicativo usando Swift, então é verdadeiramente nativo, o que é fantástico.

Construímos o Lexicon usando React Native, ou seja, com JavaScript (entendo que nem todos são fãs dessa abordagem).

Uma vantagem do nosso uso do React Native é que temos automaticamente aplicativos publicáveis para Android e iOS prontinhos, além de termos uma alta taxa de reutilização de código.

A maioria das diferenças entre Android e iOS em nossa base de código são detalhes de aparência e sensação, como um Botão de Ação Flutuante no Android, em vez de um botão no cabeçalho no iOS.

11 curtidas

É MIT. E em todos os outros detalhes do anúncio, eu tinha esquecido de adicionar um arquivo LICENSE ao repositório — obrigado por apontar isso!

6 curtidas

E você é incrível por já querer contribuir, @4ong!

Frontend

No lado do frontend, uma área que gostaria de melhorar é nosso suporte a recursos incorporados no conteúdo bruto de uma postagem.

Além de lidar com o conteúdo Markdown regular da postagem, também podemos oferecer suporte a vários recursos fornecidos pela marcação personalizada do Discourse.

Como você provavelmente já sabe, o Discourse oferece suporte a uma sintaxe personalizada para recursos como citações, alternadores (toggles), datas e até enquetes.

Em uma abordagem bastante comum, implementamos um suporte inicial para recursos básicos, como incorporação de código, e deixamos um bloco “ não é suportado no momento” para os recursos que ainda não foram implementados.

Gostaria de eliminar completamente esses blocos de “não suportado” do nosso aplicativo. Enquetes e alternadores (toggles) seriam especialmente ótimos de ter com suporte.

Além disso, como o Lexicon opera com base no conteúdo bruto de uma postagem, contornamos o suporte ao OneBox. Portanto, no mínimo, seria bom ter suporte básico para pré-visualização de links.

Backend

Um recurso que estou animado para implementar no futuro é o deep-linking a partir de e-mails. Provavelmente, não se trata de uma funcionalidade trivial de implementar e provavelmente envolveria a criação de um plugin do Discourse em Ruby.

Essencialmente, isso permitiria que os usuários tocassem em um link para uma postagem em um e-mail do Discourse e abrissem o aplicativo (se instalado) diretamente naquela postagem específica, por meio de um deep-link através do Discourse.

E se o aplicativo não estiver instalado ou o usuário não estiver em um dispositivo móvel, ele será redirecionado para o site normalmente.

Se alguém quiser se dedicar a isso, entre em contato comigo. Seria enorme ter isso funcionando.


EDIT: Confira também a página Recursos do Discourse Suportados da nossa documentação para ver quais recursos ainda não são suportados e sinta-se à vontade para implementar qualquer um deles (exceto notificações push, que já estamos trabalhando).

7 curtidas

Com otimismo, nas próximas semanas aqui — mas ainda não posso fazer garantias definitivas.

Já ultrapassamos a fase de prova de conceito, mas ainda precisamos ajustar alguns detalhes.

O suporte a esse recurso envolverá a instalação do nosso plugin Discourse no seu site.

Para dar alguns detalhes: construímos o Lexicon Mobile App usando o Expo, que é um conjunto incrível de ferramentas e serviços de build para aplicativos React Native — e inclui suporte a Notificações Push.

No entanto, não conseguimos encontrar nenhum plugin Discourse existente que se integre ao serviço de push do Expo, então acabamos precisando criar um. Felizmente, a integração de código aberto existente com o OneSignal é muito semelhante ao que precisávamos, o que nos permitiu usar o projeto deles como ponto de partida. (muito gratos ao pmusaraj por isso :folded_hands:).

Além de publicar o plugin e integrá-lo ao aplicativo móvel, obviamente também queremos atualizar a documentação. Como o Lexicon permite que você publique seu próprio aplicativo, não se trata apenas de configurar notificações push para um único aplicativo nas lojas App Store ou Play Store.

Portanto, queremos garantir que os usuários do projeto sejam devidamente orientados no processo de configuração, para que tudo funcione corretamente desde o início.

7 curtidas

Obrigado por todos os comentários de vocês. Avise-me se tiverem mais alguma dúvida.

A propósito, esqueci de mencionar que também temos um post no ProductHunt hoje que está indo muito bem. Se quiserem mostrar algum apoio, sintam-se à vontade para conferir!

https://www.producthunt.com/posts/lexicon-2

1 curtida

Ah, tudo bem. Obrigado por esclarecer! Lexicon parece muito interessante. Estou ansioso pelo suporte a tablets!

Se eu quisesse criar uma plataforma de mídia social baseada no Discourse, o Lexicon seria ideal para esse fim? Supondo que o Lexicon não chegue às plataformas de desktop no futuro, o suporte a desktop seria um obstáculo.

1 curtida

Muito empolgante!

Alguns comentários/perguntas:

  1. Não está claro se o DiscourseConnect é suportado; talvez valha a pena adicionar isso à página de recursos suportados.

  2. Há muitas opções disponíveis para maneiras de instalar o Prose, tanto no tutorial quanto na documentação. Suspeito que esse material poderia ser melhor organizado. Fiquei com dúvidas sobre como a configuração de SSL funcionaria se eu estivesse tentando fazer as coisas da maneira mais simples possível usando sua imagem Docker.

  3. Adoraria testar, mas não há uma maneira óbvia de fazê-lo. Se vocês disponibilizassem um aplicativo para o Meta, poderíamos :slight_smile:

  4. Notificações push e deep linking, como você mencionou, são definitivamente recursos importantes na minha opinião.

  5. Dadas as complexidades de atualizações, implantação de aplicativos, Prose, etc., minha mente rapidamente vai para o interesse em um serviço pago, completo e hospedado/suportado, onde vocês lidam com tudo isso. Talvez valha a pena oferecer um. Estou curioso sobre como seria o preço.

5 curtidas

Junto com o suporte a tablets, certo? :wink:

1 curtida

Este é um trabalho excelente.

4 curtidas

O Lexicon tem sua própria comunidade no Discourse? O GitHub é bom, mas não é possível discutir o Lexicon lá de forma adequada.

5 curtidas

Olá, parece haver algum problema quando o aplicativo carrega uma postagem que contém caracteres não em inglês (por exemplo, caracteres chineses 中文). Acredito que isso possa estar relacionado ao recurso de nomes Unicode do Discourse (Unicode usernames and group names) e já abri uma issue para registrar o log de erro detalhado no repositório do GitHub:

1 curtida

Muito bem! Você já implementou alguma solução de moderação automatizada? Adoraria reduzir os abusos e o spam que vejo em alguns fóruns.

Tentei configurar o aplicativo móvel Lexicon seguindo o Tutorial disponível em Lexicon. Após concluir todas as etapas e iniciar o aplicativo móvel para uma instância gratuita do Discourse (https://meta.discourse.org/), estou recebendo os seguintes erros no celular e no log do terminal, respectivamente.

Erro no terminal:

Nenhum desses arquivos existe:

\generated\server\globalTypes(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)

src\generated\server\globalTypes\index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
 5 | import { DEFAULT_CHANNEL } from '../constants';
  6 | import { Text } from '../core-ui';
>  7 | import { TopicsSortEnum } from '../generated/server/globalTypes';
    |                                 ^
   8 | import {
  9 |   anchorToMarkdown,
 10 |   errorHandler,
2 curtidas

Após configurar o projeto, os seguintes erros estão ocorrendo repetidamente:

Forneci http:// na variável MOBILE_HOST_PRONE, mas mesmo assim o erro aparece ao executar o aplicativo no telefone.

1 curtida

Também há outro erro:
Não foi possível iniciar seu aplicativo: no-registered-application.

1 curtida