# Project export: Kawa.AI

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: Cal Hacks 12.0
- Tagline: The futuristic video streaming platform for entertainment, education, and more -- with the power of humanistic AI.
- Devpost: https://devpost.com/software/kawa-ai
- GitHub: https://github.com/c25kenneth/kawa-ai
- Video: https://www.youtube.com/embed/BU0olMgb1qw?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 3 GitHub contributor(s) — c25kenneth (16 commits), downmute (5 commits), 2Ahmedsquared2 (2 commits)

## Devpost submission (written by the team)

### Overview

🎯

### Inspiration

We wanted to create a streaming platform that combines the charm of Live2D anime characters with the power of AI, enabling streamers to host engaging, interactive content with virtual companions that respond to viewers in real-time. 🚀

### What it does

KawaAI is a live streaming platform featuring AI-powered Live2D characters that: Interactive Virtual Hosts: Live2D characters overlay on streams with smooth animations, breathing, eye blinking, and physics simulation AI-Powered Responses: Characters automatically detect questions in chat and respond contextually using AI, staying in character YouTube Integration: Stream YouTube videos alongside your Live2D character host Real-Time Chat: Built on LiveKit for low-latency, real-time communication Character Personalities: Choose from multiple unique characters, each with distinct personalities and expressions: Haru - Cheerful & Energetic Mao - Cool & Confident Hiyori - Sweet & Gentle Natori - Elegant & Sophisticated Mark - Laid-back Cool Guy Wanko - Playful & Fun Haru - Cheerful & Energetic Mao - Cool & Confident Hiyori - Sweet & Gentle Natori - Elegant & Sophisticated Mark - Laid-back Cool Guy Wanko - Playful & Fun Mouse Tracking: Characters' eyes and head follow your cursor for immersive interaction Expression System: Click on characters to trigger random facial expressions or emotions Stream Replays: Rewatch past streams with the original character and chat history 🛠️

### How we built it

Frontend (React + TypeScript) Live2D Cubism SDK for Web 5 - Rendering animated 2D characters React 19 with TypeScript for type-safe component architecture Vite for fast development and optimized builds Tailwind CSS 4 for modern, responsive UI design LiveKit Components React for real-time video and data channels Supabase for authentication and database React Router for multi-page navigation Backend (Python Flask) Flask with async support via Hypercorn LiveKit Python SDK for room management and token generation JanitorAI API for intelligent character responses (streaming SSE) Supabase Python Client for database operations CORS-enabled for cross-origin requests Architecture Highlights Custom WebGL renderer integration for Live2D models Singleton framework manager to prevent multiple initializations Character-specific positioning system for optimal framing Server-Sent Events (SSE) parsing for streaming AI responses Real-time message detection with pattern matching Automatic AI agent dispatch system 🎨 Key Technical Achievements Live2D Integration We successfully integrated the complex Live2D Cubism SDK into a React application, which required: Converting the SDK's vanilla TypeScript demo into React components Managing WebGL contexts across component lifecycles Implementing proper cleanup to prevent memory leaks Creating a singleton framework manager for multiple character instances Dynamic character positioning based on model dimensions AI Response System Detects questions in chat using pattern matching (?, what, how, why, etc.) Streams AI responses in real-time using SSE parsing Maintains character personality throughout conversations Prevents duplicate responses with message tracking Gracefully handles API errors and timeouts Character Personalization Each character has: Unique positioning adjustments (some models are taller/shorter) Individual animation sets and expressions Personality-driven AI responses Mouse-tracking for realistic eye movement Click interactions for expression changes 🏗️

### Challenges we ran into

Live2D SDK Complexity: The Cubism SDK wasn't designed for React, requiring extensive adaptation of the vanilla TypeScript implementation WebGL Context Management: Multiple character instances caused framework re-initialization errors - solved with a singleton pattern Streaming API Parsing: JanitorAI returns Server-Sent Events, not standard JSON - required custom SSE parser Character Positioning: Each model has different dimensions and anchor points - created dynamic positioning system TypeScript Configuration: The SDK required disabling strict module syntax to work with Vite Motion Playback: Had to properly initialize eye blink and lip sync parameter IDs for motions to work Multi-Component Rendering: Managing 7+ simultaneous Live2D previews without crashes 🏆

### Accomplishments we're proud of

✅ Successfully integrated Live2D Cubism SDK into a modern React application ✅ Built a working AI chat system that responds contextually and in-character ✅ Created a smooth, Netflix-like streaming UI with real-time features ✅ Implemented 6 fully functional characters with unique personalities ✅ Achieved 60 FPS rendering with transparent backgrounds ✅ Built a robust character selection system with live previews ✅ Integrated YouTube playback seamlessly with overlay characters ✅ Implemented stream replay functionality with full chat history ✅ Created dynamic user labeling (You, User 1, User 2, etc.) 📚

### What we learned

Deep understanding of WebGL rendering pipelines and context management Server-Sent Events (SSE) parsing for streaming AI responses Live2D Cubism SDK architecture and model structure React component lifecycle optimization for resource-intensive rendering Real-time communication patterns with LiveKit Character-based AI prompt engineering Handling multiple simultaneous WebGL instances Database schema design for flexible content storage 🔮

### What's next

for KawaAI Near-term Features Lip Sync: Sync character mouth movements with TTS audio output Voice Integration: Add text-to-speech for character voices Advanced Expressions: Trigger specific expressions based on chat sentiment Custom Characters: Allow users to upload their own Live2D models Animation Events: Trigger special animations based on chat interactions Mobile Support: Touch controls for character interaction Monetization: Tips, subscriptions, and virtual gifts for creators Long-term Vision Multi-character Streams: Support multiple characters interacting simultaneously Voice Chat Integration: Let characters respond with voice, not just text Custom Personality Training: Fine-tune AI responses per character Stream Analytics: View metrics, popular clips, and engagement stats Social Features: Follow favorite characters, create watch parties SDK for Creators: Easy integration for content creators to add their own Live2D models 🎨 Built With Frontend: React 19 TypeScript Vite Tailwind CSS 4 Live2D Cubism SDK for Web 5.r.4 LiveKit Components React Supabase JS Client React Router v7 Backend: Python 3.12 FastAPI with Hypercorn (async) LiveKit Python SDK JanitorAI API Fish Audio API Supabase Python Client HTTPX for async HTTP requests Infrastructure: Supabase (Auth, Database, Real-time) LiveKit (WebRTC, Real-time Communication) JanitorAI (LLM API)

## README (from the GitHub repository)

No README available.

## Detected evidence (automated analysis)

Indexed codebase: 5866 recognized source files, 71121 KB.
- C (language) — detected in the code
- C++ (language) — detected in the code
- CSS (language) — detected in the code
- Express (technology) — detected in the code
- Flask (technology) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- Next.js (technology) — detected in the code
- OpenAI (technology) — detected in the code
- Python (language) — detected in the code
- React (technology) — detected in the code
- Supabase (technology) — detected in the code
- Tailwind CSS (technology) — detected in the code
- TypeScript (language) — detected in the code

## Codebase structure (from repository index)

### Files (120 of 7803)

```
.DS_Store
.gitignore
kawaai-backend/app.py
kawaai-backend/audio_stream_test.py
kawaai-backend/kawaai-backend-env/bin/activate
kawaai-backend/kawaai-backend-env/bin/activate.csh
kawaai-backend/kawaai-backend-env/bin/activate.fish
kawaai-backend/kawaai-backend-env/bin/Activate.ps1
kawaai-backend/kawaai-backend-env/bin/coloredlogs
kawaai-backend/kawaai-backend-env/bin/distro
kawaai-backend/kawaai-backend-env/bin/dotenv
kawaai-backend/kawaai-backend-env/bin/f2py
kawaai-backend/kawaai-backend-env/bin/flask
kawaai-backend/kawaai-backend-env/bin/httpx
kawaai-backend/kawaai-backend-env/bin/humanfriendly
kawaai-backend/kawaai-backend-env/bin/isympy
kawaai-backend/kawaai-backend-env/bin/normalizer
kawaai-backend/kawaai-backend-env/bin/numpy-config
kawaai-backend/kawaai-backend-env/bin/onnxruntime_test
kawaai-backend/kawaai-backend-env/bin/openai
kawaai-backend/kawaai-backend-env/bin/pip
kawaai-backend/kawaai-backend-env/bin/pip3
kawaai-backend/kawaai-backend-env/bin/pip3.12
kawaai-backend/kawaai-backend-env/bin/pyav
kawaai-backend/kawaai-backend-env/bin/python
kawaai-backend/kawaai-backend-env/bin/python3
kawaai-backend/kawaai-backend-env/bin/python3.12
kawaai-backend/kawaai-backend-env/bin/tqdm
kawaai-backend/kawaai-backend-env/bin/watchfiles
kawaai-backend/kawaai-backend-env/bin/websockets
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/_sounddevice_data/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/_sounddevice_data/portaudio-binaries/libportaudio.dylib
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/_sounddevice_data/portaudio-binaries/README.md
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/_sounddevice.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/INSTALLER
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/licenses/LICENSE
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/licenses/NOTICE
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/METADATA
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/RECORD
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles-25.1.0.dist-info/WHEEL
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/base.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/os.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/ospath.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/tempfile/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/tempfile/temptypes.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/threadpool/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/threadpool/binary.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/threadpool/text.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiofiles/threadpool/utils.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs-2.6.1.dist-info/INSTALLER
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs-2.6.1.dist-info/LICENSE
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs-2.6.1.dist-info/METADATA
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs-2.6.1.dist-info/RECORD
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs-2.6.1.dist-info/WHEEL
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/_staggered.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/impl.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/py.typed
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/types.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohappyeyeballs/utils.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/INSTALLER
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/licenses/LICENSE.txt
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/METADATA
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/RECORD
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/top_level.txt
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp-3.13.1.dist-info/WHEEL
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_cookie_helpers.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_cparser.pxd
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_find_header.pxd
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_headers.pxi
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_http_parser.pyx
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_http_writer.pyx
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/__init__.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/.hash/mask.pxd.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/.hash/mask.pyx.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/.hash/reader_c.pxd.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/helpers.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/mask.pxd
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/mask.pyx
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/models.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/reader_c.pxd
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/reader_c.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/reader_py.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/reader.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/_websocket/writer.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/.hash/_cparser.pxd.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/.hash/_find_header.pxd.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/.hash/_http_parser.pyx.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/.hash/_http_writer.pyx.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/.hash/hdrs.py.hash
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/abc.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/base_protocol.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_exceptions.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_middleware_digest_auth.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_middlewares.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_proto.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_reqrep.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client_ws.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/client.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/compression_utils.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/connector.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/cookiejar.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/formdata.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/hdrs.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/helpers.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/http_exceptions.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/http_parser.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/http_websocket.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/http_writer.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/http.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/log.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/multipart.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/payload_streamer.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/payload.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/py.typed
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/pytest_plugin.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/resolver.py
kawaai-backend/kawaai-backend-env/lib/python3.12/site-packages/aiohttp/streams.py
[7683 more files omitted for size]
```

### Dependencies

- kawaai-backend/payment/package.json: @supabase/supabase-js@^2.39.3, cors@^2.8.5, dotenv@^16.3.1, express@^4.18.2, nodemon@^3.0.2, stripe@^14.12.0
- kawaai-backend/requirements.txt: aiofiles@==25.1.0, aiohappyeyeballs@==2.6.1, aiohttp@==3.13.1, aiosignal@==1.4.0, annotated-types@==0.7.0, anyio@==4.11.0, attrs@==25.4.0, av@==15.1.0, blinker@==1.9.0, certifi@==2025.10.5, cffi@==2.0.0, charset-normalizer@==3.4.4, click@==8.3.0, colorama@==0.4.6, coloredlogs@==15.0.1, distro@==1.9.0, docstring_parser@==0.17.0, eval_type_backport@==0.2.2, fish-audio-sdk@==2025.6.3, Flask@==3.1.2, flatbuffers@==25.9.23, frozenlist@==1.8.0, googleapis-common-protos@==1.71.0, grpcio@==1.76.0, h11@==0.16.0, httpcore@==1.0.9, httpx@==0.28.1, httpx-ws@==0.8.0, humanfriendly@==10.0, idna@==3.11, importlib_metadata@==8.7.0, itsdangerous@==2.2.0, Jinja2@==3.1.6, jiter@==0.11.1, livekit@==1.0.17, livekit-agents@==1.2.15, livekit-api@==1.0.7, livekit-blingfire@==1.0.0, livekit-plugins-openai@==1.2.15, livekit-plugins-silero@==1.2.15, livekit-protocol@==1.0.8, MarkupSafe@==3.0.3, mpmath@==1.3.0, multidict@==6.7.0, nest-asyncio@==1.6.0, numpy@==2.3.4, onnxruntime@==1.23.2, openai@==2.6.1, opentelemetry-api@==1.38.0, opentelemetry-exporter-otlp@==1.38.0, opentelemetry-exporter-otlp-proto-common@==1.38.0, opentelemetry-exporter-otlp-proto-grpc@==1.38.0, opentelemetry-exporter-otlp-proto-http@==1.38.0, opentelemetry-proto@==1.38.0, opentelemetry-sdk@==1.38.0, opentelemetry-semantic-conventions@==0.59b0, ormsgpack@==1.11.0, packaging@==25.0, pillow@==12.0.0, prometheus_client@==0.23.1, propcache@==0.4.1, protobuf@==6.33.0, psutil@==7.1.1, PyAudio@==0.2.14, pycparser@==2.23, pydantic@==2.12.3, pydantic_core@==2.41.4, PyJWT@==2.10.1, python-dotenv@==1.1.1, requests@==2.32.5, sniffio@==1.3.1, sounddevice@==0.5.3, sympy@==1.14.0, tqdm@==4.67.1, types-protobuf@==6.32.1.20250918, typing_extensions@==4.15.0, typing-inspection@==0.4.2, urllib3@==2.5.0, watchfiles@==1.1.1, websockets@==15.0.1, Werkzeug@==3.1.3, wsproto@==1.2.0, yarl@==1.22.0, zipp@==3.23.0
- kawaai-frontend/CubismSdkForWeb-5-r.4/Framework/package.json: @eslint/js@^9.26.0, eslint@^9.26.0, eslint-config-prettier@^10.1.5, eslint-plugin-prettier@^5.4.0, prettier@^3.5.3, rimraf@^6.0.1, typescript@^5.8.3, typescript-eslint@^8.32.0
- kawaai-frontend/CubismSdkForWeb-5-r.4/Samples/TypeScript/Demo/package.json: @eslint/js@^9.26.0, eslint@^9.26.0, eslint-config-prettier@^10.1.5, eslint-plugin-prettier@^5.4.0, fsevents@*, prettier@^3.5.3, rimraf@^6.0.1, typescript@^5.8.3, typescript-eslint@^8.32.0, vite@^6.3.5
- kawaai-frontend/package.json: @eslint/js@^9.36.0, @livekit/agents@^1.0.12, @livekit/components-react@^2.9.15, @livekit/components-styles@^1.1.6, @supabase/supabase-js@^2.76.1, @tailwindcss/vite@^4.1.16, @types/node@^24.6.0, @types/react@^19.2.2, @types/react-dom@^19.2.2, @vitejs/plugin-react@^5.0.4, eslint@^9.36.0, eslint-plugin-react-hooks@^5.2.0, eslint-plugin-react-refresh@^0.4.22, globals@^16.4.0, livekit-client@^2.15.13, livekit-server-sdk@^2.14.0, lucide-react@^0.548.0, react@^19.1.1, react-dom@^19.1.1, react-router-dom@^7.9.4, tailwindcss@^4.1.16, typescript@~5.9.3, typescript-eslint@^8.45.0, vite@^7.1.7
- kawaai-payment-site/package.json: next@latest, react@latest, react-dom@latest

### Recent commits (newest first)

- better live2d model
- working chat
- Merge branch 'main' of https://github.com/c25kenneth/kawa-ai WORKING VOICE AI
- working voice agent
- Merge pull request #2 from 2Ahmedsquared2/patch-2
- Merge pull request #1 from 2Ahmedsquared2/patch-1
- merge
- Create package.json for payment microservice
- Initialize package.json for Kawaai payment site
- added animations + characters
- finished livestream feature + chat
- got dynamic room functionality to work
- added chat functionality + join room
- added functionality to add streamer to supabase
- d
- Changed frontend + added supabase setup
- Basic frontend + audio stream
- added requirements file
- Changed python-env version
- added python dependencies

## Key source files (fetched from GitHub, selected and truncated for size)

### kawaai-frontend/CubismSdkForWeb-5-r.4/NOTICE.md

```markdown
[English](NOTICE.md) / [日本語](NOTICE.ja.md)

---

# Notices

## [Caution] Precautions for updating to Cubism 4 SDK for Web R1 or later

With the release of the official version of the Cubism 4 SDK for Web R1 from the previous beta version, the structure of packages and repositories has been changed to improve usability.

The reason for this change is to operate without changing the structure of Cubism 4 SDK for Native, and to avoid mixing files that do not require management by users.

Details on structural changes and how to update from projects prior to Cubism 4 SDK for Web beta2 are described in the [Cubism SDK Manual]. Please be sure to check it when updating.

[Cubism SDK Manual]: https://docs.live2d.com/cubism-sdk-manual/warning-for-cubism4-web-r1-update/


## [Caution] About the duplicate declaration error in dependent packages (2023-02-23)

A duplicate declaration error may occur due to `@types/node` among the dependency packages used in the Cubism 4 SDK for Web Samples.

We have confirmed that this can be resolved by one of the following procedures.

### Solution 1: Use npm-check-updates

1. Navigate to the `/Samples/TypeScript/Demo` directory in Terminal.
1. Execute the command `npm i -g npm-check-updates`.
1. Execute the command `ncu`.

### Solution 2: Reinstall @types/node explicitly

1. Navigate to the `/Samples/TypeScript/Demo` directory in Terminal.
1. Execute the command `npm uninstall @types/node`.
1. Execute the command `npm install @types/node`.

---

©Live2D

```

### kawaai-frontend/CubismSdkForWeb-5-r.4/NOTICE.ja.md

```markdown
[English](NOTICE.md) / [日本語](NOTICE.ja.md)

---

# お知らせ

## [注意事項] Cubism 4 SDK for Web R1 以降へのアップデートに伴う注意

Cubism 4 SDK for Web R1 にてそれ以前のベータ版から正式版のリリースに伴い、
利便性向上のためパッケージ及びリポジトリの構造変更がおこなわれました。

この変更は Cubism 4 SDK for Native と構造を変えずに運用がなされるほか、
ユーザに管理が不必要なファイルが混在することを避けることが理由です。

構造の変更点、及び Cubism 4 SDK for Web beta2 以前のプロジェクトからの更新方法に関して、
[Cubism SDK Manual] に詳細を記載しています。アップデートを行う際は必ずご確認ください。

[Cubism SDK Manual]: https://docs.live2d.com/cubism-sdk-manual/warning-for-cubism4-web-r1-update/

## [注意事項] 依存パッケージでの宣言重複エラーについて (2023-02-23)

Cubism 4 SDK for Web Samples で利用されている依存パッケージのうち `@types/node` に起因する、
宣言重複のエラーが発生する場合があります。

こちらは以下のいずれかの手順で解決が可能であることを確認しております。

### 解決策1: npm-check-updatesを利用する方法

1. ターミナルで `/Samples/TypeScript/Demo` ディレクトリに移動する。
1. コマンド `npm i -g npm-check-updates` を実行する。
1. コマンド `ncu` を実行する。

### 解決策2: @types/node明示的にインストールし直す方法

1. ターミナルで `/Samples/TypeScript/Demo` ディレクトリに移動する。
1. コマンド `npm uninstall @types/node` を実行する。
1. コマンド `npm install @types/node` を実行する。

---

©Live2D

```

### kawaai-payment-site/package.json

```
{
  "name": "kawaai-payment-site",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "next": "latest",
    "react": "latest",
    "react-dom": "latest"
  }
}

```

### kawaai-frontend/package.json

```
{
  "name": "kawaai-frontend",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint .",
    "preview": "vite preview"
  },
  "dependencies": {
    "@livekit/agents": "^1.0.12",
    "@livekit/components-react": "^2.9.15",
    "@livekit/components-styles": "^1.1.6",
    "@supabase/supabase-js": "^2.76.1",
    "@tailwindcss/vite": "^4.1.16",
    "livekit-client": "^2.15.13",
    "livekit-server-sdk": "^2.14.0",
    "lucide-react": "^0.548.0",
    "react": "^19.1.1",
    "react-dom": "^19.1.1",
    "react-router-dom": "^7.9.4",
    "tailwindcss": "^4.1.16"
  },
  "devDependencies": {
    "@eslint/js": "^9.36.0",
    "@types/node": "^24.6.0",
    "@types/react": "^19.2.2",
    "@types/react-dom": "^19.2.2",
    "@vitejs/plugin-react": "^5.0.4",
    "eslint": "^9.36.0",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-react-refresh": "^0.4.22",
    "globals": "^16.4.0",
    "typescript": "~5.9.3",
    "typescript-eslint": "^8.45.0",
    "vite": "^7.1.7"
  }
}

```

### kawaai-backend/requirements.txt

```
aiofiles==25.1.0
aiohappyeyeballs==2.6.1
aiohttp==3.13.1
aiosignal==1.4.0
annotated-types==0.7.0
anyio==4.11.0
attrs==25.4.0
av==15.1.0
blinker==1.9.0
certifi==2025.10.5
cffi==2.0.0
charset-normalizer==3.4.4
click==8.3.0
colorama==0.4.6
coloredlogs==15.0.1
distro==1.9.0
docstring_parser==0.17.0
eval_type_backport==0.2.2
fish-audio-sdk==2025.6.3
Flask==3.1.2
flatbuffers==25.9.23
frozenlist==1.8.0
googleapis-common-protos==1.71.0
grpcio==1.76.0
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
httpx-ws==0.8.0
humanfriendly==10.0
idna==3.11
importlib_metadata==8.7.0
itsdangerous==2.2.0
Jinja2==3.1.6
jiter==0.11.1
livekit==1.0.17
livekit-agents==1.2.15
livekit-api==1.0.7
livekit-blingfire==1.0.0
livekit-plugins-openai==1.2.15
livekit-plugins-silero==1.2.15
livekit-protocol==1.0.8
MarkupSafe==3.0.3
mpmath==1.3.0
multidict==6.7.0
nest-asyncio==1.6.0
numpy==2.3.4
onnxruntime==1.23.2
openai==2.6.1
opentelemetry-api==1.38.0
opentelemetry-exporter-otlp==1.38.0
opentelemetry-exporter-otlp-proto-common==1.38.0
opentelemetry-exporter-otlp-proto-grpc==1.38.0
opentelemetry-exporter-otlp-proto-http==1.38.0
opentelemetry-proto==1.38.0
opentelemetry-sdk==1.38.0
opentelemetry-semantic-conventions==0.59b0
ormsgpack==1.11.0
packaging==25.0
pillow==12.0.0
prometheus_client==0.23.1
propcache==0.4.1
protobuf==6.33.0
psutil==7.1.1
PyAudio==0.2.14
pycparser==2.23
pydantic==2.12.3
pydantic_core==2.41.4
PyJWT==2.10.1
python-dotenv==1.1.1
requests==2.32.5
sniffio==1.3.1
sounddevice==0.5.3
sympy==1.14.0
tqdm==4.67.1
types-protobuf==6.32.1.20250918
typing-inspection==0.4.2
typing_extensions==4.15.0
urllib3==2.5.0
watchfiles==1.1.1
websockets==15.0.1
Werkzeug==3.1.3
wsproto==1.2.0
yarl==1.22.0
zipp==3.23.0

```

### kawaai-backend/payment/package.json

```
{
  "name": "payment-microservice",
  "version": "1.0.0",
  "description": "Express server for Stripe and Sui BoltPay integration.",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js"
  },
  "dependencies": {
    "express": "^4.18.2",
    "stripe": "^14.12.0",
    "@supabase/supabase-js": "^2.39.3",
    "dotenv": "^16.3.1",
    "cors": "^2.8.5"
  },
  "devDependencies": {
    "nodemon": "^3.0.2"
  }
}

```

### kawaai-frontend/CubismSdkForWeb-5-r.4/Framework/package.json

```
{
  "private": true,
  "scripts": {
    "build": "tsc",
    "test": "tsc --noEmit",
    "lint": "eslint",
    "lint:fix": "eslint --fix",
    "clean": "rimraf dist"
  },
  "devDependencies": {
    "@eslint/js": "^9.26.0",
    "eslint": "^9.26.0",
    "eslint-config-prettier": "^10.1.5",
    "eslint-plugin-prettier": "^5.4.0",
    "prettier": "^3.5.3",
    "rimraf": "^6.0.1",
    "typescript": "^5.8.3",
    "typescript-eslint": "^8.32.0"
  }
}

```

### kawaai-frontend/CubismSdkForWeb-5-r.4/Samples/TypeScript/Demo/package.json

```
{
  "private": true,
  "scripts": {
    "start": "node copy_resources.js && vite --host",
    "build": "tsc --noEmit && node copy_resources.js && vite build --mode development",
    "build:prod": "node copy_resources.js && vite build",
    "copy_resources": "node copy_resources.js",
    "test": "tsc --noEmit",
    "lint": "eslint",
    "lint:fix": "eslint --fix",
    "serve": "vite preview --port 5000 --host",
    "clean": "rimraf dist"
  },
  "devDependencies": {
    "@eslint/js": "^9.26.0",
    "eslint": "^9.26.0",
    "eslint-config-prettier": "^10.1.5",
    "eslint-plugin-prettier": "^5.4.0",
    "prettier": "^3.5.3",
    "rimraf": "^6.0.1",
    "typescript": "^5.8.3",
    "typescript-eslint": "^8.32.0",
    "vite": "^6.3.5"
  },
  "optionalDependencies": {
    "fsevents": "*"
  }
}

```

### kawaai-frontend/src/main.tsx

```typescript
import { createRoot } from 'react-dom/client'
import App from './App.tsx'

createRoot(document.getElementById('root')!).render(
    <App />
)

```

### kawaai-frontend/src/App.tsx

```typescript
import AuthPage from "./screens/Authenticate"
import './index.css';
import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom";
import ProtectedRoute from "./components/ProtectedRoute"
import HomePage from "./screens/HomePage";
import LiveStreamViewer from "./screens/VideoStream";
import CreateStream from "./screens/CreateStream";
import TextOnlyLivestream from "./screens/VideoStream";
import StreamReplay from "./screens/StreamReplay";
import Live2DTest from "./screens/Live2DTest";
// import StartStreamPage from './screens/StartStream';

function App() {

  return (
      <BrowserRouter>
      <Routes>
        <Route path="/auth" element={<AuthPage />} />
        <Route 
          path="/home" 
          element={
            <ProtectedRoute>
              <HomePage />
            </ProtectedRoute>
          } 
        />
        <Route 
          path="/start-stream" 
          element={
            <ProtectedRoute>
              <CreateStream />
            </ProtectedRoute>
          } 
        />
        <Route path="/stream/:roomId" element={<TextOnlyLivestream />} />
        <Route 
          path="/video-stream" 
          element={
            <ProtectedRoute>
              <LiveStreamViewer />
            </ProtectedRoute>
          } 
        />

        <Route 
          path="/replay/:roomId" 
          element={
            <ProtectedRoute>
              <StreamReplay />
            </ProtectedRoute>
          } 
        />
        <Route 
          path="/live2d-test" 
          element={
            <ProtectedRoute>
              <Live2DTest />
            </ProtectedRoute>
          } 
        />
        <Route path="/" element={<Navigate to="/auth" />} />
      </Routes>
    </BrowserRouter>
  )
}

export default App

```

[5387 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]