Your email blog platform is now ready to use! Here's how to get started:
To publish a blog post, simply send an email to your Val Town email address:
Example email:
To: your-email-val@val.town
Subject: My First Blog Post
Body: <h2>Hello World!</h2><p>This is my first post published via email!</p>
/post/[slug]
(auto-generated from title)/rss
/api/posts
for JSON data✅ Core Features
✅ Technical Features
The platform includes foundation code for:
WEBSUB_HUB_URL
environment variable/websub
for subscription managementBASE_URL
environment variable to your domain/generate-keys.ts
to generate keysACTIVITYPUB_PUBLIC_KEY
and ACTIVITYPUB_PRIVATE_KEY
environment variables/actor
/inbox
ATPROTO_HANDLE
and ATPROTO_PASSWORD
environment variablesOptional configuration:
# Base URL for your blog (required for custom domains and ActivityPub) BASE_URL=https://your-domain.com # WebSub Hub URL (e.g., https://pubsubhubbub.appspot.com/) WEBSUB_HUB_URL=your-hub-url # AT Protocol (Bluesky) credentials ATPROTO_HANDLE=your-handle.bsky.social ATPROTO_PASSWORD=your-app-password # ActivityPub HTTP Signatures (recommended for production) ACTIVITYPUB_PUBLIC_KEY=-----BEGIN PUBLIC KEY-----... ACTIVITYPUB_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----...
To generate ActivityPub keys:
/generate-keys.ts
in your browsergetCustomCSS()
function in /backend/index.ts
generateBlogHTML()
and generatePostHTML()
blog_posts_v1
blog_posts_v2
)Use the /test-publish.ts
val to create sample posts for testing.
/health
endpoint for status checks/api/posts
for data integrityEmail → email.ts (Email Trigger)
↓
Database (SQLite)
↓
backend/index.ts (HTTP API + HTML Generation)
↓
Static HTML (TailwindCSS)
/health
endpoint to verify system statusYour email blog platform is ready to use! Send your first email to start publishing.