A focused, privacy-conscious reading desk for the daily.dev public feed
The Daily Reader is a lightweight reading desk for the daily.dev public feed. It turns a busy stream of developer stories into a calm, keyboard-friendly workspace for reading, filtering, saving, and exporting.
It runs as a plain static web app with no build step and no frontend package installation. Use direct API requests when your browser permits them, or route requests through the included PHP or Node.js proxy when CORS gets in the way.
- Focused feed with cursor-based pagination and a LOAD MORE POSTS workflow.
- Fast filters for all posts, unread posts, saved posts, tags, local text filtering, keyword search, and semantic search.
- Local read history and saved posts stored in the browser, not in a hosted database.
- Profile lookup, article previews, direct article links, and hover image peek.
- One-click Markdown export for the currently visible list.
- Keyboard shortcuts for moving through the feed, saving posts, marking posts read, and opening setup.
- Direct, PHP proxy, and Node.js proxy routing options.
- Responsive layout with reduced-motion support and no frontend build toolchain.
- A modern web browser.
- A daily.dev personal access token.
- PHP with cURL or Node.js only when a proxy is needed for CORS.
- Open the live reader or serve the repository locally.
- Enter your own daily.dev token in SETUP.
- Choose the direct route, or configure
/proxy.phporhttp://localhost:8010. - Select OPEN THE WIRE and start reading.
The search box supports three modes:
keywordcallsGET /recommend/keyword?q=...and is best for exact technical terms such asRAG,pgvector, orLangChain.semanticcallsGET /recommend/semantic?q=...for natural-language questions. The daily.dev docs mark this endpoint as deprecated, so keyword remains the default.localfilters the posts already loaded in the browser by title, summary, source, and tags.
Press Enter in the search box or use the search button to run keyword or semantic search. Keyword results support cursor pagination when daily.dev returns a cursor.
The token is entered in your browser and is not committed to this repository, URL, or README.
py -m http.server 8000Open http://localhost:8000, then configure the API in SETUP.
php -S localhost:8000Open http://localhost:8000, set the proxy URL to /proxy.php, and select the proxy route.
Run the static frontend in one terminal and the proxy in another:
py -m http.server 8000
node .\daily-proxy.jsThe Node.js proxy listens on http://localhost:8010 by default. Use that address in SETUP with the auto or proxy route.
PHP and Node.js are alternative proxy options. You do not need to run both.
Upload index.html and proxy.php to the web root of a PHP host with cURL enabled. Keep the frontend and proxy on the same HTTPS domain when possible.
Serve index.html with any static web server and keep daily-proxy.js running as a small Node.js service. Set the public proxy URL in SETUP and use HTTPS in production.
- Each user supplies their own daily.dev token.
- Read state, saved posts, and configuration are kept in that browser's local storage.
- The included proxies forward requests and do not intentionally persist tokens or API responses.
- Never put a token in an issue, screenshot, URL, source file, or public post.
- Revoke the token or clear browser storage when using a shared computer.
For the strongest privacy boundary, run the reader and proxy on infrastructure you control.
- index.html - the complete frontend application.
- proxy.php - optional PHP daily.dev API proxy.
- daily-proxy.js - optional Node.js daily.dev API proxy.
- assets/daily-reader-tour.gif - README feature tour.
- LICENSE - MIT license.
- Fork the repository.
- Create a focused feature or fix branch.
- Do not add tokens or other secrets.
- Test the reader in a browser.
- Run
node --check .\daily-proxy.jswhen changing the Node.js proxy. - Run
php -l .\proxy.phpwhen changing the PHP proxy. - Open a pull request with clear testing notes.
Questions and bug reports belong in the repository's issue tracker. Please include your browser, operating system, setup route, and the relevant error message, but never include your API token.
This project is available under the MIT License.

