Total Pageviews

Monday, 25 May 2026

RSSWorker, 运行在Cloudflare Worker上的RSS订阅生成器


RSSWorker 是一个轻量级的 RSS 订阅工具,部署在 Cloudflare Worker 上

支持

注:以下路由均在 [域名]/rss/ 下,如 https://example.com/rss/bilibili/user/dynamic/1

  • bilibili 动态 (/bilibili/user/dynamic/:uid)
  • bilibili 视频 (/bilibili/user/video/:uid)
  • telegram 频道 (/telegram/channel/:username)
  • weibo 用户 (/weibo/user/:uid)
  • 小红书用户 (/xiaohongshu/user/:uid)

小红书更新后不能再使用小红书号,需要使用小红书用户ID。
获取方法:
移动端:用户页面 > 右上角三个点 > 复制链接 > 获取链接中的用户ID
网页端:用户页面 > 链接中的用户ID
格式:https://www.xiaohongshu.com/user/profile/5d2aec020000000012037401

微博更新后需要加上Cookie 获取方法(参考 https://docs.rsshub.app/zh/deploy/config#%E5%BE%AE%E5%8D%9A ) :

  1. 打开并登录微博
  2. 从个人微博主页的网址中获取uid,在https://m.weibo.cn/api/container/getIndex?type=uid&value=后追加uid,访问该链接
  3. 按下F12打开控制台,切换至Network(网络)面板
  4. 在该网页切换至任意关注分组,并在面板打开最先捕获到的请求 (该情形下捕获到的请求路径应包含/feed/group)
  5. 查看该请求的Headers(请求头), 找到Cookie字段并复制内容
  6. 命令行中输入wrangler secret put WEIBO_COOKIE,按下回车后再将第4步中复制的Cookie字段粘贴,后按下回车

部署

Deploy to Cloudflare Workers

开发

src/lib/[网站名称]/[功能] 参照已有的 demo 添加脚本,然后在 src/route.js 中添加插件即可。

注意事项:

  1. Cloudflare Worker 有最大打包体积限制(免费用户 1 MB,付费用户 10 MB),所以插件需要尽量轻量化。如使用 fetch 进行请求、使用 Cloudflare Worker 提供的 HTMLRewriter 进行 HTML 解析等。

模板引擎使用的格式为:

let items = [
	{
		title: 'Bilibili User Dynamic',
		link: `https://space.bilibili.com/${uid}/dynamic`,
		description: 'Bilibili User Dynamic233',
		pubDate: new Date().toUTCString(),
		guid: `https://space.bilibili.com/${uid}/dynamic`,
		author: 'bilibili@bilibili.com',
		category: 'video',
		comments: `https://space.bilibili.com/${uid}/dynamic`,
		enclosure: {
			url: 'https://www.bilibili.com/favicon.ico',
			type: 'image/x-icon',
			length: 0,
		},
		source: {
			title: 'Bilibili',
			url: 'https://www.bilibili.com',
		},
	},
];
let data = {
    title: `bilibili 动态`,
    link: `https://space.bilibili.com/${uid}/dynamic`,
    description: `${globalUsername} 的 bilibili 动态`,
    language: 'zh-cn',
    category: 'bilibili',
    items: items,
};

致谢

  • RSSHub 灵感和部分代码来源

  • NodeSupport赞助了本项目

    from  https://github.com/yllhwa/RSSWorker

tldr

 

Collaborative cheatsheets for console commands.

tldr.sh

What is tldr-pages?

The tldr-pages project is a collection of community-maintained help pages for command-line tools, that aims to be a simpler, more approachable complement to traditional man pages.

Maybe you're new to the command-line world. Perhaps you're just a little rusty or can't always recall the arguments for commands like lsof, or tar?

It certainly doesn't help that, in the past, the first option explained in man tar was:

$ man tar
...
-b blocksize
   Specify the block size, in 512-byte records, for tape drive I/O.
   As a rule, this argument is only needed when reading from or writing to tape drives,
   and usually not even then as the default block size of 20 records (10240 bytes) is very common.
...

There is room for simpler help pages focused on practical examples. How about:

Screenshot of the tldr client displaying the tar command.

This repository is just that: an ever-growing collection of examples for the most common UNIX, Linux, macOS, FreeBSD, NetBSD, OpenBSD, SunOS, Android, Windows, Cisco IOS, and DOS command-line tools.

How do I use it?

Tip

For browsing without installing a client on your computer, see the web client at https://tldr.inbrowser.app (with offline support using PWA).

There are several official clients available.

Python client

The official Python client can be installed from PyPI via pipx (or other package managers):

pipx install tldr

Rust client

Linux and Mac users can also install the official Rust Client using Homebrew, Cargo (or other package managers on other operating systems):

brew install tlrc
cargo install tlrc --locked

Windows users can also install the official Rust Client using Winget (or other package managers on other operating systems):

winget install tldr-pages.tlrc

Node.js client

Alternatively, you can also use the official Node.js client, although it has fallen behind in updates:

npm install -g tldr

Then you have direct access to simplified, easy-to-read help for commands, such as tar, accessible through typing tldr tar instead of the standard man tar.

If you don't want to install any software, check out the PDF version instead.

Note

PDFs for translations are available for most languages. You can find them in the release assets of the latest release.

There are also various other clients provided by the community, both for the command-line and for other platforms. For a comprehensive list of clients, head over to our Wiki.

 

Similar projects

  • cheat.sh Aggregates cheat sheets from multiple sources (including tldr-pages) into 1 unified interface.

  • devhints Rico's cheatsheets are not just focused on the command-line and include a plethora of other cheatsheets related to programming.

  • eg provides detailed examples with explanations on the command-line. Examples come from the repository, but eg supports displaying custom examples and commands alongside the defaults.

  • kb is a minimalist command-line knowledge base manager. kb can be used to organize your notes and cheatsheets in a minimalist and clean way. It also supports non-text files.

  • navi is an interactive cheatsheet tool, which allows you to browse through specific examples or complete commands on the fly.

  • Cheat allows you to create and view interactive cheatsheets on the command-line. It was designed to help remind Unix system administrators of options for commands that they use frequently, but not frequently enough to remember.

  • Command Line Interface Pages allows you to write standardized help pages for CLI, directories, and configs.

  • bropages (deprecated) are a highly readable supplement to man pages. It shows concise, common-case examples for Unix commands. The examples are submitted by the user base, and can be voted up or down; the best entries are what people see first when they look up a command.

What does "tldr" mean?

TL;DR stands for "Too Long; Didn't Read". It originated as Internet slang, where it is used to indicate that a long text (or parts of it) has been skipped as too lengthy. Read more in How-To Geek's article.

from  https://github.com/tldr-pages/tldr

bazinga.tools

https://bazinga.tools

 The best all-in-one toolbox. Bazinga! 

 

Development

First, install dependencies:

npm install

Second, run the development server:

npm run dev

Open http://localhost:3000 with your browser to see the result. The page auto-updates as you edit the file.

Add New Tools

All tools are located at pages/. To add a new tool, just follow the convention of the exsiting tools. The tech stack is TypeScript + React + CSS Modules.

Your feedback and contributions are welcome!

from  https://github.com/luin/bazinga

誰殺死了泛美航空?

 

杂感 作者:陆游

 陆游最治愈的一首小诗:短短4句,写尽人间通透,抚平万千凡人心。

毕淑敏曾在一篇散文中写道:"凡是自然的东西都是缓慢的。太阳一点点升起,花一朵朵开,粮食成熟,都慢得很。”

这世间,所有的美好都急不得。生活的主旋律,从来不是一帆风顺的惊喜,而是起起落落、有得有失的真实。

今天是五月二十五日,农历四月初九,恰逢周一。新一周的扉页,正缓缓翻开。

奔波的日子里,脚步总是匆匆。不妨偷闲煮一盏清茶,翻几卷诗书,让紧绷的心弦稍稍松弛。

今日,且赏读陆游晚年的一首小诗:

《杂感》

天际晴云舒复卷,庭中风絮去还来

人生自在常如此,何事能妨笑口开?

全诗仅二十八字,却写得豁达通透,字字温润,句句抚慰人心。

陆游的诗,既有李白的雄奇奔放放,又有杜甫的沉郁顿挫,却也不乏这样清新隽永的小调。

此诗作于南宋嘉定二年(1209年)三月。彼时的陆游已八十五岁高龄,体弱多病,距他辞世不足半年。

宦海沉浮五十余载,壮志未酬、故土未复,本该满心苍凉;可这位老诗人却在生命暮年,以近乎喃喃自语的朴素笔触,写下这首轻盈洒脱的七绝。

诗中没有引经据典,不见雕琢之痕,只有一位阅尽千帆的智者,留给世间最后的凝思。

天际晴云舒复卷

抬眼望向天空,只见晴空万里,白云悠悠,时而舒展如轻纱漫卷,时而聚合似峰峦叠嶂。

一个"舒"字见出舒展之态,一个"卷"字写出聚合之姿,"复"字则点明循环往复、生生不息之理。

诗人观云,实则观心:云无心以出岫,人若能效此无心,便少了许多执念。

庭中风絮去还来。

诗人的视线收回庭院。

春风过处,柳絮杨花随风轻飏,看似飘泊无定,实则循环往复,去而复返。

"去"是飘散的潇洒,"还"是归来的温柔,一去一来之间,藏着宇宙间最朴素的辩证法。

人生自在常如此

笔锋一转,由景入情。

诗人将云之舒卷、絮之往来,与人生况味悄然勾连——若能如晴云般不计聚散,似风絮般不执去留,人生便可得大自在。

这份"自在",不是消极的随波逐流,而是历经沧桑后的通透与释然。

何事能妨笑口开。

这最后一问,掷地有声。

既然已明了万物皆有其时、万事皆有其理,那么还有什么能阻挡我们开怀一笑呢?

这"笑",是勘破世情后的豁达,是接纳无常后的从容,更是对生活本身最温柔的致敬。

一个"妨"字,将尘世烦扰轻轻推开;一个“开”字,让心头郁结豁然释放。

正如《小窗幽记》中所言:

"宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。"

真正的自在,从来不是避世逃离,而是阅尽千帆后,依然能以一颗温润豁达之心,接纳生活所有的荒芜与馈赠。

愿你我都能在庸常的忙碌里,偶尔驻足。抬眼,看天际晴云舒卷;俯身,赏庭前风絮去来。

在这一呼一吸之间,守一份从容,笑口常开

Sunday, 24 May 2026

MoeMail

 A cute temporary email service built with NextJS + Cloudflare technology stack 🎉 | 一个基于 NextJS + Cloudflare 技术栈构建的可爱临时邮箱服务

moemail.app

A cute temporary email service built with NextJS + Cloudflare technology stack 🎉

English | 简体中文

MoeMail - OpenAPI‑first temp email, hosted & ready | Product Hunt

Live DemoDocumentationFeaturesTech StackLocal RunDeploymentEmail Domain ConfigPermission SystemSystem SettingsSending EmailsWebhook IntegrationOpenAPICLI ToolEnvironment VariablesGithub OAuth ConfigGoogle OAuth ConfigContributionLicenseCommunitySupport

Live Demo

https://moemail.app

Home

Mailbox

Profile

Documentation

Full Documentation: https://docs.moemail.app

The documentation site contains detailed usage guides, API documentation, deployment tutorials, and other complete information.

Features

  • 🔒 Privacy Protection: Protect your real email address from spam and unnecessary subscriptions
  • Real-time Receipt: Automatic polling, receive email notifications instantly
  • ⏱️ Flexible Validity: Supports 1 hour, 24 hours, 3 days, or permanent validity
  • 🎨 Theme Switching: Supports light and dark modes
  • 📱 Responsive Design: Perfectly adapted for desktop and mobile devices
  • 🔄 Auto Cleanup: Automatically cleans up expired mailboxes and emails
  • 📱 PWA Support: Support PWA installation
  • 💸 Free Self-hosting: Built on Cloudflare, capable of free self-hosting without any cost
  • 🎉 Cute UI: Simple and cute UI interface
  • 📤 Sending Function: Support sending emails using temporary addresses, based on Resend service
  • 🔔 Webhook Notification: Support receiving new email notifications via webhook
  • 🛡️ Permission System: Role-based access control system
  • 🔑 OpenAPI: Support accessing OpenAPI via API Key
  • 🤖 Agent-first CLI: CLI tool designed for AI agents to automate email workflows
  • 🌍 Multi-language Support: Supports Chinese and English interfaces, freely switchable

Tech Stack

Local Run

Prerequisites

  • Node.js 18+
  • Pnpm
  • Wrangler CLI
  • Cloudflare Account

Installation

  1. Clone the repository:
git clone https://github.com/beilunyang/moemail.git
cd moemail
  1. Install dependencies:
pnpm install
  1. Setup Wrangler:
cp wrangler.example.json wrangler.json
cp wrangler.email.example.json wrangler.email.json
cp wrangler.cleanup.example.json wrangler.cleanup.json

Set Cloudflare D1 database name and database ID.

  1. Setup Environment Variables:
cp .env.example .env.local

Set AUTH_GITHUB_ID, AUTH_GITHUB_SECRET, AUTH_SECRET.

  1. Create local database schema:
pnpm db:migrate-local

Development

  1. Start development server:
pnpm dev
  1. Test Email Worker: Currently cannot run and test locally, please use Wrangler to deploy the email worker and test.
pnpm deploy:email
  1. Test Cleanup Worker:
pnpm dev:cleanup
pnpm test:cleanup
  1. Generate Mock Data (Mailboxes and Messages):
pnpm generate-test-data

Deployment

Video Tutorial

https://www.youtube.com/watch?v=Vcw3nqsq2-E

Local Wrangler Deployment

  1. Create .env file
cp .env.example .env
  1. Set Environment Variables in the .env file.

  2. Run deployment script

pnpm dlx tsx ./scripts/deploy/index.ts

Github Actions Deployment

This project supports automated deployment using GitHub Actions. It supports the following triggers:

  1. Auto Trigger: Automatically triggers deployment flow when a new tag is pushed.
  2. Manual Trigger: Manually trigger in the GitHub Actions page.

Deployment Steps

  1. Add the following Secrets in GitHub repository settings:

    • CLOUDFLARE_API_TOKEN: Cloudflare API Token
    • CLOUDFLARE_ACCOUNT_ID: Cloudflare Account ID
    • AUTH_GITHUB_ID: GitHub OAuth App ID
    • AUTH_GITHUB_SECRET: GitHub OAuth App Secret
    • AUTH_SECRET: NextAuth Secret, used to encrypt session, please set a random string
    • CUSTOM_DOMAIN: Custom domain for the website (Optional, if empty, uses Cloudflare Pages default domain)
    • PROJECT_NAME: Pages project name (Optional, if empty, defaults to moemail)
    • DATABASE_NAME: D1 database name (Optional, if empty, defaults to moemail-db)
    • KV_NAMESPACE_NAME: Cloudflare KV namespace name, used for site settings (Optional, if empty, defaults to moemail-kv)
  2. Choose trigger method:

    Method 1: Push Tag Trigger

    # Create a new tag
    git tag v1.0.0
    
    # Push tag to remote repository
    git push origin v1.0.0

    Method 2: Manual Trigger

    • Go to the Actions page of the repository
    • Select "Deploy" workflow
    • Click "Run workflow"
  3. Deployment progress can be viewed in the Actions tab of the repository.

Notes

  • Ensure all Secrets are set correctly.
  • When using tag trigger, the tag must start with v (e.g., v1.0.0).

Deploy to Cloudflare Workers

Email Domain Configuration

In the MoeMail User Profile page, you can configure the site's email domains. Supports multiple domain configurations, separated by commas. Email Domain Configuration

Cloudflare Email Routing Configuration

To make email domains effective, you also need to configure email routing in the Cloudflare console to forward received emails to the Email Worker.

  1. Login to Cloudflare Console
  2. Select your domain
  3. Click "Email" -> "Email Routing" in the left menu
  4. If it shows "Email Routing is currently disabled", please click "Enable Email Routing" Enable Email Routing
  5. After clicking, it will prompt you to add Email Routing DNS records, click "Add records and enable" Add DNS Records
  6. Configure Routing Rules:
    • Catch-all address: Enable "Catch-all"
    • Edit Catch-all address
    • Action: Select "Send to Worker"
    • Destination: Select the "email-receiver-worker" you just deployed
    • Save Configure Routing Rules

Notes

  • Ensure domain DNS is hosted on Cloudflare.
  • Email Worker must be successfully deployed.
  • If Catch-All status is unavailable (stuck loading), please click Destination addresses next to Routing rules, and bind an email address there.

Permission System

The project uses a Role-Based Access Control (RBAC) system.

Role Configuration

New user default roles are configured by the Emperor in the site settings in the User Profile:

  • Duke: New users get temporary email, Webhook config permissions, and API Key management permissions.
  • Knight: New users get temporary email and Webhook config permissions.
  • Civilian: New users have no permissions, need to wait for Emperor to promote to Knight or Duke.

Role Levels

The system includes four role levels:

  1. Emperor

    • Website Owner
    • Has all permissions
    • Only one Emperor per site
  2. Duke

    • Super User
    • Can use temporary email features
    • Can configure Webhook
    • Can create API Key to call OpenAPI
    • Can be demoted to Knight or Civilian by Emperor
  3. Knight

    • Advanced User
    • Can use temporary email features
    • Can configure Webhook
    • Can be demoted to Civilian or promoted to Duke by Emperor
  4. Civilian

    • Regular User
    • No permissions
    • Can be promoted to Knight or Duke by Emperor

Role Upgrade

  1. Become Emperor

    • The first user to visit /api/roles/init-emperor interface will become the Emperor (Website Owner).
    • Once an Emperor exists, no other user can be promoted to Emperor.
  2. Role Changes

    • The Emperor can set other users as Duke, Knight, or Civilian in the User Profile page.

Permission Details

  • Email Management: Create and manage temporary emails
  • Webhook Management: Configure Webhooks for email notifications
  • API Key Management: Create and manage API access keys
  • User Management: Promote/Demote user roles
  • System Settings: Manage global system settings

System Settings

System settings are stored in Cloudflare KV, including:

  • DEFAULT_ROLE: Default role for new users, values: CIVILIAN, KNIGHT, DUKE
  • EMAIL_DOMAINS: Supported email domains, comma-separated
  • ADMIN_CONTACT: Administrator contact info
  • MAX_EMAILS: Maximum number of emails per user

Emperor role can configure these in the User Profile page.

Sending Emails

MoeMail supports sending emails using temporary addresses, based on Resend service.

Features

  • 📨 Send from Temp Email: Use created temporary emails as sender
  • 🎯 Role Limits: Different roles have different daily sending limits
  • 💌 HTML Support: Supports rich text email format

Role Sending Limits

Role Daily Limit Description
Emperor Unlimited Admin has no limits
Duke 5/day Default 5 emails per day
Knight 2/day Default 2 emails per day
Civilian Forbidden No sending permission

💡 Tip: The Emperor can customize the daily limits for Dukes and Knights in the Mail Service Configuration.

Configure Sending Service

  1. Get Resend API Key

    • Register at Resend
    • Create API Key in console
    • Copy API Key for later use
  2. Configure Service

    • Login as Emperor
    • Go to User Profile
    • In "Resend Service Configuration":
      • Enable Sending Service switch
      • Enter Resend API Key
      • Set daily limits for Duke and Knight (Optional)
    • Save configuration
  3. Verify Configuration

    • After saving, authorized users will see a "Send Email" button in the email list
    • Click to open dialog and test

How to Send

  1. Create Temp Email

    • Create a new temporary email in Mailbox page
  2. Send Email

    • Find the email in the list
    • Click "Send Email" button next to it
    • Fill in:
      • Recipient address
      • Subject
      • Content (supports HTML)
    • Click "Send"
  3. View History

    • Sent emails are saved in the message list of the corresponding mailbox
    • View all sent/received emails in mailbox detail page

Notes

  • 📋 Resend Limits: Please note Resend's sending limits and pricing
  • 🔐 Domain Verification: Using custom domains requires verification in Resend
  • 🚫 Anti-Spam: Please follow email sending standards, avoid spamming
  • 📊 Quota Monitoring: System counts daily usage, stops sending when limit reached
  • 🔄 Quota Reset: Daily quota resets at 00:00

Webhook Integration

When a new email is received, the system sends a POST request to the configured and enabled Webhook URL.

Request Header

Content-Type: application/json
X-Webhook-Event: new_message

Request Body

{
  "emailId": "email-uuid",
  "messageId": "message-uuid",
  "fromAddress": "sender@example.com",
  "subject": "Email Subject",
  "content": "Email Text Content",
  "html": "Email HTML Content",
  "receivedAt": "2024-01-01T12:00:00.000Z",
  "toAddress": "your-email@moemail.app"
}

Configuration

  1. Click avatar to enter User Profile
  2. Enable Webhook
  3. Set notification URL
  4. Click Test button
  5. Save to receive notifications

Testing

The project provides a simple test server:

pnpm webhook-test-server

The test server listens on port 3001 (http://localhost:3001) and prints received Webhook details.

For external testing, use Cloudflare Tunnel:

pnpx cloudflared tunnel --url http://localhost:3001

Notes

  • Webhook must respond within 10 seconds
  • Non-2xx response triggers retry

OpenAPI

The project provides OpenAPI interfaces, accessible via API Key. API Keys can be created in User Profile (Requires Duke or Emperor role).

Using API Key

Add API Key to request header:

X-API-Key: YOUR_API_KEY

API Endpoints

Get System Config

GET /api/config

Response:

{
  "defaultRole": "CIVILIAN",
  "emailDomains": "moemail.app,example.com",
  "adminContact": "admin@example.com",
  "maxEmails": "10"
}

Generate Temp Email

POST /api/emails/generate
Content-Type: application/json

{
  "name": "test",
  "expiryTime": 3600000,
  "domain": "moemail.app"
}

Params:

  • name: Prefix (optional)
  • expiryTime: Validity in ms. 3600000(1h), 86400000(24h), 604800000(7d), 0(Permanent)
  • domain: From config

Response:

{
  "id": "email-uuid-123",
  "email": "test@moemail.app"
}

Get Email List

GET /api/emails?cursor=xxx

Get Messages for Email

GET /api/emails/{emailId}?cursor=xxx

Delete Email

DELETE /api/emails/{emailId}

Get Single Message

GET /api/emails/{emailId}/{messageId}

Create Email Share Link

POST /api/emails/{emailId}/share
Content-Type: application/json

{
  "expiresIn": 86400000
}

Get Email Share Links

GET /api/emails/{emailId}/share

Delete Email Share Link

DELETE /api/emails/{emailId}/share/{shareId}

Create Message Share Link

POST /api/emails/{emailId}/messages/{messageId}/share
Content-Type: application/json

{
  "expiresIn": 86400000
}

Get Message Share Links

GET /api/emails/{emailId}/messages/{messageId}/share

Delete Message Share Link

DELETE /api/emails/{emailId}/messages/{messageId}/share/{shareId}

CLI Tool

MoeMail provides an agent-first CLI tool for AI agents and automation workflows.

Install

npm i -g @moemail/cli

Quick Start

# Configure API endpoint and key
moemail config set api-url https://moemail.app
moemail config set api-key YOUR_API_KEY

# Create temporary email
moemail create --domain moemail.app --expiry 1h --json

# Wait for new messages (polling)
moemail wait --email-id <id> --timeout 120 --json

# Read message content
moemail read --email-id <id> --message-id <id> --json

# Delete email
moemail delete --email-id <id>

Agent Workflow

A typical AI agent verification flow in 3 tool calls:

# 1. Create mailbox
EMAIL=$(moemail create --domain moemail.app --expiry 1h --json)
EMAIL_ID=$(echo $EMAIL | jq -r '.id')
ADDRESS=$(echo $EMAIL | jq -r '.address')

# 2. Wait for verification email
MSG=$(moemail wait --email-id $EMAIL_ID --timeout 120 --json)
MSG_ID=$(echo $MSG | jq -r '.messageId')

# 3. Read content, extract verification code
CONTENT=$(moemail read --email-id $EMAIL_ID --message-id $MSG_ID --json)

AI Agent Skill

Install the built-in skill so AI agents (Claude Code, Codex, etc.) automatically know how to use MoeMail:

# Auto-detect installed agent platforms and install
moemail skill install

# Or specify a platform
moemail skill install --platform claude
moemail skill install --platform codex

For full documentation, see packages/cli/README.md.

Environment Variables

Authentication

  • AUTH_GITHUB_ID: GitHub OAuth App ID
  • AUTH_GITHUB_SECRET: GitHub OAuth App Secret
  • AUTH_GOOGLE_ID: Google OAuth App ID
  • AUTH_GOOGLE_SECRET: Google OAuth App Secret
  • AUTH_SECRET: NextAuth Secret

Cloudflare

  • CLOUDFLARE_API_TOKEN: Cloudflare API Token
  • CLOUDFLARE_ACCOUNT_ID: Cloudflare Account ID
  • DATABASE_NAME: D1 Database Name
  • DATABASE_ID: D1 Database ID (Optional, auto-fetched if empty)
  • KV_NAMESPACE_NAME: KV Name
  • KV_NAMESPACE_ID: KV ID (Optional, auto-fetched if empty)
  • CUSTOM_DOMAIN: Custom domain
  • PROJECT_NAME: Pages Project Name

Github OAuth App Configuration

  1. Login Github Developer create new OAuth App
  2. Generate Client ID and Client Secret
  3. Configure:
    • Application name: <your-app-name>
    • Homepage URL: https://<your-domain>
    • Authorization callback URL: https://<your-domain>/api/auth/callback/github

Google OAuth App Configuration

  1. Visit Google Cloud Console create project
  2. Configure OAuth consent screen
  3. Create OAuth Client ID
    • Type: Web application
    • Authorized Javascript origins: https://<your-domain>
    • Authorized redirect URIs: https://<your-domain>/api/auth/callback/google
  4. Get Client ID and Client Secret
  5. Configure env vars AUTH_GOOGLE_ID and AUTH_GOOGLE_SECRET 

from https://github.com/beilunyang/moemail

personalsit.es

 https://personalsit.es/