Inspiration
When we moved into our first apartment, we didn't even have a good idea of what we wanted our room to look like. Even when we found the aesthetic, there was a massive struggle to find actually find the furniture for our space. Sightline optimizes all these elements and is the new easiest way to fill our space.
What it does
Sightline allows you to ideate your new apartment through an Pinterest-style moodboard. Then, Sightline plans your layout with multiple variations with 3D modeling and allows you to scroll through and find the perfect layout.
How we built it
Sightline is a Next.js 14 app using the App Router, written in TypeScript and styled with Tailwind, with Framer Motion for the motion work. It's deployed on Vercel.
The 3D room lives in React Three Fiber and drei, on top of three.js. Every piece of furniture, the room shell, the wood and plaster and rug textures, and the lighting environment are all generated in code. No model files, no HDR downloads, so the rendered view works offline.
Auth is Google OAuth through Supabase, using the Supabase SSR client so sessions work server-side.
On the AI side, we're deliberately narrow about what the model is allowed to do. Gemini 2.5 Flash reads room photos into walls, openings and furniture footprints. GPT-4o-mini reads an inspiration picture into a palette and search terms. And Gemini 2.5 Flash Image does the photoreal render pass. But AI never decides whether something fits. Collision, clearance and door-swing checks are deterministic TypeScript in src/lib/layout.ts, and that's the only source of a fit verdict.
Product data comes from SerpAPI for Amazon, Target, Wayfair and IKEA, Apify for Facebook Marketplace and Pinterest, and Unsplash for the inspiration feed. There's also a small Python serverless function on Vercel that pulls confirmed product dimensions.
Challenges we ran into
We struggled a lot with the 3D modeling, where it was difficult to rotate the furniture, and the general spatial orientation for the rendering of the furniture. This included objects overlapping with eachother, pieces being put in logical layouts.
We also struggled a lot with the web scraping feature, where it was difficult to find exact matches between idea board and listings on facebook market.
Accomplishments that we're proud of
At the end of the day, we were really happy with the success of our scraping feature. We've always struggled to find furniture based on inspiration photos and this app successfully accomplishes that more than any other feature.
We're also really happy with the use of image generation to visualize your new space. Often times, it's a gamble whether or not a furniture listing will fit in our space.
What we learned
We learned a lot about 3D rendering, especially working with React Three Fiber and drei on top of three.js to procedurally generate our room scenes without any external model or HDR files. We also picked up several new API technologies along the way, including SerpAPI, Apify, and Unsplash, to pull in real product listings and inspiration imagery. On the AI side, we learned how to keep generative models narrowly scoped, letting Gemini and GPT-4o-mini handle perception and style while deterministic TypeScript logic made every final fit decision.
What's next for Sightline
We want to expand beyond Facebook Marketplace to more secondhand and local sources, support multi-room and shared-space planning, let users save and compare layout variations over time, and tighten the fit-verification loop so recommendations arrive pre-filtered by confirmed dimensions instead of requiring manual checks.
Built With
- apify
- framer
- gemini
- gpt-4o
- nextjs
- react
- serpapi
- supabase
- tailwind
- typescript
- unsplash
- vercel
Log in or sign up for Devpost to join the conversation.