Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
Techno Optimists는 기술을 활용해 현실 문제를 이해하는 글로벌 커뮤니티입니다
Techno Optimists is a global community using technology to understand real-world problems, try ideas and build better solutions together.
소셜TypeScript · JavaScriptGitHub @royherma온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Challenges: problems, ideas, experiments and builds, from anyone anywhere
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Find interesting real-world problems and help solve them.
Things can be better. We can build better.
A global community where people surface real-world challenges and technological ideas, then work together to investigate, build, test and improve solutions.
The core object is a Challenge. It starts as a Problem, Idea, Experiment or Build, and moves along one lifecycle:
Spot → Understand → Ideas → Build → Test → Learn → Improve
Fixing an irrigation system this afternoon counts. Documenting a fascinating problem with no solution is a complete contribution.
Node 22 (.nvmrc) and Python 3. No Cloudflare account, no secrets, no network
services — local work runs against a D1 database wrangler creates on demand.
npm install
make reset # local D1: schema + 12 Challenges, 11 people, 10 updates
make dev # API on :8791, site on :4321
Open http://127.0.0.1:8791. If that took more than a couple of minutes, it is a bug in this file — open an issue saying where you got stuck.
make on its own lists every target. Every target delegates to an npm script, so
npm run ship and make ship do the same thing — use whichever you prefer.
| Command | What it does |
|---|---|
make dev | 🔧 API on :8791 and the site on :4321, together |
make reset | 🌱 rebuild local D1, load the seed fixtures, apply the additive migration |
make check | ✅ typecheck + tests — this is what CI would run |
make ship | 🚢 typecheck, test, migrate additively, deploy prod, verify |
make ship-dev | 🧪 same for the dev worker, seeds and all |
make verify | 🔍 probe the live site end to end |
make logs | 📡 tail prod |
Root build, database and deploy scripts serialize through a shared lock, so two
sessions in one checkout cannot run them at once. npm run agents:status shows
who holds it. A busy command exits with code 75 — retry after it finishes.
apps/web Astro static site: index, Challenge, post, sign-in + React islands
apps/api Hono API on Workers
packages/types the vocabulary lock — Challenge types, stages, the 7 actions
packages/db D1 schema + generated seed
docs/ concept, stack, constraints, dated notes
scripts/ seed generation, build orchestration, the operation lock
One Worker serves both: the assets binding handles pages, the Hono app handles
/api/*, /media/* and /c/:slug. Same origin, so the browser never needs a
base URL or CORS.
Stack — all Cloudflare, picked 2026-09-10. Astro 7 + React islands on the
front, Hono on Workers behind it, D1/R2/KV for data. Full table and the reasoning:
docs/2026-09-10-stack.md.
This repo is edited by Claude Code and Codex sessions, sometimes two at once.
CLAUDE.md only. Do not copy them into tool-specific
files or delegation prompts.AGENT_NAME=my-task make ship-dev.Three rules that get work sent back, worth knowing before the first edit:
Permanent files, one job each. Anything time-boxed is docs/YYYY-MM-DD-slug.md,
dated so staleness shows.
| File | Job |
|---|---|
CLAUDE.md | 📏 Rules for whoever edits: vocabulary, copy, coordination |
PRODUCT.md | 💡 What is being built and why — the product argument |
DESIGN.md | 🎨 Design language: foundations, screen patterns, layout contracts |
CONTRIBUTING.md | 🤝 How to send a patch, and what gets it sent back |
docs/CONSTRAINTS.md | ⚠️ Traps still live in the code — read before a deploy or schema change |
docs/2026-09-10-concept.md | 🌱 The raw brainstorm this came from |
| dev | prod | |
|---|---|---|
| Address | techno-optimists-dev.<your-subdomain>.workers.dev | your domain |
| Data | throwaway, seeded | real: no seed rows, the scout adds threads |
| Sign-in | returns dev_link in the response | mails the link, fails closed |
Binding names are identical in both, so no code branches on environment — only the IDs behind them differ.
Production builds read the production API; development builds read local D1.
ship applies additive migrations before deploying and never resets existing
data. schema.sql is a destructive reset fixture for a new local database, not a
migration — it drops tables. See docs/CONSTRAINTS.md
before touching the database, a deploy, the rate limiter, the CSP or the seeds.
You do not need this to send a patch — nobody expects a contributor to deploy.
wrangler.jsonc is deliberately not in the repo: it carries an account id, D1 and
KV ids and a domain belonging to one Cloudflare account. Copy the templates and
fill in your own:
cp wrangler.jsonc.example wrangler.jsonc
cp wrangler.build.jsonc.example wrangler.build.jsonc
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗