Skip to content

Connect interview requests to the private Google Sheet - #3

Merged
K1aaraa merged 1 commit into
mainfrom
feature/connect-interview-intake
Oct 10, 2026
Merged

K1aaraa merged 1 commit into
mainfrom
feature/connect-interview-intake

Conversation

@K1aaraa

@K1aaraa K1aaraa commented Oct 10, 2026

Copy link
Copy Markdown
Collaborator

Visitors can now request an interview through a branded form on the official Contact page. Requests are validated and posted to the Google Apps Script Web App; the site shows success only after Google confirms the spreadsheet write. The private spreadsheet is not embedded, and no shared secret or private credentials are sent by the browser.

The Contact page provides visible email contact and an expandable interview form with natural-language availability, editable detected timezone, consent, and a honeypot. Homepage and participation CTAs link directly to /contact#schedule-interview and retain the GitHub Pages project prefix.

Validation: ESLint, TypeScript, Prettier, 41 Vitest tests including event classification and interview validation, production static export, and real Apps Script browser acknowledgement tested locally. The owner confirmed the marked local test row in the private spreadsheet. The production Actions variable contains only the public Web App URL. A marked request will be verified again on deployed GitHub Pages after CI succeeds.

The existing dependency lockfile is repaired and production dependencies updated to resolve the deployment audit. Existing unformatted source is normalized for the added Prettier CI check.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-10T01:53:38.749042Z f2d6f2b PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@K1aaraa
K1aaraa merged commit 047b912 into main Oct 10, 2026
4 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f2d6f2b476

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (
typeof data.linkedin !== "string" ||
data.linkedin.length > 500 ||
(data.linkedin && !/^https:\/\/(www\.)?linkedin\.com(?:\/[^\s]*)?\/?$/.test(data.linkedin))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Accept client-valid LinkedIn URLs in the writer

When a user enters a syntactically valid LinkedIn URL with a capitalized scheme or hostname, such as https://LinkedIn.com/in/example, validateInterview accepts it because URL normalizes those components, but this case-sensitive regular expression rejects it. The form therefore passes local validation and then reports the generic save failure even though the input is valid; normalize the URL before checking it or make the server validation match the client.

Useful? React with 👍 / 👎.

Comment on lines +61 to +65
if (
typeof data.timezone !== "string" ||
data.timezone.length > 100 ||
!/^(UTC|[A-Za-z0-9_+\-]+(?:\/[A-Za-z0-9_+\-]+)+)$/.test(data.timezone)
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep timezone validation consistent with the form

When a user edits the detected timezone to a valid identifier without a slash, such as GMT, CET, or EST, the client accepts it through Intl.DateTimeFormat, but this additional regular expression rejects it before the writer performs the same Intl validation. Such requests pass the visible form validation and then fail with a generic save error; rely on the Intl check or otherwise use the same accepted set on both sides.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant