Seven Faith
App Mobile de Fé e Bem-Estar Emocional com IA.
Mais do que um leitor bíblico, um assistente espiritual. Inclui 5+ ecrãs interativos, sistema de gamificação avançado com reforço de hábitos e um conselheiro emocional alimentado por Inteligência Artificial generativa.
Solução Técnica & Funcionalidades
- Integração IA (LLaMA 3.3 70B): Orquestrei 4 fluxos distintos de IA: um conselheiro emocional com histórico de conversa, geração de devocionais diários com cache, explicação contextual de versículos e um quiz adaptativo baseado no nível do utilizador.
- Leitor Otimizado: Construção de um leitor bíblico com seleção avançada, destaque de versículos com paleta de cores personalizada e gravação do progresso de leitura através de
AsyncStorage. - Gamificação Anti-Fraude: Sistema de consistência ("Lâmpada de Azeite") com streak tracking. Implementei verificações baseadas em datas reais do servidor para evitar que utilizadores manipulassem o relógio do telemóvel para ganhar troféus falsos.
- Feedback e i18n: Adição de feedback háptico (vibração tátil) para reforço positivo e internacionalização completa (PT, EN, ES, FR) utilizando
i18nextcom deteção automática do idioma nativo do telemóvel.
Trechos de Arquitetura
Exemplos da lógica complexa aplicada no frontend da aplicação.
Exemplo: Chamada de IA com Contexto e Histórico
// Integração com a Groq API para o Conselheiro Emocional
export const fetchCounselorAdvice = async (userEmotion, chatHistory) => {
const systemPrompt = `És um conselheiro empático. O utilizador sente-se: ${userEmotion}. Baseia a tua resposta em princípios bíblicos.`;
const response = await fetch('https://api.groq.com/openai/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${GROQ_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: "llama3-70b-8192",
messages: [
{ role: "system", content: systemPrompt },
...chatHistory // Mantém o contexto da conversa
],
temperature: 0.7
})
});
return response.json();
};
Exemplo: Lógica Anti-Fraude para o Streak (Lâmpada de Azeite)
// Verificação de acessos diários consecutivos
const checkDailyStreak = async () => {
const lastLogin = await AsyncStorage.getItem('lastLoginDate');
const today = await fetchRealWorldDate(); // Fetch de uma API de tempo externa
if (!lastLogin) return initializeStreak(today);
const daysDifference = calculateDaysDiff(lastLogin, today);
if (daysDifference === 1) {
incrementStreak(); // +1 Lâmpada de Azeite
} else if (daysDifference > 1) {
resetStreak(); // O utilizador falhou um dia
}
await AsyncStorage.setItem('lastLoginDate', today);
};