FeaturesTemplatesShowcaseTownie
AI
BlogDocsPricing
Log inSign up
panphora
panphorahyperclay-test-app
Remix of panphora/hyperclay
Public
Like
hyperclay-test-app
Home
Code
3
README.md
SETUP.md
H
index.ts
Branches
1
Pull requests
Remixes
History
Environment variables
2
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.
Sign up now
Code
/
README.md
Code
/
README.md
Search
9/4/2025
README.md

Hyperclay-Compatible Self-Updating Page

A simple, elegant implementation of a self-updating HTML page with email authentication, built for Val.town and fully compatible with Hyperclay.js.

Quick Setup Guide

1. Fork This Val

Click the fork button in Val.town to create your own copy of this project.

2. Set Environment Variables

In your Val.town settings, add these environment variables:

  • ADMIN_EMAIL - Your email address (required for authentication)
  • APP_NAMESPACE - Optional namespace for storage (defaults to "default")

3. Deploy

The val is already configured as an HTTP trigger. Just save and it's live at your Val.town URL.

4. Test Public Access

Visit your Val.town URL (e.g., https://yourusername-yourval.web.val.run) - you should see the Hyperclay starter template in read-only mode.

5. Authenticate as Admin

  1. Go to /auth/edit (e.g., https://yourusername-yourval.web.val.run/auth/edit)
  2. Enter your admin email address
  3. Check your email for the magic link
  4. Click the magic link to authenticate

6. Start Editing

After authentication, return to your main URL. You should now see:

  • Edit controls and buttons
  • Contenteditable areas become editable
  • Auto-save functionality (Ctrl+S)
  • Access to version history at /versions

7. Share Your App

Your public URL is now ready to share! Others will see the read-only version while you can edit by authenticating.


Features

  • Email Authentication: Secure admin access via magic links
  • Hyperclay Integration: Full compatibility with Hyperclay.js editing features
  • Version History: Automatic versioning of all changes with viewing capability
  • Simple Architecture: Single file implementation, easy to understand and modify
  • Persistent Storage: Uses Val.town blob storage for reliability
  • Namespace Support: Environment-configurable for multiple deployments

Environment Variables

Set these in your Val.town environment:

  • ADMIN_EMAIL: The email address that can authenticate for edit access (required)
  • APP_NAMESPACE: Namespace for storage keys, allows multiple deployments (optional, defaults to "default")

URL Structure

Public URLs (No Authentication Required)

  • GET / - Serves the HTML document
  • GET/POST /auth/view - Switches to view mode (clears admin cookies)

Protected URLs (Email Authentication Required)

  • GET/POST /auth/edit - Email auth flow (GET shows form, POST sends magic link)
  • GET /auth/verify?token=... - Magic link verification endpoint

Admin-Only URLs (Requires Valid Session)

  • POST /save/app - Saves HTML content (used by Hyperclay.js)
  • GET /versions - View version history of all saved documents

User Flows

Public User Experience

  1. Visit your Val.town URL
  2. See content in read-only mode
  3. No edit controls visible (handled by Hyperclay.js)

Admin Authentication Flow

  1. Visit /auth/edit
  2. Enter your email (must match ADMIN_EMAIL)
  3. Check email for magic link
  4. Click link → authenticated and redirected to main page
  5. Edit controls now visible and functional

Admin Editing Experience

  1. After authentication, visit main URL
  2. Hyperclay.js detects admin cookies (automatically set for authenticated users)
  3. Content becomes editable with edit-mode-* attributes
  4. Changes auto-save via Ctrl+S or periodic saves
  5. Visit /versions to see change history

Technical Implementation

Authentication Flow

  • Custom email authentication system using magic links
  • Sessions stored in Val.town blob storage with 30-day expiration
  • Hyperclay-compatible cookies (currentResource=app, isAdminOfCurrentResource=true) set automatically for authenticated users
  • Sessions auto-extend on activity

Storage Strategy

  • Main document stored as {namespace}_app
  • Versions stored as {namespace}_app_version_{number}
  • Version counter stored as {namespace}_app_version_count
  • All storage uses Val.town blob storage for persistence

Hyperclay.js Integration

  • Loads Hyperclay.js from CDN (always latest version)
  • Follows standard Hyperclay patterns for edit mode detection
  • Supports all edit-mode-* attributes (contenteditable, show, onclick, etc.)
  • Auto-save posts to /save/app endpoint

Security Model

  • Magic link email authentication gates session creation
  • Sessions stored securely in blob storage with expiration
  • Save endpoint validates active sessions before accepting changes
  • No secrets exposed in client-side code
  • Version history only accessible to authenticated admins

Default HTML Template

The system starts with a Hyperclay starter template that includes:

  • Tailwind CSS integration
  • Hyperclay.js starter kit
  • Template selection interface
  • Dark theme styling
  • Responsive design

Development

Testing the Implementation

  1. Set your ADMIN_EMAIL environment variable
  2. Deploy to Val.town
  3. Visit your Val.town URL to see public view
  4. Visit /auth/edit to test authentication flow
  5. Make edits and verify auto-save functionality
  6. Check /versions to see version history

Customization

  • Modify DEFAULT_HTML to change the starting template
  • Adjust session expiration in the auth system (currently 30 days)
  • Add additional validation in saveHTML if needed
  • Extend version history with metadata (timestamps, etc.)

Architecture Benefits

Simplicity

  • Single file implementation
  • No database setup required
  • Minimal configuration (just email)
  • Standard Hyperclay patterns

Reliability

  • Persistent blob storage
  • Automatic version history
  • Comprehensive error handling
  • Graceful degradation

Security

  • Email-based authentication
  • Cookie-based session management
  • No client-side secrets
  • Protected admin endpoints

Troubleshooting

Common Issues

  1. Can't authenticate: Check ADMIN_EMAIL environment variable matches exactly
  2. Magic link not received: Check spam folder, verify email service is working
  3. Magic link expired: Links expire after 15 minutes, request a new one
  4. Changes not saving: Verify you're authenticated (check browser cookies for session)
  5. Version history empty: Versions are only created after first save
  6. Edit mode not working: Ensure Hyperclay.js is loading (check browser console)

Debug Steps

  1. Check browser cookies for session and isAdminOfCurrentResource=true
  2. Verify network requests to /save/app are successful
  3. Test authentication flow by visiting /auth/edit
  4. Check Val.town logs for server-side errors
  5. Verify ADMIN_EMAIL environment variable is set correctly

This implementation provides a robust, secure, and user-friendly self-updating page system that integrates seamlessly with Hyperclay.js while maintaining simplicity and elegance.

Get started with a template:
Go to top
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Product
FeaturesPricing
Developers
DocsStatusAPI ExamplesNPM Package Examples
Explore
ShowcaseTemplatesNewest ValsTrending ValsNewsletter
Company
AboutBlogCareersBrandhi@val.town
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.