Skip to content

aymenhmaidiwastaken/internship-finder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Internship Finder

A full-stack internship search tool that scrapes job listings from multiple sources across the web.
Type a job title, get autocomplete suggestions, hit search, and browse hundreds of real internship listings.

Next.js 14  ·  FastAPI  ·  Tailwind CSS


Landing Page


Features

Smart Autocomplete

100+ job titles with instant suggestions as you type, localized to your language.

Autocomplete

Multi-Source Scraping

Searches LinkedIn, Adzuna, TheMuse, RemoteOK, and Arbeitnow concurrently — 100-250+ results per query.

Search Results

Filters

Narrow results by location, date posted (24h / 7d / 30d), and remote-only.

Results with filters

8 Languages

Full UI translation with localized job title suggestions.
English, French, Spanish, German, Arabic (RTL), Chinese, Japanese, and Portuguese.

French    Arabic RTL


Tech Stack

Layer Tech
Frontend Next.js 14, React 18, TypeScript, Tailwind CSS, shadcn/ui, Lucide Icons
Backend Python, FastAPI, httpx (async), BeautifulSoup4, Pydantic
Scraping LinkedIn, Adzuna, TheMuse API, RemoteOK API, Arbeitnow API

Quick Start

Prerequisites — Node.js 18+ and Python 3.11+

# Backend
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --port 8001
# Frontend
cd frontend
npm install
npm run dev

Open http://localhost:3000


Project Structure

internship/
├── frontend/                  Next.js app
│   ├── src/
│   │   ├── app/
│   │   │   ├── layout.tsx         Root layout (Inter font, dark mode)
│   │   │   ├── page.tsx           Main search page
│   │   │   └── globals.css        Theme variables
│   │   ├── components/
│   │   │   ├── search-bar.tsx     Autocomplete search input
│   │   │   ├── filters.tsx        Location / date / remote filters
│   │   │   ├── internship-card.tsx Result card with apply button
│   │   │   ├── language-switcher.tsx Language dropdown
│   │   │   ├── results-skeleton.tsx Loading skeleton
│   │   │   └── ui/               shadcn/ui primitives
│   │   ├── lib/
│   │   │   ├── api.ts            API client
│   │   │   ├── i18n.ts           Translations (8 languages)
│   │   │   ├── locale-context.tsx React context for i18n
│   │   │   └── utils.ts          Utilities
│   │   └── types/
│   │       └── internship.ts     TypeScript interfaces
│   └── .env.local                API URL config
├── backend/
│   ├── main.py                   FastAPI app, CORS, httpx client
│   ├── config.py                 Settings (Pydantic)
│   ├── routers/
│   │   └── search.py             /api/search + /api/suggestions
│   ├── services/
│   │   ├── scraper.py            Multi-source concurrent scraper
│   │   └── suggestions.py        Multilingual job title dataset
│   ├── models/
│   │   └── response.py           Pydantic schemas
│   └── requirements.txt
└── demo/                         Generated screenshots

API Endpoints

Method Endpoint Description
GET /api/suggestions?q=soft&locale=en Autocomplete job titles
GET /api/search?query=Software+Engineer&location=NYC&remote_only=true&date_filter=7d Search internships
GET /health Health check

How Scraping Works

All scrapers run concurrently via asyncio.gather(). Results are deduplicated by title+company, filtered by user criteria, and sorted newest-first.

Source Method Typical Results
LinkedIn HTML scraping (public pages) + related query expansion 60-200
Adzuna HTML scraping (3 pages) 10-30
TheMuse JSON API (5 pages, internship level filter) 5-20
RemoteOK JSON API (multiple tag variants) 1-10
Arbeitnow JSON API 0-5

License

MIT

Built by @aymenhmaidiwastaken

About

Full-stack internship search tool that scrapes LinkedIn, Adzuna, TheMuse & more. Smart autocomplete, filters, 8 languages. Built with Next.js + FastAPI.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors