← All projects

11 / AI ENGINEERING / CASE STUDY

ETIKU AI

A conversational assistant with streaming responses and organized chat history.

Streamlit demo Inspect source on GitHub ↗
Architecture schematic: Streamlit UI to Chat settings to Gemini stream to Conversation store
Architecture schematic based on reviewed source. No live system data.

Architecture

Streamlit UI → Chat settings → Gemini stream → Conversation store

Problem & context

A useful chat interface needs more than a model call: conversation management, response controls and understandable storage boundaries matter.

Objectives

Build a branded assistant for learning, research and coding, with streaming output and manageable conversation history.

My role & project work

Built the Streamlit chat interface, Gemini streaming integration, response-style/temperature controls and conversation create/search/rename/delete flows.

Technical implementation

assistant.py prepares chat history and streams Gemini output. The current entry point imports Supabase-backed authentication and conversation storage, while an older session-storage module remains in the tree. The supplied README/screenshots describe the earlier session-isolated public demo.

Engineering decisions

Keep the model adapter, settings, authentication and storage in separate modules. Load API configuration through environment/Streamlit settings rather than placing credentials in client-facing code.

Challenges & solutions

The README still describes session-only storage while current code uses Supabase. Hosted behavior, database schema and row-level security need verification before claiming persistent multi-user isolation. RAG, PDF upload and voice remain roadmap items for ETIKU itself.

Testing & verification

Reviewed assistant.py, etiku_app.py, session_storage.py and supabase_storage.py at revision 2310c6fea69f7284369494c4a7f849621fc6cd36. The owner supplied the Streamlit demo screenshot and URL. No sign-in, model request or database operation was performed.

Current status

Streamlit demonstration with a newer authentication/storage implementation in source. No production-security or persistent-storage guarantee is made.

Lessons & next steps

Storage behavior must match the README and UI copy. Clear module boundaries make the model, UI and storage layers easier to test independently.

Discuss this work → View resume