Project Info
Inspiration
“Mirror, mirror on the wall… who’s the best dressed of them all?” We realized that we already ask our mirrors questions every day. Does this look good? Is this too formal? Is this giving the right vibe? The mirror never answers. That gap inspired MIRA. We believed that if smart TVs and smart homes are becoming standard, smart mirrors are next. Instead of building another shopping app, we wanted to transform something you already use daily into something interactive. MIRA was born from the idea that your mirror could be your stylist, your honest friend, and your fashion guide all at once.
What it does
MIRA is an AI powered smart mirror that helps you decide what to wear and what to buy. You stand in front of it and see clothes visually layered onto your reflection. You can get real time styling feedback, personalized recommendations based on your shopping history, emails, and calendar, and direct links to purchase items. At the center is Mira, an expressive assistant with personality who talks to you, gives feedback, and makes the experience feel natural and conversational instead of transactional.
How we built it
We combined hardware, computer vision, and multiple AI systems into one integrated experience. On the hardware side, we assembled a two way mirror with a vertically mounted monitor behind it and an embedded webcam for real time capture. On the software side: Frontend built with React and a mirror optimized interface Gesture detection using MediaPipe Real time 2D clothing visualization over live video OpenAI powered agent for reasoning and styling ElevenLabs for voice synthesis Google OAuth for secure email scraping MCP server with Poke integration for shopping data Search integrations using tools like Perplexity Sonar and Serp APIs Mobile onboarding app deployed on Vercel We engineered a custom real time animated assistant by dynamically blending emotional states to create a more expressive presence.
Challenges we ran into
One major challenge was clothing visualization. We initially explored full 3D garment meshing and rendering, but it proved too complex for our timeframe. We pivoted to a 2D overlay system that delivered strong user value while remaining feasible. Another challenge was scraping reliability. Extracting useful signals from emails and calendars—without hallucinating or misinterpreting context—required tightening our pipelines and improving streaming for accuracy and consistency. On the fashion side, the sheer volume of public images made precision critical. We had to give our OpenAI agent very clear instructions on exactly which items to identify, and build structured labels for each category to power accurate, personalized recommendations. Creating emotional presence was also difficult. We needed the assistant to feel expressive and empathetic, not robotic.
Accomplishments we're proud of
Successfully assembling the physical smart mirror hardware Getting real time clothing visualization working Integrating voice input and output seamlessly Building an expressive animated assistant that enables lip sync Creating an end to end scraping and recommendation pipeline and feed it to our magic pipe for users to interact with. We are especially proud that the experience feels natural. It does not feel like using an app. It feels like interacting with your reflection.
What we learned
We learned the importance of prioritization. Not every technically impressive feature belongs in an MVP. We learned that empathy in AI comes from more than intelligence. Voice, timing, and visual expression matter just as much as reasoning. We also learned how complex it is to integrate multiple APIs and systems into one seamless experience. Real time interaction requires careful coordination across hardware, frontend, backend, and AI layers.
What's next
for Mira Explore full 3D garment rendering and body meshing Improve scraping accuracy and personalization depth (potentially gathering information from diverse sources, such as social media) Develop a more advanced multi agent reasoning system Expand the onboarding phone app for users to manage all information input and output of the smart mirror Refine the mirror specific user interface and gestures and have a personalized interface /avatar for each user who remembers their exact personality type and preferences. Deploy and test with real users in household settings Our long term vision is simple. Smart mirrors will become common in homes. When that happens, MIRA will already be there, ready to style you.
Mirrorless
An AI-powered smart mirror that gives personalized outfit recommendations overlaid on your body in real-time. Users onboard via phone (Google OAuth), their purchase history is scraped from Gmail, and AI stylist "Mira" delivers styling advice through a two-way mirror display.
How It Works
- Scan the QR code on the mirror with your phone
- Sign in with Google, take a selfie, and fill out a quick style questionnaire
- Step up to the mirror when it's your turn
- Talk to Mira — she roasts your current outfit, searches for new pieces, and overlays clothing on your body in real-time
- React with gestures — thumbs up/down to like or skip, swipe to browse outfits
- Get your picks saved to your phone when the session ends
Architecture
Phone (Next.js) ──┐
├── Socket.io ──▶ Backend (FastAPI + Python)
Mirror (Next.js) ──┘ │
├── Claude API (Mira agent)
├── Deepgram (STT)
├── ElevenLabs (TTS)
├── Serper.dev (Google Shopping)
├── Gemini (flat lay generation)
└── Neon Postgres (database)
- Frontend: Next.js app serving the mirror display (full-screen kiosk), phone UI (onboarding + dashboard), and admin dashboard. Deployed on Vercel.
- Backend: Python FastAPI with Socket.io for real-time communication. Hosts the Mira agent orchestrator, Gmail scraping, and an MCP server for external AI integrations. Deployed on Render.
- Database: Neon Postgres with dual-mode connections (asyncpg pool in production, Neon HTTP locally).
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js, TypeScript, Tailwind CSS, shadcn/ui |
| Backend | FastAPI, Python 3.11+, Socket.io |
| AI Agent | Claude (Anthropic API), custom event-driven orchestrator |
| Voice | Deepgram streaming STT, ElevenLabs streaming TTS |
| Avatar | Pre-recorded MP4 emotion loops (26 emotions) |
| Body Tracking | MediaPipe BlazePose + MediaPipe Hands |
| Clothing Data | Serper.dev Google Shopping API |
| Image Processing | Gemini (flat lays), rembg (background removal) |
| Database | Neon Postgres |
| Deployment | Vercel (frontend), Render (backend) |
Setup
Prerequisites
- Node.js 18+
- Python 3.11+
- A Neon Postgres database
Frontend
cd frontend
npm install
npm run dev
Backend
cd backend
pip install -r requirements.txt
uvicorn main:app --reload
Environment Variables
Frontend (.env.local):
NEXT_PUBLIC_SOCKET_URL— Backend WebSocket URLNEXT_PUBLIC_GOOGLE_CLIENT_ID— Google OAuth client IDNEXT_PUBLIC_PHONE_URL— Phone onboarding URL (for QR code)
Backend (.env):
DATABASE_URL— Neon Postgres connection stringANTHROPIC_API_KEY— Claude API keySERPER_API_KEY— Serper.dev API keyDEEPGRAM_API_KEY— Deepgram STT keyELEVENLABS_API_KEY— ElevenLabs TTS keyGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET— Google OAuth
Mirror Kiosk Flow
The mirror runs as a full-screen kiosk with four states:
- Attract — QR code and branding, waiting for users to scan
- Waiting — Shows "Up next: [name]" with a 2-minute auto-skip timeout
- Session — Active AI stylist session with voice, gestures, and clothing overlay
- Recap — Session summary with liked items and stats
Project Structure
frontend/ # Next.js app
src/
app/
mirror/ # Mirror display (kiosk)
phone/ # Phone onboarding
admin/ # Admin dashboard
hooks/ # Camera, STT, gestures, pose detection, avatar
components/mirror/ # ClothingCanvas, ProductCarousel, SpeechDisplay, etc.
lib/ # API client, TTS, emotion parser, socket
backend/ # FastAPI server
agent/ # Mira orchestrator, prompts, tools
routers/ # REST endpoints (auth, queue, TTS, admin)
mcp_server/ # MCP server for external AI integrations
scraper/ # Gmail scraping
services/ # Serper, Gemini, background removal
models/ # Pydantic models, DB schemas
migrations/ # Raw SQL migrations
Testing
# Backend
cd backend
pytest
# Frontend
cd frontend
npm test
License
Private repository.
Analysis
View
Metric
- 80
- 78
- 12
- 9
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- SQLIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Node.jsClaimed
- VercelClaimed
11 of 13 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig · Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
28 MB
Source files
825
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
23jmo/mirrorless
1,012 files · 80.6 MB · @ e5faf1a
Structure
Interface
35 files · 3%Screens, components and styles rendered to the user.
API & routing
10 files · 1%Request entry points: routes, handlers and controllers.
Application logic
740 files · 73%Domain rules, services and shared utilities.
+9 moreBackground jobs
3 files · 0%Work run outside a request: tasks, workers and schedules.
Data & schema
26 files · 3%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- HTML70%
- Python27%
- TypeScript1%
- Markdown1%
- JavaScript0%
- CSS0%
- Other (4)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 33- @mediapipe/tasks-vision
- @neondatabase/serverless
- @react-three/drei
- @react-three/fiber
- @types/three
- class-variance-authority
- clsx
- google-auth-library
- libphonenumber-js
- lucide-react
- next
- qrcode.react
- radix-ui
- react
- react-dom
- socket.io-client
- tailwind-merge
- three
- +15 more
backend/requirements.txt
pypi · 21- anthropic
- asyncpg
- beautifulsoup4
- deepgram-sdk
- fastapi
- fastmcp
- google-api-python-client
- google-auth
- google-auth-oauthlib
- httpx
- onnxruntime
- phonenumbers
- pydantic
- pytest
- pytest-asyncio
- python-dotenv
- python-socketio
- rembg
- +3 more
backend/mcp_server/requirements.txt
pypi · 4- asyncpg
- fastmcp
- python-dotenv
- uvicorn[standard]
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.