Project Info
Inspiration
We've all been there, sitting on the floor surrounded by hundreds of screws, mysterious wooden slabs, and an incomprehensible IKEA manual that looks like it was designed by aliens. Assembly manuals are notoriously difficult to follow: tiny diagrams, confusing arrows, and no way to see what the final step should actually look like in 3D space. We wanted to turn this frustrating experience into something intuitive and interactive. What if you could search for any furniture product, automatically get its assembly manual, and see each step visualized in an interactive 3D environment? That's the vision behind assembl3D - your AI-powered copilot for furniture assembly.
What it does
assembl3D is an end-to-end platform that makes furniture assembly effortless: Search & Discover: Search for any furniture product through browsing the 50+ most popular IKEA products, or even paste any product URL. Intelligent Scraping: Our system uses Bright Data's powerful APIs to populate our library for Ikea products and automatically search Google for products (SERP API), scrape product pages to find important metadata, download protected PDFs (Web Unlocker), and collect product images - all without manual work. AI-Powered Processing: Google Gemini AI, analyzes each page of the PDF manual and extracts step-by-step assembly instructions with clear descriptions, required parts with quantities and dimensions, necessary tools, 3D positioning data, and assembly actions with animations. Interactive 3D Visualization: Beautiful 3D viewer displays each assembly step with real-time rendering using React Three Fiber, intuitive step-by-step navigation, visual parts lists, required tools, smooth animations showing how parts fit together, and orbit controls to view from any angle. AI Assembly Assistant: Reka AI-powered chatbot answers questions about the current step, helps identify parts and tools, provides troubleshooting assistance, and gives contextual advice in real-time. As well as helps for cross-checking assembly extraction and spatial positioning of parts.
How we built it
We built a sophisticated PDF processing pipeline that renders pages of 2D drawings in 3D, extracts them as optimized images, and uses MD5 hashing to prevent duplicate processing. Our AI vision system uses carefully crafted prompts to guide Gemini in extracting structured JSON from complex assembly diagrams. For 3D rendering, we generate geometric primitives procedurally from AI-extracted dimensions rather than using pre-made models, enabling us to render any part type on the fly. Our web scraping strategy uses SERP API for product information, with smart rate limiting and caching to optimize costs.
Challenges we ran into
PDF Complexity: Assembly manuals are primarily visual with complex diagrams. We pivoted from text extraction to converting pages to high-resolution images for AI vision analysis, which worked significantly better. Rate Limiting & Costs: Both Gemini (60 requests/minute) and Bright Data (pay-per-request) have limits. We implemented 500ms delays between requests, MD5-based caching to avoid reprocessing, and smart scraping that only downloads new products. Coordinate Systems: Converting PDF positions to Three.js 3D coordinates was complex due to different coordinate systems (Y-up vs Z-up). 3D Performance: Rendering complex assemblies with 50+ parts was initially slow. We optimized using low-poly primitives, frustum culling, lazy loading, and shader optimization to achieve smooth performance.
Accomplishments we're proud of
AI Vision Breakthrough: Successfully getting Gemini to understand complex IKEA diagrams and extract structured data (parts, quantities, sequences, tools) was a major achievement. This opens possibilities for processing any visual instruction manual. Beautiful, Professional UI: Our frontend is polished with smooth animations, fully responsive design, interactive 3D controls, and visual feedback throughout. It looks like a production app, not a hackathon project. Real Product Library: We scraped and cached 50 real IKEA products with actual images, automatically categorized by room type, providing immediate value to users without requiring searches.
What we learned
Technical Skills: We learned how powerful modern vision AI like Gemini is at understanding complex diagrams with proper prompting. Bright Data's APIs taught us professional web scraping - SERP API abstracts search result parsing, Web Unlocker handles proxies and CAPTCHAs automatically, and proper rate limiting with caching is essential for cost management. We deepened our understanding of Three.js, React Three Fiber, geometric primitives, and real-time 3D performance optimization. TypeScript's strong typing across the full stack prevented countless bugs and made refactoring under time pressure much easier. Product & Design: We focused on solving a real, universal problem (confusing manuals) rather than showcasing technology. This user-first mindset guided all decisions. We implemented progressive enhancement so the app works with cached data even when APIs are unavailable. We learned that small details like loading states, smooth transitions, and hover effects dramatically improve perceived quality and professionalism.
What's next
Short-term (3 months): Improve position parsing to extract actual 3D coordinates from diagrams. Add advanced animation system with play/pause controls and sequential part movements. Expand to support multiple furniture brands beyond IKEA. Implement mobile AR integration using WebXR to overlay instructions on real furniture. Add user accounts with progress tracking, notes, and sharing.
assembl3D
Turning 2D Assembly Instructions Alive

An AI-powered platform that transforms static PDF assembly manuals into interactive 3D assembly guides. The system leverages web scraping, computer vision, and 3D rendering to extract structured assembly instructions from furniture manuals and present them in an immersive, step-by-step visualization environment.
Architecture Overview
The application follows a microservices architecture with a Node.js/Express backend and a Next.js 15 frontend. The pipeline consists of four main stages:
- Web Scraping Layer: Uses Bright Data's SERP API to discover product pages, Web Scraper to extract metadata, and Web Unlocker to bypass anti-scraping measures and download PDF manuals
- AI Processing Pipeline: Converts PDF pages to images, feeds them to Google Gemini 2.0 Flash (vision model) for multi-modal analysis, and extracts structured data including assembly steps, part lists, tool requirements, and 3D spatial relationships
- Data Transformation: Transforms AI-extracted data into Three.js-compatible scene graphs with geometric primitives, materials, and animations
- 3D Rendering Engine: React Three Fiber-based viewer with interactive controls, part highlighting, cumulative scene building, and real-time step navigation
Project Structure
assembl3D/
├── backend/ # Express API server
│ ├── brightdata/ # Web scraping module
│ │ ├── scraper.ts # Main scraping orchestrator
│ │ ├── serp-search.ts # SERP API integration
│ │ ├── web-scraper.ts # Product page extraction
│ │ ├── pdf-downloader.ts # PDF download via Web Unlocker
│ │ ├── scrape-top-products.ts # Batch product scraping
│ │ ├── generate-top-50.ts # Top products data generator
│ │ └── types.ts # Scraping interfaces
│ │
│ ├── src/
│ │ ├── api/ # REST API routes
│ │ │ ├── routes.ts # Main route definitions
│ │ │ └── pdf-processor.route.ts # PDF processing endpoint
│ │ │
│ │ ├── gemini/ # AI processing pipeline
│ │ │ ├── processor.ts # Main orchestrator (PDF → steps)
│ │ │ ├── pdf-parser.ts # PDF to image conversion
│ │ │ ├── prompt-builder.ts # Dynamic prompt generation
│ │ │ ├── scene-generator.ts # 3D scene JSON generation
│ │ │ └── types.ts # AI extraction interfaces
│ │ │
│ │ ├── parser_docs/ # PDF processing documentation
│ │ └── index.ts # Express server entry point
│ │
│ ├── data/
│ │ ├── images/ # Cached product images
│ │ ├── top-50-products.json # Pre-scraped product library
│ │ └── output/ # Processed assembly steps (JSON)
│ │
│ └── models/ # 3D model assets (.glb files)
│
├── frontend/ # Next.js 15 application
│ ├── app/ # App Router pages
│ │ ├── page.tsx # Landing page
│ │ ├── assembly/[id]/ # Dynamic assembly viewer route
│ │ ├── api/
│ │ │ ├── assembly-chat/ # Reka AI chatbot API route
│ │ │ └── reka-vision/ # Vision API integration
│ │ └── layout.tsx # Root layout
│ │
│ ├── components/
│ │ ├── assembly/ # Assembly UI components
│ │ │ ├── AssemblyPageClient.tsx # Main assembly page logic
│ │ │ ├── AssemblyChatbot.tsx # AI chatbot interface
│ │ │ ├── StepList.tsx # Step navigation sidebar
│ │ │ ├── PartsList.tsx # Parts list display
│ │ │ ├── ToolsList.tsx # Tools required display
│ │ │ └── StepNavigation.tsx # Previous/Next controls
│ │ │
│ │ ├── viewer/ # 3D rendering components
│ │ │ ├── AssemblyViewer.tsx # Main Three.js viewer
│ │ │ ├── DataDrivenScene.tsx # Scene from JSON data
│ │ │ ├── CumulativeScene.tsx # Progressive scene building
│ │ │ ├── PartHighlighter.tsx # Part interaction system
│ │ │ ├── ViewerControls.tsx # Camera/orbit controls UI
│ │ │ ├── SceneLoader.tsx # Scene data loader
│ │ │ └── [AnimatedPart, Screw, Washer, LBracket].tsx # 3D primitives
│ │ │
│ │ ├── search/ # Search functionality
│ │ │ ├── search-section.tsx # Main search component
│ │ │ ├── SearchResults.tsx # Results display
│ │ │ ├── ProductCard.tsx # Product card UI
│ │ │ └── SearchProgress.tsx # Real-time progress indicator
│ │ │
│ │ ├── library/ # Product library
│ │ │ ├── library-section.tsx # Library grid view
│ │ │ └── library-card.tsx # Product card component
│ │ │
│ │ ├── landing/ # Landing page components
│ │ └── ui/ # Shadcn/ui components
│ │
│ ├── lib/
│ │ ├── api-client.ts # Backend API wrapper
│ │ ├── top-50-data.ts # Product data utilities
│ │ └── utils.ts # Helper functions
│ │
│ └── public/
│ └── products/ # Static product images
Key Directories Explained
backend/brightdata/: Web scraping orchestration layer. Handles product discovery via SERP API, metadata extraction, and PDF acquisition through Bright Data's proxy network.
backend/src/gemini/: AI processing pipeline. Converts PDFs to images, constructs vision prompts, invokes Gemini API, and transforms responses into structured assembly data with 3D geometry.
frontend/components/viewer/: Three.js rendering engine. Implements scene graph construction, cumulative step visualization, part highlighting, and camera controls using React Three Fiber.
frontend/components/assembly/: Assembly instruction UI. Manages step navigation, parts/tools display, and integrates Reka AI chatbot for contextual assistance.
Technical Workflow
- Product Discovery: User submits search query or IKEA product URL → Bright Data SERP API performs semantic search across regional IKEA domains
- Data Extraction: Web Scraper extracts product metadata (name, SKU, image URLs) → Web Unlocker bypasses bot detection and downloads assembly PDF
- PDF Processing: PDF pages converted to base64-encoded images → Each page analyzed by Gemini 2.0 Flash vision model with structured prompts
- AI Extraction: Gemini returns JSON with step descriptions, part quantities, tool requirements, and geometric data (positions, rotations, scales)
- Scene Generation: Extracted data transformed into Three.js scene graph → Primitives (boxes, cylinders) positioned in 3D space → Materials and animations applied
- Rendering: React Three Fiber renders scene → User navigates steps → Cumulative scene builds progressively → Parts highlight on hover/selection
Tech Stack
- Frontend: Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, Shadcn/ui
- 3D Rendering: Three.js, React Three Fiber, @react-three/drei
- Backend: Node.js, Express, TypeScript
- AI/ML: Google Gemini 2.0 Flash (vision), Reka AI Core (chatbot)
- Web Scraping: Bright Data (SERP API, Web Unlocker, Web Scraper, Residential Proxies)
- PDF Processing: pdf-lib, pdfjs-dist, Sharp (image conversion)
Environment Variables
Backend (backend/.env):
GEMINI_API_KEY=your_key
BRIGHT_DATA_API_KEY=your_key
PORT=3001
Frontend (frontend/.env.local):
NEXT_PUBLIC_API_URL=http://localhost:3001
REKA_API_KEY=your_key
Analysis
View
Metric
- 31
- 19
- 8
- 1
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
- CSSIn code
- ExpressIn code
- Google GeminiIn code
- JavaScriptIn code
- Next.jsIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Node.jsClaimed
- PythonClaimed
8 of 10 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
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
322 KB
Source files
90
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
rajshah6/assembl3D
355 files · 73.3 MB · @ 92dba26
Structure
Interface
49 files · 14%Screens, components and styles rendered to the user.
API & routing
5 files · 1%Request entry points: routes, handlers and controllers.
Application logic
163 files · 46%Domain rules, services and shared utilities.
+2 moreData & schema
3 files · 1%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
- TypeScript70%
- Markdown20%
- JavaScript8%
- CSS1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 24- @radix-ui/react-hover-card
- @radix-ui/react-tabs
- @react-three/drei
- @types/three
- class-variance-authority
- clsx
- framer-motion
- lucide-react
- motion
- next
- qss
- react
- react-dom
- tailwind-merge
- three
- +9 more
backend/package.json
npm · 12- @google/generative-ai
- axios
- cheerio
- cors
- dotenv
- express
- pdf-lib
- +5 more
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.