3 ms·
Show HN: Deadlight · Zero-JS blogging for hostile networks (Workers and SQLite)
OP here. I built Deadlight because I wanted a blogging platform that actually works on high-latency connections (Satellite, 2G, Mesh).
Most modern platforms require megabytes of JS hydration just to show text. Deadlight sends raw semantic HTML from Cloudflare's edge using D1 (SQLite). It’s readable in `lynx` or on a 300-baud terminal.
*The Stack:*
- Cloudflare Workers (Compute)
- D1 (Storage)
- Zero client-side JS (for readers)
*The Lock-in Question:*
Building on proprietary edge infra is a risk. I included an "Eject" script that dumps the remote D1 DB to a local SQLite file and generates a docker-compose file, so you can self-host/migrate off Cloudflare instantly if needed.
I just released a CLI launcher (`npx create-deadlight-blog`) if you want to spin up an instance to test the latency.
Happy to answer questions about the architecture or the LoRa integration I'm working on.
- gnarzilla_ 10mo agoOP here. I built Deadlight because I wanted a blogging platform that actually works on high-latency connections (Satellite, 2G, Mesh). Most modern platforms require megabytes of JS hydration just to show text. Deadlight sends raw semantic HTML from Cloudflare's edge using D1 (SQLite). It’s readable in `lynx` or on a 300-baud terminal. *The Stack:* - Cloudflare Workers (Compute) - D1 (Storage) - Zero client-side JS (for readers) *The Lock-in Question:* Building on proprietary edge infra is a risk. I included an "Eject" script that dumps the remote D1 DB to a local SQLite file and generates a docker-compose file, so you can self-host/migrate off Cloudflare instantly if needed. I just released a CLI launcher (`npx create-deadlight-blog`) if you want to spin up an instance to test the latency. Happy to answer questions about the architecture or the LoRa integration I'm working on.
- lazylizard 10mo agonpx create-deadlight-blog my-blog . . . Error: In a non-interactive environment, it's necessary to set a CLOUDFLARE_API_TOKEN environment variable for wrangler to work. Please go to https://developers.cloudflare.com/fundamentals/api/get-started/create-token/ https://developers.cloudflare.com/fundamentals/api/get-start... for instructions on how to create an api token, and assign its value to CLOUDFLARE_API_TOKEN.
- gnarzilla_ 10mo agoYou need to set environment variables in your terminal, before running (or re-running) the npx command export CLOUDFLARE_ACCOUNT_ID="your-account-id-here" export CLOUDFLARE_API_TOKEN="your-token-here" Both account ID and API token can be found in the Cloudflare dashboard, after you've created a CF account. OR - I have updated the newest version with a built-in fix, token prompt if browser login fails. v1.0.6 Re-run: npx create-deadlight-blog@latest It'll: 1. Try browser `wrangler login`. 2. Fallback: Prompt `CLOUDFLARE_API_TOKEN` + `ACCOUNT_ID` (no pre-export needed). 3. Proceed to D1/deploy. *Get token* (if needed): 1. [dash.cloudflare.com/profile/api-tokens](https://dash.cloudflare.com/profile/api-tokens https://dash.cloudflare.com/profile/api-tokens) → Custom: - Cloudflare D1 *Edit* (Account). - Cloudflare Workers Scripts *Edit* (Account). - Cloudflare Workers KV *Edit* (Account). 2. Account ID: Dashboard → Account Home (right sidebar). Tested headless—works