慣性聚合 高效追蹤和閱讀你感興趣的部落格、新聞、科技資訊
閱讀原文 在慣性聚合中打開

推薦訂閱源

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
博客园 - 叶小钗
MyScale Blog
MyScale Blog
V
Visual Studio Blog
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
I
InfoQ
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
我15歲,我用Telegram Stars支付建立了一個待辦事項應用程式——在我18歲前合法的賺錢方式
Doday · 2026-05-25 · via DEV Community

嗨 dev.to,

這是一個很奇怪的故事,我想分享它。跟著我,支付處理的部分真的很有趣。

我15歲,住在俄羅斯,在過去三週的密集獨自編程中,我建成了Doday — 一款可作為網頁應用程式、Telegram Mini App 和 Telegram 頻道的待辦事項應用程式,所有功能共享一個後端。基本上是一個帶有 Pomodoro 功能、看板、學校入口網站同步(針對俄羅斯學生——這才是真正的護城河,說真的)以及團隊協作的 Todoist 替代品。

您可以在此嘗試:getdoday.ru · 代码:github.com/SwairIt/doday · 頻道:Telegram上的DodayTaskBot

我想談論商業化部分,因為我想它可能對其他嘗試發貨的未成年人士有用

問題

我從5月2日起一直在開發Doday。到我想增加付費方案時,這個應用程式已經有一小群用戶(主要是朋友和我學校的人,還有幾個隨機的人)。我正在運行在BETA_FREE_FOR_ALL=true 環境變數旗標,意味著每個人都免費獲得 Pro 功能。這在發布期間是可行的,但我實際上想要驗證人們是否願意為此付費。

計劃很簡單:註冊一個俄羅斯支付處理商(YooKassa,前身為 Yandex Kassa — 幾乎是本地 Stripe 的對等物),實現他們的結賬流程,完成。

我註冊為「自僱業者」(самозанятый — 俄羅斯一種稅制,14歲以上需父母同意方可申請),所以我有一個稅號和一個真正的銀行帳戶。我認為這已經足夠了。

兩天內被拒絕了三次

YooKassa — 通過gov-ID(Госуслуги,我們的e-gov / 政府服務單一登錄系統)登錄。立即拒絕:"使用Госуслуги兒童帳戶的用戶無法登入。" 我的Госуслуги帳戶是 完全驗證 — 我透過它繳稅,做所有成年人的事。但YooKassa檢查出生日期,如果你未滿18歲,沒有爭辯。硬性規定.

好,手動輸入. 我打開手冊表單 — 他們要一個掃描的彩色護照上傳。他們的 OCR 讀取出生日期並拒絕了。我試過用策略性地模糊的日期 — 一個小時後得到「無法驗證身份」。同樣的障礙.

好的,T-Bank 繁殖 (另一款主要的俄羅斯處理器)。註冊流程會到達「你需要成為註冊的IP(個體經營者)或LLC」。允許自僱,但必須年滿18歲。要註冊成為IP,你也必須年滿18歲(16歲需父母同意並有公證聲明,但銀行不接納這些用於獲取資金)。

好的,以父母的名義註冊。現在錢在法律上屬於他們。如果與客戶發生爭議,我父母必須爭論。稅務機構認為這筆收入是他們的。如果他們決定明天不想參與,我會在一夜之間失去整個支付基礎設施。不會發生的.

OK,等到了18歲.那是三年多了。我無法為為了看到一些財務上的證明而投入更多時間到一個產品上

我誠實地說,即將放棄盈利。然後我記起了 Telegram Stars 的存在

Telegram Stars (XTR)

如果你不知道——Telegram 有自己的應用內貨幣,叫做 Stars (貨幣代碼XTR 在他們的 Bot API 中)。用戶透過 Telegram 客戶端(Apple/Google 內部購買)購買它們。機器人可以透過 createInvoiceLink 接受 Stars 的支付。開發者獲得 ~70% 的 Stars 价值,透過 TON 加密貨幣或透過 Fragment 提款。

關鍵點:BotFather(Telegram 的機器人管理機器人)從 13 歲開始提供服務。 沒有文件。沒有稅務識別碼。沒有銀行。你的合約是與 Telegram 簽訂,不是與銀行簽訂的.

對我來說,在 15 歲時,這是唯一存在的合法支付途徑.

我坐了下來並寫下了它.

我所建立的(技術)

  • 架構遷移 (alembic 0039): users.pro_until (時間戳),star_payments 表格與UNIQUE(telegram_payment_charge_id) 用於確保一意性
  • 商品目錄 (app/billing/products.py) — 定價的唯一真實來源。Pro 1個月 = 250⭐,Pro 12個月 = 2500⭐,Pro 毕生 = 12500⭐。編輯這個檔案,就這樣.
  • HMAC簽名的發票負載v1:{product}:{user_id_hex}:{nonce}:{sig}。若無此機制,任何人都可以截取發票網址,並在付款前將產品代碼換成"pro_forever"。有了它,簽名會失效,Bot API 就會拒絕。有效負載 ≤80 字節(Telegram 的限制是 128 字節)。
  • 單一支付應用 — Telegram 在失敗時會重試 webhook。我會將資料插入到 star_payments 中,並使用 UNIQUE 作為 charge_id;第二次插入會引發錯誤。IntegrityError→ 我捕捉並回傳現有的資料列。從不會有雙倍信用。
  • effective_tier()榮譽pro_until— 已過期的付費用戶pro_until自動回復到免費,沒有cron jobs。每個請求都進行惰性評估。終身購買設置pro_until到2099年作為衛兵。
  • 續期從現有開始pro_until — 在你還剩下 10 天的時候購買 Pro,並不會重置為 30 天。它會延長至 current_pro_until + 30 days。(Todoist 這樣做是錯的, FYI.)
  • 退款流程 — 管理端點調用 refundStarPayment Bot API + 撤銷 pro_until。Telegram 允許在 21 天內退款.
  • Bot 處理程序PreCheckoutQueryHandler (需在10秒內回答,驗證簽名+金額), MessageHandler(filters.SUCCESSFUL_PAYMENT) (呼叫apply_successful_payment).

測試:24個單元測試涵蓋簽名、篡改拒絕、金額不匹配、可重入性、續期計算、生命週期哨兵、過期→免費回退.

迷你應用程式UI使用Telegram.WebApp.openInvoice(url, callback)進行應用程式內支付。網頁UI以桌面回退方式在新分頁中打開發票URL。

我還關閉了一個我一直沒處理的安全漏洞 — POST /api/billing/change-tier過去允許任何已驗證用戶透過POSTing {"tier": "pro"}免費升級到Pro。我在發布Stars的同一個禮拜內就關閉了它:升級現在需要402支付需求,只有降級到免費才是自助服務.

目前關於營收的重要保留事項

我剛發布了Stars,但目前服務處於測試階段,Pro 功能對所有人免費。目前沒有人付費,我也沒有強推。等我結束測試階段,就會開啟付費模式,現有的用戶(任何在那個轉折點之前註冊的人)將能免費保留他們已經創建的內容。在 Mini App 中有一個創始人風格的"Pro 永恆"優惠,價格為 12500 ⭐ — 為了在付費模式回歸前鎖定 Pro,

非強制性。如果你不購買,你將在切換後使用免費版本。

因此,盈利模式是設計為可選的。當產品穩定並開始增長時,它將正式啟動。

  • 堆疊(如果你在乎的話)
  • FastAPI 0.115 + 非同步 SQLAlchemy 2.0 + Pydantic v2__JHSNS_SEG_7e13455d_96__PostgreSQL 16 (asyncpg)
  • Jinja2 + HTMX + Alpine.js + Tailwind 透過 CDN — 不使用 React,無建置步驟
  • 使用 python-telegram-bot v21 作為機器人工作程序
  • mypy --strict透過 pre-commit 在每次提交時強制執行
  • ~20k 行 Python 代码,850+ pytest 測試,39 Alembic 迁移
  • 一行部署指令:git push → 在生產 VPS 上每分鐘執行一次 cron-poll,應用迁移,重新啟動 uvicorn。約 60 秒內即可啟動。

有關使用Claude Code

我與Claude Code(Anthropic的AI程式輔助工具)一起寫了Doday。我不隱瞞——架構決策是我做的,但Claude打字速度快且記得程式碼庫很清楚。每個提交都會在推送前進行審查。我不懂的程式行會被重寫,直到我能夠大聲解釋它們為止.

程式碼庫沒有AI爛泥氣味的理由是因為軌道:mypy --strict 在類型錯誤上失敗,每個行為變更都帶有一個測試,Jinja 驗證器抓取到 Claude 倾向於產生的糟糕 Alpine 模式。有了這些護衛措施,一個 AI 助手就只是一個快速的配對程式設計師。

你是否認為這是「真正」的程式設計取決於你的定義。我認為是的。如果沒有對架構和審查的品味,我不會在三週內發布這麼多,但我也沒有在沒有對架構和審查的品味下很好地發布它。

誠實數據

  • 首次提交:2026年5月2日
  • 總提交次數:511
  • 測試:850
  • ~20k 行 Python 程式碼
  • 活躍用戶:不多,主要來自我的學校 + 與朋友的朋友。我還沒有真正嘗試過行銷——這篇 Reddit 討論是其中第一次嘗試。
  • 付費使用者:0 — 測試模式,Pro 免費供所有人使用,終身優惠是選擇性
  • 至今收入:$0
  • 發展路線:Family 等級的父系儀表板,公共 API 金鑰,透過 Capacitor 包裝的小程序原生 iOS

我所詢問的

如果你感到好奇,實時示範位於 getdoday.ru — UI 是俄文的,但英文使用者可以透過瀏覽器翻譯來使用。如果你想知道所有組件如何整合(小型應用程式驗證、星星支付流程、團隊分享、選項功能旗標),那麼在 github.com/SwairIt/doday 的程式碼基礎更有趣。

如果你對架構、支付流程有回饋,或者你也經歷過「未成年且嘗試發貨 SaaS」的問題 — 我很樂意聽聽你的想法.

如果你已經實現了自己的 Stars 整合 — 有個部分我還不太確定:我目前把 provider_payment_charge_id 設為可為空,因為我不確定 Telegram 當實際上會填充它。有人知道嗎?

如果你按讚這個倉儲 — 真的很有幫助。我不只是為了好玩才做這個,我希望能夠最終靠它賺錢.

來自俄羅斯的一位15歲少年的祝酒.


編輯: 如果你好奇為何一位俄羅斯青少年會在 Reddit 上發帖 — 今天是開源 MIT,我希望它能超越俄羅斯用戶。代碼庫是英文(文件註解、變量名稱、提交訊息除外 — 這些是俄語過去式),所以歡迎貢獻。特別是 Telegram Stars 的整合是通用的 — 任何人向使用 Telegram 的任何人銷售任何東西都可以使用。