Find subleases, navigate transit, and connect with fellow interns β all in one place. Built for interns, by interns.
π Live: internnest-web.pages.dev
College students doing 8β12 week internships in unfamiliar cities have to find short-term housing on their own. It's stressful, time-consuming, and isolating β and generic listing sites aren't built for sublease-length stays, for trusting a stranger sight-unseen, or for the social side of moving somewhere new alone.
Validated with 50 customer-discovery interviews (students across MIT, Stanford, Georgia Tech, UT, and more β plus 30 companies). See
docs/design-doc.md.
InternNest connects interns with verified short-term listings and a community of peers in the same city, so they can focus on the internship instead of the logistics.
| Feature | Description | |
|---|---|---|
| ποΈ | City hub | Pick your internship city; see avg rent, listing count, and community size at a glance. Covers SF, NYC, Boston, Chicago, Atlanta, Seattle, LA, and DC. |
| π | Housing | Verified sublease listings with price, dates, amenities, commute-to-company, neighborhood, and poster β filterable by size, area, and budget. |
| ποΈ | Neighborhoods | Per-city neighborhood guides: vibe, avg rent, commute/safety/walkability scores, and what each is best for. |
| π | Transit | How to get around each city β modes, costs, and intern tips. |
| π₯ | Community | A verified-intern Discord (city channels for housing, roommates, transit & meetups) plus local interest groups. |
| π | Sign-up / onboarding | Quick-start profile (school .edu email, city, company, dates, budget) to personalize matches. |
| β | Trust-first | Verified-student model, verification badges, and "never pay off-platform" guardrails baked into the design. |
| Layer | Choice |
|---|---|
| Framework | Next.js 14 (App Router) β built as a static export (output: "export") |
| Language | TypeScript |
| UI | React 18; Tailwind + inline styles; Leaflet for maps |
| Backend | Supabase β Auth (.edu verification), Postgres (listings/profiles), Storage (lease/photo uploads). Talks to it directly from the client; no custom server. |
| Fallback | Built-in lib/fallback-data.ts so the app runs with zero backend config |
| Hosting | Cloudflare Pages (static) β live at internnest-web.pages.dev |
| App | Installable PWA (add to home screen, full-screen, app icon) |
# clone
gh repo clone NhiTech/internnest-web
cd internnest-web
# install
npm install
# run (works with no database β uses fallback data)
npm run devOpen http://localhost:3000.
The app runs on bundled fallback data out of the box. To use a live database, add a .env.local:
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-keyIf these aren't set, lib/data.ts automatically falls back to lib/fallback-data.ts β so nothing
breaks.
There's no custom server β the static frontend talks directly to Supabase:
- Auth β
.eduverification via email OTP (6-digit code). - Postgres β
listings, and (planned) profiles / inquiries. Seedocs/supabase-setup.mdfor the schema + RLS. - Storage β buckets for listing photos and (private) lease documents.
Until the tables exist, listings/profiles live in the browser (localStorage) and cities/neighborhoods come from the fallback data.
Static export hosted on Cloudflare Pages:
- Build command:
npm run build - Output directory:
out - Live: internnest-web.pages.dev
internnest-web/
βββ app/
β βββ layout.tsx # root layout + metadata
β βββ page.tsx # home: city selector, stats, and the 4 tabs
β βββ signup/page.tsx # sign-up / onboarding flow
βββ lib/
β βββ data.ts # data access (Supabase β fallback)
β βββ supabase.ts # Supabase client (null when unconfigured)
β βββ fallback-data.ts # cities, listings, neighborhoods, transit, groups
βββ docs/
β βββ design-doc.md # full product & technical design doc
βββ discord-setup/
βββ setup.mjs # one-command builder for the InternNest Discord
βββ README.md # Discord setup instructions
A moderated, verified-interns-only Discord organized by city (channels for housing, roommates,
transit, neighborhoods, and social) with a scam-guard AutoMod rule. The
discord-setup/ folder has an idempotent setup.mjs script that builds the whole
server structure in one run.
β οΈ UpdateDISCORD_INVITEinapp/page.tsxwith your real server invite link.
- Core browse experience (cities, listings + filters, neighborhoods, transit, community)
- Sign-up / onboarding form
- Discord community + setup script
- Supabase Auth with
.eduverification wired to sign-up - Post-a-Listing write path (verified students only)
- Save / favorites (per-user)
- Roommate matching (lifestyle-based)
- Employer (B2B) outreach with real usage data
See docs/design-doc.md for the full plan, customer discovery, business model,
and trust/safety design.
InternNest Β· Built for interns, by interns πͺΊ