Skip to content

About

AR-powered furniture visualization app (React Native/Expo) with an AI-driven, sentiment-analysis-based recommendation engine. 24 passing unit tests.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

AR Furniture

An Expo / React Native app that lets a shopper preview furniture in their own room using AR, and recommends products using a sentiment-analysis-driven recommendation engine built from customer reviews.

Status: Work in progress. Core recommendation logic is implemented and unit-tested; the AR and UI layers are built but not yet verified on a physical device. See Project Status below. Feedback, issues, and pull requests are very welcome.


Overview

AR Furniture combines two features:

  • AR Visualization — place a 3D model of a product in your real room using your phone's camera, so you can judge scale, fit, and style before buying.
  • Personalized Recommendations — a lexicon-based sentiment analysis engine scores product reviews, then blends that with the user's style preferences, budget, and product popularity to produce a ranked, explainable list of recommendations.

The app currently runs entirely on local sample data (no backend yet), so it can be cloned and explored immediately without any setup beyond npm install.


How It Works

Recommendation pipeline

reviews.json (free text)
      │
      ▼
analyzeSentiment()          — tokenizes text, scores against a polarity lexicon,
                               handles negation ("not comfortable") and
                               intensifiers ("very comfortable")
      │
      ▼
aggregateProductSentiment() — blends lexicon sentiment with each review's
                               star rating into one 0–1 score per product
      │
      ▼
getRecommendations()        — combines sentiment + style-tag affinity +
                               budget fit + popularity into a single
                               weighted, explainable score
      │
      ▼
Ranked list, with a human-readable reason shown for each recommendation

AR pipeline

User taps "View in your room"
      │
      ▼
resolveArMode()  — checks device type and build (physical device with a
                    dev-client build vs. simulator/Expo Go)
      │
      ├── real device + dev client  → ARViewer (ARKit/ARCore via ViroReact,
      │                                real camera-based plane detection
      │                                and object placement)
      │
      └── simulator / Expo Go       → MockARViewer (touch-to-rotate 3D
                                       preview via expo-three, no camera
                                       required)

A manual toggle on the AR screen also lets a user switch between modes directly.


Data

There is currently no backend API — the app runs against local JSON fixtures in src/data/:

File Contents
products.json 8 sample products across 7 categories
reviews.json 12 sample free-text reviews with star ratings
users.json 2 sample user profiles with budget ranges, style tags, and interaction history

UserContext signs the app in as the first sample user and records interactions (views, AR try-ons, etc.) in memory as you navigate; this state resets on reload.

The Product, Review, and User types in src/types/index.ts are shaped to match a plausible REST API, so swapping the local JSON imports for real HTTP calls later is a contained change rather than a rewrite.


Tools & Stack

Layer Technology
App framework React Native (Expo SDK 51)
Language TypeScript
Navigation React Navigation (native stack)
AR (real) ViroReact (ARKit / ARCore)
AR (fallback/preview) expo-three, expo-gl
Testing Jest, ts-jest

Project Structure

AR-DecoVision/
├── App.tsx
├── app.json
├── src/
│   ├── ar/                 # ARViewer (real), MockARViewer (preview), mode resolution
│   ├── components/         # ProductCard, StarRating
│   ├── context/            # UserContext (in-memory session state)
│   ├── data/                # products.json, reviews.json, users.json
│   ├── navigation/           # AppNavigator
│   ├── recommendation/      # sentiment analysis + recommendation engine
│   ├── screens/               # Home, ProductDetail, AR, Recommendations
│   └── types/                  # shared TypeScript types
└── __tests__/                   # Jest unit tests

Getting Started

git clone https://github.com/Humayun-98/AR-DecoVision
cd AR-DecoVision
npm install
npx expo start

Press i for the iOS simulator, a for the Android emulator, or scan the QR code with the Expo Go app on your phone.

Trying AR

  • Preview mode (no camera, works in Expo Go or a simulator): open any product → "View in your room (AR)". This runs automatically wherever a real camera-based AR session isn't available — drag to rotate the model.
  • Real camera AR (requires a physical device): ViroReact's native module isn't available inside Expo Go, so this requires a custom dev client:
    npx expo install expo-dev-client
    eas build --profile development --platform ios   # or --platform android
    Install the resulting build on a physical device, then use "View in your room (AR)" as normal.

Testing

npm test              # run the unit test suite
npm run test:coverage # run with a coverage report
npm run typecheck      # TypeScript check, no emit

The current suite covers the sentiment analysis engine, the recommendation engine, and the AR mode resolution logic — 24 tests, all passing. UI and native AR components still need to be verified manually on a device or simulator (see below).


Dependencies

Core dependencies are listed in package.json. Notable version constraints worth knowing if you touch AR-related packages:

  • three is pinned to 0.145.0 to satisfy expo-three's peer dependency.
  • @reactvision/react-viro is pinned to 2.41.6, the latest release compatible with React Native 0.74 / Expo SDK 51. Newer ViroReact releases require React Native 0.81+.

A plain npm install (no --legacy-peer-deps flag) installs cleanly with these pins.


Project Status

This project is under active development. Here's where things currently stand:

  • ✅ Sentiment analysis engine — implemented, unit-tested
  • ✅ Recommendation engine — implemented, unit-tested
  • ✅ AR mode resolution logic — implemented, unit-tested
  • 🟡 Real AR viewer (ARKit/ARCore via ViroReact) — implemented, not yet verified on a physical device
  • 🟡 Mock/preview 3D viewer — implemented, not yet visually verified on a device or simulator
  • 🟡 Screens & navigation — implemented, not yet visually verified
  • ⬜ Backend API — not started, currently using local sample data
  • ⬜ Persistence layer — not started, session state is in-memory only

Known limitations

  • The sentiment lexicon is small and hand-built; it won't catch sarcasm or vocabulary outside its word list.
  • The mock 3D viewer currently renders a placeholder shape rather than the real product mesh, pending hosted .glb model assets.
  • There's no persistence yet — interactions recorded during a session are lost on app reload.

Feedback

This is very much a work in progress, and feedback is genuinely welcome — whether it's a bug, a design critique, or a suggestion for the recommendation scoring. Please open an issue or a pull request.

About

AR-powered furniture visualization app (React Native/Expo) with an AI-driven, sentiment-analysis-based recommendation engine. 24 passing unit tests.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages