A research-discovery app for Yale students. It helps students find Yale research, source-backed access evidence, and a clear way to reach out to a specific Yale research context.
Live: yalelabs.io · Repo: YaleComputerSociety/ylabs
| Layer | Tech |
|---|---|
| Client | React 19, TypeScript, Vite, TailwindCSS, MUI |
| Server | Express 4, TypeScript, Passport.js (Yale CAS) |
| Database | MongoDB Atlas (Mongoose 8) |
| Search | Meilisearch (keyword plus semantic via OpenAI embedder where appropriate) |
| Package Manager | Yarn 4 via Corepack |
npm install -g corepack@0.36.0
corepack enable
bash scripts/install-all.shCreate server/.env and client/.env - see the Developer Guide for required variables.
# Terminal 1
yarn dev:client
# Terminal 2
yarn dev:serverGo to http://localhost:3000. Use http://localhost:4000/api/dev-login for a local session, or set LOCAL_AUTH_BYPASS=true in server/.env to inject the default devadmin admin user on protected API requests. Leave that flag off when testing the real CAS flow at /api/cas.
/research: y/labs, the primary discovery surface for labs, centers, institutes, faculty projects, archives, collections projects, RA programs, and other Yale research. Cards emphasize profiles, source-backed evidence, and planning context when it exists./programs: Programs & Fellowships, an application board grouped by application status rather than research role: due in the next 30 days, accepting applications, opening soon, the next cycle, no dates posted, and archive review last, soonest action first inside each section. Each card states the award and whether a mentor comes first, and quick filters narrow to open, closing-soon, first-year, no-mentor-needed, or next-cycle programs./dashboard: the private, read-only saved-planning workspace split into two surfaces: a Dashboard of saved research with notes and next steps, and a Program Watch of watched programs with deadlines, accepting status, and eligibility./research/:slug: research-home detail pages with source-backed evidence signals, a constant prompt to reach out and get involved, source-verified current team context when available, sources, and saved research-plan actions.
The old Listings board and public Pathways page are retired. /listings redirects to /research; the standalone practical-routes and posted-opportunity URLs are gone and should resolve as not found; /fellowships redirects to /programs. New work should use ResearchEntity, Signal, and ResearchEntityRelationship concepts instead of recreating listing-style flows.
Backend compatibility remains narrower than the client surface: /api/fellowships remains available only as a deprecated compatibility API with /api/programs as its successor.
Beta is live testing and the release gate. Production promotion requires a recent Beta data-quality run, scraper integrity gate, semantic Research search readiness when semantic search is enabled, backup/rollback confirmation, Meilisearch sync, and smoke tests.
Research search relevance depends on the current researchentities index settings, including curated student-topic aliases and short-query typo guards, so rebuild or sync Meilisearch after changing ResearchEntity source data or index settings.
Scrapers run as short-lived CLI or cron jobs outside the web service process. Do not add a separate always-on scraper server unless runtime limits, queueing, or operator-triggered job requirements make cron insufficient.
If npx playwright crashes with missing system libs (for example libnspr4.so), run Playwright through the local shim:
yarn playwright:run screenshot https://example.com /tmp/example.pngThis command downloads the required shared libraries into ./.playwright-libs and launches Playwright with LD_LIBRARY_PATH pointed to that local copy.
For agent-driven browser exploration, register Playwright MCP through the same shim:
codex mcp add playwright -- <repo>/scripts/with-playwright-libs.sh npx -y @playwright/mcp@latest --output-dir <repo>/tmp/playwright-mcpUse Playwright MCP for exploratory browser passes, then codify durable findings in Playwright scripts or tests such as yarn audit:unified-research.
New developers should start with docs/onboarding.md, a first-week path plus the checklist for whoever is onboarding them. From there, CONTRIBUTING.md is the protocol for landing a change and docs/glossary.md defines the product and pipeline vocabulary the issue tracker assumes. See DEVELOPER_GUIDE.md for full setup instructions, architecture details, environment configuration, and contribution guidelines. Agents should start with AGENTS.md and the focused skills in skills/. See docs/research-model.md for the current model and docs/research-model-refactor.md for the accepted target and migration phases. See docs/scraper-deployment-runbook.md for scraper rollout and cron posture.