Daily Reading Setup with GitHub Storage - Complete Guide

Transform your reading habits with an automated system that captures, organizes, and syncs your daily reading across all devices using GitHub as your permanent storage backend.

🎯 What You’ll Get

  • Universal Bookmarklet: Save any webpage with one click
  • GitHub Synchronization: Never lose your reading data
  • Rich Metadata: Auto-capture titles, URLs, highlights, and notes
  • Cross-Device Access: Access your readings from anywhere
  • Searchable Archive: Find any reading with powerful filters
  • Export/Import: Full data portability

📋 Prerequisites

  • A GitHub account
  • A GitHub repository (we’ll use your existing blog repo)
  • Basic familiarity with GitHub Personal Access Tokens

🚀 Step-by-Step Setup

Step 1: Create GitHub Personal Access Token

  1. Go to GitHub Settings
  2. Configure Token
    • Name: “Daily Reading Blog”
    • Expiration: Choose your preference (90 days recommended)
    • Scopes: Check “repo” (Full control of private repositories)
  3. Generate and Copy
    • Click “Generate token”
    • Important: Copy the token immediately - you won’t see it again!

Step 2: Configure GitHub Sync

  1. Visit Your Daily Reading Page
    • Go to your blog’s /daily-reading/ page
    • You should see the reading interface
  2. Set Up GitHub Sync
    • Click “⚙️ GitHub Sync Setup”
    • Paste your GitHub token
    • Click “💾 Enable GitHub Sync”
  3. Create the Storage File
    • Click “📁 Create GitHub File” button
    • This creates _data/readings.json in your repository
    • Verify success message

Step 3: Install the Bookmarklet

  1. Find the Bookmarklet
    • Scroll to the bottom of your daily reading page
    • Look for “Quick Save Bookmarklet” section
  2. Install the Bookmarklet
    • Drag the “📚 Save Reading” link to your bookmarks bar
    • Or right-click and “Bookmark this link”

🔧 How It Works

The Complete Flow

Webpage → Bookmarklet → Temporary Storage → Reading Form → GitHub API → _data/readings.json

Data Structure

Your readings are stored in _data/readings.json with this structure:

{
  "id": "unique-identifier",
  "title": "Article Title",
  "url": "https://example.com/article",
  "notes": "Your personal notes",
  "highlights": ["Key quote 1", "Key quote 2"],
  "summary": "Brief summary",
  "tags": ["tech", "productivity"],
  "timestamp": "2025-01-27T10:00:00.000Z",
  "date": "Jan 27, 2025, 10:00 AM",
  "dateAdded": "1/27/2025",
  "domain": "example.com",
  "favicon": "https://example.com/favicon.ico"
}

📖 Using the System

Saving Articles

  1. Quick Save: Click the bookmarklet on any webpage
  2. Enhanced Save: Visit your daily reading page, fill out the form
  3. Bulk Import: Use the “📥 Import JSON” feature

Managing Readings

  • Search: Use the search bar to find specific articles
  • Filter by Tag: Select tags from the dropdown
  • Filter by Date: Use the date picker
  • Edit: Click on any reading to modify it
  • Delete: Remove readings you no longer need

Synchronization

  • Auto-sync: Happens automatically when you add/edit readings
  • Manual sync: Click “🔄 Test Sync” to force synchronization
  • Status: Check the sync status indicator

🔍 Features Deep Dive

1. Bookmarklet Capabilities

The bookmarklet automatically captures:

  • Page title - Clean, readable title
  • URL - Full webpage address
  • Selected text - Any text you’ve highlighted
  • Domain - Website domain for organization
  • Favicon - Site icon for visual identification

2. GitHub Storage Benefits

  • Permanent backup - Never lose your data
  • Version history - Track changes over time
  • Accessibility - Access from any device
  • Portability - Download your data anytime
  • Collaboration - Share with others if desired

3. Advanced Organization

  • Tags - Categorize readings (tech, business, personal)
  • Highlights - Save key quotes and insights
  • Notes - Add personal thoughts and reactions
  • Summary - Capture main takeaways
  • Timestamps - Track when you read each article

🛠️ Troubleshooting

Common Issues

1. “Not Found” Error (404)

Error: File not found in GitHub repository

Solution: Click “📁 Create GitHub File” button

2. Authentication Failed (401)

Error: Invalid GitHub token

Solution:

  • Check token hasn’t expired
  • Verify token has “repo” scope
  • Regenerate token if needed

3. Permission Denied (403)

Error: Token lacks required permissions

Solution:

  • Ensure token has “repo” scope
  • Check repository access permissions
  • Verify repository name is correct

🎨 Customization Options

Modify Storage Location

Edit the configuration in your daily reading page:

const config = {
    owner: 'YourUsername',
    repo: 'your-repo-name',
    branch: 'main',
    filePath: '_data/readings.json'  // Change this path
};

Add Custom Fields

Extend the reading object structure:

const reading = {
    // ... existing fields ...
    priority: 'high',
    readingTime: '5 minutes',
    category: 'technical',
    source: 'newsletter'
};

Custom Tags

Pre-populate common tags:

const commonTags = ['tech', 'business', 'design', 'productivity'];

📊 Data Analysis

Using Jekyll Data

Since readings are stored in _data/readings.json, you can use them in Jekyll:


  <h3>A valid HTML zip bomb - ache</h3>
  <p></p>
  <small>Jul 25, 2025, 8:34 AM</small>

  <h3>SQL Injection as a Feature</h3>
  <p></p>
  <small>Jul 23, 2025, 11:21 PM</small>

  <h3>Qwen3-Coder: Agentic Coding in the World | Qwen</h3>
  <p></p>
  <small>Jul 23, 2025, 8:31 AM</small>

  <h3>Can LLMs Do Accounting? | Penrose</h3>
  <p></p>
  <small>Jul 22, 2025, 8:19 AM</small>

  <h3>If Writing is Thinking…</h3>
  <p></p>
  <small>Jul 22, 2025, 8:13 AM</small>

  <h3>8 Reasons Not to Embed Dashboards with iFrames</h3>
  <p></p>
  <small>Jul 21, 2025, 7:47 AM</small>

  <h3>To be a better programmer, write little proofs in your head</h3>
  <p></p>
  <small>Jul 16, 2025, 7:55 AM</small>

  <h3>【AI产品】从ChatGPT到Instagram再到Uber:全球最受欢迎产品背后的低调架构师_哔哩哔哩_bilibili</h3>
  <p></p>
  <small>Jul 15, 2025, 12:19 PM</small>

  <h3>【AI创业】18个月从0到200万用户:如何打造顶尖AI数据分析工具 | Julius AI创始人Rahul Sonwalkar_哔哩哔哩_bilibili</h3>
  <p></p>
  <small>Jul 15, 2025, 12:18 PM</small>

  <h3>Sell Yourself Well - What Soham Parekh can teach us</h3>
  <p></p>
  <small>Jul 15, 2025, 8:41 AM</small>

  <h3>NeuralOS Demo</h3>
  <p></p>
  <small>Jul 15, 2025, 8:35 AM</small>

  <h3>Monitoring my Homelab, Simply</h3>
  <p></p>
  <small>Jul 14, 2025, 6:16 AM</small>

  <h3>Most people who buy your game won’t play it – How To Market A Game</h3>
  <p></p>
  <small>Jul 14, 2025, 5:55 AM</small>

  <h3>Use the $filter query parameter to filter a collection of objects - Microsoft Graph | Microsoft Learn</h3>
  <p></p>
  <small>Jul 11, 2025, 8:35 AM</small>

  <h3>Use the Outlook mail REST API - Microsoft Graph v1.0 | Microsoft Learn</h3>
  <p></p>
  <small>Jul 11, 2025, 8:21 AM</small>

  <h3>Microsoft Outlook MCP Server | Microsoft Outlook Webhooks & APIs Integration</h3>
  <p></p>
  <small>Jul 11, 2025, 8:05 AM</small>

  <h3>mcp-b - Browser Model Context Protocol</h3>
  <p></p>
  <small>Jul 10, 2025, 8:16 PM</small>

  <h3>Hugging Face just launched a $299 robot that could disrupt the entire robotics industry | VentureBeat</h3>
  <p></p>
  <small>Jul 10, 2025, 6:21 PM</small>

  <h3>MCP: Build Rich-Context AI Apps with Anthropic - DeepLearning.AI</h3>
  <p></p>
  <small>Jul 9, 2025, 7:25 PM</small>

  <h3>The Dilbert Blog: The Day You Became A Better Writer</h3>
  <p></p>
  <small>Jul 9, 2025, 8:09 AM</small>

  <h3>OpenAPI Mock Server — With AI Magic</h3>
  <p></p>
  <small>Jul 9, 2025, 7:50 AM</small>

  <h3>We reached $1M ARR with zero funding - ProjectionLab</h3>
  <p></p>
  <small>Jul 9, 2025, 7:04 AM</small>

  <h3>I used o3 to profile myself from my saved Pocket links | noperator</h3>
  <p></p>
  <small>Jul 8, 2025, 8:58 AM</small>

  <h3>[2506.17298] Mercury: Ultra-Fast Language Models Based on Diffusion</h3>
  <p></p>
  <small>Jul 8, 2025, 7:06 AM</small>

  <h3>Crypto 101</h3>
  <p></p>
  <small>Jul 7, 2025, 8:28 AM</small>

  <h3>Why the Simplest Desktop Agent Abstraction Wins - Bytebot - The Easiest Way to Build Desktop Agents</h3>
  <p></p>
  <small>Jul 6, 2025, 2:10 PM</small>

  <h3>Optimizing Tool Selection for LLM Workflows: Differentiable Programming with PyTorch and DSPy</h3>
  <p></p>
  <small>Jul 6, 2025, 8:19 AM</small>

  <h3>librdx/blog/escher.md at master · gritzko/librdx</h3>
  <p></p>
  <small>Jul 3, 2025, 8:26 AM</small>

  <h3>Jobs by Referral</h3>
  <p></p>
  <small>Jul 3, 2025, 7:35 AM</small>

  <h3>Don't say "click here"; not everyone will be clicking - Quality Web Tips</h3>
  <p></p>
  <small>Jul 3, 2025, 7:29 AM</small>

  <h3>Code⇄GUI bidirectional editing via LSP - james vaughan</h3>
  <p></p>
  <small>Jul 2, 2025, 6:18 PM</small>

  <h3>AlphaGenome: AI for better understanding the genome - Google DeepMind</h3>
  <p></p>
  <small>Jun 27, 2025, 9:17 AM</small>

  <h3>Working on databases from prison: How I got here, part 2.</h3>
  <p></p>
  <small>Jun 17, 2025, 5:33 PM</small>

  <h3>Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task</h3>
  <p></p>
  <small>Jun 17, 2025, 5:31 PM</small>

  <h3>MCP: Build Rich-Context AI Apps with Anthropic - DeepLearning.AI</h3>
  <p></p>
  <small>Jun 16, 2025, 10:42 AM</small>

  <h3>Source code sandboxing</h3>
  <p></p>
  <small>Jun 16, 2025, 10:40 AM</small>

  <h3>Google Cloud Service Health</h3>
  <p></p>
  <small>Jun 15, 2025, 9:49 PM</small>

  <h3>Self-Host & Tech Independence: The Joy of Building Your Own | ssp.sh</h3>
  <p></p>
  <small>Jun 8, 2025, 10:33 AM</small>

  <h3>扎克伯格花了超过1000个小时玩《文明6》 - 小红书</h3>
  <p></p>
  <small>May 25, 2025, 2:22 PM</small>

  <h3>You’re a little company, now act like one</h3>
  <p></p>
  <small>May 25, 2025, 7:41 AM</small>

  <h3>derekeder/csv-to-html-table: :arrow_down_small: Display any CSV (comma separated values) file as a searchable, filterable, pretty HTML table</h3>
  <p></p>
  <small>May 22, 2025, 11:27 PM</small>

  <h3>Four years of sight reading practice – Negative Feedback</h3>
  <p></p>
  <small>May 22, 2025, 11:26 PM</small>

  <h3>Playwright Mcp MCP Server</h3>
  <p></p>
  <small>May 18, 2025, 5:10 PM</small>

  <h3>OpenManus: The Open Source Alternative to Manus AI</h3>
  <p></p>
  <small>May 14, 2025, 7:43 AM</small>

  <h3>Home</h3>
  <p></p>
  <small>May 10, 2025, 7:58 PM</small>

  <h3>Home</h3>
  <p></p>
  <small>May 10, 2025, 7:57 PM</small>

  <h3>Introducing Supermaven, the first code completion tool with a 300,000-token context window</h3>
  <p></p>
  <small>May 10, 2025, 10:05 AM</small>

  <h3>A Brief History of Cursor's Tab Completion - Coplay - Your Unity Copilot</h3>
  <p></p>
  <small>May 10, 2025, 10:03 AM</small>

  <h3>婚禮遭聯盟惡意破壞,部落玩家攻陷敵方主城舉辦血色婚禮!這才是真正的魔獸世界! - YouTube</h3>
  <p></p>
  <small>May 10, 2025, 12:20 AM</small>

  <h3>[2504.16966] Structuring Competency-Based Courses Through Skill Trees</h3>
  <p></p>
  <small>May 9, 2025, 11:43 PM</small>

  <h3>Finnhub Stock APIs - Real-time stock prices, Company fundamentals, Estimates, and Alternative data.</h3>
  <p></p>
  <small>May 9, 2025, 7:39 PM</small>

  <h3>Updating...</h3>
  <p></p>
  <small>May 9, 2025, 6:06 PM</small>

  <h3>Kevin Xu's team Admin Console – Figma</h3>
  <p></p>
  <small>May 9, 2025, 4:26 PM</small>

  <h3>From: Steve Jobs. "Great idea, thank you." | #haymanSplaining</h3>
  <p></p>
  <small>May 9, 2025, 11:07 AM</small>

  <h3>Podfox: World's First Container-Aware Browser - Home of Val Packett</h3>
  <p></p>
  <small>May 9, 2025, 10:47 AM</small>

  <h3>Podfox: World's First Container-Aware Browser - Home of Val Packett</h3>
  <p></p>
  <small>May 9, 2025, 10:33 AM</small>

  <h3>How To Start A School With Your Friends - Priya Rose 🌹</h3>
  <p></p>
  <small>May 9, 2025, 10:12 AM</small>

  <h3>How To Start A School With Your Friends - Priya Rose 🌹</h3>
  <p></p>
  <small>May 9, 2025, 10:08 AM</small>

  <h3>How To Start A School With Your Friends - Priya Rose 🌹</h3>
  <p></p>
  <small>May 9, 2025, 9:59 AM</small>

  <h3>Nobody Codes Here Anymore - Alex Ghiculescu's Newsletter</h3>
  <p></p>
  <small>May 9, 2025, 9:49 AM</small>

  <h3>Darij Grinberg: Mathematical Problem Solving (Math 235), Fall 2020</h3>
  <p></p>
  <small>May 9, 2025, 9:24 AM</small>

  <h3>voideditor/void</h3>
  <p></p>
  <small>May 9, 2025, 9:24 AM</small>

Export for Analytics

// Export all readings
const readings = JSON.parse(localStorage.getItem('dailyReadings'));
console.table(readings);

🔄 Backup and Migration

Export Data

  1. Click “Export All” button
  2. Save the JSON file
  3. Store in multiple locations

Import Data

  1. Click “📥 Import JSON”
  2. Select your backup file
  3. Choose merge or replace option

GitHub Backup

Your data is automatically backed up to GitHub with:

  • Full version history
  • Commit messages for each change
  • Branch protection options

🚀 Advanced Tips

1. Automation Ideas

  • IFTTT Integration: Auto-save from RSS feeds
  • Zapier Workflows: Connect to other tools
  • Browser Extensions: Enhanced bookmarklet features

2. Workflow Optimization

  • Reading Sessions: Batch process saves
  • Weekly Reviews: Clean up and organize
  • Monthly Exports: Regular backups

🔒 Security and Privacy

Data Protection

  • Tokens stored locally in browser
  • No server-side storage
  • Direct GitHub API communication

Privacy Settings

  • Repository can be private
  • Control access with GitHub permissions
  • Regular token rotation recommended

🎯 Next Steps

  1. Set up the system following this guide
  2. Install the bookmarklet on all your devices
  3. Start saving articles and build your reading archive
  4. Customize the system to match your workflow
  5. Share your setup with others who might benefit