For most issues, start by opening your browser’s developer console (F12 → Console tab) to see client-side errors. For backend issues, open the Google Apps Script editor, then go to View → Executions to inspect server-side logs.
Form not submitting
Form not submitting
The RSVP form submits to the Google Apps Script web app URL configured in
script.js. Check the following:- Open
script.jsand locate thesubmitForm()function. Verify theurl:field inside the$.ajax({...})call points to your deployed Apps Script URL:
script.js
- Open your Google Sheet and confirm it is not restricted — the owner’s Google account must have access.
-
In the Apps Script editor, go to Deploy → Manage deployments and confirm the deployment is set to:
- Execute as: Me
- Who has access: Anyone
Email notifications not working
Email notifications not working
Email sending relies on
GmailApp, which requires explicit permission grants. Check the following:-
In the Apps Script editor, run
testSetup()manually. The first execution will prompt you to authorize Gmail permissions — click Review permissions and grant access. -
Open
google-apps-script.jsand verify thejohnnyEmailvariable inside thesendEmail()function is set to the correct recipient address:
google-apps-script.js
- Check the Executions tab (View → Executions) in the Apps Script editor for any
Error sending admin emailorError sending guest emaillog entries.
Email failures in
sendEmail() are intentionally caught and logged without breaking the RSVP form submission. The form can still record responses to the sheet even when email is failing.Styling issues / fonts not loading
Styling issues / fonts not loading
The site loads fonts from Google Fonts and icons from Font Awesome via CDN. If these fail, the page will fall back to system fonts and show missing icons.
-
Open the browser Network tab (F12 → Network), reload the page, and filter for failed requests. Look for 429 (rate-limited) or CORS errors on requests to
fonts.googleapis.comorfonts.gstatic.com. -
Verify the
<head>section ofindex.htmlincludes both preconnect hints and the stylesheet link:
index.html
- Check the Console tab for any CSS or JavaScript errors that may be preventing the stylesheet from applying.
Countdown shows wrong time
Countdown shows wrong time
The countdown is driven by a hardcoded date string in Replace
script.js. Update it to match your actual wedding date and time:script.js
"Oct 25, 2025 17:30:00" with your date in the same format, for example "Mar 15, 2026 16:00:00".Once the date has passed, the countdown is replaced by the message 🎉 We're Married! 🎉 — this behavior is controlled in initCountdown() in script.js.RSVP confirmation email not received by guest
RSVP confirmation email not received by guest
Guest confirmation emails are optional and only sent under specific conditions.
-
The
emailfield in the RSVP form is not required — if the guest did not enter an email address, no confirmation is sent. -
If an email was entered, verify it is a valid address. The client-side regex
/^[^\s@]+@[^\s@]+\.[^\s@]+$/validates the format before submission. -
Ask the guest to check their spam or junk folder. The sender name is
Johnny & Josephine Weddingand the subject line is確認通知 - Johnny & Josephine 婚禮. -
Check the Apps Script Executions log for a
Guest confirmation email sent successfully to: <address>entry, or an error line, to confirm whether the send was attempted.
Address field not appearing
Address field not appearing
The mailing address field is hidden by default and only appears when a guest selects 需要 (yes) from the paper invitation (紙本喜帖) dropdown.This is intentional dynamic behavior implemented in If the address row is not appearing after selecting 需要, open the browser console and check for JavaScript errors. Verify that jQuery is loading correctly from the CDN before
script.js:script.js
script.js runs.Google Sheet not found error
Google Sheet not found error
The Apps Script reads the spreadsheet using the
SHEET_ID and SHEET_NAME constants at the top of google-apps-script.js:google-apps-script.js
- Copy the Sheet ID from your Google Sheet URL:
https://docs.google.com/spreadsheets/d/<SHEET_ID>/edit - Replace the value of
SHEET_IDingoogle-apps-script.jswith your own Sheet ID. - Verify that the tab name in your Google Sheet exactly matches
RSVP_responses(case-sensitive). If you renamed the tab, updateSHEET_NAMEaccordingly. - Run
setup()in the Apps Script editor after making changes to reinitialize the sheet.
Gallery modal not closing on mobile
Gallery modal not closing on mobile
The gallery modal supports multiple close methods, all implemented in the
initGalleryModal() function in script.js:- Tap the image — tapping the displayed photo closes the modal.
- Swipe down — a downward swipe of more than 60 px triggers
closeModal(). - Tap the backdrop — tapping the dark area outside the image closes the modal.
- Press Escape — works on both desktop keyboards and mobile keyboards (via
keydownevent). - Tap the × button — the close button in the top corner dismisses the modal.
initGalleryModal(). Also confirm jQuery is loaded before script.js executes.Form data showing as empty in sheet
Form data showing as empty in sheet
The Apps Script maps POST parameters to sheet columns by header name. If the column headers in your Google Sheet do not exactly match what Run
createHeaders() writes, values will be missing.The expected headers are:google-apps-script.js
setup() in the Apps Script editor to reinitialize the sheet with the correct headers and formatting. This is safe to run on a sheet that already has data — it will only recreate headers if they are missing or incorrect.Apps Script deployment URL changes
Apps Script deployment URL changes
Every time you create a new deployment in Apps Script, Google generates a new unique URL. The old URL may stop working.
- After creating a new deployment, copy the updated URL from Deploy → Manage deployments.
- Open
script.jsand update theurl:field insubmitForm():
script.js
- Commit the updated
script.jsand redeploy the site (push to GitHub Pages or re-upload to your host).