11 / AI ENGINEERING / CASE STUDY
ETIKU AI
A conversational assistant with streaming responses and organized chat history.
Streamlit demo Inspect source on GitHub ↗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.