SETLY / HARBOR WEBSITE
Original learning example. Fictional business.

START
Extract this ZIP and open the folder in a text editor.
Run: python -m http.server 8090
Open: http://127.0.0.1:8090

CONTACT STORAGE TEST
Stop the static server first, then run: python contact_server.py
Submit fictional values through the form. The response returns a local enquiry id.
Rows are stored in demo-enquiries.sqlite3. No email is sent.
The server binds to localhost and is for learning only, not a production service.
Do not upload the SQLite database or this Python backend to a static public site.
A production form needs a maintained backend, abuse controls and an approved delivery path.

STATIC HOSTING
Publish index.html, styles.css and script.js only. The static demo cannot store enquiries; it reports a missing backend instead of pretending to submit.
Replace the library footer link if using this outside SETLY.

CHECKS
Navigation: every section link reaches an existing id.
Mobile: cards stack and the menu button exposes links.
Keyboard: Tab reaches every interactive element; Escape closes the mobile menu.
Form: empty fields and invalid email are rejected.
Local backend: valid input returns 201 and a stored id; invalid input returns 400.

LICENSE
Copyright 2026 Ray / SETLY. You may use and adapt these original example files for learning and your own business. Third-party platform documentation retains its own terms.
