adportal
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v41View latest version
A landing page application that collects company information and allows users to add additional details through email links.
- Simple landing page with LauraMepson branding
- Form to collect company name and email
- SQLite database storage for submissions
- Email functionality to send users a unique link
- Continuation page for adding more information
- Image upload and storage functionality
index.ts- Main HTTP endpoint and route handlingdatabase.ts- SQLite database operationsemail.ts- Email sending functionalityutils.ts- Helper functionslanding.html- Main landing pagecontinue.html- Page for adding additional informationimage-storage.ts- Image storage and retrieval functionality
The application uses a SQLite database with the following schema:
CREATE TABLE IF NOT EXISTS laura_mepson_submissions_v1 (
id TEXT PRIMARY KEY,
company_name TEXT NOT NULL,
email TEXT NOT NULL,
created_at TEXT NOT NULL,
additional_fields TEXT
)
- User visits the landing page
- User submits company name and email
- Data is saved to SQLite database
- User receives an email with a unique link
- User can click the link to add more information
- Additional information is saved to the database
- User can upload and manage images related to their submission
- Main landing page:
https://[username].web.val.run - Continuation page:
https://[username].web.val.run?action=continue&id=[unique_id]
Images are stored using Val Town's blob storage:
- Images are stored with a unique ID
- Metadata is stored alongside each image
- Users can upload, view, and delete images
- Images are associated with a specific submission
- When modifying the database schema, create a new table with a new version number
- Email templates are defined in
email.ts - The unique ID generation is handled in
utils.ts - Val Town HTTP vals use query parameters instead of path parameters for routing