Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions landing-page/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,31 @@ root so the waitlist can be deployed on its own.
The public form collects:

- First name (required)
- Email address or phone number (required)
- University (optional)
- Discipline or area of study (optional)
- Consent (required)

Responses are organised in the form owner's linked private Google Sheet. No
waitlist submissions or credentials are stored in this repository.
- Email address (required)
- WhatsApp number (optional)
- University or campus (required)
- Course of study (required)
- Explicit early-access consent (required)

The browser submits JSON to `POST /api/waitlist`. The server validates the
request, applies basic bot and rate-limit controls, and only reports success
after the existing Google Form accepts it. Responses remain organised in the
form owner's linked private Google Sheet. No submissions or credentials are
stored in this repository.

Waitlist data is intended only for pilot planning and contact. Public copy sets
a maximum 12-month retention period, with earlier removal when the pilot closes
or the person withdraws through `privacy@fixars.ai`. The mailbox must be verified
before a production release.

## Course taster

`src/courseClassifier.js` contains the pure course-title classifier. It removes
common degree awards, handles aliases, small spelling differences and joint
courses, and ranks 12 broad course families. Strong matches generate a grouped
skill preview; ambiguous and unknown titles require the person to choose a
family instead of presenting a generic result as fact. Every preview is labelled
as a course-title-only suggestion that still needs evidence.

## Local development

Expand All @@ -35,6 +53,9 @@ npm run build
npm run test:sites
```

The test suite covers course matching, request validation, upstream failure,
same-origin enforcement, body limits, throttling, static assets and SPA routing.

## Deployment scope

The `.openai/hosting.json` file links this subproject to the existing Fixars
Expand Down
2 changes: 1 addition & 1 deletion landing-page/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"dev": "vite",
"build": "vite build && node scripts/prepare-sites-build.mjs",
"preview": "vite preview",
"test:sites": "node --test tests/sites-worker.test.mjs"
"test:sites": "node --test tests/course-classifier.test.mjs tests/sites-worker.test.mjs"
},
"dependencies": {
"@vitejs/plugin-react": "5.0.4",
Expand Down
Loading
Loading